Commit 5494920a authored by bmeurer's avatar bmeurer Committed by Commit bot

[turbofan] Use frame state before for shift operations as well.

This was already done for other binary operations, so it's basically
copying the existing functionality to shift left and shift right
logical/arithmetic.

R=jarin@chromium.org

Review URL: https://codereview.chromium.org/1140883003

Cr-Commit-Position: refs/heads/master@{#28389}
parent 3ba67835
...@@ -439,12 +439,17 @@ Reduction JSTypedLowering::ReduceUI32Shift(Node* node, ...@@ -439,12 +439,17 @@ Reduction JSTypedLowering::ReduceUI32Shift(Node* node,
Signedness left_signedness, Signedness left_signedness,
const Operator* shift_op) { const Operator* shift_op) {
JSBinopReduction r(this, node); JSBinopReduction r(this, node);
Type* reduce_type = r.IsStrong() ? Type::Number() : Type::Primitive(); if (r.IsStrong()) {
if (r.BothInputsAre(reduce_type)) { if (r.BothInputsAre(Type::Number())) {
r.ConvertInputsForShift(left_signedness); r.ConvertInputsForShift(left_signedness);
return r.ChangeToPureOperator(shift_op, Type::Integral32()); return r.ChangeToPureOperator(shift_op);
} }
return NoChange(); return NoChange();
}
Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
r.ConvertInputsToNumber(frame_state);
r.ConvertInputsForShift(left_signedness);
return r.ChangeToPureOperator(shift_op);
} }
......
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var f = (function() {
"use asm";
function f(x, y) {
return x << y;
}
return f;
})();
var counter = 0;
var deopt = { toString : function() {
%DeoptimizeFunction(f);
counter++;
return "2";
} };
var o = { toString : function() {
counter++;
return "1";
} };
counter = 0;
assertEquals(4, f(deopt, o));
assertEquals(2, counter);
%OptimizeFunctionOnNextCall(f);
counter = 0;
assertEquals(4, f(o, deopt));
assertEquals(2, counter);
%OptimizeFunctionOnNextCall(f);
counter = 0;
assertEquals(8, f(deopt, deopt));
assertEquals(2, counter);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment