diff options
| author | Florian Hahn <florian.hahn@arm.com> | 2018-11-27 18:17:27 +0000 |
|---|---|---|
| committer | Florian Hahn <florian.hahn@arm.com> | 2018-11-27 18:17:27 +0000 |
| commit | fd6ea134f4c4eb32d9f19d4ba36316e6d7e05f4b (patch) | |
| tree | 4029d6148bea4bd50feb30ede3f2a67e61eb3349 /llvm/test | |
| parent | 5bb1bf6ff55d9a7d9af51e0f3b55de768567deb9 (diff) | |
| download | bcm5719-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')
| -rw-r--r-- | llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll | 40 |
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 +} |

