[llvm-commits] [llvm] r139120 - in /llvm/trunk: lib/Analysis/InstructionSimplify.cpp test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll
Benjamin Kramer
benny.kra at googlemail.com
Mon Sep 5 11:16:19 PDT 2011
Author: d0k
Date: Mon Sep 5 13:16:19 2011
New Revision: 139120
URL: http://llvm.org/viewvc/llvm-project?rev=139120&view=rev
Log:
InstSimplify: Don't try to replace an extractvalue/insertvalue pair with the original value if types don't match.
Fixes clang selfhost.
Modified:
llvm/trunk/lib/Analysis/InstructionSimplify.cpp
llvm/trunk/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll
Modified: llvm/trunk/lib/Analysis/InstructionSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InstructionSimplify.cpp?rev=139120&r1=139119&r2=139120&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InstructionSimplify.cpp (original)
+++ llvm/trunk/lib/Analysis/InstructionSimplify.cpp Mon Sep 5 13:16:19 2011
@@ -2286,7 +2286,8 @@
// insertvalue x, (extractvalue y, n), n
if (ExtractValueInst *EV = dyn_cast<ExtractValueInst>(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();
Modified: llvm/trunk/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll?rev=139120&r1=139119&r2=139120&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll (original)
+++ llvm/trunk/test/Transforms/InstSimplify/2011-09-05-InsertExtractValue.ll Mon Sep 5 13:16:19 2011
@@ -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 @@
%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
+}
More information about the llvm-commits
mailing list