xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/fdiv.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -mattr=+fp32-denormals -verify-machineinstrs < %s | FileCheck -check-prefix=I754 -check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs -amdgpu-fast-fdiv < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=I754 -check-prefix=FUNC %s
5*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs -enable-unsafe-fp-math < %s | FileCheck -check-prefix=UNSAFE-FP -check-prefix=FUNC %s
6*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 -check-prefix=FUNC %s
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; These tests check that fdiv is expanded correctly and also test that the
9*9880d681SAndroid Build Coastguard Worker; scheduler is scheduling the RECIP_IEEE and MUL_IEEE instructions in separate
10*9880d681SAndroid Build Coastguard Worker; instruction groups.
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; These test check that fdiv using unsafe_fp_math, coarse fp div, and IEEE754 fp div.
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_f32:
15*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[2].W
16*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, PS
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
19*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
22*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_div_scale_f32
25*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_rcp_f32
26*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_fma_f32
27*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_mul_f32
28*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_fma_f32
29*9880d681SAndroid Build Coastguard Worker; I754-DAG: v_div_fixup_f32
30*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_f32(float addrspace(1)* %out, float %a, float %b) {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = fdiv float %a, %b
33*9880d681SAndroid Build Coastguard Worker  store float %0, float addrspace(1)* %out
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_f32_fast_math:
38*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[2].W
39*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, PS
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
42*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
45*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
46*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_f32_fast_math(float addrspace(1)* %out, float %a, float %b) {
47*9880d681SAndroid Build Coastguard Workerentry:
48*9880d681SAndroid Build Coastguard Worker  %0 = fdiv fast float %a, %b
49*9880d681SAndroid Build Coastguard Worker  store float %0, float addrspace(1)* %out
50*9880d681SAndroid Build Coastguard Worker  ret void
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_f32_arcp_math:
54*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[2].W
55*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].Z, PS
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
58*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
61*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
62*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_f32_arcp_math(float addrspace(1)* %out, float %a, float %b) {
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker  %0 = fdiv arcp float %a, %b
65*9880d681SAndroid Build Coastguard Worker  store float %0, float addrspace(1)* %out
66*9880d681SAndroid Build Coastguard Worker  ret void
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v2f32:
70*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Z
71*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Y
72*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[3].X, PS
73*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].W, PS
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
76*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
77*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
78*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
81*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
82*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
83*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
86*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
87*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
88*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
89*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
90*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
91*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b) {
92*9880d681SAndroid Build Coastguard Workerentry:
93*9880d681SAndroid Build Coastguard Worker  %0 = fdiv <2 x float> %a, %b
94*9880d681SAndroid Build Coastguard Worker  store <2 x float> %0, <2 x float> addrspace(1)* %out
95*9880d681SAndroid Build Coastguard Worker  ret void
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v2f32_fast_math:
99*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Z
100*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Y
101*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[3].X, PS
102*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].W, PS
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
105*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
106*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
107*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
110*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
111*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
112*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
113*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v2f32_fast_math(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %0 = fdiv fast <2 x float> %a, %b
116*9880d681SAndroid Build Coastguard Worker  store <2 x float> %0, <2 x float> addrspace(1)* %out
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v2f32_arcp_math:
121*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Z
122*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW]}}, KC0[3].Y
123*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[3].X, PS
124*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW]}}, KC0[2].W, PS
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
127*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32
128*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
129*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
132*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
133*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
134*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
135*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v2f32_arcp_math(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b) {
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %0 = fdiv arcp <2 x float> %a, %b
138*9880d681SAndroid Build Coastguard Worker  store <2 x float> %0, <2 x float> addrspace(1)* %out
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v4f32:
143*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
144*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
145*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
146*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
147*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
148*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
149*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
150*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
153*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
154*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
155*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
156*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
157*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
158*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
159*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
162*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
163*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
164*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
165*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
166*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
167*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
168*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
171*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
172*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
173*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
174*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
175*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
176*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
177*9880d681SAndroid Build Coastguard Worker; I754: v_div_scale_f32
178*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
179*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
180*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
181*9880d681SAndroid Build Coastguard Worker; I754: v_div_fixup_f32
182*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v4f32(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
183*9880d681SAndroid Build Coastguard Worker  %b_ptr = getelementptr <4 x float>, <4 x float> addrspace(1)* %in, i32 1
184*9880d681SAndroid Build Coastguard Worker  %a = load <4 x float>, <4 x float> addrspace(1) * %in
185*9880d681SAndroid Build Coastguard Worker  %b = load <4 x float>, <4 x float> addrspace(1) * %b_ptr
186*9880d681SAndroid Build Coastguard Worker  %result = fdiv <4 x float> %a, %b
187*9880d681SAndroid Build Coastguard Worker  store <4 x float> %result, <4 x float> addrspace(1)* %out
188*9880d681SAndroid Build Coastguard Worker  ret void
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v4f32_fast_math:
192*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
193*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
194*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
195*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
196*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
197*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
198*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
199*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
202*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
203*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
204*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
205*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
206*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
207*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
208*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
211*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
212*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
213*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
214*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
215*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
216*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
217*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
218*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v4f32_fast_math(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
219*9880d681SAndroid Build Coastguard Worker  %b_ptr = getelementptr <4 x float>, <4 x float> addrspace(1)* %in, i32 1
220*9880d681SAndroid Build Coastguard Worker  %a = load <4 x float>, <4 x float> addrspace(1) * %in
221*9880d681SAndroid Build Coastguard Worker  %b = load <4 x float>, <4 x float> addrspace(1) * %b_ptr
222*9880d681SAndroid Build Coastguard Worker  %result = fdiv fast <4 x float> %a, %b
223*9880d681SAndroid Build Coastguard Worker  store <4 x float> %result, <4 x float> addrspace(1)* %out
224*9880d681SAndroid Build Coastguard Worker  ret void
225*9880d681SAndroid Build Coastguard Worker}
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}fdiv_v4f32_arcp_math:
228*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
229*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
230*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
231*9880d681SAndroid Build Coastguard Worker; R600-DAG: RECIP_IEEE * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
232*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
233*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
234*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
235*9880d681SAndroid Build Coastguard Worker; R600-DAG: MUL_IEEE {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}, PS
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
238*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
239*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
240*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_rcp_f32_e32
241*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
242*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
243*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
244*9880d681SAndroid Build Coastguard Worker; UNSAFE-FP: v_mul_f32_e32
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
247*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
248*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
249*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
250*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
251*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
252*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_rcp_f32
253*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mul_f32
254*9880d681SAndroid Build Coastguard Workerdefine void @fdiv_v4f32_arcp_math(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
255*9880d681SAndroid Build Coastguard Worker  %b_ptr = getelementptr <4 x float>, <4 x float> addrspace(1)* %in, i32 1
256*9880d681SAndroid Build Coastguard Worker  %a = load <4 x float>, <4 x float> addrspace(1) * %in
257*9880d681SAndroid Build Coastguard Worker  %b = load <4 x float>, <4 x float> addrspace(1) * %b_ptr
258*9880d681SAndroid Build Coastguard Worker  %result = fdiv arcp <4 x float> %a, %b
259*9880d681SAndroid Build Coastguard Worker  store <4 x float> %result, <4 x float> addrspace(1)* %out
260*9880d681SAndroid Build Coastguard Worker  ret void
261*9880d681SAndroid Build Coastguard Worker}
262