OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/simplified-lowering.h" | 5 #include "src/compiler/simplified-lowering.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "src/address-map.h" | 9 #include "src/address-map.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1346 return VisitUnop(node, UseInfo::None(), MachineRepresentation::kTagged); | 1346 return VisitUnop(node, UseInfo::None(), MachineRepresentation::kTagged); |
1347 case IrOpcode::kInt32Constant: | 1347 case IrOpcode::kInt32Constant: |
1348 return VisitLeaf(node, MachineRepresentation::kWord32); | 1348 return VisitLeaf(node, MachineRepresentation::kWord32); |
1349 case IrOpcode::kInt64Constant: | 1349 case IrOpcode::kInt64Constant: |
1350 return VisitLeaf(node, MachineRepresentation::kWord64); | 1350 return VisitLeaf(node, MachineRepresentation::kWord64); |
1351 case IrOpcode::kExternalConstant: | 1351 case IrOpcode::kExternalConstant: |
1352 return VisitLeaf(node, MachineType::PointerRepresentation()); | 1352 return VisitLeaf(node, MachineType::PointerRepresentation()); |
1353 case IrOpcode::kNumberConstant: | 1353 case IrOpcode::kNumberConstant: |
1354 return VisitLeaf(node, MachineRepresentation::kTagged); | 1354 return VisitLeaf(node, MachineRepresentation::kTagged); |
1355 case IrOpcode::kHeapConstant: | 1355 case IrOpcode::kHeapConstant: |
1356 return VisitLeaf(node, MachineRepresentation::kTagged); | 1356 return VisitLeaf(node, MachineRepresentation::kTaggedPointer); |
1357 | 1357 |
1358 case IrOpcode::kBranch: | 1358 case IrOpcode::kBranch: |
1359 ProcessInput(node, 0, UseInfo::Bool()); | 1359 ProcessInput(node, 0, UseInfo::Bool()); |
1360 EnqueueInput(node, NodeProperties::FirstControlIndex(node)); | 1360 EnqueueInput(node, NodeProperties::FirstControlIndex(node)); |
1361 return; | 1361 return; |
1362 case IrOpcode::kSwitch: | 1362 case IrOpcode::kSwitch: |
1363 ProcessInput(node, 0, UseInfo::TruncatingWord32()); | 1363 ProcessInput(node, 0, UseInfo::TruncatingWord32()); |
1364 EnqueueInput(node, NodeProperties::FirstControlIndex(node)); | 1364 EnqueueInput(node, NodeProperties::FirstControlIndex(node)); |
1365 return; | 1365 return; |
1366 case IrOpcode::kSelect: | 1366 case IrOpcode::kSelect: |
1367 return VisitSelect(node, truncation, lowering); | 1367 return VisitSelect(node, truncation, lowering); |
1368 case IrOpcode::kPhi: | 1368 case IrOpcode::kPhi: |
1369 return VisitPhi(node, truncation, lowering); | 1369 return VisitPhi(node, truncation, lowering); |
1370 case IrOpcode::kCall: | 1370 case IrOpcode::kCall: |
1371 return VisitCall(node, lowering); | 1371 return VisitCall(node, lowering); |
1372 | 1372 |
1373 //------------------------------------------------------------------ | 1373 //------------------------------------------------------------------ |
1374 // JavaScript operators. | 1374 // JavaScript operators. |
1375 //------------------------------------------------------------------ | 1375 //------------------------------------------------------------------ |
1376 case IrOpcode::kJSToBoolean: { | 1376 case IrOpcode::kJSToBoolean: { |
1377 if (truncation.IsUsedAsBool()) { | 1377 if (truncation.IsUsedAsBool()) { |
1378 ProcessInput(node, 0, UseInfo::Bool()); | 1378 ProcessInput(node, 0, UseInfo::Bool()); |
1379 ProcessInput(node, 1, UseInfo::None()); | 1379 ProcessInput(node, 1, UseInfo::None()); |
1380 SetOutput(node, MachineRepresentation::kBit); | 1380 SetOutput(node, MachineRepresentation::kBit); |
1381 if (lower()) DeferReplacement(node, node->InputAt(0)); | 1381 if (lower()) DeferReplacement(node, node->InputAt(0)); |
1382 } else { | 1382 } else { |
1383 VisitInputs(node); | 1383 VisitInputs(node); |
1384 SetOutput(node, MachineRepresentation::kTagged); | 1384 SetOutput(node, MachineRepresentation::kTaggedPointer); |
1385 } | 1385 } |
1386 return; | 1386 return; |
1387 } | 1387 } |
1388 case IrOpcode::kJSToNumber: { | 1388 case IrOpcode::kJSToNumber: { |
1389 VisitInputs(node); | 1389 VisitInputs(node); |
1390 // TODO(bmeurer): Optimize somewhat based on input type? | 1390 // TODO(bmeurer): Optimize somewhat based on input type? |
1391 if (truncation.IsUsedAsWord32()) { | 1391 if (truncation.IsUsedAsWord32()) { |
1392 SetOutput(node, MachineRepresentation::kWord32); | 1392 SetOutput(node, MachineRepresentation::kWord32); |
1393 if (lower()) lowering->DoJSToNumberTruncatesToWord32(node, this); | 1393 if (lower()) lowering->DoJSToNumberTruncatesToWord32(node, this); |
1394 } else if (truncation.IsUsedAsFloat64()) { | 1394 } else if (truncation.IsUsedAsFloat64()) { |
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2085 VisitBinop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); | 2085 VisitBinop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); |
2086 if (lower()) { | 2086 if (lower()) { |
2087 NodeProperties::ChangeOp(node, lowering->machine()->WordEqual()); | 2087 NodeProperties::ChangeOp(node, lowering->machine()->WordEqual()); |
2088 } | 2088 } |
2089 return; | 2089 return; |
2090 } | 2090 } |
2091 case IrOpcode::kStringEqual: | 2091 case IrOpcode::kStringEqual: |
2092 case IrOpcode::kStringLessThan: | 2092 case IrOpcode::kStringLessThan: |
2093 case IrOpcode::kStringLessThanOrEqual: { | 2093 case IrOpcode::kStringLessThanOrEqual: { |
2094 return VisitBinop(node, UseInfo::AnyTagged(), | 2094 return VisitBinop(node, UseInfo::AnyTagged(), |
2095 MachineRepresentation::kTagged); | 2095 MachineRepresentation::kTaggedPointer); |
2096 } | 2096 } |
2097 case IrOpcode::kStringCharCodeAt: { | 2097 case IrOpcode::kStringCharCodeAt: { |
2098 VisitBinop(node, UseInfo::AnyTagged(), UseInfo::TruncatingWord32(), | 2098 VisitBinop(node, UseInfo::AnyTagged(), UseInfo::TruncatingWord32(), |
2099 MachineRepresentation::kWord32); | 2099 MachineRepresentation::kWord32); |
2100 return; | 2100 return; |
2101 } | 2101 } |
2102 case IrOpcode::kStringFromCharCode: { | 2102 case IrOpcode::kStringFromCharCode: { |
2103 VisitUnop(node, UseInfo::TruncatingWord32(), | 2103 VisitUnop(node, UseInfo::TruncatingWord32(), |
2104 MachineRepresentation::kTagged); | 2104 MachineRepresentation::kTaggedPointer); |
2105 return; | 2105 return; |
2106 } | 2106 } |
2107 case IrOpcode::kStringFromCodePoint: { | 2107 case IrOpcode::kStringFromCodePoint: { |
2108 VisitUnop(node, UseInfo::TruncatingWord32(), | 2108 VisitUnop(node, UseInfo::TruncatingWord32(), |
2109 MachineRepresentation::kTagged); | 2109 MachineRepresentation::kTaggedPointer); |
2110 return; | 2110 return; |
2111 } | 2111 } |
2112 | 2112 |
2113 case IrOpcode::kCheckBounds: { | 2113 case IrOpcode::kCheckBounds: { |
2114 Type* index_type = TypeOf(node->InputAt(0)); | 2114 Type* index_type = TypeOf(node->InputAt(0)); |
2115 Type* length_type = TypeOf(node->InputAt(1)); | 2115 Type* length_type = TypeOf(node->InputAt(1)); |
2116 if (index_type->Is(Type::Unsigned32())) { | 2116 if (index_type->Is(Type::Unsigned32())) { |
2117 VisitBinop(node, UseInfo::TruncatingWord32(), | 2117 VisitBinop(node, UseInfo::TruncatingWord32(), |
2118 MachineRepresentation::kWord32); | 2118 MachineRepresentation::kWord32); |
2119 if (lower() && index_type->Max() < length_type->Min()) { | 2119 if (lower() && index_type->Max() < length_type->Min()) { |
2120 // The bounds check is redundant if we already know that | 2120 // The bounds check is redundant if we already know that |
2121 // the index is within the bounds of [0.0, length[. | 2121 // the index is within the bounds of [0.0, length[. |
2122 DeferReplacement(node, node->InputAt(0)); | 2122 DeferReplacement(node, node->InputAt(0)); |
2123 } | 2123 } |
2124 } else { | 2124 } else { |
2125 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(), | 2125 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(), |
2126 UseInfo::TruncatingWord32(), | 2126 UseInfo::TruncatingWord32(), |
2127 MachineRepresentation::kWord32); | 2127 MachineRepresentation::kWord32); |
2128 } | 2128 } |
2129 return; | 2129 return; |
2130 } | 2130 } |
2131 case IrOpcode::kCheckHeapObject: { | 2131 case IrOpcode::kCheckHeapObject: { |
2132 if (InputCannotBe(node, Type::SignedSmall())) { | 2132 if (InputCannotBe(node, Type::SignedSmall())) { |
2133 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2133 VisitUnop(node, UseInfo::AnyTagged(), |
2134 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2134 MachineRepresentation::kTaggedPointer); |
2135 } else { | 2135 } else { |
2136 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2136 VisitUnop(node, UseInfo::CheckedHeapObjectAsTaggedPointer(), |
| 2137 MachineRepresentation::kTaggedPointer); |
2137 } | 2138 } |
| 2139 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2138 return; | 2140 return; |
2139 } | 2141 } |
2140 case IrOpcode::kCheckIf: { | 2142 case IrOpcode::kCheckIf: { |
2141 ProcessInput(node, 0, UseInfo::Bool()); | 2143 ProcessInput(node, 0, UseInfo::Bool()); |
2142 ProcessRemainingInputs(node, 1); | 2144 ProcessRemainingInputs(node, 1); |
2143 SetOutput(node, MachineRepresentation::kNone); | 2145 SetOutput(node, MachineRepresentation::kNone); |
2144 return; | 2146 return; |
2145 } | 2147 } |
2146 case IrOpcode::kCheckNumber: { | 2148 case IrOpcode::kCheckNumber: { |
2147 if (InputIs(node, Type::Number())) { | 2149 if (InputIs(node, Type::Number())) { |
(...skipping 20 matching lines...) Expand all Loading... |
2168 MachineRepresentation::kWord32); | 2170 MachineRepresentation::kWord32); |
2169 } else { | 2171 } else { |
2170 VisitUnop(node, UseInfo::CheckedSignedSmallAsTaggedSigned(), | 2172 VisitUnop(node, UseInfo::CheckedSignedSmallAsTaggedSigned(), |
2171 MachineRepresentation::kTaggedSigned); | 2173 MachineRepresentation::kTaggedSigned); |
2172 } | 2174 } |
2173 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2175 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2174 return; | 2176 return; |
2175 } | 2177 } |
2176 case IrOpcode::kCheckString: { | 2178 case IrOpcode::kCheckString: { |
2177 if (InputIs(node, Type::String())) { | 2179 if (InputIs(node, Type::String())) { |
2178 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2180 VisitUnop(node, UseInfo::AnyTagged(), |
| 2181 MachineRepresentation::kTaggedPointer); |
2179 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2182 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2180 } else { | 2183 } else { |
2181 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2184 VisitUnop(node, UseInfo::AnyTagged(), |
| 2185 MachineRepresentation::kTaggedPointer); |
2182 } | 2186 } |
2183 return; | 2187 return; |
2184 } | 2188 } |
2185 | 2189 |
2186 case IrOpcode::kAllocate: { | 2190 case IrOpcode::kAllocate: { |
2187 ProcessInput(node, 0, UseInfo::TruncatingWord32()); | 2191 ProcessInput(node, 0, UseInfo::TruncatingWord32()); |
2188 ProcessRemainingInputs(node, 1); | 2192 ProcessRemainingInputs(node, 1); |
2189 SetOutput(node, MachineRepresentation::kTagged); | 2193 SetOutput(node, MachineRepresentation::kTaggedPointer); |
2190 return; | 2194 return; |
2191 } | 2195 } |
2192 case IrOpcode::kLoadField: { | 2196 case IrOpcode::kLoadField: { |
2193 if (truncation.IsUnused()) return VisitUnused(node); | 2197 if (truncation.IsUnused()) return VisitUnused(node); |
2194 FieldAccess access = FieldAccessOf(node->op()); | 2198 FieldAccess access = FieldAccessOf(node->op()); |
2195 MachineRepresentation const representation = | 2199 MachineRepresentation const representation = |
2196 access.machine_type.representation(); | 2200 access.machine_type.representation(); |
2197 VisitUnop(node, UseInfoForBasePointer(access), representation); | 2201 VisitUnop(node, UseInfoForBasePointer(access), representation); |
2198 return; | 2202 return; |
2199 } | 2203 } |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2393 ProcessInput(node, 0, UseInfo::TruncatingFloat64()); | 2397 ProcessInput(node, 0, UseInfo::TruncatingFloat64()); |
2394 ProcessRemainingInputs(node, 1); | 2398 ProcessRemainingInputs(node, 1); |
2395 SetOutput(node, MachineRepresentation::kFloat64); | 2399 SetOutput(node, MachineRepresentation::kFloat64); |
2396 if (truncation.IsUsedAsFloat64() && | 2400 if (truncation.IsUsedAsFloat64() && |
2397 mode == CheckFloat64HoleMode::kAllowReturnHole) { | 2401 mode == CheckFloat64HoleMode::kAllowReturnHole) { |
2398 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2402 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2399 } | 2403 } |
2400 return; | 2404 return; |
2401 } | 2405 } |
2402 case IrOpcode::kCheckTaggedHole: { | 2406 case IrOpcode::kCheckTaggedHole: { |
2403 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); | 2407 VisitUnop(node, UseInfo::AnyTagged(), |
| 2408 MachineRepresentation::kTaggedPointer); |
2404 return; | 2409 return; |
2405 } | 2410 } |
2406 case IrOpcode::kConvertTaggedHoleToUndefined: { | 2411 case IrOpcode::kConvertTaggedHoleToUndefined: { |
2407 if (InputIs(node, Type::NumberOrOddball()) && | 2412 if (InputIs(node, Type::NumberOrOddball()) && |
2408 truncation.IsUsedAsWord32()) { | 2413 truncation.IsUsedAsWord32()) { |
2409 // Propagate the Word32 truncation. | 2414 // Propagate the Word32 truncation. |
2410 VisitUnop(node, UseInfo::TruncatingWord32(), | 2415 VisitUnop(node, UseInfo::TruncatingWord32(), |
2411 MachineRepresentation::kWord32); | 2416 MachineRepresentation::kWord32); |
2412 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2417 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2413 } else if (InputIs(node, Type::NumberOrOddball()) && | 2418 } else if (InputIs(node, Type::NumberOrOddball()) && |
(...skipping 12 matching lines...) Expand all Loading... |
2426 } | 2431 } |
2427 return; | 2432 return; |
2428 } | 2433 } |
2429 case IrOpcode::kCheckMaps: | 2434 case IrOpcode::kCheckMaps: |
2430 case IrOpcode::kTransitionElementsKind: { | 2435 case IrOpcode::kTransitionElementsKind: { |
2431 VisitInputs(node); | 2436 VisitInputs(node); |
2432 return SetOutput(node, MachineRepresentation::kNone); | 2437 return SetOutput(node, MachineRepresentation::kNone); |
2433 } | 2438 } |
2434 case IrOpcode::kEnsureWritableFastElements: | 2439 case IrOpcode::kEnsureWritableFastElements: |
2435 return VisitBinop(node, UseInfo::AnyTagged(), | 2440 return VisitBinop(node, UseInfo::AnyTagged(), |
2436 MachineRepresentation::kTagged); | 2441 MachineRepresentation::kTaggedPointer); |
2437 case IrOpcode::kMaybeGrowFastElements: { | 2442 case IrOpcode::kMaybeGrowFastElements: { |
2438 ProcessInput(node, 0, UseInfo::AnyTagged()); // object | 2443 ProcessInput(node, 0, UseInfo::AnyTagged()); // object |
2439 ProcessInput(node, 1, UseInfo::AnyTagged()); // elements | 2444 ProcessInput(node, 1, UseInfo::AnyTagged()); // elements |
2440 ProcessInput(node, 2, UseInfo::TruncatingWord32()); // index | 2445 ProcessInput(node, 2, UseInfo::TruncatingWord32()); // index |
2441 ProcessInput(node, 3, UseInfo::TruncatingWord32()); // length | 2446 ProcessInput(node, 3, UseInfo::TruncatingWord32()); // length |
2442 ProcessRemainingInputs(node, 4); | 2447 ProcessRemainingInputs(node, 4); |
2443 SetOutput(node, MachineRepresentation::kTagged); | 2448 SetOutput(node, MachineRepresentation::kTaggedPointer); |
2444 return; | 2449 return; |
2445 } | 2450 } |
2446 | 2451 |
2447 case IrOpcode::kNumberSilenceNaN: | 2452 case IrOpcode::kNumberSilenceNaN: |
2448 VisitUnop(node, UseInfo::TruncatingFloat64(), | 2453 VisitUnop(node, UseInfo::TruncatingFloat64(), |
2449 MachineRepresentation::kFloat64); | 2454 MachineRepresentation::kFloat64); |
2450 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); | 2455 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); |
2451 return; | 2456 return; |
2452 case IrOpcode::kStateValues: | 2457 case IrOpcode::kStateValues: |
2453 return VisitStateValues(node); | 2458 return VisitStateValues(node); |
2454 case IrOpcode::kTypeGuard: { | 2459 case IrOpcode::kTypeGuard: { |
2455 // We just get rid of the sigma here. In principle, it should be | 2460 // We just get rid of the sigma here. In principle, it should be |
2456 // possible to refine the truncation and representation based on | 2461 // possible to refine the truncation and representation based on |
2457 // the sigma's type. | 2462 // the sigma's type. |
2458 MachineRepresentation output = | 2463 MachineRepresentation output = |
2459 GetOutputInfoForPhi(node, TypeOf(node->InputAt(0)), truncation); | 2464 GetOutputInfoForPhi(node, TypeOf(node->InputAt(0)), truncation); |
2460 VisitUnop(node, UseInfo(output, truncation), output); | 2465 VisitUnop(node, UseInfo(output, truncation), output); |
2461 if (lower()) DeferReplacement(node, node->InputAt(0)); | 2466 if (lower()) DeferReplacement(node, node->InputAt(0)); |
2462 return; | 2467 return; |
2463 } | 2468 } |
2464 | 2469 |
2465 case IrOpcode::kOsrGuard: | 2470 case IrOpcode::kOsrGuard: |
2466 return VisitOsrGuard(node); | 2471 return VisitOsrGuard(node); |
2467 | 2472 |
| 2473 case IrOpcode::kFinishRegion: |
| 2474 VisitInputs(node); |
| 2475 // Assume the output is tagged pointer. |
| 2476 return SetOutput(node, MachineRepresentation::kTaggedPointer); |
| 2477 |
2468 case IrOpcode::kReturn: | 2478 case IrOpcode::kReturn: |
2469 VisitReturn(node); | 2479 VisitReturn(node); |
2470 // Assume the output is tagged. | 2480 // Assume the output is tagged. |
2471 return SetOutput(node, MachineRepresentation::kTagged); | 2481 return SetOutput(node, MachineRepresentation::kTagged); |
2472 | 2482 |
2473 // Operators with all inputs tagged and no or tagged output have uniform | 2483 // Operators with all inputs tagged and no or tagged output have uniform |
2474 // handling. | 2484 // handling. |
2475 case IrOpcode::kEnd: | 2485 case IrOpcode::kEnd: |
2476 case IrOpcode::kIfSuccess: | 2486 case IrOpcode::kIfSuccess: |
2477 case IrOpcode::kIfException: | 2487 case IrOpcode::kIfException: |
2478 case IrOpcode::kIfTrue: | 2488 case IrOpcode::kIfTrue: |
2479 case IrOpcode::kIfFalse: | 2489 case IrOpcode::kIfFalse: |
2480 case IrOpcode::kDeoptimize: | 2490 case IrOpcode::kDeoptimize: |
2481 case IrOpcode::kEffectPhi: | 2491 case IrOpcode::kEffectPhi: |
2482 case IrOpcode::kTerminate: | 2492 case IrOpcode::kTerminate: |
2483 case IrOpcode::kFrameState: | 2493 case IrOpcode::kFrameState: |
2484 case IrOpcode::kCheckpoint: | 2494 case IrOpcode::kCheckpoint: |
2485 case IrOpcode::kLoop: | 2495 case IrOpcode::kLoop: |
2486 case IrOpcode::kMerge: | 2496 case IrOpcode::kMerge: |
2487 case IrOpcode::kThrow: | 2497 case IrOpcode::kThrow: |
2488 case IrOpcode::kBeginRegion: | 2498 case IrOpcode::kBeginRegion: |
2489 case IrOpcode::kFinishRegion: | |
2490 case IrOpcode::kProjection: | 2499 case IrOpcode::kProjection: |
2491 case IrOpcode::kObjectState: | 2500 case IrOpcode::kObjectState: |
2492 case IrOpcode::kOsrValue: | 2501 case IrOpcode::kOsrValue: |
2493 // All JavaScript operators except JSToNumber have uniform handling. | 2502 // All JavaScript operators except JSToNumber have uniform handling. |
2494 #define OPCODE_CASE(name) case IrOpcode::k##name: | 2503 #define OPCODE_CASE(name) case IrOpcode::k##name: |
2495 JS_SIMPLE_BINOP_LIST(OPCODE_CASE) | 2504 JS_SIMPLE_BINOP_LIST(OPCODE_CASE) |
2496 JS_OTHER_UNOP_LIST(OPCODE_CASE) | 2505 JS_OTHER_UNOP_LIST(OPCODE_CASE) |
2497 JS_OBJECT_OP_LIST(OPCODE_CASE) | 2506 JS_OBJECT_OP_LIST(OPCODE_CASE) |
2498 JS_CONTEXT_OP_LIST(OPCODE_CASE) | 2507 JS_CONTEXT_OP_LIST(OPCODE_CASE) |
2499 JS_OTHER_OP_LIST(OPCODE_CASE) | 2508 JS_OTHER_OP_LIST(OPCODE_CASE) |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3270 isolate(), graph()->zone(), callable.descriptor(), 0, flags, | 3279 isolate(), graph()->zone(), callable.descriptor(), 0, flags, |
3271 Operator::kNoProperties); | 3280 Operator::kNoProperties); |
3272 to_number_operator_.set(common()->Call(desc)); | 3281 to_number_operator_.set(common()->Call(desc)); |
3273 } | 3282 } |
3274 return to_number_operator_.get(); | 3283 return to_number_operator_.get(); |
3275 } | 3284 } |
3276 | 3285 |
3277 } // namespace compiler | 3286 } // namespace compiler |
3278 } // namespace internal | 3287 } // namespace internal |
3279 } // namespace v8 | 3288 } // namespace v8 |
OLD | NEW |