diff options
Diffstat (limited to 'llvm/test/Transforms/Inline/inline-cold.ll')
-rw-r--r-- | llvm/test/Transforms/Inline/inline-cold.ll | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/inline-cold.ll b/llvm/test/Transforms/Inline/inline-cold.ll new file mode 100644 index 00000000000..e0e679ad403 --- /dev/null +++ b/llvm/test/Transforms/Inline/inline-cold.ll @@ -0,0 +1,188 @@ +; RUN: opt < %s -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 | 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 | 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 } |