| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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_OPT_CODE_GENERATOR_IA32_H_ | 5 #ifndef VM_OPT_CODE_GENERATOR_IA32_H_ |
| 6 #define VM_OPT_CODE_GENERATOR_IA32_H_ | 6 #define VM_OPT_CODE_GENERATOR_IA32_H_ |
| 7 | 7 |
| 8 #ifndef VM_OPT_CODE_GENERATOR_H_ | 8 #ifndef VM_OPT_CODE_GENERATOR_H_ |
| 9 #error Do not include opt_code_generator_ia32.h; use opt_code_generator.h. | 9 #error Do not include opt_code_generator_ia32.h; use opt_code_generator.h. |
| 10 #endif | 10 #endif |
| 11 | 11 |
| 12 #include "vm/code_generator.h" | 12 #include "vm/code_generator.h" |
| 13 | 13 |
| 14 namespace dart { | 14 namespace dart { |
| 15 | 15 |
| 16 // Forward declarations. | 16 // Forward declarations. |
| 17 class ClassesForLocals; |
| 17 class DeoptimizationBlob; | 18 class DeoptimizationBlob; |
| 18 | 19 |
| 19 // Temporary hierarchy, until optimized code generator implemented. | 20 // Temporary hierarchy, until optimized code generator implemented. |
| 20 // The optimizing compiler does not run if type checks are enabled. | 21 // The optimizing compiler does not run if type checks are enabled. |
| 21 class OptimizingCodeGenerator : public CodeGenerator { | 22 class OptimizingCodeGenerator : public CodeGenerator { |
| 22 public: | 23 public: |
| 23 OptimizingCodeGenerator(Assembler* assembler, | 24 OptimizingCodeGenerator(Assembler* assembler, |
| 24 const ParsedFunction& parsed_function); | 25 const ParsedFunction& parsed_function); |
| 25 | 26 |
| 26 virtual void VisitBinaryOpNode(BinaryOpNode* node); | 27 virtual void VisitBinaryOpNode(BinaryOpNode* node); |
| 27 virtual void VisitIncrOpLocalNode(IncrOpLocalNode* node); | 28 virtual void VisitIncrOpLocalNode(IncrOpLocalNode* node); |
| 28 virtual void VisitIncrOpInstanceFieldNode(IncrOpInstanceFieldNode* node); | 29 virtual void VisitIncrOpInstanceFieldNode(IncrOpInstanceFieldNode* node); |
| 29 virtual void VisitInstanceGetterNode(InstanceGetterNode* node); | 30 virtual void VisitInstanceGetterNode(InstanceGetterNode* node); |
| 30 virtual void VisitInstanceSetterNode(InstanceSetterNode* node); | 31 virtual void VisitInstanceSetterNode(InstanceSetterNode* node); |
| 31 virtual void VisitComparisonNode(ComparisonNode* node); | 32 virtual void VisitComparisonNode(ComparisonNode* node); |
| 32 virtual void VisitLoadIndexedNode(LoadIndexedNode* node); | 33 virtual void VisitLoadIndexedNode(LoadIndexedNode* node); |
| 33 virtual void VisitStoreIndexedNode(StoreIndexedNode* node); | 34 virtual void VisitStoreIndexedNode(StoreIndexedNode* node); |
| 34 virtual void VisitLiteralNode(LiteralNode* node); | 35 virtual void VisitLiteralNode(LiteralNode* node); |
| 35 virtual void VisitLoadLocalNode(LoadLocalNode* node); | 36 virtual void VisitLoadLocalNode(LoadLocalNode* node); |
| 36 virtual void VisitStoreLocalNode(StoreLocalNode* node); | 37 virtual void VisitStoreLocalNode(StoreLocalNode* node); |
| 37 virtual void VisitForNode(ForNode* node); | 38 virtual void VisitForNode(ForNode* node); |
| 38 virtual void VisitDoWhileNode(DoWhileNode* node); | 39 virtual void VisitDoWhileNode(DoWhileNode* node); |
| 39 virtual void VisitWhileNode(WhileNode* node); | 40 virtual void VisitWhileNode(WhileNode* node); |
| 40 virtual void VisitIfNode(IfNode* node); | 41 virtual void VisitIfNode(IfNode* node); |
| 41 virtual void VisitInstanceCallNode(InstanceCallNode* node); | 42 virtual void VisitInstanceCallNode(InstanceCallNode* node); |
| 42 virtual void VisitStaticCallNode(StaticCallNode* node); | 43 virtual void VisitStaticCallNode(StaticCallNode* node); |
| 43 virtual void VisitReturnNode(ReturnNode* node); | 44 virtual void VisitReturnNode(ReturnNode* node); |
| 44 virtual void VisitSequenceNode(SequenceNode* node_sequence); | 45 virtual void VisitSequenceNode(SequenceNode* node_sequence); |
| 45 virtual void VisitStoreInstanceFieldNode(StoreInstanceFieldNode* node); | 46 virtual void VisitStoreInstanceFieldNode(StoreInstanceFieldNode* node); |
| 47 virtual void VisitCatchClauseNode(CatchClauseNode* node); |
| 48 virtual void VisitTryCatchNode(TryCatchNode* node); |
| 46 | 49 |
| 47 // Return true if intrinsification succeeded and no more code is needed. | 50 // Return true if intrinsification succeeded and no more code is needed. |
| 48 // Returns false if either no intrinsification occured or if intrinsified | 51 // Returns false if either no intrinsification occured or if intrinsified |
| 49 // code needs the rest for slow case execution. | 52 // code needs the rest for slow case execution. |
| 50 virtual bool TryIntrinsify(); | 53 virtual bool TryIntrinsify(); |
| 51 virtual void GeneratePreEntryCode(); | 54 virtual void GeneratePreEntryCode(); |
| 52 virtual bool IsOptimizing() const { return true; } | 55 virtual bool IsOptimizing() const { return true; } |
| 53 | 56 |
| 54 virtual void CountBackwardLoop() {} | 57 virtual void CountBackwardLoop() {} |
| 55 virtual void GenerateDeferredCode(); | 58 virtual void GenerateDeferredCode(); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 bool TryInlineStaticCall(StaticCallNode* node); | 151 bool TryInlineStaticCall(StaticCallNode* node); |
| 149 | 152 |
| 150 bool IsResultInEaxRequested(AstNode* node) const; | 153 bool IsResultInEaxRequested(AstNode* node) const; |
| 151 bool NodeMayBeSmi(AstNode* node) const; | 154 bool NodeMayBeSmi(AstNode* node) const; |
| 152 | 155 |
| 153 void PrintCollectedClassesAtId(AstNode* node, intptr_t id); | 156 void PrintCollectedClassesAtId(AstNode* node, intptr_t id); |
| 154 void TraceOpt(AstNode* node, const char* message); | 157 void TraceOpt(AstNode* node, const char* message); |
| 155 void TraceNotOpt(AstNode* node, const char* message); | 158 void TraceNotOpt(AstNode* node, const char* message); |
| 156 | 159 |
| 157 GrowableArray<DeoptimizationBlob*> deoptimization_blobs_; | 160 GrowableArray<DeoptimizationBlob*> deoptimization_blobs_; |
| 161 ClassesForLocals* classes_for_locals_; |
| 158 const Class& smi_class_; | 162 const Class& smi_class_; |
| 159 const Class& double_class_; | 163 const Class& double_class_; |
| 160 | 164 |
| 161 DISALLOW_IMPLICIT_CONSTRUCTORS(OptimizingCodeGenerator); | 165 DISALLOW_IMPLICIT_CONSTRUCTORS(OptimizingCodeGenerator); |
| 162 }; | 166 }; |
| 163 | 167 |
| 164 } // namespace dart | 168 } // namespace dart |
| 165 | 169 |
| 166 | 170 |
| 167 #endif // VM_OPT_CODE_GENERATOR_IA32_H_ | 171 #endif // VM_OPT_CODE_GENERATOR_IA32_H_ |
| OLD | NEW |