[PATCH] D22329: [IPSCCP] Constant fold struct argument/instructions when all the lattice values are constant
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 13 19:59:06 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL275363: [IPSCCP] Constant fold struct argument/instructions when all the latticeā¦ (authored by davide).
Changed prior to commit:
http://reviews.llvm.org/D22329?vs=63902&id=63904#toc
Repository:
rL LLVM
http://reviews.llvm.org/D22329
Files:
llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
llvm/trunk/test/Transforms/SCCP/ipsccp-basic.ll
Index: llvm/trunk/test/Transforms/SCCP/ipsccp-basic.ll
===================================================================
--- llvm/trunk/test/Transforms/SCCP/ipsccp-basic.ll
+++ llvm/trunk/test/Transforms/SCCP/ipsccp-basic.ll
@@ -82,6 +82,10 @@
ret {i64,i64} %b
}
+; CHECK-LABEL: define internal { i64, i64 } @test4a(
+; CHECK-NEXT: ret { i64, i64 } { i64 5, i64 4 }
+; CHECK-NEXT: }
+
define i64 @test4b() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
%a = invoke {i64,i64} @test4a()
to label %A unwind label %B
@@ -130,7 +134,7 @@
; CHECK: define i64 @test5b()
; CHECK: A:
-; CHECK-NEXT: %c = call i64 @test5c({ i64, i64 } %a)
+; CHECK-NEXT: %c = call i64 @test5c({ i64, i64 } { i64 5, i64 4 })
; CHECK-NEXT: ret i64 5
define internal i64 @test5c({i64,i64} %a) {
@@ -163,8 +167,7 @@
%mrv1 = insertvalue %T %mrv0, i32 %A, 1
ret %T %mrv1
; CHECK-LABEL: @test7a(
-; CHECK-NEXT: %mrv0 = insertvalue %T undef, i32 18, 0
-; CHECK-NEXT: %mrv1 = insertvalue %T %mrv0, i32 17, 1
+; CHECK-NEXT: ret %T { i32 18, i32 17 }
}
define i32 @test7b() {
@@ -208,6 +211,12 @@
ret void
}
+; CHECK-LABEL: define void @test9(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: %local_foo = alloca {}
+; CHECK-NEXT: store {} zeroinitializer, {}* %local_foo
+; CHECK-NEXT: ret void
+
declare i32 @__gxx_personality_v0(...)
;;======================== test10
Index: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
@@ -1766,11 +1766,8 @@
if (Solver.isBlockExecutable(&F.front())) {
for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E;
++AI) {
- if (AI->use_empty() || AI->getType()->isStructTy()) continue;
-
- // TODO: Could use getStructLatticeValueFor to find out if the entire
- // result is a constant and replace it entirely if so.
-
+ if (AI->use_empty())
+ continue;
if (tryToReplaceWithConstant(Solver, &*AI))
++IPNumArgsElimed;
}
@@ -1793,12 +1790,8 @@
for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
Instruction *Inst = &*BI++;
- if (Inst->getType()->isVoidTy() || Inst->getType()->isStructTy())
+ if (Inst->getType()->isVoidTy())
continue;
-
- // TODO: Could use getStructLatticeValueFor to find out if the entire
- // result is a constant and replace it entirely if so.
-
if (tryToReplaceInstWithConstant(
Solver, Inst,
!isa<CallInst>(Inst) &&
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22329.63904.patch
Type: text/x-patch
Size: 2694 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/185a7e0b/attachment-0001.bin>
More information about the llvm-commits
mailing list