diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-07-01 12:20:27 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2016-07-01 10:39:40 +0000 |
commit | 7366110654eec46f21b6824f302356426f48cd74 (patch) | |
tree | f2ff1845183f6117a692bb0c705475c8c13556d5 /chromium/v8/src/compiler/x87/instruction-selector-x87.cc | |
parent | b92421879c003a0857b2074f7e05b3bbbb326569 (diff) | |
download | qtwebengine-chromium-7366110654eec46f21b6824f302356426f48cd74.tar.gz |
BASELINE: Update Chromium to 51.0.2704.106
Also add a few extra files we might need for future features.
Change-Id: I517c35e43221c610976d347c966d070ad44d4c2b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'chromium/v8/src/compiler/x87/instruction-selector-x87.cc')
-rw-r--r-- | chromium/v8/src/compiler/x87/instruction-selector-x87.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/chromium/v8/src/compiler/x87/instruction-selector-x87.cc b/chromium/v8/src/compiler/x87/instruction-selector-x87.cc index e4d085ee9c0..f5376bc3d45 100644 --- a/chromium/v8/src/compiler/x87/instruction-selector-x87.cc +++ b/chromium/v8/src/compiler/x87/instruction-selector-x87.cc @@ -27,11 +27,15 @@ class X87OperandGenerator final : public OperandGenerator { return DefineAsRegister(node); } - bool CanBeMemoryOperand(InstructionCode opcode, Node* node, Node* input) { + bool CanBeMemoryOperand(InstructionCode opcode, Node* node, Node* input, + int effect_level) { if (input->opcode() != IrOpcode::kLoad || !selector()->CanCover(node, input)) { return false; } + if (effect_level != selector()->GetEffectLevel(input)) { + return false; + } MachineRepresentation rep = LoadRepresentationOf(input->op()).representation(); switch (opcode) { @@ -1254,18 +1258,24 @@ void VisitWordCompare(InstructionSelector* selector, Node* node, InstructionCode narrowed_opcode = TryNarrowOpcodeSize(opcode, left, right); + int effect_level = selector->GetEffectLevel(node); + if (cont->IsBranch()) { + effect_level = selector->GetEffectLevel( + cont->true_block()->PredecessorAt(0)->control_input()); + } + // If one of the two inputs is an immediate, make sure it's on the right, or // if one of the two inputs is a memory operand, make sure it's on the left. if ((!g.CanBeImmediate(right) && g.CanBeImmediate(left)) || - (g.CanBeMemoryOperand(narrowed_opcode, node, right) && - !g.CanBeMemoryOperand(narrowed_opcode, node, left))) { + (g.CanBeMemoryOperand(narrowed_opcode, node, right, effect_level) && + !g.CanBeMemoryOperand(narrowed_opcode, node, left, effect_level))) { if (!node->op()->HasProperty(Operator::kCommutative)) cont->Commute(); std::swap(left, right); } // Match immediates on right side of comparison. if (g.CanBeImmediate(right)) { - if (g.CanBeMemoryOperand(opcode, node, left)) { + if (g.CanBeMemoryOperand(opcode, node, left, effect_level)) { // TODO(epertoso): we should use `narrowed_opcode' here once we match // immediates too. return VisitCompareWithMemoryOperand(selector, opcode, left, @@ -1276,7 +1286,7 @@ void VisitWordCompare(InstructionSelector* selector, Node* node, } // Match memory operands on left side of comparison. - if (g.CanBeMemoryOperand(narrowed_opcode, node, left)) { + if (g.CanBeMemoryOperand(narrowed_opcode, node, left, effect_level)) { bool needs_byte_register = narrowed_opcode == kX87Test8 || narrowed_opcode == kX87Cmp8; return VisitCompareWithMemoryOperand( |