| Index: src/compiler/js-typed-lowering.cc
|
| diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
|
| index 670430609f069e582b02d079b84441a316fd1db7..1ac108b0d6a4bb17f527802d7bf532ce495dc28b 100644
|
| --- a/src/compiler/js-typed-lowering.cc
|
| +++ b/src/compiler/js-typed-lowering.cc
|
| @@ -450,6 +450,8 @@ JSTypedLowering::JSTypedLowering(Editor* editor,
|
|
|
|
|
| Reduction JSTypedLowering::ReduceJSAdd(Node* node) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.BothInputsAre(Type::Number())) {
|
| // JSAdd(x:number, y:number) => NumberAdd(x, y)
|
| @@ -480,6 +482,8 @@ Reduction JSTypedLowering::ReduceJSAdd(Node* node) {
|
|
|
|
|
| Reduction JSTypedLowering::ReduceJSModulus(Node* node) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.BothInputsAre(Type::Number())) {
|
| // JSModulus(x:number, x:number) => NumberModulus(x, y)
|
| @@ -492,6 +496,8 @@ Reduction JSTypedLowering::ReduceJSModulus(Node* node) {
|
|
|
| Reduction JSTypedLowering::ReduceNumberBinop(Node* node,
|
| const Operator* numberOp) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.IsStrong() || numberOp == simplified()->NumberModulus()) {
|
| if (r.BothInputsAre(Type::Number())) {
|
| @@ -506,6 +512,8 @@ Reduction JSTypedLowering::ReduceNumberBinop(Node* node,
|
|
|
|
|
| Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.IsStrong()) {
|
| if (r.BothInputsAre(Type::Number())) {
|
| @@ -524,6 +532,8 @@ Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) {
|
| Reduction JSTypedLowering::ReduceUI32Shift(Node* node,
|
| Signedness left_signedness,
|
| const Operator* shift_op) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.IsStrong()) {
|
| if (r.BothInputsAre(Type::Number())) {
|
| @@ -540,6 +550,8 @@ Reduction JSTypedLowering::ReduceUI32Shift(Node* node,
|
|
|
|
|
| Reduction JSTypedLowering::ReduceJSComparison(Node* node) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.BothInputsAre(Type::String())) {
|
| // If both inputs are definitely strings, perform a string comparison.
|
| @@ -611,6 +623,8 @@ Reduction JSTypedLowering::ReduceJSComparison(Node* node) {
|
|
|
|
|
| Reduction JSTypedLowering::ReduceJSEqual(Node* node, bool invert) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
|
|
| if (r.BothInputsAre(Type::Number())) {
|
| @@ -652,6 +666,8 @@ Reduction JSTypedLowering::ReduceJSEqual(Node* node, bool invert) {
|
|
|
|
|
| Reduction JSTypedLowering::ReduceJSStrictEqual(Node* node, bool invert) {
|
| + if (flags() & kDisableBinaryOpReduction) return NoChange();
|
| +
|
| JSBinopReduction r(this, node);
|
| if (r.left() == r.right()) {
|
| // x === x is always true if x != NaN
|
| @@ -1102,7 +1118,10 @@ Reduction JSTypedLowering::ReduceJSInstanceOf(Node* node) {
|
| DCHECK_EQ(IrOpcode::kJSInstanceOf, node->opcode());
|
|
|
| // If deoptimization is disabled, we cannot optimize.
|
| - if (!(flags() & kDeoptimizationEnabled)) return NoChange();
|
| + if (!(flags() & kDeoptimizationEnabled) ||
|
| + (flags() & kDisableBinaryOpReduction)) {
|
| + return NoChange();
|
| + }
|
|
|
| JSBinopReduction r(this, node);
|
| Node* effect = r.effect();
|
|
|