InstCombine: APFloat can't perform arithmetic on PPC double doubles, don't even try.
authorBenjamin Kramer <benny.kra@googlemail.com>
Thu, 31 Mar 2011 21:35:49 +0000 (21:35 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Thu, 31 Mar 2011 21:35:49 +0000 (21:35 +0000)
Thanks Eli!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128676 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineCompares.cpp
test/Transforms/InstCombine/fcmp.ll

index 3e549d942823561ccd47613762d62e23682e2f54..8afd2f8d004448932d6ffaff60bd8e492428a1d2 100644 (file)
@@ -2769,6 +2769,10 @@ Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
         if (!RHSF)
           break;
 
+        // We can't convert a PPC double double.
+        if (RHSF->getType()->isPPC_FP128Ty())
+          break;
+
         const fltSemantics *Sem;
         // FIXME: This shouldn't be here.
         if (LHSExt->getSrcTy()->isFloatTy())
@@ -2779,8 +2783,6 @@ Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
           Sem = &APFloat::IEEEquad;
         else if (LHSExt->getSrcTy()->isX86_FP80Ty())
           Sem = &APFloat::x87DoubleExtended;
-        else if (LHSExt->getSrcTy()->isPPC_FP128Ty())
-          Sem = &APFloat::PPCDoubleDouble;
         else
           break;
 
index b41cdfa7cf16be78c490afe9c3d882c4d41bde79..2eb4f058692d9e11fcd39ef26297be7493affb90 100644 (file)
@@ -49,3 +49,12 @@ define i1 @test6(float %x, float %y) nounwind {
 ; CHECK: @test6
 ; CHECK-NEXT: fcmp ogt float %x, %y
 }
+
+define i1 @test7(float %x) nounwind readnone ssp noredzone {
+  %ext = fpext float %x to ppc_fp128
+  %cmp = fcmp ogt ppc_fp128 %ext, 0xM00000000000000000000000000000000
+  ret i1 %cmp
+; Can't convert ppc_fp128
+; CHECK: @test7
+; CHECK-NEXT: fpext float %x to ppc_fp128
+}