| Index: src/compiler/js-intrinsic-lowering.cc
|
| diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc
|
| index 1765e4b3e8d108a0da4308ddd744fd4f4844dde6..cce75eaa305e74472623c7b649c6834203117737 100644
|
| --- a/src/compiler/js-intrinsic-lowering.cc
|
| +++ b/src/compiler/js-intrinsic-lowering.cc
|
| @@ -149,11 +149,19 @@ Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
|
|
|
|
|
| Reduction JSIntrinsicLowering::ReduceDoubleHi(Node* node) {
|
| + // Tell the compiler to assume number input.
|
| + Node* renamed = graph()->NewNode(common()->Guard(Type::Number()),
|
| + node->InputAt(0), graph()->start());
|
| + node->ReplaceInput(0, renamed);
|
| return Change(node, machine()->Float64ExtractHighWord32());
|
| }
|
|
|
|
|
| Reduction JSIntrinsicLowering::ReduceDoubleLo(Node* node) {
|
| + // Tell the compiler to assume number input.
|
| + Node* renamed = graph()->NewNode(common()->Guard(Type::Number()),
|
| + node->InputAt(0), graph()->start());
|
| + node->ReplaceInput(0, renamed);
|
| return Change(node, machine()->Float64ExtractLowWord32());
|
| }
|
|
|
| @@ -244,6 +252,10 @@ Reduction JSIntrinsicLowering::ReduceMathFloor(Node* node) {
|
|
|
|
|
| Reduction JSIntrinsicLowering::ReduceMathSqrt(Node* node) {
|
| + // Tell the compiler to assume number input.
|
| + Node* renamed = graph()->NewNode(common()->Guard(Type::Number()),
|
| + node->InputAt(0), graph()->start());
|
| + node->ReplaceInput(0, renamed);
|
| return Change(node, machine()->Float64Sqrt());
|
| }
|
|
|
| @@ -404,7 +416,8 @@ Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
|
|
|
| Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
|
| Node* etrue = effect;
|
| - Node* vtrue = value;
|
| + Node* vtrue =
|
| + graph()->NewNode(common()->Guard(type_cache_.kSmi), value, if_true);
|
|
|
| Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
|
| Node* efalse = effect;
|
| @@ -413,6 +426,9 @@ Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
|
| vfalse = efalse =
|
| graph()->NewNode(javascript()->CallRuntime(Runtime::kToInteger), value,
|
| context, frame_state, efalse, if_false);
|
| + // TODO(jarin) Intersect the type with integers?
|
| + NodeProperties::SetType(vfalse, NodeProperties::GetType(node));
|
| +
|
| if_false = graph()->NewNode(common()->IfSuccess(), vfalse);
|
| }
|
|
|
| @@ -420,6 +436,7 @@ Reduction JSIntrinsicLowering::ReduceToInteger(Node* node) {
|
| effect = graph()->NewNode(common()->EffectPhi(2), etrue, efalse, control);
|
| value = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
|
| vtrue, vfalse, control);
|
| +
|
| // TODO(bmeurer, mstarzinger): Rewire IfException inputs to {vfalse}.
|
| ReplaceWithValue(node, value, effect, control);
|
| return Changed(value);
|
|
|