fix PR8981, a crash trying to form a conditional inc with a floating point compare.
authorChris Lattner <sabre@nondot.org>
Sun, 16 Jan 2011 02:56:53 +0000 (02:56 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 16 Jan 2011 02:56:53 +0000 (02:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123560 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/crash.ll

index 1a4bb97f6979454d8e0cd9344f2f5db8ee6c8d69..f69ab6da0833f96646b17a6b7d10a8341771245c 100644 (file)
@@ -11560,7 +11560,8 @@ static SDValue OptimizeConditonalInDecrement(SDNode *N, SelectionDAG &DAG) {
 
   SDValue Cmp = SetCC.getOperand(1);
   if (Cmp.getOpcode() != X86ISD::CMP || !Cmp.hasOneUse() ||
-      !X86::isZeroNode(Cmp.getOperand(1)))
+      !X86::isZeroNode(Cmp.getOperand(1)) ||
+      !Cmp.getOperand(0).getValueType().isInteger())
     return SDValue();
 
   SDValue CmpOp0 = Cmp.getOperand(0);
index a14a48baa355043478ca4d91940fb477551a2183..49ca04b14aad50f6ea90e425bf51ecdfc5eddcfc 100644 (file)
@@ -141,3 +141,13 @@ entry:
   call void asm sideeffect "outb $0, ${1:w}", "{ax},N{dx},~{dirflag},~{fpsr},~{flags}"(i8 %conv4.i, i32 1017) nounwind
   unreachable
 }
+
+; Crash trying to form conditional increment with fp value.
+; PR8981
+define i32 @test9(double %X) ssp align 2 {
+entry:
+  %0 = fcmp one double %X, 0.000000e+00
+  %cond = select i1 %0, i32 1, i32 2
+  ret i32 %cond
+}
+