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 |