| 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 |