Permalink
Browse files

Pull in r192064 from upstream llvm trunk:

  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.

This fixes unaligned SSE accesses (leading to a SIGBUS) which could
occur in the ffmpeg ports.

Approved by:	re (kib)
Reported by:	tijl
MFC after:	3 days
  • Loading branch information...
1 parent 71eaa99 commit d15691c08b59b5c5c79db30b4bb79522e27f5965 @DimitryAndric DimitryAndric committed Oct 6, 2013
Showing with 4 additions and 0 deletions.
  1. +4 −0 contrib/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -3881,6 +3881,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;

0 comments on commit d15691c

Please sign in to comment.