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

Side by Side Diff: vm/opt_code_generator_ia32.h

Issue 8919025: Added type propagation from store to load locals, but only within a sequence node (not across bas... (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: '' Created 9 years 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 | « no previous file | vm/opt_code_generator_ia32.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) 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
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_
OLDNEW
« no previous file with comments | « no previous file | vm/opt_code_generator_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698