Don't clobber pending ST regs when FP regs are killed.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 8 Aug 2011 17:15:43 +0000 (17:15 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 8 Aug 2011 17:15:43 +0000 (17:15 +0000)
commit66b0f515d5f7d4b830c3407a273facde405e4f86
tree86571b1582994d48b0654eed8d0d8f32dd1d004f
parentbf13ee1941a312998f0e754016921045626698e9
Don't clobber pending ST regs when FP regs are killed.

X86FloatingPoint keeps track of pending ST registers for an upcoming
inline asm instruction with fixed stack register constraints.  It does
this by remembering which FP register holds the value that should appear
at a fixed stack position for the inline asm.

When that FP register is killed before the inline asm, make sure to
duplicate it to a scratch register, so the ST register still has a live
FP reference.

This could happen when the same FP register was copied to two ST
registers, or when a spill instruction is inserted between the ST copy
and the inline asm.

This fixes PR10602.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137050 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86FloatingPoint.cpp
test/CodeGen/X86/inline-asm-fpstack.ll