From fd6ea134f4c4eb32d9f19d4ba36316e6d7e05f4b Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Tue, 27 Nov 2018 18:17:27 +0000 Subject: [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 --- .../CodeExtractor/PartialInlineEntryPHICost.ll | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll (limited to 'llvm/test') 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 +} -- cgit v1.2.3