Index: src/IceTargetLoweringX8632Traits.h |
diff --git a/src/IceTargetLoweringX8632Traits.h b/src/IceTargetLoweringX8632Traits.h |
index cd2670207e6a71deb4ca5a6b9cbd9617d25c7ab5..f6ed709523370410949c2f5f7c9b65cfa192115c 100644 |
--- a/src/IceTargetLoweringX8632Traits.h |
+++ b/src/IceTargetLoweringX8632Traits.h |
@@ -735,7 +735,8 @@ template <> struct MachineTraits<TargetX8632> { |
uint16_t getShift() const { return Shift; } |
SegmentRegisters getSegmentRegister() const { return SegmentReg; } |
void emitSegmentOverride(Assembler *Asm) const; |
- Address toAsmAddress(Assembler *Asm) const; |
+ Address toAsmAddress(Assembler *Asm, |
+ const Ice::TargetLowering *Target) const; |
void emit(const Cfg *Func) const override; |
using X86Operand::dump; |
@@ -749,6 +750,9 @@ template <> struct MachineTraits<TargetX8632> { |
bool getRandomized() const { return Randomized; } |
+ void setIgnoreStackAdjust(bool Ignore) { IgnoreStackAdjust = Ignore; } |
+ bool getIgnoreStackAdjust() const { return IgnoreStackAdjust; } |
+ |
private: |
X86OperandMem(Cfg *Func, Type Ty, Variable *Base, Constant *Offset, |
Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg); |
@@ -762,6 +766,11 @@ template <> struct MachineTraits<TargetX8632> { |
/// memory operands are generated in |
/// TargetX86Base::randomizeOrPoolImmediate() |
bool Randomized; |
+ /// Memory operations involving the stack pointer need to know when the |
+ /// stack pointer was moved temporarily. Ignore that adjustment in |
+ /// cases that should be pinned to the stack pointer, such as outgoing |
+ /// arguments to calls. |
+ bool IgnoreStackAdjust = false; |
}; |
/// VariableSplit is a way to treat an f64 memory location as a pair of i32 |