Files
clang-p2996/llvm/test/Transforms/CodeExtractor/PartialInlineEntryPHICost.ll
Florian Hahn fd6ea134f4 [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
2018-11-27 18:17:27 +00:00

41 lines
1.1 KiB
LLVM

; 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
}