Index: src/IceOperand.h |
diff --git a/src/IceOperand.h b/src/IceOperand.h |
index 018445a60bbc197b12091e4a59edc82fb1f8ff07..9beeed6d78486863af6a91d5e5ad447034e25750 100644 |
--- a/src/IceOperand.h |
+++ b/src/IceOperand.h |
@@ -341,6 +341,15 @@ public: |
bool getIsArg() const { return IsArgument; } |
void setIsArg(Cfg *Func); |
+ enum ArgLocInfo { |
+ NoArgLoc, |
+ RegisterArgLoc, |
+ StackArgLoc |
+ }; |
+ |
+ ArgLocInfo getArgLoc() const { return ArgLoc; } |
+ void setArgLoc(ArgLocInfo Loc) { ArgLoc = Loc; } |
+ |
int32_t getStackOffset() const { return StackOffset; } |
void setStackOffset(int32_t Offset) { StackOffset = Offset; } |
@@ -356,6 +365,11 @@ public: |
int32_t getRegNumTmp() const { return RegNumTmp; } |
void setRegNumTmp(int32_t NewRegNum) { RegNumTmp = NewRegNum; } |
+ Variable *getHomeRegister() const { return HomeRegister; } |
+ void setHomeRegister(Variable *NewHomeRegister) { |
+ HomeRegister = NewHomeRegister; |
+ } |
+ |
RegWeight getWeight() const { return Weight; } |
void setWeight(uint32_t NewWeight) { Weight = NewWeight; } |
void setWeightInfinite() { Weight = RegWeight::Inf; } |
@@ -410,7 +424,8 @@ private: |
: Operand(kVariable, Ty), Number(Index), Name(Name), DefInst(NULL), |
DefNode(Node), IsArgument(false), StackOffset(0), RegNum(NoRegister), |
RegNumTmp(NoRegister), Weight(1), RegisterPreference(NULL), |
- AllowRegisterOverlap(false), LoVar(NULL), HiVar(NULL) { |
+ AllowRegisterOverlap(false), LoVar(NULL), HiVar(NULL), |
+ ArgLoc(NoArgLoc), HomeRegister(NULL) { |
Vars = VarsReal; |
Vars[0] = this; |
NumVars = 1; |
@@ -462,6 +477,11 @@ private: |
// wasteful for a 64-bit target. |
Variable *LoVar; |
Variable *HiVar; |
+ // ArgLoc records the assignment of the argument (stack or register) |
+ // if this value is an argument. |
+ ArgLocInfo ArgLoc; |
+ // HomeRegister is the home register. |
+ Variable *HomeRegister; |
// VarsReal (and Operand::Vars) are set up such that Vars[0] == |
// this. |
Variable *VarsReal[1]; |