diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-05 17:27:05 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-18 08:33:46 +0000 |
commit | 9f4560b1027ae06fdb497023cdcaf91b8511fa74 (patch) | |
tree | f9789c1b2941956c5cc104cf03c6b6cc93759152 /chromium/v8/src/compiler/representation-change.cc | |
parent | d17ea114e5ef69ad5d5d7413280a13e6428098aa (diff) | |
download | qtwebengine-chromium-9f4560b1027ae06fdb497023cdcaf91b8511fa74.tar.gz |
BASELINE: Update Chromium to 67.0.3396.76
Change-Id: I9a14af4efb092ab203e9364f0779fca781909a38
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/v8/src/compiler/representation-change.cc')
-rw-r--r-- | chromium/v8/src/compiler/representation-change.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/chromium/v8/src/compiler/representation-change.cc b/chromium/v8/src/compiler/representation-change.cc index 71aa1433711..34b532a6c6c 100644 --- a/chromium/v8/src/compiler/representation-change.cc +++ b/chromium/v8/src/compiler/representation-change.cc @@ -608,6 +608,16 @@ Node* RepresentationChanger::MakeTruncatedInt32Constant(double value) { return jsgraph()->Int32Constant(DoubleToInt32(value)); } +void RepresentationChanger::InsertUnconditionalDeopt(Node* node, + DeoptimizeReason reason) { + Node* effect = NodeProperties::GetEffectInput(node); + Node* control = NodeProperties::GetControlInput(node); + Node* deopt = + jsgraph()->graph()->NewNode(simplified()->CheckIf(reason), + jsgraph()->Int32Constant(0), effect, control); + NodeProperties::ReplaceEffectInput(node, deopt); +} + Node* RepresentationChanger::GetWord32RepresentationFor( Node* node, MachineRepresentation output_rep, Type* output_type, Node* use_node, UseInfo use_info) { @@ -639,7 +649,17 @@ Node* RepresentationChanger::GetWord32RepresentationFor( return jsgraph()->graph()->NewNode( jsgraph()->common()->DeadValue(MachineRepresentation::kWord32), node); } else if (output_rep == MachineRepresentation::kBit) { - return node; // Sloppy comparison -> word32 + CHECK(output_type->Is(Type::Boolean())); + if (use_info.truncation().IsUsedAsWord32()) { + return node; + } else { + CHECK(Truncation::Any(kIdentifyZeros) + .IsLessGeneralThan(use_info.truncation())); + CHECK_NE(use_info.type_check(), TypeCheckKind::kNone); + InsertUnconditionalDeopt(use_node, DeoptimizeReason::kNotASmi); + return jsgraph()->graph()->NewNode( + jsgraph()->common()->DeadValue(MachineRepresentation::kWord32), node); + } } else if (output_rep == MachineRepresentation::kFloat64) { if (output_type->Is(Type::Signed32())) { op = machine()->ChangeFloat64ToInt32(); |