Index: src/IceOperand.h |
diff --git a/src/IceOperand.h b/src/IceOperand.h |
index 8ad78a59c3576a2475be93e01d2d7d46333f2d08..9d9f4972329f3db58599ad9e328c5235cb2099fb 100644 |
--- a/src/IceOperand.h |
+++ b/src/IceOperand.h |
@@ -509,6 +509,13 @@ public: |
bool mustNotHaveReg() const { |
return RegRequirement == RR_MustNotHaveRegister; |
} |
+ void setRematerializable(int32_t NewRegNum, int32_t NewOffset) { |
+ IsRematerializable = true; |
+ setRegNum(NewRegNum); |
+ setStackOffset(NewOffset); |
+ setMustHaveReg(); |
+ } |
+ bool isRematerializable() const { return IsRematerializable; } |
void setRegClass(uint8_t RC) { RegisterClass = static_cast<RegClass>(RC); } |
RegClass getRegClass() const { return RegisterClass; } |
@@ -573,6 +580,9 @@ protected: |
/// and validating live ranges. This is usually reserved for the stack |
/// pointer and other physical registers specifically referenced by name. |
bool IgnoreLiveness = false; |
+ // If IsRematerializable, RegNum keeps track of which register (stack or frame |
+ // pointer), and StackOffset is the known offset from that register. |
+ bool IsRematerializable = false; |
RegRequirement RegRequirement = RR_MayHaveRegister; |
RegClass RegisterClass; |
/// RegNum is the allocated register, or NoRegister if it isn't |