OLD | NEW |
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 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1118 public: | 1118 public: |
1119 explicit IfBuilder(HGraphBuilder* builder, | 1119 explicit IfBuilder(HGraphBuilder* builder, |
1120 int position = RelocInfo::kNoPosition); | 1120 int position = RelocInfo::kNoPosition); |
1121 IfBuilder(HGraphBuilder* builder, | 1121 IfBuilder(HGraphBuilder* builder, |
1122 HIfContinuation* continuation); | 1122 HIfContinuation* continuation); |
1123 | 1123 |
1124 ~IfBuilder() { | 1124 ~IfBuilder() { |
1125 if (!finished_) End(); | 1125 if (!finished_) End(); |
1126 } | 1126 } |
1127 | 1127 |
1128 HInstruction* IfCompare( | |
1129 HValue* left, | |
1130 HValue* right, | |
1131 Token::Value token); | |
1132 | |
1133 HInstruction* IfCompareMap(HValue* left, Handle<Map> map); | |
1134 | |
1135 template<class Condition> | 1128 template<class Condition> |
1136 HInstruction* If(HValue *p) { | 1129 HInstruction* If(HValue *p) { |
1137 HControlInstruction* compare = new(zone()) Condition(p); | 1130 HControlInstruction* compare = new(zone()) Condition(p); |
1138 AddCompare(compare); | 1131 AddCompare(compare); |
1139 return compare; | 1132 return compare; |
1140 } | 1133 } |
1141 | 1134 |
1142 template<class Condition, class P2> | 1135 template<class Condition, class P2> |
1143 HInstruction* If(HValue* p1, P2 p2) { | 1136 HInstruction* If(HValue* p1, P2 p2) { |
1144 HControlInstruction* compare = new(zone()) Condition(p1, p2); | 1137 HControlInstruction* compare = new(zone()) Condition(p1, p2); |
1145 AddCompare(compare); | 1138 AddCompare(compare); |
1146 return compare; | 1139 return compare; |
1147 } | 1140 } |
1148 | 1141 |
| 1142 template<class Condition, class P2, class P3> |
| 1143 HInstruction* If(HValue* p1, P2 p2, P3 p3) { |
| 1144 HControlInstruction* compare = new(zone()) Condition(p1, p2, p3); |
| 1145 AddCompare(compare); |
| 1146 return compare; |
| 1147 } |
| 1148 |
1149 template<class Condition, class P2> | 1149 template<class Condition, class P2> |
1150 HInstruction* IfNot(HValue* p1, P2 p2) { | 1150 HInstruction* IfNot(HValue* p1, P2 p2) { |
1151 HControlInstruction* compare = new(zone()) Condition(p1, p2); | 1151 HControlInstruction* compare = new(zone()) Condition(p1, p2); |
1152 AddCompare(compare); | 1152 AddCompare(compare); |
1153 HBasicBlock* block0 = compare->SuccessorAt(0); | 1153 HBasicBlock* block0 = compare->SuccessorAt(0); |
1154 HBasicBlock* block1 = compare->SuccessorAt(1); | 1154 HBasicBlock* block1 = compare->SuccessorAt(1); |
1155 compare->SetSuccessorAt(0, block1); | 1155 compare->SetSuccessorAt(0, block1); |
1156 compare->SetSuccessorAt(1, block0); | 1156 compare->SetSuccessorAt(1, block0); |
1157 return compare; | 1157 return compare; |
1158 } | 1158 } |
1159 | 1159 |
1160 HInstruction* OrIfCompare( | 1160 template<class Condition, class P2, class P3> |
1161 HValue* p1, | 1161 HInstruction* IfNot(HValue* p1, P2 p2, P3 p3) { |
1162 HValue* p2, | 1162 HControlInstruction* compare = new(zone()) Condition(p1, p2, p3); |
1163 Token::Value token) { | 1163 AddCompare(compare); |
1164 Or(); | 1164 HBasicBlock* block0 = compare->SuccessorAt(0); |
1165 return IfCompare(p1, p2, token); | 1165 HBasicBlock* block1 = compare->SuccessorAt(1); |
1166 } | 1166 compare->SetSuccessorAt(0, block1); |
1167 | 1167 compare->SetSuccessorAt(1, block0); |
1168 HInstruction* OrIfCompareMap(HValue* left, Handle<Map> map) { | 1168 return compare; |
1169 Or(); | |
1170 return IfCompareMap(left, map); | |
1171 } | 1169 } |
1172 | 1170 |
1173 template<class Condition> | 1171 template<class Condition> |
1174 HInstruction* OrIf(HValue *p) { | 1172 HInstruction* OrIf(HValue *p) { |
1175 Or(); | 1173 Or(); |
1176 return If<Condition>(p); | 1174 return If<Condition>(p); |
1177 } | 1175 } |
1178 | 1176 |
1179 template<class Condition, class P2> | 1177 template<class Condition, class P2> |
1180 HInstruction* OrIf(HValue* p1, P2 p2) { | 1178 HInstruction* OrIf(HValue* p1, P2 p2) { |
1181 Or(); | 1179 Or(); |
1182 return If<Condition>(p1, p2); | 1180 return If<Condition>(p1, p2); |
1183 } | 1181 } |
1184 | 1182 |
1185 HInstruction* AndIfCompare( | 1183 template<class Condition, class P2, class P3> |
1186 HValue* p1, | 1184 HInstruction* OrIf(HValue* p1, P2 p2, P3 p3) { |
1187 HValue* p2, | 1185 Or(); |
1188 Token::Value token) { | 1186 return If<Condition>(p1, p2, p3); |
1189 And(); | |
1190 return IfCompare(p1, p2, token); | |
1191 } | |
1192 | |
1193 HInstruction* AndIfCompareMap(HValue* left, Handle<Map> map) { | |
1194 And(); | |
1195 return IfCompareMap(left, map); | |
1196 } | 1187 } |
1197 | 1188 |
1198 template<class Condition> | 1189 template<class Condition> |
1199 HInstruction* AndIf(HValue *p) { | 1190 HInstruction* AndIf(HValue *p) { |
1200 And(); | 1191 And(); |
1201 return If<Condition>(p); | 1192 return If<Condition>(p); |
1202 } | 1193 } |
1203 | 1194 |
1204 template<class Condition, class P2> | 1195 template<class Condition, class P2> |
1205 HInstruction* AndIf(HValue* p1, P2 p2) { | 1196 HInstruction* AndIf(HValue* p1, P2 p2) { |
1206 And(); | 1197 And(); |
1207 return If<Condition>(p1, p2); | 1198 return If<Condition>(p1, p2); |
1208 } | 1199 } |
1209 | 1200 |
| 1201 template<class Condition, class P2, class P3> |
| 1202 HInstruction* AndIf(HValue* p1, P2 p2, P3 p3) { |
| 1203 And(); |
| 1204 return If<Condition>(p1, p2, p3); |
| 1205 } |
| 1206 |
1210 void Or(); | 1207 void Or(); |
1211 void And(); | 1208 void And(); |
1212 | 1209 |
1213 void CaptureContinuation(HIfContinuation* continuation); | 1210 void CaptureContinuation(HIfContinuation* continuation); |
1214 | 1211 |
1215 void Then(); | 1212 void Then(); |
1216 void Else(); | 1213 void Else(); |
1217 void End(); | 1214 void End(); |
1218 | 1215 |
1219 void Deopt(); | 1216 void Deopt(); |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2089 EmbeddedVector<char, 64> filename_; | 2086 EmbeddedVector<char, 64> filename_; |
2090 HeapStringAllocator string_allocator_; | 2087 HeapStringAllocator string_allocator_; |
2091 StringStream trace_; | 2088 StringStream trace_; |
2092 int indent_; | 2089 int indent_; |
2093 }; | 2090 }; |
2094 | 2091 |
2095 | 2092 |
2096 } } // namespace v8::internal | 2093 } } // namespace v8::internal |
2097 | 2094 |
2098 #endif // V8_HYDROGEN_H_ | 2095 #endif // V8_HYDROGEN_H_ |
OLD | NEW |