[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / udivrem64.ll
blob32a758b7c7d8773038fd3c7f03ff7b36416aabdc
1 ;RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=GCN --check-prefix=FUNC %s
2 ;RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
3 ;RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
4 ;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
6 ;FUNC-LABEL: {{^}}test_udiv:
7 ;EG: RECIP_UINT
8 ;EG: LSHL {{.*}}, 1,
9 ;EG: BFE_UINT
10 ;EG: BFE_UINT
11 ;EG: BFE_UINT
12 ;EG: BFE_UINT
13 ;EG: BFE_UINT
14 ;EG: BFE_UINT
15 ;EG: BFE_UINT
16 ;EG: BFE_UINT
17 ;EG: BFE_UINT
18 ;EG: BFE_UINT
19 ;EG: BFE_UINT
20 ;EG: BFE_UINT
21 ;EG: BFE_UINT
22 ;EG: BFE_UINT
23 ;EG: BFE_UINT
24 ;EG: BFE_UINT
25 ;EG: BFE_UINT
26 ;EG: BFE_UINT
27 ;EG: BFE_UINT
28 ;EG: BFE_UINT
29 ;EG: BFE_UINT
30 ;EG: BFE_UINT
31 ;EG: BFE_UINT
32 ;EG: BFE_UINT
33 ;EG: BFE_UINT
34 ;EG: BFE_UINT
35 ;EG: BFE_UINT
36 ;EG: BFE_UINT
37 ;EG: BFE_UINT
38 ;EG: BFE_UINT
40 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
41 ;GCN: v_rcp_f32_e32
42 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
43 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
44 ;GCN: v_trunc_f32_e32
45 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
46 ;GCN: s_endpgm
47 define amdgpu_kernel void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
48   %result = udiv i64 %x, %y
49   store i64 %result, i64 addrspace(1)* %out
50   ret void
53 ;FUNC-LABEL: {{^}}test_urem:
54 ;EG: RECIP_UINT
55 ;EG: BFE_UINT
56 ;EG: BFE_UINT
57 ;EG: BFE_UINT
58 ;EG: BFE_UINT
59 ;EG: BFE_UINT
60 ;EG: BFE_UINT
61 ;EG: BFE_UINT
62 ;EG: BFE_UINT
63 ;EG: BFE_UINT
64 ;EG: BFE_UINT
65 ;EG: BFE_UINT
66 ;EG: BFE_UINT
67 ;EG: BFE_UINT
68 ;EG: BFE_UINT
69 ;EG: BFE_UINT
70 ;EG: BFE_UINT
71 ;EG: BFE_UINT
72 ;EG: BFE_UINT
73 ;EG: BFE_UINT
74 ;EG: BFE_UINT
75 ;EG: BFE_UINT
76 ;EG: BFE_UINT
77 ;EG: BFE_UINT
78 ;EG: BFE_UINT
79 ;EG: BFE_UINT
80 ;EG: BFE_UINT
81 ;EG: BFE_UINT
82 ;EG: BFE_UINT
83 ;EG: BFE_UINT
84 ;EG: BFE_UINT
85 ;EG: AND_INT {{.*}}, 1,
87 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
88 ;GCN: v_rcp_f32_e32
89 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
90 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
91 ;GCN: v_trunc_f32_e32
92 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
93 ;GCN: s_endpgm
94 define amdgpu_kernel void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
95   %result = urem i64 %x, %y
96   store i64 %result, i64 addrspace(1)* %out
97   ret void
100 ;FUNC-LABEL: {{^}}test_udiv3264:
101 ;EG: RECIP_UINT
102 ;EG-NOT: BFE_UINT
104 ;GCN-NOT: s_bfe_u32
105 ;GCN-NOT: v_mad_f32
106 ;SI-NOT: v_lshr_b64
107 ;VI-NOT: v_lshrrev_b64
108 ;GCN: s_endpgm
109 define amdgpu_kernel void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
110   %1 = lshr i64 %x, 33
111   %2 = lshr i64 %y, 33
112   %result = udiv i64 %1, %2
113   store i64 %result, i64 addrspace(1)* %out
114   ret void
117 ;FUNC-LABEL: {{^}}test_urem3264:
118 ;EG: RECIP_UINT
119 ;EG-NOT: BFE_UINT
121 ;GCN-NOT: s_bfe_u32
122 ;GCN-NOT: v_mad_f32
123 ;SI-NOT: v_lshr_b64
124 ;VI-NOT: v_lshrrev_b64
125 ;GCN: s_endpgm
126 define amdgpu_kernel void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
127   %1 = lshr i64 %x, 33
128   %2 = lshr i64 %y, 33
129   %result = urem i64 %1, %2
130   store i64 %result, i64 addrspace(1)* %out
131   ret void
134 ;FUNC-LABEL: {{^}}test_udiv2364:
135 ;EG: UINT_TO_FLT
136 ;EG: UINT_TO_FLT
137 ;EG: FLT_TO_UINT
138 ;EG-NOT: RECIP_UINT
139 ;EG-NOT: BFE_UINT
141 ;SI-NOT: v_lshr_b64
142 ;VI-NOT: v_lshrrev_b64
143 ;GCN: v_mad_f32
144 ;GCN: s_endpgm
145 define amdgpu_kernel void @test_udiv2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
146   %1 = lshr i64 %x, 41
147   %2 = lshr i64 %y, 41
148   %result = udiv i64 %1, %2
149   store i64 %result, i64 addrspace(1)* %out
150   ret void
153 ;FUNC-LABEL: {{^}}test_urem2364:
154 ;EG: UINT_TO_FLT
155 ;EG: UINT_TO_FLT
156 ;EG: FLT_TO_UINT
157 ;EG-NOT: RECIP_UINT
158 ;EG-NOT: BFE_UINT
160 ;SI-NOT: v_lshr_b64
161 ;VI-NOT: v_lshrrev_b64
162 ;GCN: v_mad_f32
163 ;GCN: s_endpgm
164 define amdgpu_kernel void @test_urem2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
165   %1 = lshr i64 %x, 41
166   %2 = lshr i64 %y, 41
167   %result = urem i64 %1, %2
168   store i64 %result, i64 addrspace(1)* %out
169   ret void
172 ;FUNC-LABEL: {{^}}test_udiv_k:
173 ;GCN: v_mul{{.+}} v{{[0-9]+}}, v{{[0-9]+}}, 24
174 ;GCN: v_mul{{.+}} v{{[0-9]+}}, v{{[0-9]+}}, 24
175 ;GCN: v_mul{{.+}} v{{[0-9]+}}, v{{[0-9]+}}, 24
176 ;GCN: v_add
177 ;GCN: v_addc
178 ;GCN: v_addc
179 ;GCN: s_endpgm
180 define amdgpu_kernel void @test_udiv_k(i64 addrspace(1)* %out, i64 %x) {
181   %result = udiv i64 24, %x
182   store i64 %result, i64 addrspace(1)* %out
183   ret void