summaryrefslogtreecommitdiff
path: root/include/llvm/Target/TargetFrameLowering.h
diff options
context:
space:
mode:
authorManman Ren <mren@apple.com>2012-12-04 00:52:33 +0000
committerManman Ren <mren@apple.com>2012-12-04 00:52:33 +0000
commit69261a644298bff1497d46c8cd38d688670f307b (patch)
tree6552a5e87e17643db2693dab9046f435099467aa /include/llvm/Target/TargetFrameLowering.h
parent46608c0f648af75dd7260c3d881ca17353bb5982 (diff)
downloadllvm-69261a644298bff1497d46c8cd38d688670f307b.tar.gz
llvm-69261a644298bff1497d46c8cd38d688670f307b.tar.bz2
llvm-69261a644298bff1497d46c8cd38d688670f307b.tar.xz
Stack Alignment: when creating stack objects in MachineFrameInfo, make sure
the alignment is clamped to TargetFrameLowering.getStackAlignment if the target does not support stack realignment or the option "realign-stack" is off. This will cause miscompile if the address is treated as aligned and add is replaced with or in DAGCombine. Added a bool StackRealignable to TargetFrameLowering to check whether stack realignment is implemented for the target. Also added a bool RealignOption to MachineFrameInfo to check whether the option "realign-stack" is on. rdar://12713765 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169197 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Target/TargetFrameLowering.h')
-rw-r--r--include/llvm/Target/TargetFrameLowering.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/include/llvm/Target/TargetFrameLowering.h b/include/llvm/Target/TargetFrameLowering.h
index 7e54f1447e..1958f90f9b 100644
--- a/include/llvm/Target/TargetFrameLowering.h
+++ b/include/llvm/Target/TargetFrameLowering.h
@@ -47,11 +47,12 @@ private:
unsigned StackAlignment;
unsigned TransientStackAlignment;
int LocalAreaOffset;
+ bool StackRealignable;
public:
TargetFrameLowering(StackDirection D, unsigned StackAl, int LAO,
- unsigned TransAl = 1)
+ unsigned TransAl = 1, bool StackReal = true)
: StackDir(D), StackAlignment(StackAl), TransientStackAlignment(TransAl),
- LocalAreaOffset(LAO) {}
+ LocalAreaOffset(LAO), StackRealignable(StackReal) {}
virtual ~TargetFrameLowering();
@@ -76,6 +77,12 @@ public:
return TransientStackAlignment;
}
+ /// isStackRealignable - This method returns whether the stack can be
+ /// realigned.
+ bool isStackRealignable() const {
+ return StackRealignable;
+ }
+
/// getOffsetOfLocalArea - This method returns the offset of the local area
/// from the stack pointer on entrance to a function.
///