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

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

Issue 298913007: Use isolate when allocation Zone objects and handles: focus on FlowGraphOptimizer, next inliner. (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/flow_graph_type_propagator.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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 intptr_t use_index() const { return use_index_; } 549 intptr_t use_index() const { return use_index_; }
550 void set_use_index(intptr_t index) { use_index_ = index; } 550 void set_use_index(intptr_t index) { use_index_ = index; }
551 551
552 static void AddToList(Value* value, Value** list); 552 static void AddToList(Value* value, Value** list);
553 void RemoveFromUseList(); 553 void RemoveFromUseList();
554 554
555 // Change the definition after use lists have been computed. 555 // Change the definition after use lists have been computed.
556 inline void BindTo(Definition* definition); 556 inline void BindTo(Definition* definition);
557 inline void BindToEnvironment(Definition* definition); 557 inline void BindToEnvironment(Definition* definition);
558 558
559 Value* Copy() { return new Value(definition_); } 559 Value* Copy(Isolate* isolate) { return new(isolate) Value(definition_); }
560 560
561 // This function must only be used when the new Value is dominated by 561 // This function must only be used when the new Value is dominated by
562 // the original Value. 562 // the original Value.
563 Value* CopyWithType() { 563 Value* CopyWithType() {
564 Value* copy = new Value(definition_); 564 Value* copy = new Value(definition_);
565 copy->reaching_type_ = reaching_type_; 565 copy->reaching_type_ = reaching_type_;
566 return copy; 566 return copy;
567 } 567 }
568 568
569 CompileType* Type(); 569 CompileType* Type();
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 bool Equals(Instruction* other) const; 1019 bool Equals(Instruction* other) const;
1020 1020
1021 // Compare attributes of a instructions (except input operands and tag). 1021 // Compare attributes of a instructions (except input operands and tag).
1022 // All instructions that participate in CSE have to override this function. 1022 // All instructions that participate in CSE have to override this function.
1023 // This function can assume that the argument has the same type as this. 1023 // This function can assume that the argument has the same type as this.
1024 virtual bool AttributesEqual(Instruction* other) const { 1024 virtual bool AttributesEqual(Instruction* other) const {
1025 UNREACHABLE(); 1025 UNREACHABLE();
1026 return false; 1026 return false;
1027 } 1027 }
1028 1028
1029 virtual void InheritDeoptTarget(Instruction* other); 1029 virtual void InheritDeoptTarget(Isolate* isolate, Instruction* other);
1030 1030
1031 bool NeedsEnvironment() const { 1031 bool NeedsEnvironment() const {
1032 return CanDeoptimize() || CanBecomeDeoptimizationTarget(); 1032 return CanDeoptimize() || CanBecomeDeoptimizationTarget();
1033 } 1033 }
1034 1034
1035 virtual bool CanBecomeDeoptimizationTarget() const { 1035 virtual bool CanBecomeDeoptimizationTarget() const {
1036 return false; 1036 return false;
1037 } 1037 }
1038 1038
1039 void InheritDeoptTargetAfter(Instruction* other); 1039 void InheritDeoptTargetAfter(Isolate* isolate, Instruction* other);
1040 1040
1041 virtual bool MayThrow() const = 0; 1041 virtual bool MayThrow() const = 0;
1042 1042
1043 protected: 1043 protected:
1044 // Fetch deopt id without checking if this computation can deoptimize. 1044 // Fetch deopt id without checking if this computation can deoptimize.
1045 intptr_t GetDeoptId() const { 1045 intptr_t GetDeoptId() const {
1046 return deopt_id_; 1046 return deopt_id_;
1047 } 1047 }
1048 1048
1049 private: 1049 private:
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after
2409 } 2409 }
2410 2410
2411 void set_constant_target(TargetEntryInstr* target) { 2411 void set_constant_target(TargetEntryInstr* target) {
2412 ASSERT(target == true_successor() || target == false_successor()); 2412 ASSERT(target == true_successor() || target == false_successor());
2413 constant_target_ = target; 2413 constant_target_ = target;
2414 } 2414 }
2415 TargetEntryInstr* constant_target() const { 2415 TargetEntryInstr* constant_target() const {
2416 return constant_target_; 2416 return constant_target_;
2417 } 2417 }
2418 2418
2419 virtual void InheritDeoptTarget(Instruction* other); 2419 virtual void InheritDeoptTarget(Isolate* isolate, Instruction* other);
2420 2420
2421 virtual bool MayThrow() const { 2421 virtual bool MayThrow() const {
2422 return comparison()->MayThrow(); 2422 return comparison()->MayThrow();
2423 } 2423 }
2424 2424
2425 TargetEntryInstr* true_successor() const { return true_successor_; } 2425 TargetEntryInstr* true_successor() const { return true_successor_; }
2426 TargetEntryInstr* false_successor() const { return false_successor_; } 2426 TargetEntryInstr* false_successor() const { return false_successor_; }
2427 2427
2428 TargetEntryInstr** true_successor_address() { return &true_successor_; } 2428 TargetEntryInstr** true_successor_address() { return &true_successor_; }
2429 TargetEntryInstr** false_successor_address() { return &false_successor_; } 2429 TargetEntryInstr** false_successor_address() { return &false_successor_; }
(...skipping 5411 matching lines...) Expand 10 before | Expand all | Expand 10 after
7841 void SkipDone() { 7841 void SkipDone() {
7842 while (!Done() && iterator_.Done()) { 7842 while (!Done() && iterator_.Done()) {
7843 iterator_ = ShallowIterator(iterator_.environment()->outer()); 7843 iterator_ = ShallowIterator(iterator_.environment()->outer());
7844 } 7844 }
7845 } 7845 }
7846 7846
7847 ShallowIterator iterator_; 7847 ShallowIterator iterator_;
7848 }; 7848 };
7849 7849
7850 // Construct an environment by constructing uses from an array of definitions. 7850 // Construct an environment by constructing uses from an array of definitions.
7851 static Environment* From(const GrowableArray<Definition*>& definitions, 7851 static Environment* From(Isolate* isolate,
7852 const GrowableArray<Definition*>& definitions,
7852 intptr_t fixed_parameter_count, 7853 intptr_t fixed_parameter_count,
7853 const Code& code); 7854 const Code& code);
7854 7855
7855 void set_locations(Location* locations) { 7856 void set_locations(Location* locations) {
7856 ASSERT(locations_ == NULL); 7857 ASSERT(locations_ == NULL);
7857 locations_ = locations; 7858 locations_ = locations;
7858 } 7859 }
7859 7860
7860 void set_deopt_id(intptr_t deopt_id) { deopt_id_ = deopt_id; } 7861 void set_deopt_id(intptr_t deopt_id) { deopt_id_ = deopt_id; }
7861 intptr_t deopt_id() const { return deopt_id_; } 7862 intptr_t deopt_id() const { return deopt_id_; }
(...skipping 23 matching lines...) Expand all
7885 } 7886 }
7886 return env->ValueAt(index); 7887 return env->ValueAt(index);
7887 } 7888 }
7888 7889
7889 intptr_t fixed_parameter_count() const { 7890 intptr_t fixed_parameter_count() const {
7890 return fixed_parameter_count_; 7891 return fixed_parameter_count_;
7891 } 7892 }
7892 7893
7893 const Code& code() const { return code_; } 7894 const Code& code() const { return code_; }
7894 7895
7895 Environment* DeepCopy() const { return DeepCopy(Length()); } 7896 Environment* DeepCopy(Isolate* isolate) const {
7897 return DeepCopy(isolate, Length());
7898 }
7896 7899
7897 void DeepCopyTo(Instruction* instr) const; 7900 void DeepCopyTo(Isolate* isolate, Instruction* instr) const;
7898 void DeepCopyToOuter(Instruction* instr) const; 7901 void DeepCopyToOuter(Isolate* isolate, Instruction* instr) const;
7899 7902
7900 void PrintTo(BufferFormatter* f) const; 7903 void PrintTo(BufferFormatter* f) const;
7901 const char* ToCString() const; 7904 const char* ToCString() const;
7902 7905
7903 // Deep copy an environment. The 'length' parameter may be less than the 7906 // Deep copy an environment. The 'length' parameter may be less than the
7904 // environment's length in order to drop values (e.g., passed arguments) 7907 // environment's length in order to drop values (e.g., passed arguments)
7905 // from the copy. 7908 // from the copy.
7906 Environment* DeepCopy(intptr_t length) const; 7909 Environment* DeepCopy(Isolate* isolate, intptr_t length) const;
7907 7910
7908 private: 7911 private:
7909 friend class ShallowIterator; 7912 friend class ShallowIterator;
7910 7913
7911 Environment(intptr_t length, 7914 Environment(intptr_t length,
7912 intptr_t fixed_parameter_count, 7915 intptr_t fixed_parameter_count,
7913 intptr_t deopt_id, 7916 intptr_t deopt_id,
7914 const Code& code, 7917 const Code& code,
7915 Environment* outer) 7918 Environment* outer)
7916 : values_(length), 7919 : values_(length),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
7962 ForwardInstructionIterator* current_iterator_; 7965 ForwardInstructionIterator* current_iterator_;
7963 7966
7964 private: 7967 private:
7965 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); 7968 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor);
7966 }; 7969 };
7967 7970
7968 7971
7969 } // namespace dart 7972 } // namespace dart
7970 7973
7971 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 7974 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_type_propagator.cc ('k') | runtime/vm/intermediate_language.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698