mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
b31191fb60
https://bugs.llvm.org/show_bug.cgi?id=45932 assert(OutlinedFunctionCost >= Cloner.OutlinedRegionCost && "Outlined function cost should be no less than the outlined region") getting triggered in computeBBInlineCost. Intrinsics like "assume" are considered regular function calls while computing costs. This patch enables computeBBInlineCost to queries TTI for intrinsic call cost. Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D87132
56 lines
1.4 KiB
LLVM
56 lines
1.4 KiB
LLVM
; RUN: opt -partial-inliner -S < %s | FileCheck %s
|
|
|
|
; Checks that valid costs are computed for intrinsic calls.
|
|
; https://bugs.llvm.org/show_bug.cgi?id=45932
|
|
|
|
|
|
@emit_notes = external global i8, align 2
|
|
|
|
; CHECK: var_reg_delete
|
|
; CHECK-NEXT: bb
|
|
; CHECK-NEXT: tail call void @delete_variable_part()
|
|
; CHECK-NEXT: ret void
|
|
|
|
define void @var_reg_delete() {
|
|
bb:
|
|
tail call void @delete_variable_part()
|
|
ret void
|
|
}
|
|
|
|
; CHECK: delete_variable_part
|
|
; CHECK-NEXT: bb
|
|
; CHECK-NEXT: %tmp1.i = tail call i32 @find_variable_location_part()
|
|
; CHECK-NEXT: %tmp3.i = icmp sgt i32 %tmp1.i, -1
|
|
; CHECK-NEXT: br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
|
|
|
|
; CHECK: bb4.i
|
|
; CHECK-NEXT: %tmp.i.i = load i8, i8* @emit_notes
|
|
; CHECK-NEXT: %tmp1.i.i = icmp ne i8 %tmp.i.i, 0
|
|
; CHECK-NEXT: tail call void @llvm.assume(i1 %tmp1.i.i)
|
|
; CHECK-NEXT: unreachable
|
|
|
|
; CHECK: delete_slot_part.exit
|
|
; CHECK-NEXT: ret void
|
|
|
|
define void @delete_variable_part() {
|
|
bb:
|
|
%tmp1.i = tail call i32 @find_variable_location_part()
|
|
%tmp3.i = icmp sgt i32 %tmp1.i, -1
|
|
br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
|
|
|
|
bb4.i:
|
|
%tmp.i.i = load i8, i8* @emit_notes, align 2
|
|
%tmp1.i.i = icmp ne i8 %tmp.i.i, 0
|
|
tail call void @llvm.assume(i1 %tmp1.i.i)
|
|
unreachable
|
|
|
|
delete_slot_part.exit:
|
|
ret void
|
|
}
|
|
|
|
; CHECK: declare i32 @find_variable_location_part
|
|
declare i32 @find_variable_location_part()
|
|
|
|
; CHECK: declare void @llvm.assume(i1 noundef)
|
|
declare void @llvm.assume(i1 noundef)
|