OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/compiler/bytecode-graph-builder.h" | 5 #include "src/compiler/bytecode-graph-builder.h" |
6 | 6 |
7 #include "src/compiler/bytecode-branch-analysis.h" | 7 #include "src/compiler/bytecode-branch-analysis.h" |
8 #include "src/compiler/linkage.h" | 8 #include "src/compiler/linkage.h" |
9 #include "src/compiler/operator-properties.h" | 9 #include "src/compiler/operator-properties.h" |
10 #include "src/interpreter/bytecodes.h" | 10 #include "src/interpreter/bytecodes.h" |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1165 FrameStateBeforeAndAfter states(this); | 1165 FrameStateBeforeAndAfter states(this); |
1166 Node* left = | 1166 Node* left = |
1167 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); | 1167 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); |
1168 Node* right = environment()->LookupAccumulator(); | 1168 Node* right = environment()->LookupAccumulator(); |
1169 Node* node = NewNode(js_op, left, right); | 1169 Node* node = NewNode(js_op, left, right); |
1170 environment()->BindAccumulator(node, &states); | 1170 environment()->BindAccumulator(node, &states); |
1171 } | 1171 } |
1172 | 1172 |
1173 // Helper function to create binary operation hint from the recorded type | 1173 // Helper function to create binary operation hint from the recorded type |
1174 // feedback. | 1174 // feedback. |
1175 BinaryOperationHints BytecodeGraphBuilder::GetBinaryOperationHint() { | 1175 BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHint() { |
1176 FeedbackVectorSlot slot = | 1176 FeedbackVectorSlot slot = |
1177 feedback_vector()->ToSlot(bytecode_iterator().GetIndexOperand(1)); | 1177 feedback_vector()->ToSlot(bytecode_iterator().GetIndexOperand(1)); |
1178 DCHECK_EQ(FeedbackVectorSlotKind::GENERAL, feedback_vector()->GetKind(slot)); | 1178 DCHECK_EQ(FeedbackVectorSlotKind::GENERAL, feedback_vector()->GetKind(slot)); |
1179 Object* feedback = feedback_vector()->Get(slot); | 1179 Object* feedback = feedback_vector()->Get(slot); |
1180 BinaryOperationHints::Hint hint = BinaryOperationHints::Hint::kAny; | 1180 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1181 if (feedback->IsSmi()) { | 1181 if (feedback->IsSmi()) { |
1182 hint = BinaryOperationHintFromFeedback((Smi::cast(feedback))->value()); | 1182 hint = BinaryOperationHintFromFeedback((Smi::cast(feedback))->value()); |
1183 } | 1183 } |
1184 return BinaryOperationHints(hint, hint, hint); | 1184 return hint; |
1185 } | 1185 } |
1186 | 1186 |
1187 void BytecodeGraphBuilder::VisitAdd() { | 1187 void BytecodeGraphBuilder::VisitAdd() { |
1188 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1188 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1189 BuildBinaryOp(javascript()->Add(hints)); | 1189 BuildBinaryOp(javascript()->Add(hint)); |
1190 } | 1190 } |
1191 | 1191 |
1192 void BytecodeGraphBuilder::VisitSub() { | 1192 void BytecodeGraphBuilder::VisitSub() { |
1193 BuildBinaryOp(javascript()->Subtract(GetBinaryOperationHint())); | 1193 BuildBinaryOp(javascript()->Subtract(GetBinaryOperationHint())); |
1194 } | 1194 } |
1195 | 1195 |
1196 void BytecodeGraphBuilder::VisitMul() { | 1196 void BytecodeGraphBuilder::VisitMul() { |
1197 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1197 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1198 BuildBinaryOp(javascript()->Multiply(hints)); | 1198 BuildBinaryOp(javascript()->Multiply(hint)); |
1199 } | 1199 } |
1200 | 1200 |
1201 void BytecodeGraphBuilder::VisitDiv() { | 1201 void BytecodeGraphBuilder::VisitDiv() { |
1202 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1202 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1203 BuildBinaryOp(javascript()->Divide(hints)); | 1203 BuildBinaryOp(javascript()->Divide(hint)); |
1204 } | 1204 } |
1205 | 1205 |
1206 void BytecodeGraphBuilder::VisitMod() { | 1206 void BytecodeGraphBuilder::VisitMod() { |
1207 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1207 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1208 BuildBinaryOp(javascript()->Modulus(hints)); | 1208 BuildBinaryOp(javascript()->Modulus(hint)); |
1209 } | 1209 } |
1210 | 1210 |
1211 void BytecodeGraphBuilder::VisitBitwiseOr() { | 1211 void BytecodeGraphBuilder::VisitBitwiseOr() { |
1212 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1212 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1213 BuildBinaryOp(javascript()->BitwiseOr(hints)); | 1213 BuildBinaryOp(javascript()->BitwiseOr(hint)); |
1214 } | 1214 } |
1215 | 1215 |
1216 void BytecodeGraphBuilder::VisitBitwiseXor() { | 1216 void BytecodeGraphBuilder::VisitBitwiseXor() { |
1217 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1217 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1218 BuildBinaryOp(javascript()->BitwiseXor(hints)); | 1218 BuildBinaryOp(javascript()->BitwiseXor(hint)); |
1219 } | 1219 } |
1220 | 1220 |
1221 void BytecodeGraphBuilder::VisitBitwiseAnd() { | 1221 void BytecodeGraphBuilder::VisitBitwiseAnd() { |
1222 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1222 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1223 BuildBinaryOp(javascript()->BitwiseAnd(hints)); | 1223 BuildBinaryOp(javascript()->BitwiseAnd(hint)); |
1224 } | 1224 } |
1225 | 1225 |
1226 void BytecodeGraphBuilder::VisitShiftLeft() { | 1226 void BytecodeGraphBuilder::VisitShiftLeft() { |
1227 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1227 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1228 BuildBinaryOp(javascript()->ShiftLeft(hints)); | 1228 BuildBinaryOp(javascript()->ShiftLeft(hint)); |
1229 } | 1229 } |
1230 | 1230 |
1231 void BytecodeGraphBuilder::VisitShiftRight() { | 1231 void BytecodeGraphBuilder::VisitShiftRight() { |
1232 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1232 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1233 BuildBinaryOp(javascript()->ShiftRight(hints)); | 1233 BuildBinaryOp(javascript()->ShiftRight(hint)); |
1234 } | 1234 } |
1235 | 1235 |
1236 void BytecodeGraphBuilder::VisitShiftRightLogical() { | 1236 void BytecodeGraphBuilder::VisitShiftRightLogical() { |
1237 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1237 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1238 BuildBinaryOp(javascript()->ShiftRightLogical(hints)); | 1238 BuildBinaryOp(javascript()->ShiftRightLogical(hint)); |
1239 } | 1239 } |
1240 | 1240 |
1241 void BytecodeGraphBuilder::BuildBinaryOpWithImmediate(const Operator* js_op) { | 1241 void BytecodeGraphBuilder::BuildBinaryOpWithImmediate(const Operator* js_op) { |
1242 FrameStateBeforeAndAfter states(this); | 1242 FrameStateBeforeAndAfter states(this); |
1243 Node* left = | 1243 Node* left = |
1244 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(1)); | 1244 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(1)); |
1245 Node* right = jsgraph()->Constant(bytecode_iterator().GetImmediateOperand(0)); | 1245 Node* right = jsgraph()->Constant(bytecode_iterator().GetImmediateOperand(0)); |
1246 Node* node = NewNode(js_op, left, right); | 1246 Node* node = NewNode(js_op, left, right); |
1247 environment()->BindAccumulator(node, &states); | 1247 environment()->BindAccumulator(node, &states); |
1248 } | 1248 } |
1249 | 1249 |
1250 void BytecodeGraphBuilder::VisitAddSmi() { | 1250 void BytecodeGraphBuilder::VisitAddSmi() { |
1251 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1251 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1252 BuildBinaryOpWithImmediate(javascript()->Add(hints)); | 1252 BuildBinaryOpWithImmediate(javascript()->Add(hint)); |
1253 } | 1253 } |
1254 | 1254 |
1255 void BytecodeGraphBuilder::VisitSubSmi() { | 1255 void BytecodeGraphBuilder::VisitSubSmi() { |
1256 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1256 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1257 BuildBinaryOpWithImmediate(javascript()->Subtract(hints)); | 1257 BuildBinaryOpWithImmediate(javascript()->Subtract(hint)); |
1258 } | 1258 } |
1259 | 1259 |
1260 void BytecodeGraphBuilder::VisitBitwiseOrSmi() { | 1260 void BytecodeGraphBuilder::VisitBitwiseOrSmi() { |
1261 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1261 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1262 BuildBinaryOpWithImmediate(javascript()->BitwiseOr(hints)); | 1262 BuildBinaryOpWithImmediate(javascript()->BitwiseOr(hint)); |
1263 } | 1263 } |
1264 | 1264 |
1265 void BytecodeGraphBuilder::VisitBitwiseAndSmi() { | 1265 void BytecodeGraphBuilder::VisitBitwiseAndSmi() { |
1266 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1266 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1267 BuildBinaryOpWithImmediate(javascript()->BitwiseAnd(hints)); | 1267 BuildBinaryOpWithImmediate(javascript()->BitwiseAnd(hint)); |
1268 } | 1268 } |
1269 | 1269 |
1270 void BytecodeGraphBuilder::VisitShiftLeftSmi() { | 1270 void BytecodeGraphBuilder::VisitShiftLeftSmi() { |
1271 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1271 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1272 BuildBinaryOpWithImmediate(javascript()->ShiftLeft(hints)); | 1272 BuildBinaryOpWithImmediate(javascript()->ShiftLeft(hint)); |
1273 } | 1273 } |
1274 | 1274 |
1275 void BytecodeGraphBuilder::VisitShiftRightSmi() { | 1275 void BytecodeGraphBuilder::VisitShiftRightSmi() { |
1276 BinaryOperationHints hints = BinaryOperationHints::Any(); | 1276 BinaryOperationHint hint = BinaryOperationHint::kAny; |
1277 BuildBinaryOpWithImmediate(javascript()->ShiftRight(hints)); | 1277 BuildBinaryOpWithImmediate(javascript()->ShiftRight(hint)); |
1278 } | 1278 } |
1279 | 1279 |
1280 void BytecodeGraphBuilder::VisitInc() { | 1280 void BytecodeGraphBuilder::VisitInc() { |
1281 FrameStateBeforeAndAfter states(this); | 1281 FrameStateBeforeAndAfter states(this); |
1282 // Note: Use subtract -1 here instead of add 1 to ensure we always convert to | 1282 // Note: Use subtract -1 here instead of add 1 to ensure we always convert to |
1283 // a number, not a string. | 1283 // a number, not a string. |
1284 const Operator* js_op = javascript()->Subtract(BinaryOperationHints::Any()); | 1284 const Operator* js_op = javascript()->Subtract(BinaryOperationHint::kAny); |
1285 Node* node = NewNode(js_op, environment()->LookupAccumulator(), | 1285 Node* node = NewNode(js_op, environment()->LookupAccumulator(), |
1286 jsgraph()->Constant(-1.0)); | 1286 jsgraph()->Constant(-1.0)); |
1287 environment()->BindAccumulator(node, &states); | 1287 environment()->BindAccumulator(node, &states); |
1288 } | 1288 } |
1289 | 1289 |
1290 void BytecodeGraphBuilder::VisitDec() { | 1290 void BytecodeGraphBuilder::VisitDec() { |
1291 FrameStateBeforeAndAfter states(this); | 1291 FrameStateBeforeAndAfter states(this); |
1292 const Operator* js_op = javascript()->Subtract(BinaryOperationHints::Any()); | 1292 const Operator* js_op = javascript()->Subtract(BinaryOperationHint::kAny); |
1293 Node* node = NewNode(js_op, environment()->LookupAccumulator(), | 1293 Node* node = NewNode(js_op, environment()->LookupAccumulator(), |
1294 jsgraph()->OneConstant()); | 1294 jsgraph()->OneConstant()); |
1295 environment()->BindAccumulator(node, &states); | 1295 environment()->BindAccumulator(node, &states); |
1296 } | 1296 } |
1297 | 1297 |
1298 void BytecodeGraphBuilder::VisitLogicalNot() { | 1298 void BytecodeGraphBuilder::VisitLogicalNot() { |
1299 Node* value = environment()->LookupAccumulator(); | 1299 Node* value = environment()->LookupAccumulator(); |
1300 Node* node = NewNode(common()->Select(MachineRepresentation::kTagged), value, | 1300 Node* node = NewNode(common()->Select(MachineRepresentation::kTagged), value, |
1301 jsgraph()->FalseConstant(), jsgraph()->TrueConstant()); | 1301 jsgraph()->FalseConstant(), jsgraph()->TrueConstant()); |
1302 environment()->BindAccumulator(node); | 1302 environment()->BindAccumulator(node); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1337 void BytecodeGraphBuilder::BuildCompareOp(const Operator* js_op) { | 1337 void BytecodeGraphBuilder::BuildCompareOp(const Operator* js_op) { |
1338 FrameStateBeforeAndAfter states(this); | 1338 FrameStateBeforeAndAfter states(this); |
1339 Node* left = | 1339 Node* left = |
1340 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); | 1340 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); |
1341 Node* right = environment()->LookupAccumulator(); | 1341 Node* right = environment()->LookupAccumulator(); |
1342 Node* node = NewNode(js_op, left, right); | 1342 Node* node = NewNode(js_op, left, right); |
1343 environment()->BindAccumulator(node, &states); | 1343 environment()->BindAccumulator(node, &states); |
1344 } | 1344 } |
1345 | 1345 |
1346 void BytecodeGraphBuilder::VisitTestEqual() { | 1346 void BytecodeGraphBuilder::VisitTestEqual() { |
1347 CompareOperationHints hints = CompareOperationHints::Any(); | 1347 CompareOperationHint hint = CompareOperationHint::kAny; |
1348 BuildCompareOp(javascript()->Equal(hints)); | 1348 BuildCompareOp(javascript()->Equal(hint)); |
1349 } | 1349 } |
1350 | 1350 |
1351 void BytecodeGraphBuilder::VisitTestNotEqual() { | 1351 void BytecodeGraphBuilder::VisitTestNotEqual() { |
1352 CompareOperationHints hints = CompareOperationHints::Any(); | 1352 CompareOperationHint hint = CompareOperationHint::kAny; |
1353 BuildCompareOp(javascript()->NotEqual(hints)); | 1353 BuildCompareOp(javascript()->NotEqual(hint)); |
1354 } | 1354 } |
1355 | 1355 |
1356 void BytecodeGraphBuilder::VisitTestEqualStrict() { | 1356 void BytecodeGraphBuilder::VisitTestEqualStrict() { |
1357 CompareOperationHints hints = CompareOperationHints::Any(); | 1357 CompareOperationHint hint = CompareOperationHint::kAny; |
1358 BuildCompareOp(javascript()->StrictEqual(hints)); | 1358 BuildCompareOp(javascript()->StrictEqual(hint)); |
1359 } | 1359 } |
1360 | 1360 |
1361 void BytecodeGraphBuilder::VisitTestLessThan() { | 1361 void BytecodeGraphBuilder::VisitTestLessThan() { |
1362 CompareOperationHints hints = CompareOperationHints::Any(); | 1362 CompareOperationHint hint = CompareOperationHint::kAny; |
1363 BuildCompareOp(javascript()->LessThan(hints)); | 1363 BuildCompareOp(javascript()->LessThan(hint)); |
1364 } | 1364 } |
1365 | 1365 |
1366 void BytecodeGraphBuilder::VisitTestGreaterThan() { | 1366 void BytecodeGraphBuilder::VisitTestGreaterThan() { |
1367 CompareOperationHints hints = CompareOperationHints::Any(); | 1367 CompareOperationHint hint = CompareOperationHint::kAny; |
1368 BuildCompareOp(javascript()->GreaterThan(hints)); | 1368 BuildCompareOp(javascript()->GreaterThan(hint)); |
1369 } | 1369 } |
1370 | 1370 |
1371 void BytecodeGraphBuilder::VisitTestLessThanOrEqual() { | 1371 void BytecodeGraphBuilder::VisitTestLessThanOrEqual() { |
1372 CompareOperationHints hints = CompareOperationHints::Any(); | 1372 CompareOperationHint hint = CompareOperationHint::kAny; |
1373 BuildCompareOp(javascript()->LessThanOrEqual(hints)); | 1373 BuildCompareOp(javascript()->LessThanOrEqual(hint)); |
1374 } | 1374 } |
1375 | 1375 |
1376 void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() { | 1376 void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() { |
1377 CompareOperationHints hints = CompareOperationHints::Any(); | 1377 CompareOperationHint hint = CompareOperationHint::kAny; |
1378 BuildCompareOp(javascript()->GreaterThanOrEqual(hints)); | 1378 BuildCompareOp(javascript()->GreaterThanOrEqual(hint)); |
1379 } | 1379 } |
1380 | 1380 |
1381 void BytecodeGraphBuilder::VisitTestIn() { | 1381 void BytecodeGraphBuilder::VisitTestIn() { |
1382 BuildCompareOp(javascript()->HasProperty()); | 1382 BuildCompareOp(javascript()->HasProperty()); |
1383 } | 1383 } |
1384 | 1384 |
1385 void BytecodeGraphBuilder::VisitTestInstanceOf() { | 1385 void BytecodeGraphBuilder::VisitTestInstanceOf() { |
1386 BuildCompareOp(javascript()->InstanceOf()); | 1386 BuildCompareOp(javascript()->InstanceOf()); |
1387 } | 1387 } |
1388 | 1388 |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1679 NewIfTrue(); | 1679 NewIfTrue(); |
1680 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset()); | 1680 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset()); |
1681 set_environment(if_false_environment); | 1681 set_environment(if_false_environment); |
1682 NewIfFalse(); | 1682 NewIfFalse(); |
1683 } | 1683 } |
1684 | 1684 |
1685 | 1685 |
1686 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) { | 1686 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) { |
1687 Node* accumulator = environment()->LookupAccumulator(); | 1687 Node* accumulator = environment()->LookupAccumulator(); |
1688 Node* condition = | 1688 Node* condition = |
1689 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()), | 1689 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), |
1690 accumulator, comperand); | 1690 accumulator, comperand); |
1691 BuildConditionalJump(condition); | 1691 BuildConditionalJump(condition); |
1692 } | 1692 } |
1693 | 1693 |
1694 | 1694 |
1695 void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) { | 1695 void BytecodeGraphBuilder::BuildJumpIfToBooleanEqual(Node* comperand) { |
1696 Node* accumulator = environment()->LookupAccumulator(); | 1696 Node* accumulator = environment()->LookupAccumulator(); |
1697 Node* to_boolean = | 1697 Node* to_boolean = |
1698 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); | 1698 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); |
1699 Node* condition = | 1699 Node* condition = |
1700 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()), | 1700 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), to_boolean, |
1701 to_boolean, comperand); | 1701 comperand); |
1702 BuildConditionalJump(condition); | 1702 BuildConditionalJump(condition); |
1703 } | 1703 } |
1704 | 1704 |
1705 void BytecodeGraphBuilder::BuildJumpIfNotHole() { | 1705 void BytecodeGraphBuilder::BuildJumpIfNotHole() { |
1706 Node* accumulator = environment()->LookupAccumulator(); | 1706 Node* accumulator = environment()->LookupAccumulator(); |
1707 Node* condition = | 1707 Node* condition = |
1708 NewNode(javascript()->StrictEqual(CompareOperationHints::Any()), | 1708 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), |
1709 accumulator, jsgraph()->TheHoleConstant()); | 1709 accumulator, jsgraph()->TheHoleConstant()); |
1710 Node* node = | 1710 Node* node = |
1711 NewNode(common()->Select(MachineRepresentation::kTagged), condition, | 1711 NewNode(common()->Select(MachineRepresentation::kTagged), condition, |
1712 jsgraph()->FalseConstant(), jsgraph()->TrueConstant()); | 1712 jsgraph()->FalseConstant(), jsgraph()->TrueConstant()); |
1713 BuildConditionalJump(node); | 1713 BuildConditionalJump(node); |
1714 } | 1714 } |
1715 | 1715 |
1716 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) { | 1716 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) { |
1717 if (size > input_buffer_size_) { | 1717 if (size > input_buffer_size_) { |
1718 size = size + kInputBufferSizeIncrement + input_buffer_size_; | 1718 size = size + kInputBufferSizeIncrement + input_buffer_size_; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1895 // Phi does not exist yet, introduce one. | 1895 // Phi does not exist yet, introduce one. |
1896 value = NewPhi(inputs, value, control); | 1896 value = NewPhi(inputs, value, control); |
1897 value->ReplaceInput(inputs - 1, other); | 1897 value->ReplaceInput(inputs - 1, other); |
1898 } | 1898 } |
1899 return value; | 1899 return value; |
1900 } | 1900 } |
1901 | 1901 |
1902 } // namespace compiler | 1902 } // namespace compiler |
1903 } // namespace internal | 1903 } // namespace internal |
1904 } // namespace v8 | 1904 } // namespace v8 |
OLD | NEW |