[Sparc] Fix an assertion failure while lowering fcmp on long double.
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>
Wed, 4 Sep 2013 15:15:20 +0000 (15:15 +0000)
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>
Wed, 4 Sep 2013 15:15:20 +0000 (15:15 +0000)
  This assertion is triggered because an integer constant is created with wrong
  type.

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

lib/Target/Sparc/SparcISelLowering.cpp
test/CodeGen/SPARC/fp128.ll

index 3250537d0b04660bd0a91b1dbfc85997bb89a150..e646521f60f9ddc176c5505518deb2a92fe0a2e9 100644 (file)
@@ -1816,7 +1816,7 @@ SparcTargetLowering::LowerF128Compare(SDValue LHS, SDValue RHS,
     return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS);
   }
   case SPCC::FCC_ULE: {
-    SDValue RHS = DAG.getTargetConstant(2, LHS.getValueType());
+    SDValue RHS = DAG.getTargetConstant(2, Result.getValueType());
     SPCC = SPCC::ICC_NE;
     return DAG.getNode(SPISD::CMPICC, DL, MVT::Glue, Result, RHS);
   }
index 31ce6059f61205b68e13a277d1fb847f2d6e8449..153819974b66175d9fab8a6ad93e87229fc929b9 100644 (file)
@@ -76,3 +76,23 @@ entry:
    %ret = select i1 %cond, i32 %a, i32 %b
    ret i32 %ret
 }
+
+; HARD-LABEL: f128_compare2
+; HARD:       fcmpq
+; HARD:       fb{{ule|g}}
+
+; SOFT-LABEL: f128_compare2
+; SOFT:       _Q_cmp
+; SOFT:       cmp
+
+define i32 @f128_compare2() {
+entry:
+  %0 = fcmp ogt fp128 undef, 0xL00000000000000000000000000000000
+  br i1 %0, label %"5", label %"7"
+
+"5":                                              ; preds = %entry
+  ret i32 0
+
+"7":                                              ; preds = %entry
+  ret i32 1
+}