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 678763004: Make CTX allocatable by the register allocator. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: incorporated latest comments Created 6 years, 1 month 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
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 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 M(ParallelMove) \ 430 M(ParallelMove) \
431 M(PushArgument) \ 431 M(PushArgument) \
432 M(Return) \ 432 M(Return) \
433 M(Throw) \ 433 M(Throw) \
434 M(ReThrow) \ 434 M(ReThrow) \
435 M(Goto) \ 435 M(Goto) \
436 M(Branch) \ 436 M(Branch) \
437 M(AssertAssignable) \ 437 M(AssertAssignable) \
438 M(AssertBoolean) \ 438 M(AssertBoolean) \
439 M(CurrentContext) \ 439 M(CurrentContext) \
440 M(StoreContext) \
441 M(ClosureCall) \ 440 M(ClosureCall) \
442 M(InstanceCall) \ 441 M(InstanceCall) \
443 M(PolymorphicInstanceCall) \ 442 M(PolymorphicInstanceCall) \
444 M(StaticCall) \ 443 M(StaticCall) \
445 M(LoadLocal) \ 444 M(LoadLocal) \
446 M(PushTemp) \ 445 M(PushTemp) \
447 M(DropTemps) \ 446 M(DropTemps) \
448 M(StoreLocal) \ 447 M(StoreLocal) \
449 M(StrictCompare) \ 448 M(StrictCompare) \
450 M(EqualityCompare) \ 449 M(EqualityCompare) \
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 } 718 }
720 719
721 virtual LocationSummary* MakeLocationSummary(Isolate* isolate, 720 virtual LocationSummary* MakeLocationSummary(Isolate* isolate,
722 bool is_optimizing) const = 0; 721 bool is_optimizing) const = 0;
723 722
724 void InitializeLocationSummary(Isolate* isolate, bool optimizing) { 723 void InitializeLocationSummary(Isolate* isolate, bool optimizing) {
725 ASSERT(locs_ == NULL); 724 ASSERT(locs_ == NULL);
726 locs_ = MakeLocationSummary(isolate, optimizing); 725 locs_ = MakeLocationSummary(isolate, optimizing);
727 } 726 }
728 727
729 static LocationSummary* MakeCallSummary(); 728 static LocationSummary* MakeCallSummary(Isolate* isolate);
730 729
731 virtual void EmitNativeCode(FlowGraphCompiler* compiler) { 730 virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
732 UNIMPLEMENTED(); 731 UNIMPLEMENTED();
733 } 732 }
734 733
735 Environment* env() const { return env_; } 734 Environment* env() const { return env_; }
736 void SetEnvironment(Environment* deopt_env); 735 void SetEnvironment(Environment* deopt_env);
737 void RemoveEnvironment(); 736 void RemoveEnvironment();
738 737
739 intptr_t lifetime_position() const { return lifetime_position_; } 738 intptr_t lifetime_position() const { return lifetime_position_; }
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 virtual intptr_t PredecessorCount() const { return predecessors_.length(); } 1350 virtual intptr_t PredecessorCount() const { return predecessors_.length(); }
1352 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const { 1351 virtual BlockEntryInstr* PredecessorAt(intptr_t index) const {
1353 return predecessors_[index]; 1352 return predecessors_[index];
1354 } 1353 }
1355 1354
1356 // Returns -1 if pred is not in the list. 1355 // Returns -1 if pred is not in the list.
1357 intptr_t IndexOfPredecessor(BlockEntryInstr* pred) const; 1356 intptr_t IndexOfPredecessor(BlockEntryInstr* pred) const;
1358 1357
1359 ZoneGrowableArray<PhiInstr*>* phis() const { return phis_; } 1358 ZoneGrowableArray<PhiInstr*>* phis() const { return phis_; }
1360 1359
1361 void InsertPhi(intptr_t var_index, intptr_t var_count); 1360 PhiInstr* InsertPhi(intptr_t var_index, intptr_t var_count);
1362 void RemoveDeadPhis(Definition* replacement); 1361 void RemoveDeadPhis(Definition* replacement);
1363 1362
1364 void InsertPhi(PhiInstr* phi); 1363 void InsertPhi(PhiInstr* phi);
1365 void RemovePhi(PhiInstr* phi); 1364 void RemovePhi(PhiInstr* phi);
1366 1365
1367 virtual void PrintTo(BufferFormatter* f) const; 1366 virtual void PrintTo(BufferFormatter* f) const;
1368 1367
1369 virtual EffectSet Effects() const { return EffectSet::None(); } 1368 virtual EffectSet Effects() const { return EffectSet::None(); }
1370 virtual EffectSet Dependencies() const { return EffectSet::None(); } 1369 virtual EffectSet Dependencies() const { return EffectSet::None(); }
1371 1370
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
2323 TargetEntryInstr* false_successor_; 2322 TargetEntryInstr* false_successor_;
2324 ComparisonInstr* comparison_; 2323 ComparisonInstr* comparison_;
2325 bool is_checked_; 2324 bool is_checked_;
2326 ConstrainedCompileType* constrained_type_; 2325 ConstrainedCompileType* constrained_type_;
2327 TargetEntryInstr* constant_target_; 2326 TargetEntryInstr* constant_target_;
2328 2327
2329 DISALLOW_COPY_AND_ASSIGN(BranchInstr); 2328 DISALLOW_COPY_AND_ASSIGN(BranchInstr);
2330 }; 2329 };
2331 2330
2332 2331
2333 class StoreContextInstr : public TemplateInstruction<1, NoThrow> {
2334 public:
2335 explicit StoreContextInstr(Value* value) {
2336 SetInputAt(kValuePos, value);
2337 }
2338
2339 enum {
2340 kValuePos = 0
2341 };
2342
2343 DECLARE_INSTRUCTION(StoreContext)
2344
2345 virtual intptr_t ArgumentCount() const { return 0; }
2346
2347 Value* value() const { return inputs_[kValuePos]; }
2348
2349 virtual bool CanDeoptimize() const { return false; }
2350
2351 virtual EffectSet Effects() const { return EffectSet::None(); }
2352
2353 private:
2354 DISALLOW_COPY_AND_ASSIGN(StoreContextInstr);
2355 };
2356
2357
2358 class DeoptimizeInstr : public TemplateInstruction<0, NoThrow, Pure> { 2332 class DeoptimizeInstr : public TemplateInstruction<0, NoThrow, Pure> {
2359 public: 2333 public:
2360 DeoptimizeInstr(ICData::DeoptReasonId deopt_reason, intptr_t deopt_id) 2334 DeoptimizeInstr(ICData::DeoptReasonId deopt_reason, intptr_t deopt_id)
2361 : TemplateInstruction(deopt_id), 2335 : TemplateInstruction(deopt_id),
2362 deopt_reason_(deopt_reason) { 2336 deopt_reason_(deopt_reason) {
2363 } 2337 }
2364 2338
2365 virtual intptr_t ArgumentCount() const { return 0; } 2339 virtual intptr_t ArgumentCount() const { return 0; }
2366 2340
2367 virtual bool CanDeoptimize() const { return true; } 2341 virtual bool CanDeoptimize() const { return true; }
(...skipping 5551 matching lines...) Expand 10 before | Expand all | Expand 10 after
7919 Isolate* isolate, bool opt) const { \ 7893 Isolate* isolate, bool opt) const { \
7920 UNIMPLEMENTED(); \ 7894 UNIMPLEMENTED(); \
7921 return NULL; \ 7895 return NULL; \
7922 } \ 7896 } \
7923 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 7897 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
7924 7898
7925 7899
7926 } // namespace dart 7900 } // namespace dart
7927 7901
7928 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 7902 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698