[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / sdivrem64.ll
blobd51eededd1c48510efa6bdb34527371f3d59a728
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=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
5 ;FUNC-LABEL: {{^}}s_test_sdiv:
6 ;EG: RECIP_UINT
7 ;EG: LSHL {{.*}}, 1,
8 ;EG: BFE_UINT
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
39 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
40 ;GCN: v_rcp_f32_e32
41 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
42 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
43 ;GCN: v_trunc_f32_e32
44 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
45 ;GCN: s_endpgm
46 define amdgpu_kernel void @s_test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
47   %result = sdiv i64 %x, %y
48   store i64 %result, i64 addrspace(1)* %out
49   ret void
52 ;FUNC-LABEL: {{^}}s_test_srem:
53 ;EG: RECIP_UINT
54 ;EG: BFE_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: AND_INT {{.*}}, 1,
86 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
87 ;GCN: v_rcp_f32_e32
88 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
89 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
90 ;GCN: v_trunc_f32_e32
91 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
92 ;GCN: s_endpgm
93 define amdgpu_kernel void @s_test_srem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
94   %result = urem i64 %x, %y
95   store i64 %result, i64 addrspace(1)* %out
96   ret void
99 ;FUNC-LABEL: {{^}}test_sdiv3264:
100 ;EG: RECIP_UINT
101 ;EG-NOT: BFE_UINT
103 ;GCN-NOT: s_bfe_u32
104 ;GCN-NOT: v_mad_f32
105 ;SI-NOT: v_lshr_b64
106 ;VI-NOT: v_lshrrev_b64
107 ;GCN: s_endpgm
108 define amdgpu_kernel void @test_sdiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
109   %1 = ashr i64 %x, 33
110   %2 = ashr i64 %y, 33
111   %result = sdiv i64 %1, %2
112   store i64 %result, i64 addrspace(1)* %out
113   ret void
116 ;FUNC-LABEL: {{^}}test_srem3264:
117 ;EG: RECIP_UINT
118 ;EG-NOT: BFE_UINT
120 ;GCN-NOT: s_bfe_u32
121 ;GCN-NOT: v_mad_f32
122 ;SI-NOT: v_lshr_b64
123 ;VI-NOT: v_lshrrev_b64
124 ;GCN: s_endpgm
125 define amdgpu_kernel void @test_srem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
126   %1 = ashr i64 %x, 33
127   %2 = ashr i64 %y, 33
128   %result = srem i64 %1, %2
129   store i64 %result, i64 addrspace(1)* %out
130   ret void
133 ;FUNC-LABEL: {{^}}test_sdiv2464:
134 ;EG: INT_TO_FLT
135 ;EG: INT_TO_FLT
136 ;EG: FLT_TO_INT
137 ;EG-NOT: RECIP_UINT
138 ;EG-NOT: BFE_UINT
140 ;GCN-NOT: s_bfe_u32
141 ;GCN: v_mad_f32
142 ;SI-NOT: v_lshr_b64
143 ;VI-NOT: v_lshrrev_b64
144 ;GCN: s_endpgm
145 define amdgpu_kernel void @test_sdiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
146   %1 = ashr i64 %x, 40
147   %2 = ashr i64 %y, 40
148   %result = sdiv i64 %1, %2
149   store i64 %result, i64 addrspace(1)* %out
150   ret void
153 ;FUNC-LABEL: {{^}}test_srem2464:
154 ;EG: INT_TO_FLT
155 ;EG: INT_TO_FLT
156 ;EG: FLT_TO_INT
157 ;EG-NOT: RECIP_UINT
158 ;EG-NOT: BFE_UINT
160 ;GCN-NOT: s_bfe_u32
161 ;GCN: v_mad_f32
162 ;SI-NOT: v_lshr_b64
163 ;VI-NOT: v_lshrrev_b64
164 ;GCN: s_endpgm
165 define amdgpu_kernel void @test_srem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
166   %1 = ashr i64 %x, 40
167   %2 = ashr i64 %y, 40
168   %result = srem i64 %1, %2
169   store i64 %result, i64 addrspace(1)* %out
170   ret void