[llvm-commits] [llvm] r86726 - in /llvm/trunk: lib/Transforms/Scalar/SCCP.cpp test/Transforms/SCCP/crash.ll
Chris Lattner
sabre at nondot.org
Tue Nov 10 14:02:09 PST 2009
Author: lattner
Date: Tue Nov 10 16:02:09 2009
New Revision: 86726
URL: http://llvm.org/viewvc/llvm-project?rev=86726&view=rev
Log:
fix a crash in SCCP handling extractvalue of an array, pointed out and
tracked down by Stephan Reiter!
Modified:
llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
llvm/trunk/test/Transforms/SCCP/crash.ll
Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=86726&r1=86725&r2=86726&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Tue Nov 10 16:02:09 2009
@@ -795,9 +795,14 @@
return markOverdefined(&EVI);
Value *AggVal = EVI.getAggregateOperand();
- unsigned i = *EVI.idx_begin();
- LatticeVal EltVal = getStructValueState(AggVal, i);
- mergeInValue(getValueState(&EVI), &EVI, EltVal);
+ if (isa<StructType>(AggVal->getType())) {
+ unsigned i = *EVI.idx_begin();
+ LatticeVal EltVal = getStructValueState(AggVal, i);
+ mergeInValue(getValueState(&EVI), &EVI, EltVal);
+ } else {
+ // Otherwise, must be extracting from an array.
+ return markOverdefined(&EVI);
+ }
}
void SCCPSolver::visitInsertValueInst(InsertValueInst &IVI) {
Modified: llvm/trunk/test/Transforms/SCCP/crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/crash.ll?rev=86726&r1=86725&r2=86726&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SCCP/crash.ll (original)
+++ llvm/trunk/test/Transforms/SCCP/crash.ll Tue Nov 10 16:02:09 2009
@@ -22,3 +22,8 @@
return:
ret void
}
+
+define i32 @test2([4 x i32] %A) {
+ %B = extractvalue [4 x i32] %A, 1
+ ret i32 %B
+}
More information about the llvm-commits
mailing list