Index: src/compiler/machine-operator.cc |
diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc |
index bec48d769f6928fec94912f328f14a5fb155a5b9..ae05ef753ce03f9f1a329d06d19f6a694c8fa7d5 100644 |
--- a/src/compiler/machine-operator.cc |
+++ b/src/compiler/machine-operator.cc |
@@ -91,6 +91,10 @@ CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) { |
return OpParameter<CheckedStoreRepresentation>(op); |
} |
+MachineRepresentation StackSlotRepresentationOf(Operator const* op) { |
+ DCHECK_EQ(IrOpcode::kStackSlot, op->opcode()); |
+ return OpParameter<MachineRepresentation>(op); |
+} |
#define PURE_OP_LIST(V) \ |
V(Word32And, Operator::kAssociative | Operator::kCommutative, 2, 0, 1) \ |
@@ -281,6 +285,18 @@ struct MachineOperatorGlobalCache { |
MACHINE_TYPE_LIST(LOAD) |
#undef LOAD |
+#define STACKSLOT(Type) \ |
+ struct StackSlot##Type##Operator final \ |
+ : public Operator1<MachineRepresentation> { \ |
+ StackSlot##Type##Operator() \ |
+ : Operator1<MachineRepresentation>( \ |
+ IrOpcode::kStackSlot, Operator::kNoThrow, "StackSlot", 0, 0, 0, \ |
+ 1, 0, 0, MachineType::Type().representation()) {} \ |
+ }; \ |
+ StackSlot##Type##Operator kStackSlot##Type; |
+ MACHINE_TYPE_LIST(STACKSLOT) |
+#undef STACKSLOT |
+ |
#define STORE(Type) \ |
struct Store##Type##Operator : public Operator1<StoreRepresentation> { \ |
explicit Store##Type##Operator(WriteBarrierKind write_barrier_kind) \ |
@@ -381,6 +397,16 @@ const Operator* MachineOperatorBuilder::Load(LoadRepresentation rep) { |
return nullptr; |
} |
+const Operator* MachineOperatorBuilder::StackSlot(MachineRepresentation rep) { |
+#define STACKSLOT(Type) \ |
+ if (rep == MachineType::Type().representation()) { \ |
+ return &cache_.kStackSlot##Type; \ |
+ } |
+ MACHINE_TYPE_LIST(STACKSLOT) |
+#undef STACKSLOT |
+ UNREACHABLE(); |
+ return nullptr; |
+} |
const Operator* MachineOperatorBuilder::Store(StoreRepresentation store_rep) { |
switch (store_rep.representation()) { |