From: Benjamin Kramer Date: Mon, 5 Sep 2011 18:16:19 +0000 (+0000) Subject: InstSimplify: Don't try to replace an extractvalue/insertvalue pair with the original... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ae707bd5594e52a8b385760f99ff58aa8fede948;p=oota-llvm.git InstSimplify: Don't try to replace an extractvalue/insertvalue pair with the original value if types don't match. Fixes clang selfhost. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139120 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index deb7fed18b3..131cc97d237 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -2286,7 +2286,8 @@ Value *llvm::SimplifyInsertValueInst(Value *Agg, Value *Val, // insertvalue x, (extractvalue y, n), n if (ExtractValueInst *EV = dyn_cast(Val)) - if (EV->getIndices() == Idxs) { + if (EV->getAggregateOperand()->getType() == Agg->getType() && + EV->getIndices() == Idxs) { // insertvalue undef, (extractvalue y, n), n -> y if (match(Agg, m_Undef())) return EV->getAggregateOperand(); diff --git a/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll b/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll index 4067d5dc76c..d10c61fe2cf 100644 --- a/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll +++ b/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll @@ -1,11 +1,8 @@ ; RUN: opt < %s -instsimplify -S | FileCheck %s -; CHECK-NOT: extractvalue -; CHECK-NOT: insertvalue - declare void @bar() -define void @foo() { +define void @test1() { entry: invoke void @bar() to label %cont unwind label %lpad cont: @@ -17,6 +14,16 @@ lpad: %exc_ptr2 = insertvalue { i8*, i32 } undef, i8* %exc_ptr, 0 %filter2 = insertvalue { i8*, i32 } %exc_ptr2, i32 %filter, 1 resume { i8*, i32 } %filter2 +; CHECK: @test1 +; CHECK-NOT: extractvalue +; CHECK-NOT: insertvalue } declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*) + +define { i8, i32 } @test2({ i8*, i32 } %x) { + %ex = extractvalue { i8*, i32 } %x, 1 + %ins = insertvalue { i8, i32 } undef, i32 %ex, 1 + ret { i8, i32 } %ins +; CHECK: @test2 +}