| 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/js-typed-lowering.h" | 5 #include "src/compiler/js-typed-lowering.h" |
| 6 | 6 |
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
| 8 #include "src/compilation-dependencies.h" | 8 #include "src/compilation-dependencies.h" |
| 9 #include "src/compiler/access-builder.h" | 9 #include "src/compiler/access-builder.h" |
| 10 #include "src/compiler/js-graph.h" | 10 #include "src/compiler/js-graph.h" |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 } | 208 } |
| 209 | 209 |
| 210 Reduction ChangeToPureOperator(const Operator* op, Type* type) { | 210 Reduction ChangeToPureOperator(const Operator* op, Type* type) { |
| 211 return ChangeToPureOperator(op, false, type); | 211 return ChangeToPureOperator(op, false, type); |
| 212 } | 212 } |
| 213 | 213 |
| 214 Reduction ChangeToSpeculativeOperator(const Operator* op, Type* type) { | 214 Reduction ChangeToSpeculativeOperator(const Operator* op, Type* type) { |
| 215 return ChangeToSpeculativeOperator(op, false, type); | 215 return ChangeToSpeculativeOperator(op, false, type); |
| 216 } | 216 } |
| 217 | 217 |
| 218 const Operator* NumberOp() { |
| 219 switch (node_->opcode()) { |
| 220 case IrOpcode::kJSAdd: |
| 221 return simplified()->NumberAdd(); |
| 222 case IrOpcode::kJSSubtract: |
| 223 return simplified()->NumberSubtract(); |
| 224 case IrOpcode::kJSMultiply: |
| 225 return simplified()->NumberMultiply(); |
| 226 case IrOpcode::kJSDivide: |
| 227 return simplified()->NumberDivide(); |
| 228 case IrOpcode::kJSModulus: |
| 229 return simplified()->NumberModulus(); |
| 230 case IrOpcode::kJSBitwiseAnd: |
| 231 return simplified()->NumberBitwiseAnd(); |
| 232 case IrOpcode::kJSBitwiseOr: |
| 233 return simplified()->NumberBitwiseOr(); |
| 234 case IrOpcode::kJSBitwiseXor: |
| 235 return simplified()->NumberBitwiseXor(); |
| 236 case IrOpcode::kJSShiftLeft: |
| 237 return simplified()->NumberShiftLeft(); |
| 238 case IrOpcode::kJSShiftRight: |
| 239 return simplified()->NumberShiftRight(); |
| 240 case IrOpcode::kJSShiftRightLogical: |
| 241 return simplified()->NumberShiftRightLogical(); |
| 242 default: |
| 243 break; |
| 244 } |
| 245 UNREACHABLE(); |
| 246 return nullptr; |
| 247 } |
| 248 |
| 249 const Operator* SpeculativeNumberOp(NumberOperationHint hint) { |
| 250 switch (node_->opcode()) { |
| 251 case IrOpcode::kJSAdd: |
| 252 return simplified()->SpeculativeNumberAdd(hint); |
| 253 case IrOpcode::kJSSubtract: |
| 254 return simplified()->SpeculativeNumberSubtract(hint); |
| 255 case IrOpcode::kJSMultiply: |
| 256 return simplified()->SpeculativeNumberMultiply(hint); |
| 257 case IrOpcode::kJSDivide: |
| 258 return simplified()->SpeculativeNumberDivide(hint); |
| 259 case IrOpcode::kJSModulus: |
| 260 return simplified()->SpeculativeNumberModulus(hint); |
| 261 case IrOpcode::kJSBitwiseAnd: |
| 262 return simplified()->SpeculativeNumberBitwiseAnd(hint); |
| 263 case IrOpcode::kJSBitwiseOr: |
| 264 return simplified()->SpeculativeNumberBitwiseOr(hint); |
| 265 case IrOpcode::kJSBitwiseXor: |
| 266 return simplified()->SpeculativeNumberBitwiseXor(hint); |
| 267 case IrOpcode::kJSShiftLeft: |
| 268 return simplified()->SpeculativeNumberShiftLeft(hint); |
| 269 case IrOpcode::kJSShiftRight: |
| 270 return simplified()->SpeculativeNumberShiftRight(hint); |
| 271 case IrOpcode::kJSShiftRightLogical: |
| 272 return simplified()->SpeculativeNumberShiftRightLogical(hint); |
| 273 default: |
| 274 break; |
| 275 } |
| 276 UNREACHABLE(); |
| 277 return nullptr; |
| 278 } |
| 279 |
| 218 bool LeftInputIs(Type* t) { return left_type()->Is(t); } | 280 bool LeftInputIs(Type* t) { return left_type()->Is(t); } |
| 219 | 281 |
| 220 bool RightInputIs(Type* t) { return right_type()->Is(t); } | 282 bool RightInputIs(Type* t) { return right_type()->Is(t); } |
| 221 | 283 |
| 222 bool OneInputIs(Type* t) { return LeftInputIs(t) || RightInputIs(t); } | 284 bool OneInputIs(Type* t) { return LeftInputIs(t) || RightInputIs(t); } |
| 223 | 285 |
| 224 bool BothInputsAre(Type* t) { return LeftInputIs(t) && RightInputIs(t); } | 286 bool BothInputsAre(Type* t) { return LeftInputIs(t) && RightInputIs(t); } |
| 225 | 287 |
| 226 bool OneInputCannotBe(Type* t) { | 288 bool OneInputCannotBe(Type* t) { |
| 227 return !left_type()->Maybe(t) || !right_type()->Maybe(t); | 289 return !left_type()->Maybe(t) || !right_type()->Maybe(t); |
| 228 } | 290 } |
| 229 | 291 |
| 230 bool NeitherInputCanBe(Type* t) { | 292 bool NeitherInputCanBe(Type* t) { |
| 231 return !left_type()->Maybe(t) && !right_type()->Maybe(t); | 293 return !left_type()->Maybe(t) && !right_type()->Maybe(t); |
| 232 } | 294 } |
| 233 | 295 |
| 234 Node* effect() { return NodeProperties::GetEffectInput(node_); } | 296 Node* effect() { return NodeProperties::GetEffectInput(node_); } |
| 235 Node* control() { return NodeProperties::GetControlInput(node_); } | 297 Node* control() { return NodeProperties::GetControlInput(node_); } |
| 236 Node* context() { return NodeProperties::GetContextInput(node_); } | 298 Node* context() { return NodeProperties::GetContextInput(node_); } |
| 237 Node* left() { return NodeProperties::GetValueInput(node_, 0); } | 299 Node* left() { return NodeProperties::GetValueInput(node_, 0); } |
| 238 Node* right() { return NodeProperties::GetValueInput(node_, 1); } | 300 Node* right() { return NodeProperties::GetValueInput(node_, 1); } |
| 239 Type* left_type() { return NodeProperties::GetType(node_->InputAt(0)); } | 301 Type* left_type() { return NodeProperties::GetType(node_->InputAt(0)); } |
| 240 Type* right_type() { return NodeProperties::GetType(node_->InputAt(1)); } | 302 Type* right_type() { return NodeProperties::GetType(node_->InputAt(1)); } |
| 303 Type* type() { return NodeProperties::GetType(node_); } |
| 241 | 304 |
| 242 SimplifiedOperatorBuilder* simplified() { return lowering_->simplified(); } | 305 SimplifiedOperatorBuilder* simplified() { return lowering_->simplified(); } |
| 243 Graph* graph() const { return lowering_->graph(); } | 306 Graph* graph() const { return lowering_->graph(); } |
| 244 JSGraph* jsgraph() { return lowering_->jsgraph(); } | 307 JSGraph* jsgraph() { return lowering_->jsgraph(); } |
| 245 JSOperatorBuilder* javascript() { return lowering_->javascript(); } | 308 JSOperatorBuilder* javascript() { return lowering_->javascript(); } |
| 246 CommonOperatorBuilder* common() { return jsgraph()->common(); } | 309 CommonOperatorBuilder* common() { return jsgraph()->common(); } |
| 247 Zone* zone() const { return graph()->zone(); } | 310 Zone* zone() const { return graph()->zone(); } |
| 248 | 311 |
| 249 private: | 312 private: |
| 250 JSTypedLowering* lowering_; // The containing lowering instance. | 313 JSTypedLowering* lowering_; // The containing lowering instance. |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 CallDescriptor::kNeedsFrameState, node->op()->properties()); | 483 CallDescriptor::kNeedsFrameState, node->op()->properties()); |
| 421 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); | 484 DCHECK_EQ(1, OperatorProperties::GetFrameStateInputCount(node->op())); |
| 422 node->InsertInput(graph()->zone(), 0, | 485 node->InsertInput(graph()->zone(), 0, |
| 423 jsgraph()->HeapConstant(callable.code())); | 486 jsgraph()->HeapConstant(callable.code())); |
| 424 NodeProperties::ChangeOp(node, common()->Call(desc)); | 487 NodeProperties::ChangeOp(node, common()->Call(desc)); |
| 425 return Changed(node); | 488 return Changed(node); |
| 426 } | 489 } |
| 427 return NoChange(); | 490 return NoChange(); |
| 428 } | 491 } |
| 429 | 492 |
| 430 Reduction JSTypedLowering::ReduceJSSubtract(Node* node) { | 493 Reduction JSTypedLowering::ReduceNumberBinop(Node* node) { |
| 431 JSBinopReduction r(this, node); | 494 JSBinopReduction r(this, node); |
| 432 NumberOperationHint hint; | 495 NumberOperationHint hint; |
| 433 if (r.GetBinaryNumberOperationHint(&hint)) { | 496 if (r.GetBinaryNumberOperationHint(&hint)) { |
| 434 if (hint == NumberOperationHint::kNumberOrOddball && | 497 if (hint == NumberOperationHint::kNumberOrOddball && |
| 435 r.BothInputsAre(Type::PlainPrimitive())) { | 498 r.BothInputsAre(Type::PlainPrimitive())) { |
| 436 // JSSubtract(x:plain-primitive, y:plain-primitive) | |
| 437 // => NumberSubtract(ToNumber(x), ToNumber(y)) | |
| 438 r.ConvertInputsToNumber(); | 499 r.ConvertInputsToNumber(); |
| 439 return r.ChangeToPureOperator(simplified()->NumberSubtract(), | 500 return r.ChangeToPureOperator(r.NumberOp(), Type::Number()); |
| 440 Type::Number()); | |
| 441 } | 501 } |
| 442 return r.ChangeToSpeculativeOperator( | 502 return r.ChangeToSpeculativeOperator(r.SpeculativeNumberOp(hint), |
| 443 simplified()->SpeculativeNumberSubtract(hint), Type::Number()); | 503 Type::Number()); |
| 444 } | 504 } |
| 445 if (r.BothInputsAre(Type::PlainPrimitive()) || | 505 if (r.BothInputsAre(Type::PlainPrimitive()) || |
| 446 !(flags() & kDeoptimizationEnabled)) { | 506 !(flags() & kDeoptimizationEnabled)) { |
| 447 r.ConvertInputsToNumber(); | 507 r.ConvertInputsToNumber(); |
| 448 return r.ChangeToPureOperator(simplified()->NumberSubtract(), | 508 return r.ChangeToPureOperator(r.NumberOp(), Type::Number()); |
| 449 Type::Number()); | |
| 450 } | 509 } |
| 451 return NoChange(); | 510 return NoChange(); |
| 452 } | 511 } |
| 453 | 512 |
| 454 Reduction JSTypedLowering::ReduceJSMultiply(Node* node) { | 513 Reduction JSTypedLowering::ReduceInt32Binop(Node* node) { |
| 455 JSBinopReduction r(this, node); | 514 JSBinopReduction r(this, node); |
| 456 NumberOperationHint hint; | 515 NumberOperationHint hint; |
| 457 if (r.GetBinaryNumberOperationHint(&hint)) { | 516 if (r.GetBinaryNumberOperationHint(&hint)) { |
| 458 if (hint == NumberOperationHint::kNumberOrOddball && | 517 return r.ChangeToSpeculativeOperator(r.SpeculativeNumberOp(hint), |
| 459 r.BothInputsAre(Type::PlainPrimitive())) { | 518 Type::Signed32()); |
| 460 // JSMultiply(x:plain-primitive, | |
| 461 // y:plain-primitive) => NumberMultiply(ToNumber(x), | |
| 462 // ToNumber(y)) | |
| 463 r.ConvertInputsToNumber(); | |
| 464 return r.ChangeToPureOperator(simplified()->NumberMultiply(), | |
| 465 Type::Number()); | |
| 466 } | |
| 467 return r.ChangeToSpeculativeOperator( | |
| 468 simplified()->SpeculativeNumberMultiply(hint), Type::Number()); | |
| 469 } | |
| 470 if (r.BothInputsAre(Type::PlainPrimitive()) || | |
| 471 !(flags() & kDeoptimizationEnabled)) { | |
| 472 r.ConvertInputsToNumber(); | |
| 473 return r.ChangeToPureOperator(simplified()->NumberMultiply(), | |
| 474 Type::Number()); | |
| 475 } | |
| 476 return NoChange(); | |
| 477 } | |
| 478 | |
| 479 Reduction JSTypedLowering::ReduceJSDivide(Node* node) { | |
| 480 JSBinopReduction r(this, node); | |
| 481 NumberOperationHint hint; | |
| 482 if (r.GetBinaryNumberOperationHint(&hint)) { | |
| 483 if (hint == NumberOperationHint::kNumberOrOddball && | |
| 484 r.BothInputsAre(Type::PlainPrimitive())) { | |
| 485 // JSDivide(x:plain-primitive, | |
| 486 // y:plain-primitive) => NumberDivide(ToNumber(x), ToNumber(y)) | |
| 487 r.ConvertInputsToNumber(); | |
| 488 return r.ChangeToPureOperator(simplified()->NumberDivide(), | |
| 489 Type::Number()); | |
| 490 } | |
| 491 return r.ChangeToSpeculativeOperator( | |
| 492 simplified()->SpeculativeNumberDivide(hint), Type::Number()); | |
| 493 } | |
| 494 if (r.BothInputsAre(Type::PlainPrimitive())) { | |
| 495 // JSDivide(x:plain-primitive, | |
| 496 // y:plain-primitive) => NumberDivide(ToNumber(x), ToNumber(y)) | |
| 497 r.ConvertInputsToNumber(); | |
| 498 return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number()); | |
| 499 } | |
| 500 return NoChange(); | |
| 501 } | |
| 502 | |
| 503 Reduction JSTypedLowering::ReduceJSModulus(Node* node) { | |
| 504 JSBinopReduction r(this, node); | |
| 505 NumberOperationHint hint; | |
| 506 if (r.GetBinaryNumberOperationHint(&hint)) { | |
| 507 if (hint == NumberOperationHint::kNumberOrOddball && | |
| 508 r.BothInputsAre(Type::PlainPrimitive())) { | |
| 509 // JSModulus(x:plain-primitive, | |
| 510 // y:plain-primitive) => NumberModulus(ToNumber(x), ToNumber(y)) | |
| 511 r.ConvertInputsToNumber(); | |
| 512 return r.ChangeToPureOperator(simplified()->NumberModulus(), | |
| 513 Type::Number()); | |
| 514 } | |
| 515 return r.ChangeToSpeculativeOperator( | |
| 516 simplified()->SpeculativeNumberModulus(hint), Type::Number()); | |
| 517 } | |
| 518 if (r.BothInputsAre(Type::PlainPrimitive())) { | |
| 519 // JSModulus(x:plain-primitive, | |
| 520 // y:plain-primitive) => NumberModulus(ToNumber(x), ToNumber(y)) | |
| 521 r.ConvertInputsToNumber(); | |
| 522 return r.ChangeToPureOperator(simplified()->NumberModulus(), | |
| 523 Type::Number()); | |
| 524 } | |
| 525 return NoChange(); | |
| 526 } | |
| 527 | |
| 528 Reduction JSTypedLowering::ReduceInt32Binop(Node* node, | |
| 529 const Operator* int_op) { | |
| 530 JSBinopReduction r(this, node); | |
| 531 NumberOperationHint hint; | |
| 532 if (r.GetBinaryNumberOperationHint(&hint)) { | |
| 533 Operator const* speculative_op; | |
| 534 if (int_op->opcode() == IrOpcode::kNumberBitwiseAnd) { | |
| 535 speculative_op = simplified()->SpeculativeNumberBitwiseAnd(hint); | |
| 536 } else if (int_op->opcode() == IrOpcode::kNumberBitwiseOr) { | |
| 537 speculative_op = simplified()->SpeculativeNumberBitwiseOr(hint); | |
| 538 } else { | |
| 539 DCHECK_EQ(IrOpcode::kNumberBitwiseXor, int_op->opcode()); | |
| 540 speculative_op = simplified()->SpeculativeNumberBitwiseXor(hint); | |
| 541 } | |
| 542 return r.ChangeToSpeculativeOperator(speculative_op, Type::Signed32()); | |
| 543 } | 519 } |
| 544 if (r.BothInputsAre(Type::PlainPrimitive()) || | 520 if (r.BothInputsAre(Type::PlainPrimitive()) || |
| 545 !(flags() & kDeoptimizationEnabled)) { | 521 !(flags() & kDeoptimizationEnabled)) { |
| 546 r.ConvertInputsToNumber(); | 522 r.ConvertInputsToNumber(); |
| 547 r.ConvertInputsToUI32(kSigned, kSigned); | 523 r.ConvertInputsToUI32(kSigned, kSigned); |
| 548 return r.ChangeToPureOperator(int_op, Type::Signed32()); | 524 return r.ChangeToPureOperator(r.NumberOp(), Type::Signed32()); |
| 549 } | 525 } |
| 550 return NoChange(); | 526 return NoChange(); |
| 551 } | 527 } |
| 552 | 528 |
| 553 Reduction JSTypedLowering::ReduceUI32Shift(Node* node, Signedness signedness, | 529 Reduction JSTypedLowering::ReduceUI32Shift(Node* node, Signedness signedness) { |
| 554 const Operator* shift_op) { | |
| 555 JSBinopReduction r(this, node); | 530 JSBinopReduction r(this, node); |
| 556 NumberOperationHint hint; | 531 NumberOperationHint hint; |
| 557 if (r.GetBinaryNumberOperationHint(&hint)) { | 532 if (r.GetBinaryNumberOperationHint(&hint)) { |
| 558 Operator const* speculative_op; | |
| 559 if (shift_op->opcode() == IrOpcode::kNumberShiftLeft) { | |
| 560 speculative_op = simplified()->SpeculativeNumberShiftLeft(hint); | |
| 561 } else if (shift_op->opcode() == IrOpcode::kNumberShiftRightLogical) { | |
| 562 speculative_op = simplified()->SpeculativeNumberShiftRightLogical(hint); | |
| 563 } else { | |
| 564 DCHECK_EQ(IrOpcode::kNumberShiftRight, shift_op->opcode()); | |
| 565 speculative_op = simplified()->SpeculativeNumberShiftRight(hint); | |
| 566 } | |
| 567 return r.ChangeToSpeculativeOperator( | 533 return r.ChangeToSpeculativeOperator( |
| 568 speculative_op, | 534 r.SpeculativeNumberOp(hint), |
| 569 signedness == kUnsigned ? Type::Unsigned32() : Type::Signed32()); | 535 signedness == kUnsigned ? Type::Unsigned32() : Type::Signed32()); |
| 570 } | 536 } |
| 571 if (r.BothInputsAre(Type::PlainPrimitive()) || | 537 if (r.BothInputsAre(Type::PlainPrimitive()) || |
| 572 !(flags() & kDeoptimizationEnabled)) { | 538 !(flags() & kDeoptimizationEnabled)) { |
| 573 r.ConvertInputsToNumber(); | 539 r.ConvertInputsToNumber(); |
| 574 r.ConvertInputsToUI32(signedness, kUnsigned); | 540 r.ConvertInputsToUI32(signedness, kUnsigned); |
| 575 return r.ChangeToPureOperator(shift_op); | 541 return r.ChangeToPureOperator(r.NumberOp(), signedness == kUnsigned |
| 542 ? Type::Unsigned32() |
| 543 : Type::Signed32()); |
| 576 } | 544 } |
| 577 return NoChange(); | 545 return NoChange(); |
| 578 } | 546 } |
| 579 | 547 |
| 580 Reduction JSTypedLowering::ReduceJSComparison(Node* node) { | 548 Reduction JSTypedLowering::ReduceJSComparison(Node* node) { |
| 581 JSBinopReduction r(this, node); | 549 JSBinopReduction r(this, node); |
| 582 if (r.BothInputsAre(Type::String())) { | 550 if (r.BothInputsAre(Type::String())) { |
| 583 // If both inputs are definitely strings, perform a string comparison. | 551 // If both inputs are definitely strings, perform a string comparison. |
| 584 const Operator* stringOp; | 552 const Operator* stringOp; |
| 585 switch (node->opcode()) { | 553 switch (node->opcode()) { |
| (...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2040 case IrOpcode::kJSStrictEqual: | 2008 case IrOpcode::kJSStrictEqual: |
| 2041 return ReduceJSStrictEqual(node, false); | 2009 return ReduceJSStrictEqual(node, false); |
| 2042 case IrOpcode::kJSStrictNotEqual: | 2010 case IrOpcode::kJSStrictNotEqual: |
| 2043 return ReduceJSStrictEqual(node, true); | 2011 return ReduceJSStrictEqual(node, true); |
| 2044 case IrOpcode::kJSLessThan: // fall through | 2012 case IrOpcode::kJSLessThan: // fall through |
| 2045 case IrOpcode::kJSGreaterThan: // fall through | 2013 case IrOpcode::kJSGreaterThan: // fall through |
| 2046 case IrOpcode::kJSLessThanOrEqual: // fall through | 2014 case IrOpcode::kJSLessThanOrEqual: // fall through |
| 2047 case IrOpcode::kJSGreaterThanOrEqual: | 2015 case IrOpcode::kJSGreaterThanOrEqual: |
| 2048 return ReduceJSComparison(node); | 2016 return ReduceJSComparison(node); |
| 2049 case IrOpcode::kJSBitwiseOr: | 2017 case IrOpcode::kJSBitwiseOr: |
| 2050 return ReduceInt32Binop(node, simplified()->NumberBitwiseOr()); | |
| 2051 case IrOpcode::kJSBitwiseXor: | 2018 case IrOpcode::kJSBitwiseXor: |
| 2052 return ReduceInt32Binop(node, simplified()->NumberBitwiseXor()); | |
| 2053 case IrOpcode::kJSBitwiseAnd: | 2019 case IrOpcode::kJSBitwiseAnd: |
| 2054 return ReduceInt32Binop(node, simplified()->NumberBitwiseAnd()); | 2020 return ReduceInt32Binop(node); |
| 2055 case IrOpcode::kJSShiftLeft: | 2021 case IrOpcode::kJSShiftLeft: |
| 2056 return ReduceUI32Shift(node, kSigned, simplified()->NumberShiftLeft()); | |
| 2057 case IrOpcode::kJSShiftRight: | 2022 case IrOpcode::kJSShiftRight: |
| 2058 return ReduceUI32Shift(node, kSigned, simplified()->NumberShiftRight()); | 2023 return ReduceUI32Shift(node, kSigned); |
| 2059 case IrOpcode::kJSShiftRightLogical: | 2024 case IrOpcode::kJSShiftRightLogical: |
| 2060 return ReduceUI32Shift(node, kUnsigned, | 2025 return ReduceUI32Shift(node, kUnsigned); |
| 2061 simplified()->NumberShiftRightLogical()); | |
| 2062 case IrOpcode::kJSAdd: | 2026 case IrOpcode::kJSAdd: |
| 2063 return ReduceJSAdd(node); | 2027 return ReduceJSAdd(node); |
| 2064 case IrOpcode::kJSSubtract: | 2028 case IrOpcode::kJSSubtract: |
| 2065 return ReduceJSSubtract(node); | |
| 2066 case IrOpcode::kJSMultiply: | 2029 case IrOpcode::kJSMultiply: |
| 2067 return ReduceJSMultiply(node); | |
| 2068 case IrOpcode::kJSDivide: | 2030 case IrOpcode::kJSDivide: |
| 2069 return ReduceJSDivide(node); | |
| 2070 case IrOpcode::kJSModulus: | 2031 case IrOpcode::kJSModulus: |
| 2071 return ReduceJSModulus(node); | 2032 return ReduceNumberBinop(node); |
| 2072 case IrOpcode::kJSToBoolean: | 2033 case IrOpcode::kJSToBoolean: |
| 2073 return ReduceJSToBoolean(node); | 2034 return ReduceJSToBoolean(node); |
| 2074 case IrOpcode::kJSToInteger: | 2035 case IrOpcode::kJSToInteger: |
| 2075 return ReduceJSToInteger(node); | 2036 return ReduceJSToInteger(node); |
| 2076 case IrOpcode::kJSToLength: | 2037 case IrOpcode::kJSToLength: |
| 2077 return ReduceJSToLength(node); | 2038 return ReduceJSToLength(node); |
| 2078 case IrOpcode::kJSToNumber: | 2039 case IrOpcode::kJSToNumber: |
| 2079 return ReduceJSToNumber(node); | 2040 return ReduceJSToNumber(node); |
| 2080 case IrOpcode::kJSToString: | 2041 case IrOpcode::kJSToString: |
| 2081 return ReduceJSToString(node); | 2042 return ReduceJSToString(node); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2158 } | 2119 } |
| 2159 | 2120 |
| 2160 | 2121 |
| 2161 CompilationDependencies* JSTypedLowering::dependencies() const { | 2122 CompilationDependencies* JSTypedLowering::dependencies() const { |
| 2162 return dependencies_; | 2123 return dependencies_; |
| 2163 } | 2124 } |
| 2164 | 2125 |
| 2165 } // namespace compiler | 2126 } // namespace compiler |
| 2166 } // namespace internal | 2127 } // namespace internal |
| 2167 } // namespace v8 | 2128 } // namespace v8 |
| OLD | NEW |