summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-03-12 07:15:36 +0000
committerChris Lattner <sabre@nondot.org>2010-03-12 07:15:36 +0000
commit53ebf8a7cabb660100d4c67d43f9d87135885e35 (patch)
treef2451e1477881ae2e55c438118900324456882f3
parentc493a7324003732b845be1fee11df312d2846207 (diff)
downloadbcm5719-llvm-53ebf8a7cabb660100d4c67d43f9d87135885e35.tar.gz
bcm5719-llvm-53ebf8a7cabb660100d4c67d43f9d87135885e35.zip
fix PR6577, a bug in sdbuilder lowering select instructions
whose true value was not Val#0. llvm-svn: 98336
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp3
-rw-r--r--llvm/test/CodeGen/X86/crash.ll14
2 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index ae5474d8d49..f4d3c34e68d 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -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(),
diff --git a/llvm/test/CodeGen/X86/crash.ll b/llvm/test/CodeGen/X86/crash.ll
index b9037f35929..08f59add2bc 100644
--- a/llvm/test/CodeGen/X86/crash.ll
+++ b/llvm/test/CodeGen/X86/crash.ll
@@ -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
+}
OpenPOWER on IntegriCloud