• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
5
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
39
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
47define 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
51}
52
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,
86
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
94define 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
98}
99
100;FUNC-LABEL: {{^}}test_udiv3264:
101;EG: RECIP_UINT
102;EG-NOT: BFE_UINT
103
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
109define 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
115}
116
117;FUNC-LABEL: {{^}}test_urem3264:
118;EG: RECIP_UINT
119;EG-NOT: BFE_UINT
120
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
126define 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
132}
133
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
140
141;SI-NOT: v_lshr_b64
142;VI-NOT: v_lshrrev_b64
143;GCN: v_mad_f32
144;GCN: s_endpgm
145define 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
151}
152
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
159
160;SI-NOT: v_lshr_b64
161;VI-NOT: v_lshrrev_b64
162;GCN: v_mad_f32
163;GCN: s_endpgm
164define 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
170}
171