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

Unified Diff: src/compiler/instruction.h

Issue 2410673002: [Turbofan] Add concept of FP register aliasing on ARM 32. (Closed)
Patch Set: Add a TODO. Created 4 years, 2 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
« no previous file with comments | « src/compiler/gap-resolver.cc ('k') | src/compiler/instruction.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/instruction.h
diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
index 687b1b8761312c5ee50ea3804337bfd63d455a36..e49c7d742a52365f4b1b7f213a9deac12ad7a77b 100644
--- a/src/compiler/instruction.h
+++ b/src/compiler/instruction.h
@@ -28,8 +28,7 @@ namespace compiler {
// Forward declarations.
class Schedule;
-
-class InstructionOperand {
+class V8_EXPORT_PRIVATE InstructionOperand {
public:
static const int kInvalidVirtualRegister = -1;
@@ -119,7 +118,7 @@ class InstructionOperand {
return this->GetCanonicalizedValue() < that.GetCanonicalizedValue();
}
- bool InterferesWith(const InstructionOperand& that) const;
+ bool InterferesWith(const InstructionOperand& other) const;
// APIs to aid debugging. For general-stream APIs, use operator<<
void Print(const RegisterConfiguration* config) const;
@@ -641,8 +640,14 @@ uint64_t InstructionOperand::GetCanonicalizedValue() const {
if (IsAnyLocationOperand()) {
MachineRepresentation canonical = MachineRepresentation::kNone;
if (IsFPRegister()) {
- // We treat all FP register operands the same for simple aliasing.
- canonical = MachineRepresentation::kFloat64;
+ if (kSimpleFPAliasing) {
+ // We treat all FP register operands the same for simple aliasing.
+ canonical = MachineRepresentation::kFloat64;
+ } else {
+ // We need to distinguish FP register operands of different reps when
+ // aliasing is not simple (e.g. ARM).
+ canonical = LocationOperand::cast(this)->representation();
+ }
}
return InstructionOperand::KindField::update(
LocationOperand::RepresentationField::update(this->value_, canonical),
@@ -659,8 +664,8 @@ struct CompareOperandModuloType {
}
};
-
-class MoveOperands final : public ZoneObject {
+class V8_EXPORT_PRIVATE MoveOperands final
+ : public NON_EXPORTED_BASE(ZoneObject) {
public:
MoveOperands(const InstructionOperand& source,
const InstructionOperand& destination)
@@ -685,11 +690,6 @@ class MoveOperands final : public ZoneObject {
}
void SetPending() { destination_ = InstructionOperand(); }
- // 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
// destination are the same.
bool IsRedundant() const {
@@ -724,8 +724,9 @@ struct PrintableMoveOperands {
std::ostream& operator<<(std::ostream& os, const PrintableMoveOperands& mo);
-
-class ParallelMove final : public ZoneVector<MoveOperands*>, public ZoneObject {
+class V8_EXPORT_PRIVATE ParallelMove final
+ : public NON_EXPORTED_BASE(ZoneVector<MoveOperands *>),
+ public NON_EXPORTED_BASE(ZoneObject) {
public:
explicit ParallelMove(Zone* zone) : ZoneVector<MoveOperands*>(zone) {
reserve(4);
@@ -748,9 +749,10 @@ class ParallelMove final : public ZoneVector<MoveOperands*>, public ZoneObject {
bool IsRedundant() const;
// Prepare this ParallelMove to insert move as if it happened in a subsequent
- // ParallelMove. move->source() may be changed. The MoveOperand returned
- // must be Eliminated.
- MoveOperands* PrepareInsertAfter(MoveOperands* move) const;
+ // ParallelMove. move->source() may be changed. Any MoveOperands added to
+ // to_eliminate must be Eliminated.
+ void PrepareInsertAfter(MoveOperands* move,
+ ZoneVector<MoveOperands*>* to_eliminate) const;
private:
DISALLOW_COPY_AND_ASSIGN(ParallelMove);
« no previous file with comments | « src/compiler/gap-resolver.cc ('k') | src/compiler/instruction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698