[PATCH] D32323: [SimplifyCFG] Fix the determination of PostBB in conditional store merging to handle the targets on the second branch being commuted
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 21 09:06:40 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL300992: [SimplifyCFG] Fix the determination of PostBB in conditional store merging to… (authored by ctopper).
Changed prior to commit:
https://reviews.llvm.org/D32323?vs=96047&id=96154#toc
Repository:
rL LLVM
https://reviews.llvm.org/D32323
Files:
llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores.ll
Index: llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores.ll
===================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores.ll
+++ llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores.ll
@@ -37,23 +37,17 @@
}
; This is the same as test_simple, but the branch target order has been swapped
-; TODO: This test should succeed and end up if-converted.
define void @test_simple_commuted(i32* %p, i32 %a, i32 %b) {
; CHECK-LABEL: @test_simple_commuted(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[X1:%.*]] = icmp eq i32 [[A:%.*]], 0
-; CHECK-NEXT: br i1 [[X1]], label [[YES1:%.*]], label [[FALLTHROUGH:%.*]]
-; CHECK: yes1:
-; CHECK-NEXT: store i32 0, i32* [[P:%.*]], align 4
-; CHECK-NEXT: br label [[FALLTHROUGH]]
-; CHECK: fallthrough:
; CHECK-NEXT: [[X2:%.*]] = icmp eq i32 [[B:%.*]], 0
-; CHECK-NEXT: br i1 [[X2]], label [[YES2:%.*]], label [[END:%.*]]
-; CHECK: yes2:
-; CHECK-NEXT: store i32 1, i32* [[P]], align 4
-; CHECK-NEXT: br label [[END]]
-; CHECK: end:
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[TMP0:%.*]] = or i1 [[X1]], [[X2]]
+; CHECK-NEXT: br i1 [[TMP0]], label [[TMP1:%.*]], label [[TMP2:%.*]]
+; CHECK: [[DOT:%.*]] = zext i1 [[X2]] to i32
+; CHECK-NEXT: store i32 [[DOT]], i32* [[P:%.*]], align 4
+; CHECK-NEXT: br label [[TMP2]]
+; CHECK: ret void
;
entry:
%x1 = icmp eq i32 %a, 0
Index: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -3055,6 +3055,15 @@
BasicBlock *QFB = QBI->getSuccessor(1);
BasicBlock *PostBB = QFB->getSingleSuccessor();
+ // Make sure we have a good guess for PostBB. If QTB's only successor is
+ // QFB, then QFB is a better PostBB.
+ if (QTB->getSingleSuccessor() == QFB)
+ PostBB = QFB;
+
+ // If we couldn't find a good PostBB, stop.
+ if (!PostBB)
+ return false;
+
bool InvertPCond = false, InvertQCond = false;
// Canonicalize fallthroughs to the true branches.
if (PFB == QBI->getParent()) {
@@ -3079,8 +3088,7 @@
auto HasOnePredAndOneSucc = [](BasicBlock *BB, BasicBlock *P, BasicBlock *S) {
return BB->getSinglePredecessor() == P && BB->getSingleSuccessor() == S;
};
- if (!PostBB ||
- !HasOnePredAndOneSucc(PFB, PBI->getParent(), QBI->getParent()) ||
+ if (!HasOnePredAndOneSucc(PFB, PBI->getParent(), QBI->getParent()) ||
!HasOnePredAndOneSucc(QFB, QBI->getParent(), PostBB))
return false;
if ((PTB && !HasOnePredAndOneSucc(PTB, PBI->getParent(), QBI->getParent())) ||
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32323.96154.patch
Type: text/x-patch
Size: 2720 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170421/eea24ed0/attachment.bin>
More information about the llvm-commits
mailing list