X86: Don't emit conditional floating point moves on when targeting pre-pentiumpro...
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 27 Apr 2012 12:07:43 +0000 (12:07 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 27 Apr 2012 12:07:43 +0000 (12:07 +0000)
commit17c836c4b51a14f07a5d5442cf2e984474a8f57d
tree74181d3329eae68c0137d0d18c5ce2db3ff901fe
parentc84f975e6fa65049ecd3268f830218e791893efd
X86: Don't emit conditional floating point moves on when targeting pre-pentiumpro architectures.

* Model FPSW (the FPU status word) as a register.
* Add ISel patterns for the FUCOM*, FNSTSW and SAHF instructions.
* During Legalize/Lowering, build a node sequence to transfer the comparison
result from FPSW into EFLAGS. If you're wondering about the right-shift: That's
an implicit sub-register extraction (%ax -> %ah) which is handled later on by
the instruction selector.

Fixes PR6679. Patch by Christoph Erhardt!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155704 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h
lib/Target/X86/X86InstrFPStack.td
lib/Target/X86/X86InstrInfo.td
lib/Target/X86/X86RegisterInfo.td
test/CodeGen/X86/fp-stack-compare-cmov.ll [new file with mode: 0644]
test/CodeGen/X86/fp-stack-compare.ll