diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-06 13:48:22 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-06 13:48:22 +0000 |
commit | d9f7a185e31d70a81775eb88db33c74b92b14697 (patch) | |
tree | 184dc5b28fa99ab9cd83264f40b9791fa31d7c25 /lib/Target/X86/X86InstrInfo.cpp | |
parent | 714319a169784577e33fb1ea28ac06be32c9e735 (diff) | |
download | external_llvm-d9f7a185e31d70a81775eb88db33c74b92b14697.zip external_llvm-d9f7a185e31d70a81775eb88db33c74b92b14697.tar.gz external_llvm-d9f7a185e31d70a81775eb88db33c74b92b14697.tar.bz2 |
X86: Don't fold spills into SSE operations if the stack is unaligned.
Regalloc can emit unaligned spills nowadays, but we can't fold the
spills into SSE ops if we can't guarantee alignment. PR12250.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192064 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86InstrInfo.cpp')
-rw-r--r-- | lib/Target/X86/X86InstrInfo.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp index 277e043..6f8b098 100644 --- a/lib/Target/X86/X86InstrInfo.cpp +++ b/lib/Target/X86/X86InstrInfo.cpp @@ -4166,6 +4166,10 @@ MachineInstr* X86InstrInfo::foldMemoryOperandImpl(MachineFunction &MF, const MachineFrameInfo *MFI = MF.getFrameInfo(); unsigned Size = MFI->getObjectSize(FrameIndex); unsigned Alignment = MFI->getObjectAlignment(FrameIndex); + // If the function stack isn't realigned we don't want to fold instructions + // that need increased alignment. + if (!RI.needsStackRealignment(MF)) + Alignment = std::min(Alignment, TM.getFrameLowering()->getStackAlignment()); if (Ops.size() == 2 && Ops[0] == 0 && Ops[1] == 1) { unsigned NewOpc = 0; unsigned RCSize = 0; |