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

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

Issue 10876079: Clean up LoadInstanceField and StoreInstanceField. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 private: 1033 private:
1034 const NativeBodyNode& ast_node_; 1034 const NativeBodyNode& ast_node_;
1035 const intptr_t try_index_; 1035 const intptr_t try_index_;
1036 1036
1037 DISALLOW_COPY_AND_ASSIGN(NativeCallComp); 1037 DISALLOW_COPY_AND_ASSIGN(NativeCallComp);
1038 }; 1038 };
1039 1039
1040 1040
1041 class LoadInstanceFieldComp : public TemplateComputation<1> { 1041 class LoadInstanceFieldComp : public TemplateComputation<1> {
1042 public: 1042 public:
1043 // Set 'original' to NULL if LoadInstanceFieldComp cannot deoptimize. 1043 LoadInstanceFieldComp(const Field& field, Value* instance) : field_(field) {
1044 LoadInstanceFieldComp(const Field& field,
1045 Value* instance,
1046 InstanceCallComp* original)
1047 : field_(field), original_(original) {
1048 ASSERT(instance != NULL); 1044 ASSERT(instance != NULL);
1049 inputs_[0] = instance; 1045 inputs_[0] = instance;
1050 } 1046 }
1051 1047
1052 DECLARE_COMPUTATION(LoadInstanceField) 1048 DECLARE_COMPUTATION(LoadInstanceField)
1053 1049
1054 const Field& field() const { return field_; } 1050 const Field& field() const { return field_; }
1055 Value* instance() const { return inputs_[0]; } 1051 Value* instance() const { return inputs_[0]; }
1056 const InstanceCallComp* original() const { return original_; }
1057 1052
1058 virtual void PrintOperandsTo(BufferFormatter* f) const; 1053 virtual void PrintOperandsTo(BufferFormatter* f) const;
1059 1054
1060 virtual bool CanDeoptimize() const { return original_ != NULL; } 1055 virtual bool CanDeoptimize() const { return false; }
1061 virtual intptr_t ResultCid() const { return kDynamicCid; } 1056 virtual intptr_t ResultCid() const { return kDynamicCid; }
1062 1057
1063 private: 1058 private:
1064 const Field& field_; 1059 const Field& field_;
1065 const InstanceCallComp* original_; // For optimizations.
1066 1060
1067 DISALLOW_COPY_AND_ASSIGN(LoadInstanceFieldComp); 1061 DISALLOW_COPY_AND_ASSIGN(LoadInstanceFieldComp);
1068 }; 1062 };
1069 1063
1070 1064
1071 class StoreInstanceFieldComp : public TemplateComputation<2> { 1065 class StoreInstanceFieldComp : public TemplateComputation<2> {
1072 public: 1066 public:
1073 // Set 'original' to NULL if StoreInstanceFieldComp cannot deoptimize.
1074 StoreInstanceFieldComp(const Field& field, 1067 StoreInstanceFieldComp(const Field& field,
1075 Value* instance, 1068 Value* instance,
1076 Value* value, 1069 Value* value)
1077 InstanceCallComp* original) // Maybe NULL. 1070 : field_(field) {
1078 : field_(field), original_(original) {
1079 ASSERT(instance != NULL); 1071 ASSERT(instance != NULL);
1080 ASSERT(value != NULL); 1072 ASSERT(value != NULL);
1081 inputs_[0] = instance; 1073 inputs_[0] = instance;
1082 inputs_[1] = value; 1074 inputs_[1] = value;
1083 } 1075 }
1084 1076
1085 DECLARE_COMPUTATION(StoreInstanceField) 1077 DECLARE_COMPUTATION(StoreInstanceField)
1086 1078
1087 const Field& field() const { return field_; } 1079 const Field& field() const { return field_; }
1088 1080
1089 Value* instance() const { return inputs_[0]; } 1081 Value* instance() const { return inputs_[0]; }
1090 Value* value() const { return inputs_[1]; } 1082 Value* value() const { return inputs_[1]; }
1091 1083
1092 const InstanceCallComp* original() const { return original_; }
1093
1094 virtual void PrintOperandsTo(BufferFormatter* f) const; 1084 virtual void PrintOperandsTo(BufferFormatter* f) const;
1095 1085
1096 virtual bool CanDeoptimize() const { return original_ != NULL; } 1086 virtual bool CanDeoptimize() const { return false; }
1097 virtual intptr_t ResultCid() const { return kDynamicCid; } 1087 virtual intptr_t ResultCid() const { return kDynamicCid; }
1098 1088
1099 private: 1089 private:
1100 const Field& field_; 1090 const Field& field_;
1101 const InstanceCallComp* original_; // For optimizations.
1102 1091
1103 DISALLOW_COPY_AND_ASSIGN(StoreInstanceFieldComp); 1092 DISALLOW_COPY_AND_ASSIGN(StoreInstanceFieldComp);
1104 }; 1093 };
1105 1094
1106 1095
1107 class LoadStaticFieldComp : public TemplateComputation<0> { 1096 class LoadStaticFieldComp : public TemplateComputation<0> {
1108 public: 1097 public:
1109 explicit LoadStaticFieldComp(const Field& field) : field_(field) {} 1098 explicit LoadStaticFieldComp(const Field& field) : field_(field) {}
1110 1099
1111 DECLARE_COMPUTATION(LoadStaticField); 1100 DECLARE_COMPUTATION(LoadStaticField);
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after
2076 2065
2077 virtual bool AttributesEqual(Computation* other) const; 2066 virtual bool AttributesEqual(Computation* other) const;
2078 2067
2079 virtual bool HasSideEffect() const { return false; } 2068 virtual bool HasSideEffect() const { return false; }
2080 2069
2081 Value* value() const { return inputs_[0]; } 2070 Value* value() const { return inputs_[0]; }
2082 2071
2083 intptr_t deopt_id() const { return original_->deopt_id(); } 2072 intptr_t deopt_id() const { return original_->deopt_id(); }
2084 intptr_t try_index() const { return original_->try_index(); } 2073 intptr_t try_index() const { return original_->try_index(); }
2085 2074
2075 virtual Definition* TryReplace(BindInstr* instr) const;
2076
2086 virtual void PrintOperandsTo(BufferFormatter* f) const; 2077 virtual void PrintOperandsTo(BufferFormatter* f) const;
2087 2078
2088 private: 2079 private:
2089 InstanceCallComp* original_; 2080 InstanceCallComp* original_;
2090 2081
2091 DISALLOW_COPY_AND_ASSIGN(CheckClassComp); 2082 DISALLOW_COPY_AND_ASSIGN(CheckClassComp);
2092 }; 2083 };
2093 2084
2094 2085
2095 class CheckSmiComp : public TemplateComputation<1> { 2086 class CheckSmiComp : public TemplateComputation<1> {
(...skipping 1302 matching lines...) Expand 10 before | Expand all | Expand 10 after
3398 ForwardInstructionIterator* current_iterator_; 3389 ForwardInstructionIterator* current_iterator_;
3399 3390
3400 private: 3391 private:
3401 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor); 3392 DISALLOW_COPY_AND_ASSIGN(FlowGraphVisitor);
3402 }; 3393 };
3403 3394
3404 3395
3405 } // namespace dart 3396 } // namespace dart
3406 3397
3407 #endif // VM_INTERMEDIATE_LANGUAGE_H_ 3398 #endif // VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698