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

Side by Side Diff: src/hydrogen.h

Issue 18331004: Refactoring and cleanup of control instructions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase to ToT Created 7 years, 5 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/code-stubs-hydrogen.cc ('k') | src/hydrogen.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 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 public: 1144 public:
1145 explicit IfBuilder(HGraphBuilder* builder, 1145 explicit IfBuilder(HGraphBuilder* builder,
1146 int position = RelocInfo::kNoPosition); 1146 int position = RelocInfo::kNoPosition);
1147 IfBuilder(HGraphBuilder* builder, 1147 IfBuilder(HGraphBuilder* builder,
1148 HIfContinuation* continuation); 1148 HIfContinuation* continuation);
1149 1149
1150 ~IfBuilder() { 1150 ~IfBuilder() {
1151 if (!finished_) End(); 1151 if (!finished_) End();
1152 } 1152 }
1153 1153
1154 HInstruction* IfCompare(
1155 HValue* left,
1156 HValue* right,
1157 Token::Value token);
1158
1159 HInstruction* IfCompareMap(HValue* left, Handle<Map> map);
1160
1161 template<class Condition> 1154 template<class Condition>
1162 HInstruction* If(HValue *p) { 1155 HInstruction* If(HValue *p) {
1163 HControlInstruction* compare = new(zone()) Condition(p); 1156 HControlInstruction* compare = new(zone()) Condition(p);
1164 AddCompare(compare); 1157 AddCompare(compare);
1165 return compare; 1158 return compare;
1166 } 1159 }
1167 1160
1168 template<class Condition, class P2> 1161 template<class Condition, class P2>
1169 HInstruction* If(HValue* p1, P2 p2) { 1162 HInstruction* If(HValue* p1, P2 p2) {
1170 HControlInstruction* compare = new(zone()) Condition(p1, p2); 1163 HControlInstruction* compare = new(zone()) Condition(p1, p2);
1171 AddCompare(compare); 1164 AddCompare(compare);
1172 return compare; 1165 return compare;
1173 } 1166 }
1174 1167
1168 template<class Condition, class P2, class P3>
1169 HInstruction* If(HValue* p1, P2 p2, P3 p3) {
1170 HControlInstruction* compare = new(zone()) Condition(p1, p2, p3);
1171 AddCompare(compare);
1172 return compare;
1173 }
1174
1175 template<class Condition, class P2> 1175 template<class Condition, class P2>
1176 HInstruction* IfNot(HValue* p1, P2 p2) { 1176 HInstruction* IfNot(HValue* p1, P2 p2) {
1177 HControlInstruction* compare = new(zone()) Condition(p1, p2); 1177 HControlInstruction* compare = new(zone()) Condition(p1, p2);
1178 AddCompare(compare); 1178 AddCompare(compare);
1179 HBasicBlock* block0 = compare->SuccessorAt(0); 1179 HBasicBlock* block0 = compare->SuccessorAt(0);
1180 HBasicBlock* block1 = compare->SuccessorAt(1); 1180 HBasicBlock* block1 = compare->SuccessorAt(1);
1181 compare->SetSuccessorAt(0, block1); 1181 compare->SetSuccessorAt(0, block1);
1182 compare->SetSuccessorAt(1, block0); 1182 compare->SetSuccessorAt(1, block0);
1183 return compare; 1183 return compare;
1184 } 1184 }
1185 1185
1186 HInstruction* OrIfCompare( 1186 template<class Condition, class P2, class P3>
1187 HValue* p1, 1187 HInstruction* IfNot(HValue* p1, P2 p2, P3 p3) {
1188 HValue* p2, 1188 HControlInstruction* compare = new(zone()) Condition(p1, p2, p3);
1189 Token::Value token) { 1189 AddCompare(compare);
1190 Or(); 1190 HBasicBlock* block0 = compare->SuccessorAt(0);
1191 return IfCompare(p1, p2, token); 1191 HBasicBlock* block1 = compare->SuccessorAt(1);
1192 } 1192 compare->SetSuccessorAt(0, block1);
1193 1193 compare->SetSuccessorAt(1, block0);
1194 HInstruction* OrIfCompareMap(HValue* left, Handle<Map> map) { 1194 return compare;
1195 Or();
1196 return IfCompareMap(left, map);
1197 } 1195 }
1198 1196
1199 template<class Condition> 1197 template<class Condition>
1200 HInstruction* OrIf(HValue *p) { 1198 HInstruction* OrIf(HValue *p) {
1201 Or(); 1199 Or();
1202 return If<Condition>(p); 1200 return If<Condition>(p);
1203 } 1201 }
1204 1202
1205 template<class Condition, class P2> 1203 template<class Condition, class P2>
1206 HInstruction* OrIf(HValue* p1, P2 p2) { 1204 HInstruction* OrIf(HValue* p1, P2 p2) {
1207 Or(); 1205 Or();
1208 return If<Condition>(p1, p2); 1206 return If<Condition>(p1, p2);
1209 } 1207 }
1210 1208
1211 HInstruction* AndIfCompare( 1209 template<class Condition, class P2, class P3>
1212 HValue* p1, 1210 HInstruction* OrIf(HValue* p1, P2 p2, P3 p3) {
1213 HValue* p2, 1211 Or();
1214 Token::Value token) { 1212 return If<Condition>(p1, p2, p3);
1215 And();
1216 return IfCompare(p1, p2, token);
1217 }
1218
1219 HInstruction* AndIfCompareMap(HValue* left, Handle<Map> map) {
1220 And();
1221 return IfCompareMap(left, map);
1222 } 1213 }
1223 1214
1224 template<class Condition> 1215 template<class Condition>
1225 HInstruction* AndIf(HValue *p) { 1216 HInstruction* AndIf(HValue *p) {
1226 And(); 1217 And();
1227 return If<Condition>(p); 1218 return If<Condition>(p);
1228 } 1219 }
1229 1220
1230 template<class Condition, class P2> 1221 template<class Condition, class P2>
1231 HInstruction* AndIf(HValue* p1, P2 p2) { 1222 HInstruction* AndIf(HValue* p1, P2 p2) {
1232 And(); 1223 And();
1233 return If<Condition>(p1, p2); 1224 return If<Condition>(p1, p2);
1234 } 1225 }
1235 1226
1227 template<class Condition, class P2, class P3>
1228 HInstruction* AndIf(HValue* p1, P2 p2, P3 p3) {
1229 And();
1230 return If<Condition>(p1, p2, p3);
1231 }
1232
1236 void Or(); 1233 void Or();
1237 void And(); 1234 void And();
1238 1235
1239 void CaptureContinuation(HIfContinuation* continuation); 1236 void CaptureContinuation(HIfContinuation* continuation);
1240 1237
1241 void Then(); 1238 void Then();
1242 void Else(); 1239 void Else();
1243 void End(); 1240 void End();
1244 1241
1245 void Deopt(); 1242 void Deopt();
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 EmbeddedVector<char, 64> filename_; 2105 EmbeddedVector<char, 64> filename_;
2109 HeapStringAllocator string_allocator_; 2106 HeapStringAllocator string_allocator_;
2110 StringStream trace_; 2107 StringStream trace_;
2111 int indent_; 2108 int indent_;
2112 }; 2109 };
2113 2110
2114 2111
2115 } } // namespace v8::internal 2112 } } // namespace v8::internal
2116 2113
2117 #endif // V8_HYDROGEN_H_ 2114 #endif // V8_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698