summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorFlorian Hahn <florian.hahn@arm.com>2018-11-27 18:17:27 +0000
committerFlorian Hahn <florian.hahn@arm.com>2018-11-27 18:17:27 +0000
commitfd6ea134f4c4eb32d9f19d4ba36316e6d7e05f4b (patch)
tree4029d6148bea4bd50feb30ede3f2a67e61eb3349 /llvm/test/Transforms
parent5bb1bf6ff55d9a7d9af51e0f3b55de768567deb9 (diff)
downloadbcm5719-llvm-fd6ea134f4c4eb32d9f19d4ba36316e6d7e05f4b.tar.gz
bcm5719-llvm-fd6ea134f4c4eb32d9f19d4ba36316e6d7e05f4b.zip
[PartialInliner] Make PHIs free in cost computation.
InlineCost also treats them as free and the current implementation can cause assertion failures if PHI nodes are moved outside the region from entry BBs to the region. It also updates the code to use the instructionsWithoutDebug iterator. Reviewers: davidxl, davide, vsk, graham-yiu-huawei Reviewed By: davidxl Differential Revision: https://reviews.llvm.org/D54748 llvm-svn: 347683
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll40
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll b/llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll
new file mode 100644
index 00000000000..a8c2d62710d
--- /dev/null
+++ b/llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll
@@ -0,0 +1,40 @@
+; RUN: opt < %s -partial-inliner -S | FileCheck %s
+; RUN: opt < %s -passes=partial-inliner -S | FileCheck %s
+
+; Check that we do not overcompute the outlined region cost, where the PHIs in
+; the outlined region entry (BB4) are moved outside the region by CodeExtractor.
+
+define i32 @bar(i32 %arg) {
+bb:
+ %tmp = icmp slt i32 %arg, 0
+ br i1 %tmp, label %bb1, label %bb2
+
+bb1:
+ br i1 undef, label %bb4, label %bb2
+
+bb2: ; preds = %bb, %bb1
+ br i1 undef, label %bb4, label %bb5
+
+bb4: ; preds = %bb1, %bb2
+ %xx1 = phi i32 [ 1, %bb1 ], [ 9, %bb2 ]
+ %xx2 = phi i32 [ 1, %bb1 ], [ 9, %bb2 ]
+ %xx3 = phi i32 [ 1, %bb1 ], [ 9, %bb2 ]
+ tail call void (...) @foo() #2
+ br label %bb5
+
+bb5: ; preds = %bb4, %bb2
+ %tmp6 = phi i32 [ 1, %bb2 ], [ 9, %bb4 ]
+ ret i32 %tmp6
+}
+
+declare void @foo(...)
+
+define i32 @dummy_caller(i32 %arg) {
+bb:
+; CHECK-LABEL: @dummy_caller
+; CHECK: br i1
+; CHECK: br i1
+; CHECK: call void @bar.1.
+ %tmp = tail call i32 @bar(i32 %arg)
+ ret i32 %tmp
+}
OpenPOWER on IntegriCloud