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

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

Issue 24255015: Revert "Allow control intructions to have side effects." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 2 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 V(CheckHeapObject) \ 91 V(CheckHeapObject) \
92 V(CheckInstanceType) \ 92 V(CheckInstanceType) \
93 V(CheckMaps) \ 93 V(CheckMaps) \
94 V(CheckMapValue) \ 94 V(CheckMapValue) \
95 V(CheckSmi) \ 95 V(CheckSmi) \
96 V(CheckValue) \ 96 V(CheckValue) \
97 V(ClampToUint8) \ 97 V(ClampToUint8) \
98 V(ClassOfTestAndBranch) \ 98 V(ClassOfTestAndBranch) \
99 V(CompareNumericAndBranch) \ 99 V(CompareNumericAndBranch) \
100 V(CompareHoleAndBranch) \ 100 V(CompareHoleAndBranch) \
101 V(CompareGenericAndBranch) \ 101 V(CompareGeneric) \
102 V(CompareObjectEqAndBranch) \ 102 V(CompareObjectEqAndBranch) \
103 V(CompareMap) \ 103 V(CompareMap) \
104 V(Constant) \ 104 V(Constant) \
105 V(Context) \ 105 V(Context) \
106 V(DateField) \ 106 V(DateField) \
107 V(DebugBreak) \ 107 V(DebugBreak) \
108 V(DeclareGlobals) \ 108 V(DeclareGlobals) \
109 V(Deoptimize) \ 109 V(Deoptimize) \
110 V(Div) \ 110 V(Div) \
111 V(DummyUse) \ 111 V(DummyUse) \
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 int flags_; 1062 int flags_;
1063 GVNFlagSet gvn_flags_; 1063 GVNFlagSet gvn_flags_;
1064 1064
1065 private: 1065 private:
1066 virtual bool IsDeletable() const { return false; } 1066 virtual bool IsDeletable() const { return false; }
1067 1067
1068 DISALLOW_COPY_AND_ASSIGN(HValue); 1068 DISALLOW_COPY_AND_ASSIGN(HValue);
1069 }; 1069 };
1070 1070
1071 1071
1072 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(I) \
1073 static I* New(Zone* zone, HValue* context) { \
1074 return new(zone) I(context); \
1075 }
1076
1077 #define DECLARE_INSTRUCTION_FACTORY_P0(I) \ 1072 #define DECLARE_INSTRUCTION_FACTORY_P0(I) \
1078 static I* New(Zone* zone, HValue* context) { \ 1073 static I* New(Zone* zone, HValue* context) { \
1079 return new(zone) I(); \ 1074 return new(zone) I(); \
1080 } 1075 }
1081 1076
1082 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(I, P1) \
1083 static I* New(Zone* zone, HValue* context, P1 p1) { \
1084 return new(zone) I(context, p1); \
1085 }
1086
1087 #define DECLARE_INSTRUCTION_FACTORY_P1(I, P1) \ 1077 #define DECLARE_INSTRUCTION_FACTORY_P1(I, P1) \
1088 static I* New(Zone* zone, HValue* context, P1 p1) { \ 1078 static I* New(Zone* zone, HValue* context, P1 p1) { \
1089 return new(zone) I(p1); \ 1079 return new(zone) I(p1); \
1090 } 1080 }
1091 1081
1092 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(I, P1, P2) \
1093 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2) { \
1094 return new(zone) I(context, p1, p2); \
1095 }
1096
1097 #define DECLARE_INSTRUCTION_FACTORY_P2(I, P1, P2) \ 1082 #define DECLARE_INSTRUCTION_FACTORY_P2(I, P1, P2) \
1098 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2) { \ 1083 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2) { \
1099 return new(zone) I(p1, p2); \ 1084 return new(zone) I(p1, p2); \
1100 } 1085 }
1101 1086
1102 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(I, P1, P2, P3) \
1103 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2, P3 p3) { \
1104 return new(zone) I(context, p1, p2, p3); \
1105 }
1106
1107 #define DECLARE_INSTRUCTION_FACTORY_P3(I, P1, P2, P3) \ 1087 #define DECLARE_INSTRUCTION_FACTORY_P3(I, P1, P2, P3) \
1108 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2, P3 p3) { \ 1088 static I* New(Zone* zone, HValue* context, P1 p1, P2 p2, P3 p3) { \
1109 return new(zone) I(p1, p2, p3); \ 1089 return new(zone) I(p1, p2, p3); \
1110 } 1090 }
1111 1091
1112 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(I, P1, P2, P3, P4) \
1113 static I* New(Zone* zone, \
1114 HValue* context, \
1115 P1 p1, \
1116 P2 p2, \
1117 P3 p3, \
1118 P4 p4) { \
1119 return new(zone) I(context, p1, p2, p3, p4); \
1120 }
1121
1122 #define DECLARE_INSTRUCTION_FACTORY_P4(I, P1, P2, P3, P4) \ 1092 #define DECLARE_INSTRUCTION_FACTORY_P4(I, P1, P2, P3, P4) \
1123 static I* New(Zone* zone, \ 1093 static I* New(Zone* zone, \
1124 HValue* context, \ 1094 HValue* context, \
1125 P1 p1, \ 1095 P1 p1, \
1126 P2 p2, \ 1096 P2 p2, \
1127 P3 p3, \ 1097 P3 p3, \
1128 P4 p4) { \ 1098 P4 p4) { \
1129 return new(zone) I(p1, p2, p3, p4); \ 1099 return new(zone) I(p1, p2, p3, p4); \
1130 } 1100 }
1131 1101
1132 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(I, P1, P2, P3, P4, P5) \
1133 static I* New(Zone* zone, \
1134 HValue* context, \
1135 P1 p1, \
1136 P2 p2, \
1137 P3 p3, \
1138 P4 p4, \
1139 P5 p5) { \
1140 return new(zone) I(context, p1, p2, p3, p4, p5); \
1141 }
1142
1143 #define DECLARE_INSTRUCTION_FACTORY_P5(I, P1, P2, P3, P4, P5) \ 1102 #define DECLARE_INSTRUCTION_FACTORY_P5(I, P1, P2, P3, P4, P5) \
1144 static I* New(Zone* zone, \ 1103 static I* New(Zone* zone, \
1145 HValue* context, \ 1104 HValue* context, \
1146 P1 p1, \ 1105 P1 p1, \
1147 P2 p2, \ 1106 P2 p2, \
1148 P3 p3, \ 1107 P3 p3, \
1149 P4 p4, \ 1108 P4 p4, \
1150 P5 p5) { \ 1109 P5 p5) { \
1151 return new(zone) I(p1, p2, p3, p4, p5); \ 1110 return new(zone) I(p1, p2, p3, p4, p5); \
1152 } 1111 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1247 HBasicBlock* SecondSuccessor() { 1206 HBasicBlock* SecondSuccessor() {
1248 return SuccessorCount() > 1 ? SuccessorAt(1) : NULL; 1207 return SuccessorCount() > 1 ? SuccessorAt(1) : NULL;
1249 } 1208 }
1250 1209
1251 void Not() { 1210 void Not() {
1252 HBasicBlock* swap = SuccessorAt(0); 1211 HBasicBlock* swap = SuccessorAt(0);
1253 SetSuccessorAt(0, SuccessorAt(1)); 1212 SetSuccessorAt(0, SuccessorAt(1));
1254 SetSuccessorAt(1, swap); 1213 SetSuccessorAt(1, swap);
1255 } 1214 }
1256 1215
1257 #ifdef DEBUG
1258 virtual void Verify() V8_OVERRIDE;
1259 #endif
1260
1261 DECLARE_ABSTRACT_INSTRUCTION(ControlInstruction) 1216 DECLARE_ABSTRACT_INSTRUCTION(ControlInstruction)
1262 }; 1217 };
1263 1218
1264 1219
1265 class HSuccessorIterator V8_FINAL BASE_EMBEDDED { 1220 class HSuccessorIterator V8_FINAL BASE_EMBEDDED {
1266 public: 1221 public:
1267 explicit HSuccessorIterator(HControlInstruction* instr) 1222 explicit HSuccessorIterator(HControlInstruction* instr)
1268 : instr_(instr), current_(0) { } 1223 : instr_(instr), current_(0) { }
1269 1224
1270 bool Done() { return current_ >= instr_->SuccessorCount(); } 1225 bool Done() { return current_ >= instr_->SuccessorCount(); }
(...skipping 2775 matching lines...) Expand 10 before | Expand all | Expand 10 after
4046 } 4001 }
4047 } 4002 }
4048 4003
4049 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation) 4004 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation)
4050 4005
4051 private: 4006 private:
4052 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 4007 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
4053 }; 4008 };
4054 4009
4055 4010
4056 class HCompareGenericAndBranch V8_FINAL 4011 class HCompareGeneric V8_FINAL : public HBinaryOperation {
4057 : public HTemplateControlInstruction<2, 3> {
4058 public: 4012 public:
4059 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCompareGenericAndBranch, 4013 HCompareGeneric(HValue* context,
4060 HValue*, HValue*, Token::Value); 4014 HValue* left,
4061 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HCompareGenericAndBranch, 4015 HValue* right,
4062 HValue*, HValue*, Token::Value, 4016 Token::Value token)
4063 HBasicBlock*, HBasicBlock*); 4017 : HBinaryOperation(context, left, right, HType::Boolean()),
4064 HValue* context() { return OperandAt(0); } 4018 token_(token) {
4065 HValue* left() { return OperandAt(1); } 4019 ASSERT(Token::IsCompareOp(token));
4066 HValue* right() { return OperandAt(2); } 4020 set_representation(Representation::Tagged());
4067 Token::Value token() const { return token_; } 4021 SetAllSideEffects();
4022 }
4068 4023
4069 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 4024 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
4070 return index == 0 4025 return index == 0
4071 ? Representation::Tagged() 4026 ? Representation::Tagged()
4072 : representation(); 4027 : representation();
4073 } 4028 }
4074 4029
4075 void set_observed_input_representation(Representation left, 4030 Token::Value token() const { return token_; }
4076 Representation right) {
4077 observed_input_representation_[0] = left;
4078 observed_input_representation_[1] = right;
4079 }
4080
4081 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 4031 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
4082 4032
4083 DECLARE_CONCRETE_INSTRUCTION(CompareGenericAndBranch) 4033 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric)
4084 4034
4085 private: 4035 private:
4086 HCompareGenericAndBranch(HValue* context,
4087 HValue* left,
4088 HValue* right,
4089 Token::Value token,
4090 HBasicBlock* true_target = NULL,
4091 HBasicBlock* false_target = NULL)
4092 : token_(token) {
4093 set_representation(Representation::Tagged());
4094 SetAllSideEffects();
4095 SetOperandAt(0, context);
4096 SetOperandAt(1, left);
4097 SetOperandAt(2, right);
4098 SetSuccessorAt(0, true_target);
4099 SetSuccessorAt(1, false_target);
4100 }
4101
4102 Representation observed_input_representation_[2];
4103 Token::Value token_; 4036 Token::Value token_;
4104 }; 4037 };
4105 4038
4106 4039
4107 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { 4040 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> {
4108 public: 4041 public:
4109 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch, 4042 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch,
4110 HValue*, HValue*, Token::Value); 4043 HValue*, HValue*, Token::Value);
4111 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch, 4044 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch,
4112 HValue*, HValue*, Token::Value, 4045 HValue*, HValue*, Token::Value,
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
4294 HIsUndetectableAndBranch(HValue* value, 4227 HIsUndetectableAndBranch(HValue* value,
4295 HBasicBlock* true_target = NULL, 4228 HBasicBlock* true_target = NULL,
4296 HBasicBlock* false_target = NULL) 4229 HBasicBlock* false_target = NULL)
4297 : HUnaryControlInstruction(value, true_target, false_target) {} 4230 : HUnaryControlInstruction(value, true_target, false_target) {}
4298 }; 4231 };
4299 4232
4300 4233
4301 class HStringCompareAndBranch : public HTemplateControlInstruction<2, 3> { 4234 class HStringCompareAndBranch : public HTemplateControlInstruction<2, 3> {
4302 public: 4235 public:
4303 HStringCompareAndBranch(HValue* context, 4236 HStringCompareAndBranch(HValue* context,
4304 HValue* left, 4237 HValue* left,
4305 HValue* right, 4238 HValue* right,
4306 Token::Value token) 4239 Token::Value token)
4307 : token_(token) { 4240 : token_(token) {
4308 ASSERT(Token::IsCompareOp(token)); 4241 ASSERT(Token::IsCompareOp(token));
4309 SetOperandAt(0, context); 4242 SetOperandAt(0, context);
4310 SetOperandAt(1, left); 4243 SetOperandAt(1, left);
4311 SetOperandAt(2, right); 4244 SetOperandAt(2, right);
4312 set_representation(Representation::Tagged()); 4245 set_representation(Representation::Tagged());
4313 SetGVNFlag(kChangesNewSpacePromotion); 4246 SetGVNFlag(kChangesNewSpacePromotion);
4314 } 4247 }
4315 4248
4316 HValue* context() { return OperandAt(0); } 4249 HValue* context() { return OperandAt(0); }
(...skipping 2814 matching lines...) Expand 10 before | Expand all | Expand 10 after
7131 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7064 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7132 }; 7065 };
7133 7066
7134 7067
7135 #undef DECLARE_INSTRUCTION 7068 #undef DECLARE_INSTRUCTION
7136 #undef DECLARE_CONCRETE_INSTRUCTION 7069 #undef DECLARE_CONCRETE_INSTRUCTION
7137 7070
7138 } } // namespace v8::internal 7071 } } // namespace v8::internal
7139 7072
7140 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7073 #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