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

Side by Side Diff: src/hydrogen-instructions.h

Issue 6480030: Remove the uses of the arguments from all calls. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 10 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 | « src/hydrogen.cc ('k') | src/hydrogen-instructions.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 30 matching lines...) Expand all
41 class HEnvironment; 41 class HEnvironment;
42 class HInstruction; 42 class HInstruction;
43 class HLoopInformation; 43 class HLoopInformation;
44 class HValue; 44 class HValue;
45 class LInstruction; 45 class LInstruction;
46 class LChunkBuilder; 46 class LChunkBuilder;
47 47
48 48
49 #define HYDROGEN_ALL_INSTRUCTION_LIST(V) \ 49 #define HYDROGEN_ALL_INSTRUCTION_LIST(V) \
50 V(ArithmeticBinaryOperation) \ 50 V(ArithmeticBinaryOperation) \
51 V(BinaryCall) \
51 V(BinaryOperation) \ 52 V(BinaryOperation) \
52 V(BitwiseBinaryOperation) \ 53 V(BitwiseBinaryOperation) \
53 V(Call) \ 54 V(Call) \
54 V(ControlInstruction) \ 55 V(ControlInstruction) \
55 V(Instruction) \ 56 V(Instruction) \
56 V(LoadKeyed) \ 57 V(LoadKeyed) \
57 V(MaterializedLiteral) \ 58 V(MaterializedLiteral) \
58 V(Phi) \ 59 V(Phi) \
59 V(StoreKeyed) \ 60 V(StoreKeyed) \
60 V(StoreNamed) \ 61 V(StoreNamed) \
62 V(UnaryCall) \
61 V(UnaryControlInstruction) \ 63 V(UnaryControlInstruction) \
62 V(UnaryOperation) \ 64 V(UnaryOperation) \
63 HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) 65 HYDROGEN_CONCRETE_INSTRUCTION_LIST(V)
64 66
65 67
66 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ 68 #define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \
67 V(AbnormalExit) \ 69 V(AbnormalExit) \
68 V(AccessArgumentsAt) \ 70 V(AccessArgumentsAt) \
69 V(Add) \ 71 V(Add) \
70 V(ApplyArguments) \ 72 V(ApplyArguments) \
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 class HLeaveInlined: public HInstruction { 1043 class HLeaveInlined: public HInstruction {
1042 public: 1044 public:
1043 HLeaveInlined() {} 1045 HLeaveInlined() {}
1044 1046
1045 DECLARE_CONCRETE_INSTRUCTION(LeaveInlined, "leave_inlined") 1047 DECLARE_CONCRETE_INSTRUCTION(LeaveInlined, "leave_inlined")
1046 }; 1048 };
1047 1049
1048 1050
1049 class HPushArgument: public HUnaryOperation { 1051 class HPushArgument: public HUnaryOperation {
1050 public: 1052 public:
1051 explicit HPushArgument(HValue* value) 1053 explicit HPushArgument(HValue* value) : HUnaryOperation(value) { }
1052 : HUnaryOperation(value), argument_index_(-1) {
1053 set_representation(Representation::Tagged());
1054 }
1055 1054
1056 virtual Representation RequiredInputRepresentation(int index) const { 1055 virtual Representation RequiredInputRepresentation(int index) const {
1057 return Representation::Tagged(); 1056 return Representation::Tagged();
1058 } 1057 }
1059 1058
1060 virtual void PrintDataTo(StringStream* stream) const;
1061 HValue* argument() const { return OperandAt(0); } 1059 HValue* argument() const { return OperandAt(0); }
1062 int argument_index() const { return argument_index_; }
1063 void set_argument_index(int index) {
1064 ASSERT(argument_index_ == -1 || index == argument_index_);
1065 argument_index_ = index;
1066 }
1067 1060
1068 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push_argument") 1061 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push_argument")
1069
1070 private:
1071 int argument_index_;
1072 }; 1062 };
1073 1063
1074 1064
1075 class HContext: public HInstruction { 1065 class HContext: public HInstruction {
1076 public: 1066 public:
1077 HContext() { 1067 HContext() {
1078 set_representation(Representation::Tagged()); 1068 set_representation(Representation::Tagged());
1079 SetFlag(kUseGVN); 1069 SetFlag(kUseGVN);
1080 } 1070 }
1081 1071
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 1114
1125 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global_receiver") 1115 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver, "global_receiver")
1126 1116
1127 protected: 1117 protected:
1128 virtual bool DataEquals(HValue* other) const { return true; } 1118 virtual bool DataEquals(HValue* other) const { return true; }
1129 }; 1119 };
1130 1120
1131 1121
1132 class HCall: public HInstruction { 1122 class HCall: public HInstruction {
1133 public: 1123 public:
1134 // Construct a call with uninitialized arguments. The argument count 1124 // The argument count includes the receiver.
1135 // includes the receiver. 1125 explicit HCall(int argument_count) : argument_count_(argument_count) {
1136 explicit HCall(int count); 1126 set_representation(Representation::Tagged());
1127 SetAllSideEffects();
1128 }
1137 1129
1138 virtual HType CalculateInferredType() const { return HType::Tagged(); } 1130 virtual HType CalculateInferredType() const { return HType::Tagged(); }
1139 1131
1140 // TODO(3190496): This needs a cleanup. We don't want the arguments 1132 virtual int argument_count() const { return argument_count_; }
1141 // be operands of the call instruction. This results in bad code quality.
1142 virtual int argument_count() const { return arguments_.length(); }
1143 virtual int OperandCount() const { return argument_count(); }
1144 virtual HValue* OperandAt(int index) const { return arguments_[index]; }
1145 virtual HPushArgument* PushArgumentAt(int index) const {
1146 return HPushArgument::cast(OperandAt(index));
1147 }
1148 virtual HValue* ArgumentAt(int index) const {
1149 return PushArgumentAt(index)->argument();
1150 }
1151 virtual void SetArgumentAt(int index, HPushArgument* push_argument);
1152 1133
1153 virtual void PrintDataTo(StringStream* stream) const; 1134 virtual void PrintDataTo(StringStream* stream) const;
1154 1135
1155 DECLARE_INSTRUCTION(Call) 1136 DECLARE_INSTRUCTION(Call)
1156 1137
1157 protected: 1138 private:
1158 virtual void InternalSetOperandAt(int index, HValue* value) {
1159 arguments_[index] = value;
1160 }
1161
1162 int argument_count_; 1139 int argument_count_;
1163 Vector<HValue*> arguments_;
1164 }; 1140 };
1165 1141
1166 1142
1143 class HUnaryCall: public HCall {
1144 public:
1145 HUnaryCall(HValue* value, int argument_count)
1146 : HCall(argument_count), value_(NULL) {
1147 SetOperandAt(0, value);
1148 }
1149
1150 virtual void PrintDataTo(StringStream* stream) const;
1151
1152 HValue* value() const { return value_; }
1153
1154 virtual int OperandCount() const { return 1; }
1155 virtual HValue* OperandAt(int index) const {
1156 ASSERT(index == 0);
1157 return value_;
1158 }
1159
1160 DECLARE_INSTRUCTION(UnaryCall)
1161
1162 protected:
1163 virtual void InternalSetOperandAt(int index, HValue* value) {
1164 ASSERT(index == 0);
1165 value_ = value;
1166 }
1167
1168 private:
1169 HValue* value_;
fschneider 2011/02/11 13:08:18 You could consider using OperandVector<1> instead.
1170 };
1171
1172
1173 class HBinaryCall: public HCall {
1174 public:
1175 HBinaryCall(HValue* first, HValue* second, int argument_count)
1176 : HCall(argument_count) {
1177 SetOperandAt(0, first);
1178 SetOperandAt(1, second);
1179 }
1180
1181 virtual void PrintDataTo(StringStream* stream) const;
1182
1183 HValue* first() const { return operands_[0]; }
1184 HValue* second() const { return operands_[1]; }
1185
1186 virtual int OperandCount() const { return 2; }
1187 virtual HValue* OperandAt(int index) const { return operands_[index]; }
1188
1189 DECLARE_INSTRUCTION(BinaryCall)
1190
1191 protected:
1192 virtual void InternalSetOperandAt(int index, HValue* value) {
1193 operands_[index] = value;
1194 }
1195
1196 private:
1197 HOperandVector<2> operands_;
1198 };
1199
1200
1167 class HCallConstantFunction: public HCall { 1201 class HCallConstantFunction: public HCall {
1168 public: 1202 public:
1169 HCallConstantFunction(Handle<JSFunction> function, int argument_count) 1203 HCallConstantFunction(Handle<JSFunction> function, int argument_count)
1170 : HCall(argument_count), function_(function) { } 1204 : HCall(argument_count), function_(function) { }
1171 1205
1172 Handle<JSFunction> function() const { return function_; } 1206 Handle<JSFunction> function() const { return function_; }
1207
1173 bool IsApplyFunction() const { 1208 bool IsApplyFunction() const {
1174 return function_->code() == Builtins::builtin(Builtins::FunctionApply); 1209 return function_->code() == Builtins::builtin(Builtins::FunctionApply);
1175 } 1210 }
1176 1211
1177 virtual void PrintDataTo(StringStream* stream) const; 1212 virtual void PrintDataTo(StringStream* stream) const;
1178 1213
1179 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call_constant_function") 1214 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call_constant_function")
1180 1215
1181 private: 1216 private:
1182 Handle<JSFunction> function_; 1217 Handle<JSFunction> function_;
1183 }; 1218 };
1184 1219
1185 1220
1186 // TODO(3190496): This class uses hacks to get additional operands that ar 1221 class HCallKeyed: public HBinaryCall {
1187 // not arguments to work with the current setup. This _needs_ a cleanup.
1188 // (see HCall).
1189 class HCallKeyed: public HCall {
1190 public: 1222 public:
1191 HCallKeyed(HValue* context, HValue* key, int argument_count) 1223 HCallKeyed(HValue* context, HValue* key, int argument_count)
1192 : HCall(argument_count + 1), context_(NULL) { 1224 : HBinaryCall(context, key, argument_count) {
1193 SetOperandAt(0, key);
1194 SetOperandAt(argument_count + 1, context);
1195 } 1225 }
1196 1226
1197 virtual Representation RequiredInputRepresentation(int index) const { 1227 virtual Representation RequiredInputRepresentation(int index) const {
1198 return Representation::Tagged(); 1228 return Representation::Tagged();
1199 } 1229 }
1200 1230
1201 virtual void PrintDataTo(StringStream* stream) const; 1231 HValue* context() const { return first(); }
1202 1232 HValue* key() const { return second(); }
1203 HValue* key() const { return OperandAt(0); }
1204 HValue* context() const { return context_; }
1205
1206 virtual int argument_count() const { return arguments_.length() - 1; }
1207 virtual int OperandCount() const { return arguments_.length() + 1; }
1208
1209 virtual HValue* OperandAt(int index) const {
1210 // The key and all the arguments are stored in the base class's
1211 // arguments_ vector. The context is in the object itself. Ugly.
1212 return (index <= argument_count()) ? arguments_[index] : context_;
1213 }
1214
1215 virtual HPushArgument* PushArgumentAt(int index) const {
1216 return HPushArgument::cast(OperandAt(index + 1));
1217 }
1218 virtual void SetArgumentAt(int index, HPushArgument* push_argument) {
1219 HCall::SetArgumentAt(index + 1, push_argument);
1220 }
1221 1233
1222 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call_keyed") 1234 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call_keyed")
1223
1224 protected:
1225 virtual void InternalSetOperandAt(int index, HValue* value);
1226
1227 private:
1228 HValue* context_;
1229 }; 1235 };
1230 1236
1231 1237
1232 class HCallNamed: public HCall { 1238 class HCallNamed: public HUnaryCall {
1233 public: 1239 public:
1234 HCallNamed(HValue* context, Handle<String> name, int argument_count) 1240 HCallNamed(HValue* context, Handle<String> name, int argument_count)
1235 : HCall(argument_count), context_(NULL), name_(name) { 1241 : HUnaryCall(context, argument_count), name_(name) {
1236 SetOperandAt(argument_count, context);
1237 } 1242 }
1238 1243
1239 virtual void PrintDataTo(StringStream* stream) const; 1244 virtual void PrintDataTo(StringStream* stream) const;
1240 1245
1241 HValue* context() const { return context_; } 1246 HValue* context() const { return value(); }
1242 Handle<String> name() const { return name_; } 1247 Handle<String> name() const { return name_; }
1243 1248
1244 virtual int OperandCount() const { return arguments_.length() + 1; }
1245
1246 virtual HValue* OperandAt(int index) const {
1247 // The arguments are in the base class's arguments_ vector. The context
1248 // is in the object itself.
1249 return (index < argument_count()) ? arguments_[index] : context_;
1250 }
1251
1252 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call_named") 1249 DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call_named")
1253 1250
1254 protected:
1255 virtual void InternalSetOperandAt(int index, HValue* value);
1256
1257 private: 1251 private:
1258 HValue* context_;
1259 Handle<String> name_; 1252 Handle<String> name_;
1260 }; 1253 };
1261 1254
1262 1255
1263 class HCallFunction: public HCall { 1256 class HCallFunction: public HUnaryCall {
1264 public: 1257 public:
1265 HCallFunction(HValue* context, int argument_count) 1258 HCallFunction(HValue* context, int argument_count)
1266 : HCall(argument_count), context_(NULL) { 1259 : HUnaryCall(context, argument_count) {
1267 SetOperandAt(argument_count, context);
1268 } 1260 }
1269 1261
1270 HValue* context() const { return context_; } 1262 HValue* context() const { return value(); }
1271
1272 virtual int OperandCount() const { return arguments_.length() + 1; }
1273
1274 virtual HValue* OperandAt(int index) const {
1275 // The arguments are in the base class's arguments_ vector. The context
1276 // is in the object itself.
1277 return (index < argument_count()) ? arguments_[index] : context_;
1278 }
1279 1263
1280 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call_function") 1264 DECLARE_CONCRETE_INSTRUCTION(CallFunction, "call_function")
1281
1282 protected:
1283 virtual void InternalSetOperandAt(int index, HValue* value);
1284
1285 private:
1286 HValue* context_;
1287 }; 1265 };
1288 1266
1289 1267
1290 class HCallGlobal: public HCall { 1268 class HCallGlobal: public HUnaryCall {
1291 public: 1269 public:
1292 HCallGlobal(HValue* context, Handle<String> name, int argument_count) 1270 HCallGlobal(HValue* context, Handle<String> name, int argument_count)
1293 : HCall(argument_count), context_(NULL), name_(name) { 1271 : HUnaryCall(context, argument_count), name_(name) {
1294 SetOperandAt(argument_count, context);
1295 } 1272 }
1296 1273
1297 virtual void PrintDataTo(StringStream* stream) const; 1274 virtual void PrintDataTo(StringStream* stream) const;
1298 1275
1299 HValue* context() const { return context_; } 1276 HValue* context() const { return value(); }
1300 Handle<String> name() const { return name_; } 1277 Handle<String> name() const { return name_; }
1301 1278
1302 virtual int OperandCount() const { return arguments_.length() + 1; }
1303
1304 virtual HValue* OperandAt(int index) const {
1305 // The arguments are in the base class's arguments_ vector. The context
1306 // is in the object itself.
1307 return (index < argument_count()) ? arguments_[index] : context_;
1308 }
1309
1310 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call_global") 1279 DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call_global")
1311 1280
1312 protected:
1313 virtual void InternalSetOperandAt(int index, HValue* value);
1314
1315 private: 1281 private:
1316 HValue* context_;
1317 Handle<String> name_; 1282 Handle<String> name_;
1318 }; 1283 };
1319 1284
1320 1285
1321 class HCallKnownGlobal: public HCall { 1286 class HCallKnownGlobal: public HCall {
1322 public: 1287 public:
1323 HCallKnownGlobal(Handle<JSFunction> target, 1288 HCallKnownGlobal(Handle<JSFunction> target, int argument_count)
1324 int argument_count)
1325 : HCall(argument_count), target_(target) { } 1289 : HCall(argument_count), target_(target) { }
1326 1290
1291 virtual void PrintDataTo(StringStream* stream) const;
1292
1327 Handle<JSFunction> target() const { return target_; } 1293 Handle<JSFunction> target() const { return target_; }
1328 1294
1329 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call_known_global") 1295 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call_known_global")
1330 1296
1331 private: 1297 private:
1332 Handle<JSFunction> target_; 1298 Handle<JSFunction> target_;
1333 }; 1299 };
1334 1300
1335 1301
1336 class HCallNew: public HCall { 1302 class HCallNew: public HBinaryCall {
1337 public: 1303 public:
1338 HCallNew(HValue* context, int argument_count) 1304 HCallNew(HValue* context, HValue* constructor, int argument_count)
1339 : HCall(argument_count), context_(NULL) { 1305 : HBinaryCall(context, constructor, argument_count) {
1340 SetOperandAt(argument_count, context);
1341 } 1306 }
1342 1307
1343 virtual Representation RequiredInputRepresentation(int index) const { 1308 virtual Representation RequiredInputRepresentation(int index) const {
1344 return Representation::Tagged(); 1309 return Representation::Tagged();
1345 } 1310 }
1346 1311
1347 HValue* context() const { return context_; } 1312 HValue* context() const { return first(); }
1348 HValue* constructor() const { return ArgumentAt(0); } 1313 HValue* constructor() const { return second(); }
1349
1350 virtual int OperandCount() const { return arguments_.length() + 1; }
1351
1352 virtual HValue* OperandAt(int index) const {
1353 // The arguments are in the base class's arguments_ vector. The context
1354 // is in the object itself.
1355 return (index < argument_count()) ? arguments_[index] : context_;
1356 }
1357 1314
1358 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call_new") 1315 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call_new")
1359
1360 protected:
1361 virtual void InternalSetOperandAt(int index, HValue* value);
1362
1363 private:
1364 HValue* context_;
1365 }; 1316 };
1366 1317
1367 1318
1368 class HCallRuntime: public HCall { 1319 class HCallRuntime: public HCall {
1369 public: 1320 public:
1370 HCallRuntime(Handle<String> name, 1321 HCallRuntime(Handle<String> name,
1371 Runtime::Function* c_function, 1322 Runtime::Function* c_function,
1372 int argument_count) 1323 int argument_count)
1373 : HCall(argument_count), c_function_(c_function), name_(name) { } 1324 : HCall(argument_count), c_function_(c_function), name_(name) { }
1374 virtual void PrintDataTo(StringStream* stream) const; 1325 virtual void PrintDataTo(StringStream* stream) const;
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after
2708 2659
2709 virtual void PrintDataTo(StringStream* stream) const; 2660 virtual void PrintDataTo(StringStream* stream) const;
2710 2661
2711 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter") 2662 DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
2712 2663
2713 private: 2664 private:
2714 unsigned index_; 2665 unsigned index_;
2715 }; 2666 };
2716 2667
2717 2668
2718 class HCallStub: public HUnaryOperation { 2669 class HCallStub: public HUnaryCall {
2719 public: 2670 public:
2720 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) 2671 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count)
2721 : HUnaryOperation(context), 2672 : HUnaryCall(context, argument_count),
2722 major_key_(major_key), 2673 major_key_(major_key),
2723 argument_count_(argument_count),
2724 transcendental_type_(TranscendentalCache::kNumberOfCaches) { 2674 transcendental_type_(TranscendentalCache::kNumberOfCaches) {
2725 set_representation(Representation::Tagged());
2726 SetAllSideEffects();
2727 } 2675 }
2728 2676
2729 CodeStub::Major major_key() { return major_key_; } 2677 CodeStub::Major major_key() { return major_key_; }
2730 int argument_count() { return argument_count_; } 2678
2731 HValue* context() { return OperandAt(0); } 2679 HValue* context() const { return value(); }
2732 2680
2733 void set_transcendental_type(TranscendentalCache::Type transcendental_type) { 2681 void set_transcendental_type(TranscendentalCache::Type transcendental_type) {
2734 transcendental_type_ = transcendental_type; 2682 transcendental_type_ = transcendental_type;
2735 } 2683 }
2736 TranscendentalCache::Type transcendental_type() { 2684 TranscendentalCache::Type transcendental_type() {
2737 return transcendental_type_; 2685 return transcendental_type_;
2738 } 2686 }
2687
2739 virtual void PrintDataTo(StringStream* stream) const; 2688 virtual void PrintDataTo(StringStream* stream) const;
2740 2689
2741 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call_stub") 2690 DECLARE_CONCRETE_INSTRUCTION(CallStub, "call_stub")
2742 2691
2743 private: 2692 private:
2744 CodeStub::Major major_key_; 2693 CodeStub::Major major_key_;
2745 int argument_count_;
2746 TranscendentalCache::Type transcendental_type_; 2694 TranscendentalCache::Type transcendental_type_;
2747 }; 2695 };
2748 2696
2749 2697
2750 class HUnknownOSRValue: public HInstruction { 2698 class HUnknownOSRValue: public HInstruction {
2751 public: 2699 public:
2752 HUnknownOSRValue() { set_representation(Representation::Tagged()); } 2700 HUnknownOSRValue() { set_representation(Representation::Tagged()); }
2753 2701
2754 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown_osr_value") 2702 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown_osr_value")
2755 }; 2703 };
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after
3454 HValue* object() const { return left(); } 3402 HValue* object() const { return left(); }
3455 HValue* key() const { return right(); } 3403 HValue* key() const { return right(); }
3456 }; 3404 };
3457 3405
3458 #undef DECLARE_INSTRUCTION 3406 #undef DECLARE_INSTRUCTION
3459 #undef DECLARE_CONCRETE_INSTRUCTION 3407 #undef DECLARE_CONCRETE_INSTRUCTION
3460 3408
3461 } } // namespace v8::internal 3409 } } // namespace v8::internal
3462 3410
3463 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 3411 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698