Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: src/compiler/instruction.h

Issue 2054343002: [Turbofan] Make operand canonicalization distinguish between FP types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Clean up. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/compiler/instruction.h
diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
index eaec5aa53b42c32fe92668d79ad5ab6d9ee334b1..6e9480bf7b92fc319141d2cc1c453ba67d688c4a 100644
--- a/src/compiler/instruction.h
+++ b/src/compiler/instruction.h
@@ -103,6 +103,8 @@ class InstructionOperand {
return this->GetCanonicalizedValue() < that.GetCanonicalizedValue();
}
+ bool InterferesWith(const InstructionOperand& that) const;
+
void Print(const RegisterConfiguration* config) const;
void Print() const;
@@ -602,14 +604,13 @@ bool InstructionOperand::IsSimd128StackSlot() const {
uint64_t InstructionOperand::GetCanonicalizedValue() const {
if (IsAllocated() || IsExplicit()) {
- // TODO(dcarney): put machine type last and mask.
bbudge 2016/06/14 23:34:24 I removed this because I don't understand what it
- MachineRepresentation canonicalized_representation =
- IsFloatingPoint(LocationOperand::cast(this)->representation())
- ? MachineRepresentation::kFloat64
- : MachineRepresentation::kNone;
+ MachineRepresentation rep = LocationOperand::cast(this)->representation();
+ // Preserve FP representation so we can check for interference on
+ // architectures with complex register aliasing.
+ MachineRepresentation canonical =
+ IsFPRegister() ? rep : MachineRepresentation::kNone;
return InstructionOperand::KindField::update(
- LocationOperand::RepresentationField::update(
- this->value_, canonicalized_representation),
+ LocationOperand::RepresentationField::update(this->value_, canonical),
LocationOperand::EXPLICIT);
}
return this->value_;
@@ -650,9 +651,9 @@ class MoveOperands final : public ZoneObject {
}
void SetPending() { destination_ = InstructionOperand(); }
- // True if this move a move into the given destination operand.
- bool Blocks(const InstructionOperand& operand) const {
- return !IsEliminated() && source().EqualsCanonicalized(operand);
+ // True if this move is a move into the given destination operand.
+ bool Blocks(const InstructionOperand& destination) const {
+ return !IsEliminated() && source().InterferesWith(destination);
}
// A move is redundant if it's been eliminated or if its source and

Powered by Google App Engine
This is Rietveld 408576698