xref: /llvm-project/llvm/test/CodeGen/AMDGPU/divergence-driven-min-max.ll (revision 7652a59407018c057cdc1163c9f64b5b6f0954eb)
1; RUN: llc -mtriple=amdgcn -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GCN %s
2; RUN: llc -mtriple=amdgcn -enable-new-pm -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GCN %s
3
4; GCN-LABEL: name:            uniform_imin
5; GCN: S_MIN_I32
6define amdgpu_kernel void @uniform_imin(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
7  %cmp = icmp sle i32 %a, %b
8  %val = select i1 %cmp, i32 %a, i32 %b
9  store i32 %val, ptr addrspace(1) %out, align 4
10  ret void
11}
12
13; GCN-LABEL: name:            divergent_imin
14; GCN: V_MIN_I32_e64
15define void @divergent_imin(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
16  %cmp = icmp sle i32 %a, %b
17  %val = select i1 %cmp, i32 %a, i32 %b
18  store i32 %val, ptr addrspace(1) %out, align 4
19  ret void
20}
21
22; GCN-LABEL: name:            uniform_umin
23; GCN: S_MIN_U32
24define amdgpu_kernel void @uniform_umin(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
25  %tmp = icmp ule i32 %a, %b
26  %val = select i1 %tmp, i32 %a, i32 %b
27  store i32 %val, ptr addrspace(1) %out, align 8
28  ret void
29}
30
31; GCN-LABEL: name:            divergent_umin
32; GCN: V_MIN_U32_e64
33define void @divergent_umin(ptr addrspace(1) %out, i32 %a, i32 %b) #0 {
34  %tmp = icmp ule i32 %a, %b
35  %val = select i1 %tmp, i32 %a, i32 %b
36  store i32 %val, ptr addrspace(1) %out, align 8
37  ret void
38}
39
40; GCN-LABEL: name:            uniform_imax
41; GCN: S_MAX_I32
42define amdgpu_kernel void @uniform_imax(ptr addrspace(1) %out, i32 %a, i32 %b) nounwind {
43  %cmp = icmp sge i32 %a, %b
44  %val = select i1 %cmp, i32 %a, i32 %b
45  store i32 %val, ptr addrspace(1) %out, align 4
46  ret void
47}
48
49; GCN-LABEL: name:            divergent_imax
50; GCN: V_MAX_I32_e64
51define void @divergent_imax(ptr addrspace(1) %out, i32 %a, i32 %b) nounwind {
52  %cmp = icmp sge i32 %a, %b
53  %val = select i1 %cmp, i32 %a, i32 %b
54  store i32 %val, ptr addrspace(1) %out, align 4
55  ret void
56}
57
58; GCN-LABEL: name:            uniform_umax
59; GCN: S_MAX_U32
60define amdgpu_kernel void @uniform_umax(ptr addrspace(1) %out, i32 %a, i32 %b) nounwind {
61  %cmp = icmp uge i32 %a, %b
62  %val = select i1 %cmp, i32 %a, i32 %b
63  store i32 %val, ptr addrspace(1) %out, align 4
64  ret void
65}
66
67; GCN-LABEL: name:            divergent_umax
68; GCN: V_MAX_U32_e64
69define void @divergent_umax(ptr addrspace(1) %out, i32 %a, i32 %b) nounwind {
70  %cmp = icmp uge i32 %a, %b
71  %val = select i1 %cmp, i32 %a, i32 %b
72  store i32 %val, ptr addrspace(1) %out, align 4
73  ret void
74}
75