fix PR6577, a bug in sdbuilder lowering select instructions
authorChris Lattner <sabre@nondot.org>
Fri, 12 Mar 2010 07:15:36 +0000 (07:15 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 12 Mar 2010 07:15:36 +0000 (07:15 +0000)
whose true value was not Val#0.

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

lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
test/CodeGen/X86/crash.ll

index ae5474d8d49fd88ec6b22dea9482c5f754c5287b..f4d3c34e68da3c9d4a0417a9ddd46dd30422fa66 100644 (file)
@@ -2185,7 +2185,8 @@ void SelectionDAGBuilder::visitSelect(User &I) {
 
   for (unsigned i = 0; i != NumValues; ++i)
     Values[i] = DAG.getNode(ISD::SELECT, getCurDebugLoc(),
-                            TrueVal.getNode()->getValueType(i), Cond,
+                          TrueVal.getNode()->getValueType(TrueVal.getResNo()+i),
+                            Cond,
                             SDValue(TrueVal.getNode(),
                                     TrueVal.getResNo() + i),
                             SDValue(FalseVal.getNode(),
index b9037f35929a7750482b59becfb5af4bfe254106..08f59add2bc2387218940cb388fc364db007c6eb 100644 (file)
@@ -33,3 +33,17 @@ if.then:                                          ; preds = %land.end
 if.end:                                           ; preds = %land.end
   ret void
 }
+
+; PR6577
+%pair = type { i64, double }
+
+define void @on4() {
+dependentGraph243.exit:
+  %subject19 = load %pair* undef                     ; <%1> [#uses=1]
+  %0 = extractvalue %pair %subject19, 1              ; <double> [#uses=2]
+  %1 = select i1 undef, double %0, double undef   ; <double> [#uses=1]
+  %2 = select i1 undef, double %1, double %0      ; <double> [#uses=1]
+  %3 = insertvalue %pair undef, double %2, 1         ; <%1> [#uses=1]
+  store %pair %3, %pair* undef
+  ret void
+}