Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: runtime/vm/intermediate_language.h

Issue 262823009: Convert BinadryDoubleOp to MathUnaryInstr double-square if both inputs are the same. Uses less regi… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/il_printer.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_ 5 #ifndef VM_INTERMEDIATE_LANGUAGE_H_
6 #define VM_INTERMEDIATE_LANGUAGE_H_ 6 #define VM_INTERMEDIATE_LANGUAGE_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/ast.h" 9 #include "vm/ast.h"
10 #include "vm/growable_array.h" 10 #include "vm/growable_array.h"
(...skipping 5051 matching lines...) Expand 10 before | Expand all | Expand 10 after
5062 5062
5063 virtual bool MayThrow() const { return false; } 5063 virtual bool MayThrow() const { return false; }
5064 5064
5065 private: 5065 private:
5066 DISALLOW_COPY_AND_ASSIGN(UnboxIntegerInstr); 5066 DISALLOW_COPY_AND_ASSIGN(UnboxIntegerInstr);
5067 }; 5067 };
5068 5068
5069 5069
5070 class MathUnaryInstr : public TemplateDefinition<1> { 5070 class MathUnaryInstr : public TemplateDefinition<1> {
5071 public: 5071 public:
5072 MathUnaryInstr(MethodRecognizer::Kind kind, Value* value, intptr_t deopt_id) 5072 enum MathUnaryKind {
5073 kIllegal,
5074 kSin,
5075 kCos,
5076 kSqrt,
5077 kDoubleSquare,
5078 };
5079 MathUnaryInstr(MathUnaryKind kind, Value* value, intptr_t deopt_id)
5073 : kind_(kind) { 5080 : kind_(kind) {
5074 SetInputAt(0, value); 5081 SetInputAt(0, value);
5075 deopt_id_ = deopt_id; 5082 deopt_id_ = deopt_id;
5076 } 5083 }
5077 5084
5078 Value* value() const { return inputs_[0]; } 5085 Value* value() const { return inputs_[0]; }
5079 MethodRecognizer::Kind kind() const { return kind_; } 5086 MathUnaryKind kind() const { return kind_; }
5080 const RuntimeEntry& TargetFunction() const; 5087 const RuntimeEntry& TargetFunction() const;
5081 5088
5082 virtual void PrintOperandsTo(BufferFormatter* f) const; 5089 virtual void PrintOperandsTo(BufferFormatter* f) const;
5083 5090
5084 virtual bool CanDeoptimize() const { return false; } 5091 virtual bool CanDeoptimize() const { return false; }
5085 5092
5086 virtual Representation representation() const { 5093 virtual Representation representation() const {
5087 return kUnboxedDouble; 5094 return kUnboxedDouble;
5088 } 5095 }
5089 5096
(...skipping 15 matching lines...) Expand all
5105 virtual EffectSet Effects() const { return EffectSet::None(); } 5112 virtual EffectSet Effects() const { return EffectSet::None(); }
5106 virtual EffectSet Dependencies() const { return EffectSet::None(); } 5113 virtual EffectSet Dependencies() const { return EffectSet::None(); }
5107 virtual bool AttributesEqual(Instruction* other) const { 5114 virtual bool AttributesEqual(Instruction* other) const {
5108 return kind() == other->AsMathUnary()->kind(); 5115 return kind() == other->AsMathUnary()->kind();
5109 } 5116 }
5110 5117
5111 virtual bool MayThrow() const { return false; } 5118 virtual bool MayThrow() const { return false; }
5112 5119
5113 Definition* Canonicalize(FlowGraph* flow_graph); 5120 Definition* Canonicalize(FlowGraph* flow_graph);
5114 5121
5122 static const char* KindToCString(MathUnaryKind kind);
5123
5115 private: 5124 private:
5116 const MethodRecognizer::Kind kind_; 5125 const MathUnaryKind kind_;
5117 5126
5118 DISALLOW_COPY_AND_ASSIGN(MathUnaryInstr); 5127 DISALLOW_COPY_AND_ASSIGN(MathUnaryInstr);
5119 }; 5128 };
5120 5129
5121 5130
5122 // Represents Math's static min and max functions. 5131 // Represents Math's static min and max functions.
5123 class MathMinMaxInstr : public TemplateDefinition<2> { 5132 class MathMinMaxInstr : public TemplateDefinition<2> {
5124 public: 5133 public:
5125 MathMinMaxInstr(MethodRecognizer::Kind op_kind, 5134 MathMinMaxInstr(MethodRecognizer::Kind op_kind,
5126 Value* left_value, 5135 Value* left_value,
(...skipping 2817 matching lines...) Expand 10 before | Expand all | Expand 10 after
7944 ForwardInstructionIterator* current_iterator_; 7953 ForwardInstructionIterator* current_iterator_;
7945 7954
7946 private: 7955 private:
7947 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); 7956 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor);
7948 }; 7957 };
7949 7958
7950 7959
7951 } // namespace dart 7960 } // namespace dart
7952 7961
7953 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 7962 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW
« no previous file with comments | « runtime/vm/il_printer.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698