[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / inline-maxbb.ll
blob70627151cc6329b6dfbd2ff9834dae6067df9ff1
1 ; RUN: opt -mtriple=amdgcn-- --amdgpu-inline -S -amdgpu-inline-max-bb=2 %s | FileCheck %s --check-prefix=NOINL
2 ; RUN: opt -mtriple=amdgcn-- --amdgpu-inline -S -amdgpu-inline-max-bb=3 %s | FileCheck %s --check-prefix=INL
4 define i32 @callee(i32 %x) {
5 entry:
6   %cc = icmp eq i32 %x, 1
7   br i1 %cc, label %ret_res, label %mulx
9 mulx:
10   %mul1 = mul i32 %x, %x
11   %mul2 = mul i32 %mul1, %x
12   %mul3 = mul i32 %mul1, %mul2
13   %mul4 = mul i32 %mul3, %mul2
14   %mul5 = mul i32 %mul4, %mul3
15   br label %ret_res
17 ret_res:
18   %r = phi i32 [ %mul5, %mulx ], [ %x, %entry ]
19   ret i32 %r
22 ; INL-LABEL: @caller
23 ; NOINL-LABEL: @caller
24 ; INL: mul i32
25 ; INL-NOT: call i32
26 ; NOINL-NOT: mul i32
27 ; NOINL: call i32
29 define amdgpu_kernel void @caller(i32 %x) {
30   %res = call i32 @callee(i32 %x)
31   store volatile i32 %res, i32 addrspace(1)* undef
32   ret void
36 ; inlinehint
37 define i32 @callee_hint(i32 %x) #0 {
38 entry:
39   %cc = icmp eq i32 %x, 1
40   br i1 %cc, label %ret_res, label %mulx
42 mulx:
43   %mul1 = mul i32 %x, %x
44   %mul2 = mul i32 %mul1, %x
45   %mul3 = mul i32 %mul1, %mul2
46   %mul4 = mul i32 %mul3, %mul2
47   %mul5 = mul i32 %mul4, %mul3
48   br label %ret_res
50 ret_res:
51   %r = phi i32 [ %mul5, %mulx ], [ %x, %entry ]
52   ret i32 %r
55 ; INL-LABEL: @caller_hint
56 ; NOINL-LABEL: @caller_hint
57 ; INL: mul i32
58 ; INL-NOT: call i32
59 ; NOINL: mul i32
60 ; NOINL-NOT: call i32
62 define amdgpu_kernel void @caller_hint(i32 %x) {
63   %res = call i32 @callee_hint(i32 %x)
64   store volatile i32 %res, i32 addrspace(1)* undef
65   ret void
68 attributes #0 = { inlinehint }