1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
llvm-mirror/test/Transforms/PartialInlining/intrinsic-call-cost.ll
Dangeti Tharun kumar b31191fb60 [Partial Inliner] Compute intrinsic cost through TTI
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
2020-09-16 15:12:31 +01:00

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)