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

Side by Side Diff: src/compiler/simplified-lowering.cc

Issue 2476593002: [turbofan] Improve representation selection for HeapObject checking. (Closed)
Patch Set: REBASE and fix. Created 4 years, 1 month 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
« no previous file with comments | « src/compiler/representation-change.cc ('k') | src/compiler/simplified-operator.h » ('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 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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/compiler/representation-change.cc ('k') | src/compiler/simplified-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698