xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/fmaxnum.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 -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.maxnum.f32(float, float) #0
5*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>) #0
6*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>) #0
7*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>) #0
8*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.maxnum.v16f32(<16 x float>, <16 x float>) #0
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.maxnum.f64(double, double)
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @test_fmax_f32
13*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
16*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
17*9880d681SAndroid Build Coastguard Workerdefine void @test_fmax_f32(float addrspace(1)* %out, float %a, float %b) nounwind {
18*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float %a, float %b) #0
19*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
20*9880d681SAndroid Build Coastguard Worker  ret void
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @test_fmax_v2f32
24*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
25*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+]]
28*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
29*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
30*9880d681SAndroid Build Coastguard Workerdefine void @test_fmax_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b) nounwind {
31*9880d681SAndroid Build Coastguard Worker  %val = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %b) #0
32*9880d681SAndroid Build Coastguard Worker  store <2 x float> %val, <2 x float> addrspace(1)* %out, align 8
33*9880d681SAndroid Build Coastguard Worker  ret void
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @test_fmax_v4f32
37*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
38*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
39*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
40*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+]]
43*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
44*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
45*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
46*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]]
47*9880d681SAndroid Build Coastguard Workerdefine void @test_fmax_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %a, <4 x float> %b) nounwind {
48*9880d681SAndroid Build Coastguard Worker  %val = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b) #0
49*9880d681SAndroid Build Coastguard Worker  store <4 x float> %val, <4 x float> addrspace(1)* %out, align 16
50*9880d681SAndroid Build Coastguard Worker  ret void
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @test_fmax_v8f32
54*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
55*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
56*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
57*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
58*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
59*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
60*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
61*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT1:T[0-9]+]]
64*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT2:T[0-9]+]]
65*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].X
66*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].Y
67*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].Z
68*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].W
69*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].X
70*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].Y
71*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].Z
72*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].W
73*9880d681SAndroid Build Coastguard Workerdefine void @test_fmax_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %a, <8 x float> %b) nounwind {
74*9880d681SAndroid Build Coastguard Worker  %val = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %b) #0
75*9880d681SAndroid Build Coastguard Worker  store <8 x float> %val, <8 x float> addrspace(1)* %out, align 32
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @test_fmax_v16f32
80*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
81*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
82*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
83*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
84*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
85*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
86*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
87*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
88*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
89*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
90*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
91*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
92*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
93*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
94*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
95*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT1:T[0-9]+]]
98*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT2:T[0-9]+]]
99*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT3:T[0-9]+]]
100*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT4:T[0-9]+]]
101*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].X
102*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].Y
103*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].Z
104*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT1]].W
105*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].X
106*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].Y
107*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].Z
108*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT2]].W
109*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT3]].X
110*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT3]].Y
111*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT3]].Z
112*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT3]].W
113*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT4]].X
114*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT4]].Y
115*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT4]].Z
116*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_DX10 {{.*}}[[OUT4]].W
117*9880d681SAndroid Build Coastguard Workerdefine void @test_fmax_v16f32(<16 x float> addrspace(1)* %out, <16 x float> %a, <16 x float> %b) nounwind {
118*9880d681SAndroid Build Coastguard Worker  %val = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %b) #0
119*9880d681SAndroid Build Coastguard Worker  store <16 x float> %val, <16 x float> addrspace(1)* %out, align 64
120*9880d681SAndroid Build Coastguard Worker  ret void
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32
124*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
125*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 2.0
126*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
129*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
130*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
131*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32(float addrspace(1)* %out) nounwind {
132*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 1.0, float 2.0) #0
133*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
134*9880d681SAndroid Build Coastguard Worker  ret void
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_nan_nan
138*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
139*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000
140*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
143*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
144*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
145*9880d681SAndroid Build Coastguard Worker; EG: 2143289344(nan)
146*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_nan_nan(float addrspace(1)* %out) nounwind {
147*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 0x7FF8000000000000, float 0x7FF8000000000000) #0
148*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
149*9880d681SAndroid Build Coastguard Worker  ret void
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_val_nan
153*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
154*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 1.0
155*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
158*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
159*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
160*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_val_nan(float addrspace(1)* %out) nounwind {
161*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 1.0, float 0x7FF8000000000000) #0
162*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
163*9880d681SAndroid Build Coastguard Worker  ret void
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_nan_val
167*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
168*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 1.0
169*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
172*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
173*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
174*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_nan_val(float addrspace(1)* %out) nounwind {
175*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 0x7FF8000000000000, float 1.0) #0
176*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
177*9880d681SAndroid Build Coastguard Worker  ret void
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_p0_p0
181*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
182*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0
183*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
186*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
187*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
188*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_p0_p0(float addrspace(1)* %out) nounwind {
189*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 0.0, float 0.0) #0
190*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
191*9880d681SAndroid Build Coastguard Worker  ret void
192*9880d681SAndroid Build Coastguard Worker}
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_p0_n0
195*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
196*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0
197*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
200*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
201*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
202*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_p0_n0(float addrspace(1)* %out) nounwind {
203*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 0.0, float -0.0) #0
204*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
205*9880d681SAndroid Build Coastguard Worker  ret void
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_n0_p0
209*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
210*9880d681SAndroid Build Coastguard Worker; SI: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
211*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
214*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
215*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
216*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_n0_p0(float addrspace(1)* %out) nounwind {
217*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float -0.0, float 0.0) #0
218*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
219*9880d681SAndroid Build Coastguard Worker  ret void
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @constant_fold_fmax_f32_n0_n0
223*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_max_f32_e32
224*9880d681SAndroid Build Coastguard Worker; SI: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
225*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[REG]]
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
228*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
229*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
230*9880d681SAndroid Build Coastguard Workerdefine void @constant_fold_fmax_f32_n0_n0(float addrspace(1)* %out) nounwind {
231*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float -0.0, float -0.0) #0
232*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
233*9880d681SAndroid Build Coastguard Worker  ret void
234*9880d681SAndroid Build Coastguard Worker}
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @fmax_var_immediate_f32
237*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e64 {{v[0-9]+}}, 2.0, {{s[0-9]+}}
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
240*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_DX10
241*9880d681SAndroid Build Coastguard Worker; EG: MOV {{.*}}[[OUT]], literal.{{[xy]}}
242*9880d681SAndroid Build Coastguard Workerdefine void @fmax_var_immediate_f32(float addrspace(1)* %out, float %a) nounwind {
243*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float %a, float 2.0) #0
244*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
245*9880d681SAndroid Build Coastguard Worker  ret void
246*9880d681SAndroid Build Coastguard Worker}
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @fmax_immediate_var_f32
249*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e64 {{v[0-9]+}}, 2.0, {{s[0-9]+}}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
252*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]], {{KC0\[[0-9]\].[XYZW]}}, literal.{{[xy]}}
253*9880d681SAndroid Build Coastguard Workerdefine void @fmax_immediate_var_f32(float addrspace(1)* %out, float %a) nounwind {
254*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 2.0, float %a) #0
255*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
256*9880d681SAndroid Build Coastguard Worker  ret void
257*9880d681SAndroid Build Coastguard Worker}
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @fmax_var_literal_f32
260*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0x42c60000
261*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32 {{v[0-9]+}}, {{s[0-9]+}}, [[REG]]
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
264*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]], {{KC0\[[0-9]\].[XYZW]}}, literal.{{[xy]}}
265*9880d681SAndroid Build Coastguard Workerdefine void @fmax_var_literal_f32(float addrspace(1)* %out, float %a) nounwind {
266*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float %a, float 99.0) #0
267*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
268*9880d681SAndroid Build Coastguard Worker  ret void
269*9880d681SAndroid Build Coastguard Worker}
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @fmax_literal_var_f32
272*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0x42c60000
273*9880d681SAndroid Build Coastguard Worker; SI: v_max_f32_e32 {{v[0-9]+}}, {{s[0-9]+}}, [[REG]]
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[OUT:T[0-9]+\.[XYZW]]]
276*9880d681SAndroid Build Coastguard Worker; EG: MAX_DX10 {{.*}}[[OUT]], {{KC0\[[0-9]\].[XYZW]}}, literal.{{[xy]}}
277*9880d681SAndroid Build Coastguard Workerdefine void @fmax_literal_var_f32(float addrspace(1)* %out, float %a) nounwind {
278*9880d681SAndroid Build Coastguard Worker  %val = call float @llvm.maxnum.f32(float 99.0, float %a) #0
279*9880d681SAndroid Build Coastguard Worker  store float %val, float addrspace(1)* %out, align 4
280*9880d681SAndroid Build Coastguard Worker  ret void
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone }
284