diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-02-03 18:54:04 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-02-03 18:54:04 +0000 |
| commit | d1b1992495bbc0eb6e824ac797781374fa2fbd41 (patch) | |
| tree | d67b027aff76c3b9d39e2fa99e685910a430fb01 /llvm/lib/Target | |
| parent | 8a6300193976db447859da3fdfdbb04d1e36bef9 (diff) | |
| download | bcm5719-llvm-d1b1992495bbc0eb6e824ac797781374fa2fbd41.tar.gz bcm5719-llvm-d1b1992495bbc0eb6e824ac797781374fa2fbd41.zip | |
Generate ftst instructions for comparison against zero
llvm-svn: 11098
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/InstSelectSimple.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/InstSelectSimple.cpp b/llvm/lib/Target/X86/InstSelectSimple.cpp index abfcad15668..45df82906bc 100644 --- a/llvm/lib/Target/X86/InstSelectSimple.cpp +++ b/llvm/lib/Target/X86/InstSelectSimple.cpp @@ -702,6 +702,15 @@ unsigned ISel::EmitComparison(unsigned OpNum, Value *Op0, Value *Op1, return OpNum; } + // Special case handling of comparison against +/- 0.0 + if (ConstantFP *CFP = dyn_cast<ConstantFP>(Op1)) + if (CFP->isExactlyValue(+0.0) || CFP->isExactlyValue(-0.0)) { + BMI(MBB, IP, X86::FTST, 1).addReg(Op0r); + BMI(MBB, IP, X86::FNSTSWr8, 0); + BMI(MBB, IP, X86::SAHF, 1); + return OpNum; + } + unsigned Op1r = getReg(Op1, MBB, IP); switch (Class) { default: assert(0 && "Unknown type class!"); |

