| 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(); | 
|  |