192 lines
5.9 KiB
LLVM
192 lines
5.9 KiB
LLVM
; RUN: opt < %s -inline -S -inlinecold-threshold=25 -enable-new-pm=0 | FileCheck %s
|
|
; RUN: opt < %s -passes='require<profile-summary>,cgscc(inline)' -S -inlinecold-threshold=25 | FileCheck %s
|
|
; Test that functions with attribute Cold are not inlined while the
|
|
; same function without attribute Cold will be inlined.
|
|
|
|
; RUN: opt < %s -inline -S -inline-threshold=600 -enable-new-pm=0 | FileCheck %s -check-prefix=OVERRIDE
|
|
; RUN: opt < %s -passes='require<profile-summary>,cgscc(inline)' -S -inline-threshold=600 -enable-new-pm=0 | FileCheck %s -check-prefix=OVERRIDE
|
|
; The command line argument for inline-threshold should override
|
|
; the default cold threshold, so a cold function with size bigger
|
|
; than the default cold threshold (225) will be inlined.
|
|
|
|
; RUN: opt < %s -inline -S -enable-new-pm=0 | FileCheck %s -check-prefix=DEFAULT
|
|
; RUN: opt < %s -passes='require<profile-summary>,cgscc(inline)' -S | FileCheck %s -check-prefix=DEFAULT
|
|
; The same cold function will not be inlined with the default behavior.
|
|
|
|
@a = global i32 4
|
|
|
|
; This function should be larger than the cold threshold (75), but smaller
|
|
; than the regular threshold.
|
|
; Function Attrs: nounwind readnone uwtable
|
|
define i32 @simpleFunction(i32 %a) #0 {
|
|
entry:
|
|
call void @extern()
|
|
%a1 = load volatile i32, i32* @a
|
|
%x1 = add i32 %a1, %a1
|
|
%a2 = load volatile i32, i32* @a
|
|
%x2 = add i32 %x1, %a2
|
|
%a3 = load volatile i32, i32* @a
|
|
%x3 = add i32 %x2, %a3
|
|
%a4 = load volatile i32, i32* @a
|
|
%x4 = add i32 %x3, %a4
|
|
%a5 = load volatile i32, i32* @a
|
|
%x5 = add i32 %x4, %a5
|
|
%a6 = load volatile i32, i32* @a
|
|
%x6 = add i32 %x5, %a6
|
|
%a7 = load volatile i32, i32* @a
|
|
%x7 = add i32 %x6, %a6
|
|
%a8 = load volatile i32, i32* @a
|
|
%x8 = add i32 %x7, %a8
|
|
%a9 = load volatile i32, i32* @a
|
|
%x9 = add i32 %x8, %a9
|
|
%a10 = load volatile i32, i32* @a
|
|
%x10 = add i32 %x9, %a10
|
|
%a11 = load volatile i32, i32* @a
|
|
%x11 = add i32 %x10, %a11
|
|
%a12 = load volatile i32, i32* @a
|
|
%x12 = add i32 %x11, %a12
|
|
%add = add i32 %x12, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
; Function Attrs: nounwind cold readnone uwtable
|
|
define i32 @ColdFunction(i32 %a) #1 {
|
|
; CHECK-LABEL: @ColdFunction
|
|
; CHECK: ret
|
|
; OVERRIDE-LABEL: @ColdFunction
|
|
; OVERRIDE: ret
|
|
; DEFAULT-LABEL: @ColdFunction
|
|
; DEFAULT: ret
|
|
entry:
|
|
call void @extern()
|
|
%a1 = load volatile i32, i32* @a
|
|
%x1 = add i32 %a1, %a1
|
|
%a2 = load volatile i32, i32* @a
|
|
%x2 = add i32 %x1, %a2
|
|
%a3 = load volatile i32, i32* @a
|
|
%x3 = add i32 %x2, %a3
|
|
%a4 = load volatile i32, i32* @a
|
|
%x4 = add i32 %x3, %a4
|
|
%add = add i32 %x4, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
; This function should be larger than the default cold threshold (225).
|
|
define i32 @ColdFunction2(i32 %a) #1 {
|
|
; CHECK-LABEL: @ColdFunction2
|
|
; CHECK: ret
|
|
; OVERRIDE-LABEL: @ColdFunction2
|
|
; OVERRIDE: ret
|
|
; DEFAULT-LABEL: @ColdFunction2
|
|
; DEFAULT: ret
|
|
entry:
|
|
call void @extern()
|
|
%a1 = load volatile i32, i32* @a
|
|
%x1 = add i32 %a1, %a1
|
|
%a2 = load volatile i32, i32* @a
|
|
%x2 = add i32 %x1, %a2
|
|
%a3 = load volatile i32, i32* @a
|
|
%x3 = add i32 %x2, %a3
|
|
%a4 = load volatile i32, i32* @a
|
|
%x4 = add i32 %x3, %a4
|
|
%a5 = load volatile i32, i32* @a
|
|
%x5 = add i32 %x4, %a5
|
|
%a6 = load volatile i32, i32* @a
|
|
%x6 = add i32 %x5, %a6
|
|
%a7 = load volatile i32, i32* @a
|
|
%x7 = add i32 %x6, %a7
|
|
%a8 = load volatile i32, i32* @a
|
|
%x8 = add i32 %x7, %a8
|
|
%a9 = load volatile i32, i32* @a
|
|
%x9 = add i32 %x8, %a9
|
|
%a10 = load volatile i32, i32* @a
|
|
%x10 = add i32 %x9, %a10
|
|
%a11 = load volatile i32, i32* @a
|
|
%x11 = add i32 %x10, %a11
|
|
%a12 = load volatile i32, i32* @a
|
|
%x12 = add i32 %x11, %a12
|
|
|
|
%a21 = load volatile i32, i32* @a
|
|
%x21 = add i32 %x12, %a21
|
|
%a22 = load volatile i32, i32* @a
|
|
%x22 = add i32 %x21, %a22
|
|
%a23 = load volatile i32, i32* @a
|
|
%x23 = add i32 %x22, %a23
|
|
%a24 = load volatile i32, i32* @a
|
|
%x24 = add i32 %x23, %a24
|
|
%a25 = load volatile i32, i32* @a
|
|
%x25 = add i32 %x24, %a25
|
|
%a26 = load volatile i32, i32* @a
|
|
%x26 = add i32 %x25, %a26
|
|
%a27 = load volatile i32, i32* @a
|
|
%x27 = add i32 %x26, %a27
|
|
%a28 = load volatile i32, i32* @a
|
|
%x28 = add i32 %x27, %a28
|
|
%a29 = load volatile i32, i32* @a
|
|
%x29 = add i32 %x28, %a29
|
|
%a30 = load volatile i32, i32* @a
|
|
%x30 = add i32 %x29, %a30
|
|
%a31 = load volatile i32, i32* @a
|
|
%x31 = add i32 %x30, %a31
|
|
%a32 = load volatile i32, i32* @a
|
|
%x32 = add i32 %x31, %a32
|
|
|
|
%a41 = load volatile i32, i32* @a
|
|
%x41 = add i32 %x32, %a41
|
|
%a42 = load volatile i32, i32* @a
|
|
%x42 = add i32 %x41, %a42
|
|
%a43 = load volatile i32, i32* @a
|
|
%x43 = add i32 %x42, %a43
|
|
%a44 = load volatile i32, i32* @a
|
|
%x44 = add i32 %x43, %a44
|
|
%a45 = load volatile i32, i32* @a
|
|
%x45 = add i32 %x44, %a45
|
|
%a46 = load volatile i32, i32* @a
|
|
%x46 = add i32 %x45, %a46
|
|
%a47 = load volatile i32, i32* @a
|
|
%x47 = add i32 %x46, %a47
|
|
%a48 = load volatile i32, i32* @a
|
|
%x48 = add i32 %x47, %a48
|
|
%a49 = load volatile i32, i32* @a
|
|
%x49 = add i32 %x48, %a49
|
|
%a50 = load volatile i32, i32* @a
|
|
%x50 = add i32 %x49, %a50
|
|
%a51 = load volatile i32, i32* @a
|
|
%x51 = add i32 %x50, %a51
|
|
%a52 = load volatile i32, i32* @a
|
|
%x52 = add i32 %x51, %a52
|
|
|
|
%add = add i32 %x52, %a
|
|
ret i32 %add
|
|
}
|
|
|
|
; Function Attrs: nounwind readnone uwtable
|
|
define i32 @bar(i32 %a) #0 {
|
|
; CHECK-LABEL: @bar
|
|
; CHECK: call i32 @ColdFunction(i32 5)
|
|
; CHECK-NOT: call i32 @simpleFunction(i32 6)
|
|
; CHECK: call i32 @ColdFunction2(i32 5)
|
|
; CHECK: ret
|
|
; OVERRIDE-LABEL: @bar
|
|
; OVERRIDE-NOT: call i32 @ColdFunction(i32 5)
|
|
; OVERRIDE-NOT: call i32 @simpleFunction(i32 6)
|
|
; OVERRIDE-NOT: call i32 @ColdFunction2(i32 5)
|
|
; OVERRIDE: ret
|
|
; DEFAULT-LABEL: @bar
|
|
; DEFAULT-NOT: call i32 @ColdFunction(i32 5)
|
|
; DEFAULT-NOT: call i32 @simpleFunction(i32 6)
|
|
; DEFAULT: call i32 @ColdFunction2(i32 5)
|
|
; DEFAULT: ret
|
|
entry:
|
|
%0 = tail call i32 @ColdFunction(i32 5)
|
|
%1 = tail call i32 @simpleFunction(i32 6)
|
|
%2 = tail call i32 @ColdFunction2(i32 5)
|
|
%3 = add i32 %0, %1
|
|
%add = add i32 %2, %3
|
|
ret i32 %add
|
|
}
|
|
|
|
declare void @extern()
|
|
attributes #0 = { nounwind readnone uwtable }
|
|
attributes #1 = { nounwind cold readnone uwtable }
|