[PATCH] D17663: [JumpThreading] See through Cast Instructions
Haicheng Wu via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 29 14:19:00 PST 2016
haicheng updated this revision to Diff 49425.
haicheng marked an inline comment as done.
haicheng added a comment.
Thank you very much, Geoff.
I changed the test case. Please let me know if it is better.
Repository:
rL LLVM
http://reviews.llvm.org/D17663
Files:
lib/Transforms/Scalar/JumpThreading.cpp
test/Transforms/JumpThreading/basic.ll
Index: test/Transforms/JumpThreading/basic.ll
===================================================================
--- test/Transforms/JumpThreading/basic.ll
+++ test/Transforms/JumpThreading/basic.ll
@@ -511,9 +511,40 @@
; CHECK-NEXT: phi i32
}
+define i32 @test17(i1 %cond) {
+Entry:
+; CHECK-LABEL: @test17(
+ br i1 %cond, label %Merge, label %F1
+
+; CHECK: Entry:
+; CHECK-NEXT: br i1 %cond, label %F2, label %Merge
+
+F1:
+ %v1 = call i32 @f1()
+ br label %Merge
+
+Merge:
+ %B = phi i32 [0, %Entry], [%v1, %F1]
+ %N = trunc i32 %B to i1
+ br i1 %N, label %T2, label %F2
+
+; CHECK: Merge:
+; CHECK-NOT: phi
+; CHECK-NEXT: %v1 = call i32 @f1()
+
+T2:
+ %Q = call i32 @f2()
+ ret i32 %Q
+
+F2:
+ ret i32 %B
+; CHECK: F2:
+; CHECK-NEXT: phi i32
+}
+
;;; Just check that ComputeValueKnownInPredecessors() does not return true with
;;; no values and triggers the assert in ProcessThreadableEdges().
-define i32 @test17() {
+define i32 @test18() {
entry:
%A = add i32 0, 1
%B = icmp eq i32 %A, 0
Index: lib/Transforms/Scalar/JumpThreading.cpp
===================================================================
--- lib/Transforms/Scalar/JumpThreading.cpp
+++ lib/Transforms/Scalar/JumpThreading.cpp
@@ -475,6 +475,20 @@
return !Result.empty();
}
+ // Handle Cast instructions.
+ if (CastInst *CI = dyn_cast<CastInst>(I)) {
+ ComputeValueKnownInPredecessors(CI->getOperand(0), BB, Result, Preference,
+ Changed, CxtI);
+ if (Result.empty())
+ return false;
+
+ // Convert the known values.
+ for (auto &R : Result)
+ R.first = ConstantExpr::getCast(CI->getOpcode(), R.first, CI->getType());
+
+ return true;
+ }
+
PredValueInfoTy LHSVals, RHSVals;
// Handle some boolean conditions.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17663.49425.patch
Type: text/x-patch
Size: 1778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160229/2dc12bee/attachment.bin>
More information about the llvm-commits
mailing list