xref: /llvm-project/llvm/test/CodeGen/AMDGPU/maximumnum.ll (revision 1547382033ca156c13fc16c3b2baed7350b6de8e)
1ee61a4dbSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX8 %s
3ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s
4ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX10 %s
5ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s
6ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s
7ee61a4dbSMatt Arsenault
8ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16(half %x, half %y) {
9ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16:
10ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
11ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
13ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
14ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
15ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
16ee61a4dbSMatt Arsenault;
17ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16:
18ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
19ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v1, v1, v1
21ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
22ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
23ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
24ee61a4dbSMatt Arsenault;
25ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16:
26ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
27ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v1, v1, v1
29ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
30ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
31ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
32ee61a4dbSMatt Arsenault;
33ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16:
34ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
35ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v1, v1, v1
37ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
38ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
39ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
40ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
41ee61a4dbSMatt Arsenault;
42ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16:
43ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
44ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
45ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
46ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
47ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
48ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
49ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v1, v1, v1
50ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
51ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
52ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
53ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
54ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %x, half %y)
55ee61a4dbSMatt Arsenault  ret half %result
56ee61a4dbSMatt Arsenault}
57ee61a4dbSMatt Arsenault
58ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_nnan(half %x, half %y) {
59ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_nnan:
60ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
61ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
62ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
63ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
64ee61a4dbSMatt Arsenault;
65ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_nnan:
66ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
67ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
68ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
69ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
70ee61a4dbSMatt Arsenault;
71ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_nnan:
72ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
73ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
75ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
76ee61a4dbSMatt Arsenault;
77ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_nnan:
78ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
79ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
80ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
81ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
82ee61a4dbSMatt Arsenault;
83ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_nnan:
84ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
85ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
86ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
87ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
88ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
89ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
90ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
91ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
92ee61a4dbSMatt Arsenault  %result = call nnan half @llvm.maximumnum.f16(half %x, half %y)
93ee61a4dbSMatt Arsenault  ret half %result
94ee61a4dbSMatt Arsenault}
95ee61a4dbSMatt Arsenault
96ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_1.0(half %x) {
97ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_1.0:
98ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
99ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
101ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, 1.0, v0
102ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
103ee61a4dbSMatt Arsenault;
104ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_1.0:
105ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
106ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
107ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
108ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, 1.0, v0
109ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
110ee61a4dbSMatt Arsenault;
111ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_1.0:
112ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
113ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
114ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
115ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, 1.0, v0
116ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
117ee61a4dbSMatt Arsenault;
118ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_1.0:
119ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
120ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
121ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
122ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
123ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, 1.0, v0
124ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
125ee61a4dbSMatt Arsenault;
126ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_1.0:
127ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
128ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
129ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
130ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
131ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
132ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
133ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
134ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
135ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, 1.0, v0
136ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
137ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %x, half 1.0)
138ee61a4dbSMatt Arsenault  ret half %result
139ee61a4dbSMatt Arsenault}
140ee61a4dbSMatt Arsenault
141ee61a4dbSMatt Arsenaultdefine bfloat @v_maximumnum_bf16(bfloat %x, bfloat %y) {
142ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_bf16:
143ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
144ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
145ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
146ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
147ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
148ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
149ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
150ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
151ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
152ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
153ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v2
154ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
155ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
156ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
157ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
158ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
159ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
160ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
161ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
162ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
163ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
164ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
165ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0
166ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
167ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v1
168ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
169ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
170ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
171ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
172ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
173ee61a4dbSMatt Arsenault;
174ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_bf16:
175ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
176ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
177ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
178ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
179ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
180ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
181ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
182ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
183ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
184ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
185ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, v2, v3
186ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
187ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
188ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
189ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
190ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
191ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
192ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
193ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
194ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
195ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
196ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0
197ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
198ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v1
199ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
200ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
201ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
202ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
203ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
204ee61a4dbSMatt Arsenault;
205ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_bf16:
206ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
207ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
208ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
209ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
210ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
211ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
212ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
213ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
214ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
215ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
216ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v2, v3
217ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
218ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
219ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
220ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
221ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
222ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
223ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
224ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
225ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
226ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
227ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
228ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
229ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
230ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
231ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
232ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
233ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
234ee61a4dbSMatt Arsenault;
235ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_bf16:
236ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
237ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
238ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
239ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
240ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
241ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
242ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
243ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
244ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
245ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
246ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
247ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
248ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
249ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v2, v3
250ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
251ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
252ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
253ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v2, v2, v2
254ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_bfe_u32 v3, v2, 16, 1
255ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
256ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
257ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
258ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
259ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
260ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
261ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
262ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
263ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
264ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
265ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
266ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4)
267ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
268ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
269ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
270ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
271ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
272ee61a4dbSMatt Arsenault;
273ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_bf16:
274ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
275ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
276ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
277ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
278ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
279ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
280ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
281ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
282ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
283ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
284ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
285ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
286ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
287ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
288ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
289ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
290ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
291ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v2, v3
292ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
293ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
294ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
295ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v2, v2, v2
296ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_bfe_u32 v3, v2, 16, 1
297ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_or_b32_e32 v4, 0x400000, v2
298ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
299ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
300ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
301ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
302ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
303ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
304ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
305ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
306ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
307ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
308ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4)
309ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
310ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
311ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
312ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
313ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
314ee61a4dbSMatt Arsenault  %result = call bfloat @llvm.maximumnum.bf16(bfloat %x, bfloat %y)
315ee61a4dbSMatt Arsenault  ret bfloat %result
316ee61a4dbSMatt Arsenault}
317ee61a4dbSMatt Arsenault
318ee61a4dbSMatt Arsenaultdefine bfloat @v_maximumnum_bf16_nnan(bfloat %x, bfloat %y) {
319ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_bf16_nnan:
320ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
321ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
322ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
323ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
324ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v2
325ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
326ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0
327ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
328ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v1
329ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
330ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
331ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
332ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
333ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
334ee61a4dbSMatt Arsenault;
335ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_bf16_nnan:
336ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
337ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
338ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
339ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
340ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, v3, v2
341ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
342ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v0
343ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
344ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, 0, v1
345ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
346ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
347ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
348ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
349ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
350ee61a4dbSMatt Arsenault;
351ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_bf16_nnan:
352ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
353ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
354ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
355ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
356ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v3, v2
357ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
358ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
359ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
360ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
361ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
362ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
363ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
364ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
365ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
366ee61a4dbSMatt Arsenault;
367ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_bf16_nnan:
368ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
369ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
370ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
371ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
372ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
373ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v3, v2
374ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
375ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
376ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2
377ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
378ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
379ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
380ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
381ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
382ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
383ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
384ee61a4dbSMatt Arsenault;
385ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_bf16_nnan:
386ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
387ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
388ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
389ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
390ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
391ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
392ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
393ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
394ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
395ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v3, v2
396ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
397ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v0
398ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2
399ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0, v1
400ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
401ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
402ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
403ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
404ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
405ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
406ee61a4dbSMatt Arsenault  %result = call nnan bfloat @llvm.maximumnum.bf16(bfloat %x, bfloat %y)
407ee61a4dbSMatt Arsenault  ret bfloat %result
408ee61a4dbSMatt Arsenault}
409ee61a4dbSMatt Arsenault
410ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32(float %x, float %y) {
411ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32:
412ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
413ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
415ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
416ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
417ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
418ee61a4dbSMatt Arsenault;
419ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32:
420ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
421ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
422ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
423ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
424ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
425ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
426ee61a4dbSMatt Arsenault;
427ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32:
428ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
429ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
430ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
431ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
432ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
433ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
434ee61a4dbSMatt Arsenault;
435ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32:
436ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
437ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
438ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
439ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
440ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
441ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
442ee61a4dbSMatt Arsenault;
443ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32:
444ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
445ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
446ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
447ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
448ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
449ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
450ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
451ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
452ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
453ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
454ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %x, float %y)
455ee61a4dbSMatt Arsenault  ret float %result
456ee61a4dbSMatt Arsenault}
457ee61a4dbSMatt Arsenault
458ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_nnan(float %x, float %y) {
459ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_nnan:
460ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
461ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
462ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
463ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
464ee61a4dbSMatt Arsenault;
465ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_nnan:
466ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
467ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
468ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
469ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
470ee61a4dbSMatt Arsenault;
471ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_nnan:
472ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
473ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
474ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
475ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
476ee61a4dbSMatt Arsenault;
477ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_nnan:
478ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
479ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
480ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
481ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
482ee61a4dbSMatt Arsenault;
483ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_nnan:
484ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
485ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
486ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
487ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
488ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
489ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
490ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
491ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
492ee61a4dbSMatt Arsenault  %result = call nnan float @llvm.maximumnum.f32(float %x, float %y)
493ee61a4dbSMatt Arsenault  ret float %result
494ee61a4dbSMatt Arsenault}
495ee61a4dbSMatt Arsenault
496ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64(double %x, double %y) {
497ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64:
498ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
499ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
500ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
501ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
502ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
503ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
504ee61a4dbSMatt Arsenault;
505ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64:
506ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
507ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
508ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
509ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
510ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
511ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
512ee61a4dbSMatt Arsenault;
513ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64:
514ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
515ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
516ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
517ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
518ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
519ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
520ee61a4dbSMatt Arsenault;
521ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64:
522ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
523ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
524ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
525ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
526ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
527ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
528ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
529ee61a4dbSMatt Arsenault;
530ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64:
531ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
532ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
533ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
534ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
535ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
536ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
537ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
538ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
539ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
540ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[2:3]
541ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
542ee61a4dbSMatt Arsenault  %result = call double @llvm.maximumnum.f64(double %x, double %y)
543ee61a4dbSMatt Arsenault  ret double %result
544ee61a4dbSMatt Arsenault}
545ee61a4dbSMatt Arsenault
546ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_nnan(double %x, double %y) {
547ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_nnan:
548ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
549ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
550ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
551ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
552ee61a4dbSMatt Arsenault;
553ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_nnan:
554ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
555ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
556ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
557ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
558ee61a4dbSMatt Arsenault;
559ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_nnan:
560ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
561ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
562ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
563ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
564ee61a4dbSMatt Arsenault;
565ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_nnan:
566ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
567ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
568ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
569ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
570ee61a4dbSMatt Arsenault;
571ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_nnan:
572ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
573ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
574ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
575ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
576ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
577ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
578ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[2:3]
579ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
580ee61a4dbSMatt Arsenault  %result = call nnan double @llvm.maximumnum.f64(double %x, double %y)
581ee61a4dbSMatt Arsenault  ret double %result
582ee61a4dbSMatt Arsenault}
583ee61a4dbSMatt Arsenault
584ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_1.0(float %x) {
585ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_1.0:
586ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
587ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
588ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
589ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, 1.0, v0
590ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
591ee61a4dbSMatt Arsenault;
592ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_1.0:
593ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
594ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
595ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
596ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, 1.0, v0
597ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
598ee61a4dbSMatt Arsenault;
599ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_1.0:
600ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
601ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
602ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
603ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, 1.0, v0
604ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
605ee61a4dbSMatt Arsenault;
606ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_1.0:
607ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
608ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
609ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
610ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
611ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, 1.0, v0
612ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
613ee61a4dbSMatt Arsenault;
614ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_1.0:
615ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
616ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
617ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
618ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
619ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
620ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
621ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
622ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
623ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, 1.0, v0
624ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
625ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %x, float 1.0)
626ee61a4dbSMatt Arsenault  ret float %result
627ee61a4dbSMatt Arsenault}
628ee61a4dbSMatt Arsenault
629ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_rhs_not_snan(float %x, float %y) {
630ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_rhs_not_snan:
631ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
632ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
633ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
634ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
635ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
636ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
637ee61a4dbSMatt Arsenault;
638ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_rhs_not_snan:
639ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
640ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
641ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
642ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
643ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
644ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
645ee61a4dbSMatt Arsenault;
646ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_rhs_not_snan:
647ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
648ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
649ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
650ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
651ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
652ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
653ee61a4dbSMatt Arsenault;
654ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_rhs_not_snan:
655ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
656ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
657ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
658ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
659ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
660ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
661ee61a4dbSMatt Arsenault;
662ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_rhs_not_snan:
663ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
664ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
665ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
666ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
667ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
668ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
669ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
670ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
671ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
672ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
673ee61a4dbSMatt Arsenault  %canon.y = call float @llvm.canonicalize.f32(float %y)
674ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %x, float %canon.y)
675ee61a4dbSMatt Arsenault  ret float %result
676ee61a4dbSMatt Arsenault}
677ee61a4dbSMatt Arsenault
678ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_lhs_not_snan(float %x, float %y) {
679ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_lhs_not_snan:
680ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
681ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
682ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
683ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
684ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
685ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
686ee61a4dbSMatt Arsenault;
687ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_lhs_not_snan:
688ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
689ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
690ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
691ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
692ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
693ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
694ee61a4dbSMatt Arsenault;
695ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_lhs_not_snan:
696ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
697ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
698ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
699ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
700ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
701ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
702ee61a4dbSMatt Arsenault;
703ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_lhs_not_snan:
704ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
705ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
706ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
707ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
708ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
709ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
710ee61a4dbSMatt Arsenault;
711ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_lhs_not_snan:
712ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
713ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
714ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
715ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
716ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
717ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
718ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
719ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
720ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
721ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
722ee61a4dbSMatt Arsenault  %canon.x = call float @llvm.canonicalize.f32(float %x)
723ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %canon.x, float %y)
724ee61a4dbSMatt Arsenault  ret float %result
725ee61a4dbSMatt Arsenault}
726ee61a4dbSMatt Arsenault
727ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_both_operands_not_snan(float %x, float %y) {
728ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_both_operands_not_snan:
729ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
730ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
731ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
732ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
733ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
734ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
735ee61a4dbSMatt Arsenault;
736ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_both_operands_not_snan:
737ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
738ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
739ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
740ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
741ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
742ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
743ee61a4dbSMatt Arsenault;
744ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_both_operands_not_snan:
745ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
746ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
747ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
748ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
749ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
750ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
751ee61a4dbSMatt Arsenault;
752ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_both_operands_not_snan:
753ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
754ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
755ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
756ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
757ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
758ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
759ee61a4dbSMatt Arsenault;
760ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_both_operands_not_snan:
761ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
762ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
763ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
764ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
765ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
766ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
767ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
768ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
769ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
770ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
771ee61a4dbSMatt Arsenault  %canon.x = call float @llvm.canonicalize.f32(float %x)
772ee61a4dbSMatt Arsenault  %canon.y = call float @llvm.canonicalize.f32(float %y)
773ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %canon.x, float %canon.y)
774ee61a4dbSMatt Arsenault  ret float %result
775ee61a4dbSMatt Arsenault}
776ee61a4dbSMatt Arsenault
777ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_1.0(double %x) {
778ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_1.0:
779ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
780ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
781ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
782ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], 1.0
783ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
784ee61a4dbSMatt Arsenault;
785ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_1.0:
786ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
787ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
788ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
789ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], 1.0
790ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
791ee61a4dbSMatt Arsenault;
792ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_1.0:
793ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
794ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
795ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
796ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], 1.0
797ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
798ee61a4dbSMatt Arsenault;
799ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_1.0:
800ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
801ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
802ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
803ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
804ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], 1.0
805ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
806ee61a4dbSMatt Arsenault;
807ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_1.0:
808ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
809ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
810ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
811ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
812ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
813ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
814ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
815ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
816ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], 1.0, v[0:1]
817ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
818ee61a4dbSMatt Arsenault  %result = call double @llvm.maximumnum.f64(double %x, double 1.0)
819ee61a4dbSMatt Arsenault  ret double %result
820ee61a4dbSMatt Arsenault}
821ee61a4dbSMatt Arsenault
822ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_s_v(half inreg %x, half %y) {
823ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_s_v:
824ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
825ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
826ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
8276548b635SShilei Tian; GFX8-NEXT:    v_max_f16_e64 v1, s16, s16
828ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v1, v0
829ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
830ee61a4dbSMatt Arsenault;
831ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_s_v:
832ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
833ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
834ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
8356548b635SShilei Tian; GFX9-NEXT:    v_max_f16_e64 v1, s16, s16
836ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v1, v0
837ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
838ee61a4dbSMatt Arsenault;
839ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_s_v:
840ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
841ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
842ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
8436548b635SShilei Tian; GFX10-NEXT:    v_max_f16_e64 v1, s16, s16
844ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v1, v0
845ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
846ee61a4dbSMatt Arsenault;
847ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_s_v:
848ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
849ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
850ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
851ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, s0, s0
852ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
853ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v1, v0
854ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
855ee61a4dbSMatt Arsenault;
856ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_s_v:
857ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
858ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
859ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
860ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
861ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
862ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
863ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
864ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, s0, s0
865ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
866ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v1, v0
867ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
868ee61a4dbSMatt Arsenault %result = call half @llvm.maximumnum.f16(half %x, half %y)
869ee61a4dbSMatt Arsenault  ret half %result
870ee61a4dbSMatt Arsenault}
871ee61a4dbSMatt Arsenault
872ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_v_s(half %x, half inreg %y) {
873ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_v_s:
874ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
875ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8766548b635SShilei Tian; GFX8-NEXT:    v_max_f16_e64 v1, s16, s16
877ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
878ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
879ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
880ee61a4dbSMatt Arsenault;
881ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_v_s:
882ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
883ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8846548b635SShilei Tian; GFX9-NEXT:    v_max_f16_e64 v1, s16, s16
885ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
886ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
887ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
888ee61a4dbSMatt Arsenault;
889ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_v_s:
890ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
891ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8926548b635SShilei Tian; GFX10-NEXT:    v_max_f16_e64 v1, s16, s16
893ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
894ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
895ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
896ee61a4dbSMatt Arsenault;
897ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_v_s:
898ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
899ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
900ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, s0, s0
901ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
902ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
903ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
904ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
905ee61a4dbSMatt Arsenault;
906ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_v_s:
907ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
908ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
909ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
910ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
911ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
912ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
913ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, s0, s0
914ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
915ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
916ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
917ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
918ee61a4dbSMatt Arsenault %result = call half @llvm.maximumnum.f16(half %x, half %y)
919ee61a4dbSMatt Arsenault  ret half %result
920ee61a4dbSMatt Arsenault}
921ee61a4dbSMatt Arsenault
922ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_s_s(half inreg %x, half inreg %y) {
923ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_s_s:
924ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
925ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9266548b635SShilei Tian; GFX8-NEXT:    v_max_f16_e64 v0, s17, s17
9276548b635SShilei Tian; GFX8-NEXT:    v_max_f16_e64 v1, s16, s16
928ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v1, v0
929ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
930ee61a4dbSMatt Arsenault;
931ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_s_s:
932ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
933ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9346548b635SShilei Tian; GFX9-NEXT:    v_max_f16_e64 v0, s17, s17
9356548b635SShilei Tian; GFX9-NEXT:    v_max_f16_e64 v1, s16, s16
936ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v1, v0
937ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
938ee61a4dbSMatt Arsenault;
939ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_s_s:
940ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
941ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9426548b635SShilei Tian; GFX10-NEXT:    v_max_f16_e64 v0, s17, s17
9436548b635SShilei Tian; GFX10-NEXT:    v_max_f16_e64 v1, s16, s16
944ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v1, v0
945ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
946ee61a4dbSMatt Arsenault;
947ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_s_s:
948ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
949ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
950ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v0, s1, s1
951ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, s0, s0
952ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
953ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v1, v0
954ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
955ee61a4dbSMatt Arsenault;
956ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_s_s:
957ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
958ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
959ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
960ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
961ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
962ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
963ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v0, s1, s1
964ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, s0, s0
965ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
966ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v1, v0
967ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
968ee61a4dbSMatt Arsenault %result = call half @llvm.maximumnum.f16(half %x, half %y)
969ee61a4dbSMatt Arsenault  ret half %result
970ee61a4dbSMatt Arsenault}
971ee61a4dbSMatt Arsenault
972ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_s_v(float inreg %x, float %y) {
973ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_s_v:
974ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
975ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
976ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9776548b635SShilei Tian; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
978ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v1, v0
979ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
980ee61a4dbSMatt Arsenault;
981ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_s_v:
982ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
983ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
984ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
9856548b635SShilei Tian; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
986ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v1, v0
987ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
988ee61a4dbSMatt Arsenault;
989ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_s_v:
990ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
991ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
992ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
9936548b635SShilei Tian; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
994ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v1, v0
995ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
996ee61a4dbSMatt Arsenault;
997ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_s_v:
998ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
999ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1000ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1001ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
1002ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1003ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v1, v0
1004ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1005ee61a4dbSMatt Arsenault;
1006ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_s_v:
1007ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1008ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1009ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1010ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1011ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1012ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1013ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1014ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
1015ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1016ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v1, v0
1017ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1018ee61a4dbSMatt Arsenault %result = call float @llvm.maximumnum.f32(float %x, float %y)
1019ee61a4dbSMatt Arsenault  ret float %result
1020ee61a4dbSMatt Arsenault}
1021ee61a4dbSMatt Arsenault
1022ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_v_s(float %x, float inreg %y) {
1023ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_v_s:
1024ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1025ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10266548b635SShilei Tian; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
1027ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1028ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
1029ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1030ee61a4dbSMatt Arsenault;
1031ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_v_s:
1032ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1033ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10346548b635SShilei Tian; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
1035ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1036ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
1037ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1038ee61a4dbSMatt Arsenault;
1039ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_v_s:
1040ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1041ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10426548b635SShilei Tian; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
1043ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1044ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
1045ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1046ee61a4dbSMatt Arsenault;
1047ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_v_s:
1048ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1049ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1050ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
1051ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1052ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1053ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
1054ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1055ee61a4dbSMatt Arsenault;
1056ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_v_s:
1057ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1058ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1059ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1060ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1061ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1062ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1063ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
1064ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1065ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1066ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
1067ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1068ee61a4dbSMatt Arsenault %result = call float @llvm.maximumnum.f32(float %x, float %y)
1069ee61a4dbSMatt Arsenault  ret float %result
1070ee61a4dbSMatt Arsenault}
1071ee61a4dbSMatt Arsenault
1072ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_s_s(float inreg %x, float inreg %y) {
1073ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_s_s:
1074ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1075ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10766548b635SShilei Tian; GFX8-NEXT:    v_mul_f32_e64 v0, 1.0, s17
10776548b635SShilei Tian; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
1078ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v1, v0
1079ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1080ee61a4dbSMatt Arsenault;
1081ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_s_s:
1082ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1083ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10846548b635SShilei Tian; GFX9-NEXT:    v_max_f32_e64 v0, s17, s17
10856548b635SShilei Tian; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
1086ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v1, v0
1087ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1088ee61a4dbSMatt Arsenault;
1089ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_s_s:
1090ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1091ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10926548b635SShilei Tian; GFX10-NEXT:    v_max_f32_e64 v0, s17, s17
10936548b635SShilei Tian; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
1094ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v1, v0
1095ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1096ee61a4dbSMatt Arsenault;
1097ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_s_s:
1098ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1099ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1100ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v0, s1, s1
1101ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
1102ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1103ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v1, v0
1104ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1105ee61a4dbSMatt Arsenault;
1106ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_s_s:
1107ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1108ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1109ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1110ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1111ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1112ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1113ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v0, s1, s1
1114ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
1115ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1116ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v1, v0
1117ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1118ee61a4dbSMatt Arsenault %result = call float @llvm.maximumnum.f32(float %x, float %y)
1119ee61a4dbSMatt Arsenault  ret float %result
1120ee61a4dbSMatt Arsenault}
1121ee61a4dbSMatt Arsenault
1122ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_s_v(double inreg %x, double %y) {
1123ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_s_v:
1124ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1125ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1126ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
11276548b635SShilei Tian; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1128ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1129ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1130ee61a4dbSMatt Arsenault;
1131ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_s_v:
1132ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1133ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1134ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
11356548b635SShilei Tian; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1136ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1137ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1138ee61a4dbSMatt Arsenault;
1139ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_s_v:
1140ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1141ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11426548b635SShilei Tian; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1143ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1144ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1145ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1146ee61a4dbSMatt Arsenault;
1147ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_s_v:
1148ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1149ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1150ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1151ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1152ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1153ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1154ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1155ee61a4dbSMatt Arsenault;
1156ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_s_v:
1157ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1158ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1159ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1160ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1161ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1162ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1163ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1164ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
1165ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1166ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[2:3], v[0:1]
1167ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1168ee61a4dbSMatt Arsenault %result = call double @llvm.maximumnum.f64(double %x, double %y)
1169ee61a4dbSMatt Arsenault  ret double %result
1170ee61a4dbSMatt Arsenault}
1171ee61a4dbSMatt Arsenault
1172ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_v_s(double %x, double inreg %y) {
1173ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_v_s:
1174ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1175ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11766548b635SShilei Tian; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1177ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1178ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1179ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1180ee61a4dbSMatt Arsenault;
1181ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_v_s:
1182ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1183ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11846548b635SShilei Tian; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1185ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1186ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1187ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1188ee61a4dbSMatt Arsenault;
1189ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_v_s:
1190ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1191ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11926548b635SShilei Tian; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1193ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1194ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1195ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1196ee61a4dbSMatt Arsenault;
1197ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_v_s:
1198ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1199ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1200ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1201ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1202ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1203ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1204ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1205ee61a4dbSMatt Arsenault;
1206ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_v_s:
1207ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1208ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1209ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1210ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1211ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1212ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1213ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1214ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
1215ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1216ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[2:3]
1217ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1218ee61a4dbSMatt Arsenault %result = call double @llvm.maximumnum.f64(double %x, double %y)
1219ee61a4dbSMatt Arsenault  ret double %result
1220ee61a4dbSMatt Arsenault}
1221ee61a4dbSMatt Arsenault
1222ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_s_s(double inreg %x, double inreg %y) {
1223ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_s_s:
1224ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1225ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12266548b635SShilei Tian; GFX8-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
12276548b635SShilei Tian; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1228ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1229ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1230ee61a4dbSMatt Arsenault;
1231ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_s_s:
1232ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1233ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12346548b635SShilei Tian; GFX9-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
12356548b635SShilei Tian; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1236ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1237ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1238ee61a4dbSMatt Arsenault;
1239ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_s_s:
1240ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1241ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12426548b635SShilei Tian; GFX10-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
12436548b635SShilei Tian; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1244ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1245ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1246ee61a4dbSMatt Arsenault;
1247ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_s_s:
1248ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1249ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], s[2:3], s[2:3]
1251ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1252ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1253ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[2:3], v[0:1]
1254ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1255ee61a4dbSMatt Arsenault;
1256ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_s_s:
1257ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1258ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1259ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1260ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1261ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1262ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1263ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[0:1], s[2:3], s[2:3]
1264ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1265ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1266ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[2:3], v[0:1]
1267ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1268ee61a4dbSMatt Arsenault %result = call double @llvm.maximumnum.f64(double %x, double %y)
1269ee61a4dbSMatt Arsenault  ret double %result
1270ee61a4dbSMatt Arsenault}
1271ee61a4dbSMatt Arsenault
1272ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_fabs_rhs(float %x, float %y) {
1273ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_fabs_rhs:
1274ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1275ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1276ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, |v1|
1277ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1278ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
1279ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1280ee61a4dbSMatt Arsenault;
1281ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_fabs_rhs:
1282ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1283ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1284ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1285ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1286ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
1287ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1288ee61a4dbSMatt Arsenault;
1289ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_fabs_rhs:
1290ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1291ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1292ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1293ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1294ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
1295ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1296ee61a4dbSMatt Arsenault;
1297ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_fabs_rhs:
1298ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1299ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1300ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1301ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1302ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1303ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
1304ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1305ee61a4dbSMatt Arsenault;
1306ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_fabs_rhs:
1307ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1308ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1309ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1310ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1311ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1312ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1313ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, |v1|, |v1|
1314ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1315ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1316ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
1317ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1318ee61a4dbSMatt Arsenault  %fabs.y = call float @llvm.fabs.f32(float %y)
1319ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %x, float %fabs.y)
1320ee61a4dbSMatt Arsenault  ret float %result
1321ee61a4dbSMatt Arsenault}
1322ee61a4dbSMatt Arsenault
1323ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_fneg_fabs_rhs(float %x, float %y) {
1324ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_fneg_fabs_rhs:
1325ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1326ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1327ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e64 v1, -1.0, |v1|
1328ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1329ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
1330ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1331ee61a4dbSMatt Arsenault;
1332ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_fneg_fabs_rhs:
1333ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1334ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1335ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1336ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1337ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
1338ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1339ee61a4dbSMatt Arsenault;
1340ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_fneg_fabs_rhs:
1341ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1342ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1343ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1344ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1345ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
1346ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1347ee61a4dbSMatt Arsenault;
1348ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_fneg_fabs_rhs:
1349ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1350ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1351ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1352ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1353ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1354ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
1355ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1356ee61a4dbSMatt Arsenault;
1357ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_fneg_fabs_rhs:
1358ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1359ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1360ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1361ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1362ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1363ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1364ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, -|v1|, -|v1|
1365ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1366ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1367ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
1368ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1369ee61a4dbSMatt Arsenault  %fabs.y = call float @llvm.fabs.f32(float %y)
1370ee61a4dbSMatt Arsenault  %fneg.fabs.y = fneg float %fabs.y
1371ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %x, float %fneg.fabs.y)
1372ee61a4dbSMatt Arsenault  ret float %result
1373ee61a4dbSMatt Arsenault}
1374ee61a4dbSMatt Arsenault
1375ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_fabs(float %x, float %y) {
1376ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_fabs:
1377ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1378ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1379ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, |v1|
1380ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e64 v0, 1.0, |v0|
1381ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
1382ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1383ee61a4dbSMatt Arsenault;
1384ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_fabs:
1385ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1386ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1387ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1388ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1389ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
1390ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1391ee61a4dbSMatt Arsenault;
1392ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_fabs:
1393ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1394ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1395ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1396ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1397ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
1398ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1399ee61a4dbSMatt Arsenault;
1400ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_fabs:
1401ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1402ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1403ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1404ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1405ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1406ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
1407ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1408ee61a4dbSMatt Arsenault;
1409ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_fabs:
1410ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1411ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1412ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1413ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1414ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1415ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1416ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, |v1|, |v1|
1417ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v0, |v0|, |v0|
1418ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1419ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
1420ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1421ee61a4dbSMatt Arsenault  %fabs.x = call float @llvm.fabs.f32(float %x)
1422ee61a4dbSMatt Arsenault  %fabs.y = call float @llvm.fabs.f32(float %y)
1423ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %fabs.x, float %fabs.y)
1424ee61a4dbSMatt Arsenault  ret float %result
1425ee61a4dbSMatt Arsenault}
1426ee61a4dbSMatt Arsenault
1427ee61a4dbSMatt Arsenaultdefine float @v_maximumnum_f32_fneg(float %x, float %y) {
1428ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f32_fneg:
1429ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1430ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1431ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, -1.0, v1
1432ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, -1.0, v0
1433ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
1434ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1435ee61a4dbSMatt Arsenault;
1436ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f32_fneg:
1437ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1438ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1439ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v1, -v1, -v1
1440ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e64 v0, -v0, -v0
1441ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
1442ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1443ee61a4dbSMatt Arsenault;
1444ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f32_fneg:
1445ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1446ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1447ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v1, -v1, -v1
1448ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e64 v0, -v0, -v0
1449ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
1450ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1451ee61a4dbSMatt Arsenault;
1452ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f32_fneg:
1453ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1454ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1455ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v1, -v1, -v1
1456ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e64 v0, -v0, -v0
1457ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1458ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
1459ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1460ee61a4dbSMatt Arsenault;
1461ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f32_fneg:
1462ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1463ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1464ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1465ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1466ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1467ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1468ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v1, -v1, -v1
1469ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e64 v0, -v0, -v0
1470ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1471ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v1
1472ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1473ee61a4dbSMatt Arsenault  %fneg.x = fneg float %x
1474ee61a4dbSMatt Arsenault  %fneg.y = fneg float %y
1475ee61a4dbSMatt Arsenault  %result = call float @llvm.maximumnum.f32(float %fneg.x, float %fneg.y)
1476ee61a4dbSMatt Arsenault  ret float %result
1477ee61a4dbSMatt Arsenault}
1478ee61a4dbSMatt Arsenault
1479ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_fabs_rhs(half %x, half %y) {
1480ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_fabs_rhs:
1481ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1482ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1484ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1485ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
1486ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1487ee61a4dbSMatt Arsenault;
1488ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_fabs_rhs:
1489ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1490ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1491ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1492ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
1493ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
1494ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1495ee61a4dbSMatt Arsenault;
1496ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_fabs_rhs:
1497ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1498ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1499ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1500ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
1501ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
1502ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1503ee61a4dbSMatt Arsenault;
1504ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_fabs_rhs:
1505ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1506ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1507ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1508ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
1509ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1510ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
1511ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1512ee61a4dbSMatt Arsenault;
1513ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_fabs_rhs:
1514ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1515ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1516ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1517ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1518ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1519ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1520ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, |v1|, |v1|
1521ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
1522ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1523ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
1524ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1525ee61a4dbSMatt Arsenault  %fabs.y = call half @llvm.fabs.f16(half %y)
1526ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %x, half %fabs.y)
1527ee61a4dbSMatt Arsenault  ret half %result
1528ee61a4dbSMatt Arsenault}
1529ee61a4dbSMatt Arsenault
1530ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_fneg_fabs_rhs(half %x, half %y) {
1531ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_fneg_fabs_rhs:
1532ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1533ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1534ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1535ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1536ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
1537ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1538ee61a4dbSMatt Arsenault;
1539ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_fneg_fabs_rhs:
1540ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1541ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1542ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1543ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
1544ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
1545ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1546ee61a4dbSMatt Arsenault;
1547ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_fneg_fabs_rhs:
1548ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1549ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1550ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1551ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
1552ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
1553ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1554ee61a4dbSMatt Arsenault;
1555ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_fneg_fabs_rhs:
1556ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1557ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1558ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1559ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
1560ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1561ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
1562ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1563ee61a4dbSMatt Arsenault;
1564ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_fneg_fabs_rhs:
1565ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1566ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1567ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1568ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1569ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1570ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1571ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, -|v1|, -|v1|
1572ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
1573ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1574ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
1575ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1576ee61a4dbSMatt Arsenault  %fabs.y = call half @llvm.fabs.f16(half %y)
1577ee61a4dbSMatt Arsenault  %fneg.fabs.y = fneg half %fabs.y
1578ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %x, half %fneg.fabs.y)
1579ee61a4dbSMatt Arsenault  ret half %result
1580ee61a4dbSMatt Arsenault}
1581ee61a4dbSMatt Arsenault
1582ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_fabs(half %x, half %y) {
1583ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_fabs:
1584ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1585ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1586ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1587ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1588ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
1589ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1590ee61a4dbSMatt Arsenault;
1591ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_fabs:
1592ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1593ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1594ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1595ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1596ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
1597ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1598ee61a4dbSMatt Arsenault;
1599ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_fabs:
1600ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1601ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1602ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1603ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1604ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
1605ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1606ee61a4dbSMatt Arsenault;
1607ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_fabs:
1608ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1609ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1610ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1611ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1612ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1613ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
1614ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1615ee61a4dbSMatt Arsenault;
1616ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_fabs:
1617ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1618ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1619ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1620ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1621ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1622ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1623ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, |v1|, |v1|
1624ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v0, |v0|, |v0|
1625ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1626ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
1627ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1628ee61a4dbSMatt Arsenault  %fabs.x = call half @llvm.fabs.f16(half %x)
1629ee61a4dbSMatt Arsenault  %fabs.y = call half @llvm.fabs.f16(half %y)
1630ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %fabs.x, half %fabs.y)
1631ee61a4dbSMatt Arsenault  ret half %result
1632ee61a4dbSMatt Arsenault}
1633ee61a4dbSMatt Arsenault
1634ee61a4dbSMatt Arsenaultdefine half @v_maximumnum_f16_fneg(half %x, half %y) {
1635ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f16_fneg:
1636ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1637ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1638ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v1, -v1, -v1
1639ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e64 v0, -v0, -v0
1640ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
1641ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1642ee61a4dbSMatt Arsenault;
1643ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f16_fneg:
1644ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1645ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1646ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v1, -v1, -v1
1647ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e64 v0, -v0, -v0
1648ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f16_e32 v0, v0, v1
1649ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1650ee61a4dbSMatt Arsenault;
1651ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f16_fneg:
1652ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1653ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1654ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v1, -v1, -v1
1655ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e64 v0, -v0, -v0
1656ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f16_e32 v0, v0, v1
1657ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1658ee61a4dbSMatt Arsenault;
1659ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f16_fneg:
1660ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1661ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1662ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v1, -v1, -v1
1663ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e64 v0, -v0, -v0
1664ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1665ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f16_e32 v0, v0, v1
1666ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1667ee61a4dbSMatt Arsenault;
1668ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f16_fneg:
1669ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1670ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1671ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1672ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1673ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1674ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1675ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v1, -v1, -v1
1676ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e64 v0, -v0, -v0
1677ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1678ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v1
1679ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1680ee61a4dbSMatt Arsenault  %fneg.x = fneg half %x
1681ee61a4dbSMatt Arsenault  %fneg.y = fneg half %y
1682ee61a4dbSMatt Arsenault  %result = call half @llvm.maximumnum.f16(half %fneg.x, half %fneg.y)
1683ee61a4dbSMatt Arsenault  ret half %result
1684ee61a4dbSMatt Arsenault}
1685ee61a4dbSMatt Arsenault
1686ee61a4dbSMatt Arsenaultdefine double @v_maximumnum_f64_fneg(double %x, double %y) {
1687ee61a4dbSMatt Arsenault; GFX8-LABEL: v_maximumnum_f64_fneg:
1688ee61a4dbSMatt Arsenault; GFX8:       ; %bb.0:
1689ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1690ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1691ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1692ee61a4dbSMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1693ee61a4dbSMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
1694ee61a4dbSMatt Arsenault;
1695ee61a4dbSMatt Arsenault; GFX9-LABEL: v_maximumnum_f64_fneg:
1696ee61a4dbSMatt Arsenault; GFX9:       ; %bb.0:
1697ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1698ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1699ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1700ee61a4dbSMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1701ee61a4dbSMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
1702ee61a4dbSMatt Arsenault;
1703ee61a4dbSMatt Arsenault; GFX10-LABEL: v_maximumnum_f64_fneg:
1704ee61a4dbSMatt Arsenault; GFX10:       ; %bb.0:
1705ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1706ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1707ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1708ee61a4dbSMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1709ee61a4dbSMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
1710ee61a4dbSMatt Arsenault;
1711ee61a4dbSMatt Arsenault; GFX11-LABEL: v_maximumnum_f64_fneg:
1712ee61a4dbSMatt Arsenault; GFX11:       ; %bb.0:
1713ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1714ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1715ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1716ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1717ee61a4dbSMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[2:3]
1718ee61a4dbSMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
1719ee61a4dbSMatt Arsenault;
1720ee61a4dbSMatt Arsenault; GFX12-LABEL: v_maximumnum_f64_fneg:
1721ee61a4dbSMatt Arsenault; GFX12:       ; %bb.0:
1722ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1723ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
1724ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
1725ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
1726ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
1727ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], -v[2:3], -v[2:3]
1728ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e64 v[0:1], -v[0:1], -v[0:1]
1729ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1730ee61a4dbSMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[2:3]
1731ee61a4dbSMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
1732ee61a4dbSMatt Arsenault  %fneg.x = fneg double %x
1733ee61a4dbSMatt Arsenault  %fneg.y = fneg double %y
1734ee61a4dbSMatt Arsenault  %result = call double @llvm.maximumnum.f64(double %fneg.x, double %fneg.y)
1735ee61a4dbSMatt Arsenault  ret double %result
1736ee61a4dbSMatt Arsenault}
17375883ad34SMatt Arsenault
17385883ad34SMatt Arsenaultdefine <2 x half> @v_maximumnum_v2f16(<2 x half> %x, <2 x half> %y) {
17395883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f16:
17405883ad34SMatt Arsenault; GFX8:       ; %bb.0:
17415883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17425883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v2, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
17435883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v3, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
17445883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
17455883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
17465883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
17475883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
17485883ad34SMatt Arsenault; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
17495883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
17505883ad34SMatt Arsenault;
17515883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f16:
17525883ad34SMatt Arsenault; GFX9:       ; %bb.0:
17535883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17545883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
17555883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
17565883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v1
17575883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
17585883ad34SMatt Arsenault;
17595883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f16:
17605883ad34SMatt Arsenault; GFX10:       ; %bb.0:
17615883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17625883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
17635883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
17645883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v1
17655883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
17665883ad34SMatt Arsenault;
17675883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f16:
17685883ad34SMatt Arsenault; GFX11:       ; %bb.0:
17695883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17705883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
17715883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
17725883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17735883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v1
17745883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
17755883ad34SMatt Arsenault;
17765883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f16:
17775883ad34SMatt Arsenault; GFX12:       ; %bb.0:
17785883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
17795883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
17805883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
17815883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
17825883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
17835883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
17845883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
17855883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17865883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v1
17875883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
17885883ad34SMatt Arsenault  %result = call <2 x half> @llvm.maximumnum.v2f16(<2 x half> %x, <2 x half> %y)
17895883ad34SMatt Arsenault  ret <2 x half> %result
17905883ad34SMatt Arsenault}
17915883ad34SMatt Arsenault
17925883ad34SMatt Arsenaultdefine <2 x half> @v_maximumnum_v2f16_nnan(<2 x half> %x, <2 x half> %y) {
17935883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f16_nnan:
17945883ad34SMatt Arsenault; GFX8:       ; %bb.0:
17955883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17965883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
17975883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v1
17985883ad34SMatt Arsenault; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
17995883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
18005883ad34SMatt Arsenault;
18015883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f16_nnan:
18025883ad34SMatt Arsenault; GFX9:       ; %bb.0:
18035883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18045883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v1
18055883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
18065883ad34SMatt Arsenault;
18075883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f16_nnan:
18085883ad34SMatt Arsenault; GFX10:       ; %bb.0:
18095883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18105883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v1
18115883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
18125883ad34SMatt Arsenault;
18135883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f16_nnan:
18145883ad34SMatt Arsenault; GFX11:       ; %bb.0:
18155883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18165883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v1
18175883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
18185883ad34SMatt Arsenault;
18195883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f16_nnan:
18205883ad34SMatt Arsenault; GFX12:       ; %bb.0:
18215883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
18225883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
18235883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
18245883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
18255883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
18265883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v1
18275883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
18285883ad34SMatt Arsenault  %result = call nnan <2 x half> @llvm.maximumnum.v2f16(<2 x half> %x, <2 x half> %y)
18295883ad34SMatt Arsenault  ret <2 x half> %result
18305883ad34SMatt Arsenault}
18315883ad34SMatt Arsenault
18325883ad34SMatt Arsenaultdefine <3 x half> @v_maximumnum_v3f16(<3 x half> %x, <3 x half> %y) {
18335883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f16:
18345883ad34SMatt Arsenault; GFX8:       ; %bb.0:
18355883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18365883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v4, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
18375883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v5, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
18385883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
18395883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
18405883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1841*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
18425883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
1843*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v2
1844*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v1, v1, v3
18455883ad34SMatt Arsenault; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
18465883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
18475883ad34SMatt Arsenault;
18485883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f16:
18495883ad34SMatt Arsenault; GFX9:       ; %bb.0:
18505883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18515883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
18525883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
18535883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v2
18545883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v3, v3
18555883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
18565883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v2
18575883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
18585883ad34SMatt Arsenault;
18595883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f16:
18605883ad34SMatt Arsenault; GFX10:       ; %bb.0:
18615883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18625883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
18635883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
18645883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
18655883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
18665883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v2
18675883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v3
18685883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
18695883ad34SMatt Arsenault;
18705883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f16:
18715883ad34SMatt Arsenault; GFX11:       ; %bb.0:
18725883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18735883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
18745883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
18755883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
18765883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
18775883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
18785883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v2
18795883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v3
18805883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
18815883ad34SMatt Arsenault;
18825883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f16:
18835883ad34SMatt Arsenault; GFX12:       ; %bb.0:
18845883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
18855883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
18865883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
18875883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
18885883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
18895883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
18905883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
18915883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
18925883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
18935883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
18945883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v2
18955883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v3
18965883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
18975883ad34SMatt Arsenault  %result = call <3 x half> @llvm.maximumnum.v3f16(<3 x half> %x, <3 x half> %y)
18985883ad34SMatt Arsenault  ret <3 x half> %result
18995883ad34SMatt Arsenault}
19005883ad34SMatt Arsenault
19015883ad34SMatt Arsenaultdefine <3 x half> @v_maximumnum_v3f16_nnan(<3 x half> %x, <3 x half> %y) {
19025883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f16_nnan:
19035883ad34SMatt Arsenault; GFX8:       ; %bb.0:
19045883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19055883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v4, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
19065883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v0, v0, v2
19075883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v3
1908*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
19095883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
19105883ad34SMatt Arsenault;
19115883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f16_nnan:
19125883ad34SMatt Arsenault; GFX9:       ; %bb.0:
19135883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19145883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v2
19155883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v3
19165883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
19175883ad34SMatt Arsenault;
19185883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f16_nnan:
19195883ad34SMatt Arsenault; GFX10:       ; %bb.0:
19205883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19215883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v2
19225883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v3
19235883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
19245883ad34SMatt Arsenault;
19255883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f16_nnan:
19265883ad34SMatt Arsenault; GFX11:       ; %bb.0:
19275883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19285883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v2
19295883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v3
19305883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
19315883ad34SMatt Arsenault;
19325883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f16_nnan:
19335883ad34SMatt Arsenault; GFX12:       ; %bb.0:
19345883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
19355883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
19365883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
19375883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
19385883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
19395883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v2
19405883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v3
19415883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
19425883ad34SMatt Arsenault  %result = call nnan <3 x half> @llvm.maximumnum.v3f16(<3 x half> %x, <3 x half> %y)
19435883ad34SMatt Arsenault  ret <3 x half> %result
19445883ad34SMatt Arsenault}
19455883ad34SMatt Arsenault
19465883ad34SMatt Arsenaultdefine <4 x half> @v_maximumnum_v4f16(<4 x half> %x, <4 x half> %y) {
19475883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f16:
19485883ad34SMatt Arsenault; GFX8:       ; %bb.0:
19495883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1950*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v4, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1951*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v5, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
19525883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1953*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v5, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1954*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v6, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
19555883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
19565883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
1957*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
1958*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1959*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
19605883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v3
1961*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v2
1962*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
1963*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
19645883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
19655883ad34SMatt Arsenault;
19665883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f16:
19675883ad34SMatt Arsenault; GFX9:       ; %bb.0:
19685883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19695883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
19705883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
19715883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v2
19725883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v3, v3
19735883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
19745883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v2
19755883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
19765883ad34SMatt Arsenault;
19775883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f16:
19785883ad34SMatt Arsenault; GFX10:       ; %bb.0:
19795883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19805883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
19815883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
19825883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
19835883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
19845883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v2
19855883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v3
19865883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
19875883ad34SMatt Arsenault;
19885883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f16:
19895883ad34SMatt Arsenault; GFX11:       ; %bb.0:
19905883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19915883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
19925883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
19935883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
19945883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
19955883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
19965883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v2
19975883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v3
19985883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
19995883ad34SMatt Arsenault;
20005883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f16:
20015883ad34SMatt Arsenault; GFX12:       ; %bb.0:
20025883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
20035883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
20045883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
20055883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
20065883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
20075883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
20085883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
20095883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
20105883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
20115883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
20125883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v2
20135883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v3
20145883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
20155883ad34SMatt Arsenault  %result = call <4 x half> @llvm.maximumnum.v4f16(<4 x half> %x, <4 x half> %y)
20165883ad34SMatt Arsenault  ret <4 x half> %result
20175883ad34SMatt Arsenault}
20185883ad34SMatt Arsenault
20195883ad34SMatt Arsenaultdefine <4 x half> @v_maximumnum_v4f16_nnan(<4 x half> %x, <4 x half> %y) {
20205883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f16_nnan:
20215883ad34SMatt Arsenault; GFX8:       ; %bb.0:
20225883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2023*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v4, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2024*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v5, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
20255883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v3
2026*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v2
2027*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
2028*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
20295883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
20305883ad34SMatt Arsenault;
20315883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f16_nnan:
20325883ad34SMatt Arsenault; GFX9:       ; %bb.0:
20335883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20345883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v2
20355883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v3
20365883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
20375883ad34SMatt Arsenault;
20385883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f16_nnan:
20395883ad34SMatt Arsenault; GFX10:       ; %bb.0:
20405883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20415883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v2
20425883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v3
20435883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
20445883ad34SMatt Arsenault;
20455883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f16_nnan:
20465883ad34SMatt Arsenault; GFX11:       ; %bb.0:
20475883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20485883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v2
20495883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v3
20505883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
20515883ad34SMatt Arsenault;
20525883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f16_nnan:
20535883ad34SMatt Arsenault; GFX12:       ; %bb.0:
20545883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
20555883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
20565883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
20575883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
20585883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
20595883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v2
20605883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v3
20615883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
20625883ad34SMatt Arsenault  %result = call nnan <4 x half> @llvm.maximumnum.v4f16(<4 x half> %x, <4 x half> %y)
20635883ad34SMatt Arsenault  ret <4 x half> %result
20645883ad34SMatt Arsenault}
20655883ad34SMatt Arsenault
20665883ad34SMatt Arsenaultdefine <6 x half> @v_maximumnum_v6f16(<6 x half> %x, <6 x half> %y) {
20675883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v6f16:
20685883ad34SMatt Arsenault; GFX8:       ; %bb.0:
20695883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2070*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v6, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2071*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v7, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
20725883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v6, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2073*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v7, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2074*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v8, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2075*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v7, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2076*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v8, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2077*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v9, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2078*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v5, v5, v5
2079*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
20805883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v4, v4, v4
20815883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
2082*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
2083*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
2084*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2085*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v2, v2, v5
20865883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v4
2087*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v3
2088*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v0, v0, v8
2089*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v1, v1, v7
2090*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v2, v2, v6
20915883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
20925883ad34SMatt Arsenault;
20935883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v6f16:
20945883ad34SMatt Arsenault; GFX9:       ; %bb.0:
20955883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20965883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v3, v3, v3
20975883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
20985883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v3
20995883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v3, v4, v4
21005883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
21015883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v3
21025883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v3, v5, v5
21035883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
21045883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v3
21055883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
21065883ad34SMatt Arsenault;
21075883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v6f16:
21085883ad34SMatt Arsenault; GFX10:       ; %bb.0:
21095883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21105883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
21115883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
21125883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v4, v4, v4
21135883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
21145883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v5, v5, v5
21155883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
21165883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v3
21175883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v4
21185883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v5
21195883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
21205883ad34SMatt Arsenault;
21215883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v6f16:
21225883ad34SMatt Arsenault; GFX11:       ; %bb.0:
21235883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21245883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
21255883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
21265883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v4, v4, v4
21275883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
21285883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v5, v5, v5
21295883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
21305883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v3
21315883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
21325883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v4
21335883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v5
21345883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
21355883ad34SMatt Arsenault;
21365883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v6f16:
21375883ad34SMatt Arsenault; GFX12:       ; %bb.0:
21385883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
21395883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
21405883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
21415883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
21425883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
21435883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
21445883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
21455883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v4, v4, v4
21465883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
21475883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v5, v5, v5
21485883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
21495883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v3
21505883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
21515883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v4
21525883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v5
21535883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
21545883ad34SMatt Arsenault  %result = call <6 x half> @llvm.maximumnum.v6f16(<6 x half> %x, <6 x half> %y)
21555883ad34SMatt Arsenault  ret <6 x half> %result
21565883ad34SMatt Arsenault}
21575883ad34SMatt Arsenault
21585883ad34SMatt Arsenaultdefine <8 x half> @v_maximumnum_v8f16(<8 x half> %x, <8 x half> %y) {
21595883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v8f16:
21605883ad34SMatt Arsenault; GFX8:       ; %bb.0:
21615883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2162*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v8, v7, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2163*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v9, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
21645883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2165*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v9, v6, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2166*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v10, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2167*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2168*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v10, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2169*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v11, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2170*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v10, v11, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2171*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v11, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2172*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v12, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2173*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v7, v7, v7
2174*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
2175*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v6, v6, v6
2176*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
21775883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v5, v5, v5
21785883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
2179*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v4, v4, v4
2180*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
2181*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_sdwa v11, v12, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2182*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v3, v3, v7
2183*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v2, v2, v6
21845883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f16_e32 v1, v1, v5
2185*15473820SPhoebe Wang; GFX8-NEXT:    v_max_f16_e32 v0, v0, v4
2186*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v0, v0, v11
2187*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v1, v1, v10
2188*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v2, v2, v9
2189*15473820SPhoebe Wang; GFX8-NEXT:    v_or_b32_e32 v3, v3, v8
21905883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
21915883ad34SMatt Arsenault;
21925883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v8f16:
21935883ad34SMatt Arsenault; GFX9:       ; %bb.0:
21945883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21955883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v4, v4, v4
21965883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
21975883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v0, v0, v4
21985883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v4, v5, v5
21995883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
22005883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v1, v1, v4
22015883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v4, v6, v6
22025883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
22035883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v2, v2, v4
22045883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v4, v7, v7
22055883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v3, v3, v3
22065883ad34SMatt Arsenault; GFX9-NEXT:    v_pk_max_f16 v3, v3, v4
22075883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
22085883ad34SMatt Arsenault;
22095883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v8f16:
22105883ad34SMatt Arsenault; GFX10:       ; %bb.0:
22115883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22125883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v4, v4, v4
22135883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
22145883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v5, v5, v5
22155883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
22165883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v6, v6, v6
22175883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
22185883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v7, v7, v7
22195883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
22205883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v0, v0, v4
22215883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v1, v1, v5
22225883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v2, v2, v6
22235883ad34SMatt Arsenault; GFX10-NEXT:    v_pk_max_f16 v3, v3, v7
22245883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
22255883ad34SMatt Arsenault;
22265883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v8f16:
22275883ad34SMatt Arsenault; GFX11:       ; %bb.0:
22285883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22295883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v4, v4, v4
22305883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
22315883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v5, v5, v5
22325883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
22335883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v6, v6, v6
22345883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
22355883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v7, v7, v7
22365883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
22375883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v0, v0, v4
22385883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v1, v1, v5
22395883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v2, v2, v6
22405883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
22415883ad34SMatt Arsenault; GFX11-NEXT:    v_pk_max_f16 v3, v3, v7
22425883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
22435883ad34SMatt Arsenault;
22445883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v8f16:
22455883ad34SMatt Arsenault; GFX12:       ; %bb.0:
22465883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
22475883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
22485883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
22495883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
22505883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
22515883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v4, v4, v4
22525883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
22535883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v5, v5, v5
22545883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
22555883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v6, v6, v6
22565883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
22575883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v7, v7, v7
22585883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
22595883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v4
22605883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v5
22615883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v6
22625883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4)
22635883ad34SMatt Arsenault; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v7
22645883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
22655883ad34SMatt Arsenault  %result = call <8 x half> @llvm.maximumnum.v8f16(<8 x half> %x, <8 x half> %y)
22665883ad34SMatt Arsenault  ret <8 x half> %result
22675883ad34SMatt Arsenault}
22685883ad34SMatt Arsenault
22695883ad34SMatt Arsenaultdefine <2 x float> @v_maximumnum_v2f32(<2 x float> %x, <2 x float> %y) {
22705883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f32:
22715883ad34SMatt Arsenault; GFX8:       ; %bb.0:
22725883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22735883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
22745883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
22755883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v2
22765883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v3
22775883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
22785883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v2
22795883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
22805883ad34SMatt Arsenault;
22815883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f32:
22825883ad34SMatt Arsenault; GFX9:       ; %bb.0:
22835883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22845883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
22855883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
22865883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v2
22875883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v3, v3
22885883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
22895883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v2
22905883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
22915883ad34SMatt Arsenault;
22925883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f32:
22935883ad34SMatt Arsenault; GFX10:       ; %bb.0:
22945883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22955883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
22965883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
22975883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
22985883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
22995883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v2
23005883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v3
23015883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
23025883ad34SMatt Arsenault;
23035883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f32:
23045883ad34SMatt Arsenault; GFX11:       ; %bb.0:
23055883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23065883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
23075883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
23085883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
23095883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v2 :: v_dual_max_f32 v1, v1, v3
23105883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
23115883ad34SMatt Arsenault;
23125883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f32:
23135883ad34SMatt Arsenault; GFX12:       ; %bb.0:
23145883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
23155883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
23165883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
23175883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
23185883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
23195883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
23205883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
23215883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
23225883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v2 :: v_dual_max_num_f32 v1, v1, v3
23235883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
23245883ad34SMatt Arsenault  %result = call <2 x float> @llvm.maximumnum.v2f32(<2 x float> %x, <2 x float> %y)
23255883ad34SMatt Arsenault  ret <2 x float> %result
23265883ad34SMatt Arsenault}
23275883ad34SMatt Arsenault
23285883ad34SMatt Arsenaultdefine <2 x float> @v_maximumnum_v2f32_nnan(<2 x float> %x, <2 x float> %y) {
23295883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f32_nnan:
23305883ad34SMatt Arsenault; GFX8:       ; %bb.0:
23315883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23325883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v2
23335883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v3
23345883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
23355883ad34SMatt Arsenault;
23365883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f32_nnan:
23375883ad34SMatt Arsenault; GFX9:       ; %bb.0:
23385883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23395883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v2
23405883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v3
23415883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
23425883ad34SMatt Arsenault;
23435883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f32_nnan:
23445883ad34SMatt Arsenault; GFX10:       ; %bb.0:
23455883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23465883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v2
23475883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v3
23485883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
23495883ad34SMatt Arsenault;
23505883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f32_nnan:
23515883ad34SMatt Arsenault; GFX11:       ; %bb.0:
23525883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23535883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v2 :: v_dual_max_f32 v1, v1, v3
23545883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
23555883ad34SMatt Arsenault;
23565883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f32_nnan:
23575883ad34SMatt Arsenault; GFX12:       ; %bb.0:
23585883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
23595883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
23605883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
23615883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
23625883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
23635883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v2 :: v_dual_max_num_f32 v1, v1, v3
23645883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
23655883ad34SMatt Arsenault  %result = call nnan <2 x float> @llvm.maximumnum.v2f32(<2 x float> %x, <2 x float> %y)
23665883ad34SMatt Arsenault  ret <2 x float> %result
23675883ad34SMatt Arsenault}
23685883ad34SMatt Arsenault
23695883ad34SMatt Arsenaultdefine <3 x float> @v_maximumnum_v3f32(<3 x float> %x, <3 x float> %y) {
23705883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f32:
23715883ad34SMatt Arsenault; GFX8:       ; %bb.0:
23725883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23735883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v3
23745883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
23755883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v3
23765883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v4
23775883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
23785883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v3
23795883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v5
23805883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
23815883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v2, v2, v3
23825883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
23835883ad34SMatt Arsenault;
23845883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f32:
23855883ad34SMatt Arsenault; GFX9:       ; %bb.0:
23865883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23875883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v3, v3
23885883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
23895883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v3
23905883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v4, v4
23915883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
23925883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v3
23935883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v5, v5
23945883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
23955883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v3
23965883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
23975883ad34SMatt Arsenault;
23985883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f32:
23995883ad34SMatt Arsenault; GFX10:       ; %bb.0:
24005883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24015883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
24025883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
24035883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v4, v4, v4
24045883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
24055883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v5, v5, v5
24065883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
24075883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v3
24085883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v4
24095883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v5
24105883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
24115883ad34SMatt Arsenault;
24125883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f32:
24135883ad34SMatt Arsenault; GFX11:       ; %bb.0:
24145883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24155883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v3, v3, v3 :: v_dual_max_f32 v0, v0, v0
24165883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v1, v1, v1
24175883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v5, v5, v5 :: v_dual_max_f32 v2, v2, v2
24185883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
24195883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v3 :: v_dual_max_f32 v1, v1, v4
24205883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v2, v2, v5
24215883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
24225883ad34SMatt Arsenault;
24235883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f32:
24245883ad34SMatt Arsenault; GFX12:       ; %bb.0:
24255883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
24265883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
24275883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
24285883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
24295883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
24305883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v0, v0, v0
24315883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v1, v1, v1
24325883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v5, v5, v5 :: v_dual_max_num_f32 v2, v2, v2
24335883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
24345883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v3 :: v_dual_max_num_f32 v1, v1, v4
24355883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v2, v2, v5
24365883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
24375883ad34SMatt Arsenault  %result = call <3 x float> @llvm.maximumnum.v3f32(<3 x float> %x, <3 x float> %y)
24385883ad34SMatt Arsenault  ret <3 x float> %result
24395883ad34SMatt Arsenault}
24405883ad34SMatt Arsenault
24415883ad34SMatt Arsenaultdefine <3 x float> @v_maximumnum_v3f32_nnan(<3 x float> %x, <3 x float> %y) {
24425883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f32_nnan:
24435883ad34SMatt Arsenault; GFX8:       ; %bb.0:
24445883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24455883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v3
24465883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v4
24475883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v2, v2, v5
24485883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
24495883ad34SMatt Arsenault;
24505883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f32_nnan:
24515883ad34SMatt Arsenault; GFX9:       ; %bb.0:
24525883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24535883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v3
24545883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v4
24555883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v5
24565883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
24575883ad34SMatt Arsenault;
24585883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f32_nnan:
24595883ad34SMatt Arsenault; GFX10:       ; %bb.0:
24605883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24615883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v3
24625883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v4
24635883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v5
24645883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
24655883ad34SMatt Arsenault;
24665883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f32_nnan:
24675883ad34SMatt Arsenault; GFX11:       ; %bb.0:
24685883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24695883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v3 :: v_dual_max_f32 v1, v1, v4
24705883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f32_e32 v2, v2, v5
24715883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
24725883ad34SMatt Arsenault;
24735883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f32_nnan:
24745883ad34SMatt Arsenault; GFX12:       ; %bb.0:
24755883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
24765883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
24775883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
24785883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
24795883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
24805883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v3 :: v_dual_max_num_f32 v1, v1, v4
24815883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f32_e32 v2, v2, v5
24825883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
24835883ad34SMatt Arsenault  %result = call nnan <3 x float> @llvm.maximumnum.v3f32(<3 x float> %x, <3 x float> %y)
24845883ad34SMatt Arsenault  ret <3 x float> %result
24855883ad34SMatt Arsenault}
24865883ad34SMatt Arsenault
24875883ad34SMatt Arsenaultdefine <4 x float> @v_maximumnum_v4f32(<4 x float> %x, <4 x float> %y) {
24885883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f32:
24895883ad34SMatt Arsenault; GFX8:       ; %bb.0:
24905883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24915883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v4
24925883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24935883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v4
24945883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v5
24955883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
24965883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v4
24975883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v6
24985883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
24995883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v2, v2, v4
25005883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v7
25015883ad34SMatt Arsenault; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v3
25025883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v3, v3, v4
25035883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
25045883ad34SMatt Arsenault;
25055883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f32:
25065883ad34SMatt Arsenault; GFX9:       ; %bb.0:
25075883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25085883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v4, v4, v4
25095883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
25105883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v4
25115883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v4, v5, v5
25125883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
25135883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v4
25145883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v4, v6, v6
25155883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
25165883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v4
25175883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v4, v7, v7
25185883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v3, v3
25195883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v3, v4
25205883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
25215883ad34SMatt Arsenault;
25225883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f32:
25235883ad34SMatt Arsenault; GFX10:       ; %bb.0:
25245883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25255883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v4, v4, v4
25265883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
25275883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v5, v5, v5
25285883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
25295883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v6, v6, v6
25305883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
25315883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v7, v7, v7
25325883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
25335883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v4
25345883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v5
25355883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v6
25365883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v3, v3, v7
25375883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
25385883ad34SMatt Arsenault;
25395883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f32:
25405883ad34SMatt Arsenault; GFX11:       ; %bb.0:
25415883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25425883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v5, v5, v5
25435883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
25445883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v6, v6, v6 :: v_dual_max_f32 v7, v7, v7
25455883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
25465883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
25475883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v4 :: v_dual_max_f32 v1, v1, v5
25485883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v2, v2, v6 :: v_dual_max_f32 v3, v3, v7
25495883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
25505883ad34SMatt Arsenault;
25515883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f32:
25525883ad34SMatt Arsenault; GFX12:       ; %bb.0:
25535883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
25545883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
25555883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
25565883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
25575883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
25585883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v5, v5, v5
25595883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
25605883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v6, v6, v6 :: v_dual_max_num_f32 v7, v7, v7
25615883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
25625883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
25635883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v4 :: v_dual_max_num_f32 v1, v1, v5
25645883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v6 :: v_dual_max_num_f32 v3, v3, v7
25655883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
25665883ad34SMatt Arsenault  %result = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> %x, <4 x float> %y)
25675883ad34SMatt Arsenault  ret <4 x float> %result
25685883ad34SMatt Arsenault}
25695883ad34SMatt Arsenault
25705883ad34SMatt Arsenaultdefine <4 x float> @v_maximumnum_v4f32_nnan(<4 x float> %x, <4 x float> %y) {
25715883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f32_nnan:
25725883ad34SMatt Arsenault; GFX8:       ; %bb.0:
25735883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25745883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v0, v0, v4
25755883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v1, v1, v5
25765883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v2, v2, v6
25775883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f32_e32 v3, v3, v7
25785883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
25795883ad34SMatt Arsenault;
25805883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f32_nnan:
25815883ad34SMatt Arsenault; GFX9:       ; %bb.0:
25825883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25835883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v0, v0, v4
25845883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v1, v1, v5
25855883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v2, v2, v6
25865883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f32_e32 v3, v3, v7
25875883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
25885883ad34SMatt Arsenault;
25895883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f32_nnan:
25905883ad34SMatt Arsenault; GFX10:       ; %bb.0:
25915883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25925883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v0, v0, v4
25935883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v1, v1, v5
25945883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v2, v2, v6
25955883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f32_e32 v3, v3, v7
25965883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
25975883ad34SMatt Arsenault;
25985883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f32_nnan:
25995883ad34SMatt Arsenault; GFX11:       ; %bb.0:
26005883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26015883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v0, v0, v4 :: v_dual_max_f32 v1, v1, v5
26025883ad34SMatt Arsenault; GFX11-NEXT:    v_dual_max_f32 v2, v2, v6 :: v_dual_max_f32 v3, v3, v7
26035883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
26045883ad34SMatt Arsenault;
26055883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f32_nnan:
26065883ad34SMatt Arsenault; GFX12:       ; %bb.0:
26075883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
26085883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
26095883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
26105883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
26115883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
26125883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v4 :: v_dual_max_num_f32 v1, v1, v5
26135883ad34SMatt Arsenault; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v6 :: v_dual_max_num_f32 v3, v3, v7
26145883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
26155883ad34SMatt Arsenault  %result = call nnan <4 x float> @llvm.maximumnum.v4f32(<4 x float> %x, <4 x float> %y)
26165883ad34SMatt Arsenault  ret <4 x float> %result
26175883ad34SMatt Arsenault}
26185883ad34SMatt Arsenault
26195883ad34SMatt Arsenaultdefine <2 x double> @v_maximumnum_v2f64(<2 x double> %x, <2 x double> %y) {
26205883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f64:
26215883ad34SMatt Arsenault; GFX8:       ; %bb.0:
26225883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26235883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
26245883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
26255883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
26265883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
26275883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26285883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26295883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
26305883ad34SMatt Arsenault;
26315883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f64:
26325883ad34SMatt Arsenault; GFX9:       ; %bb.0:
26335883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26345883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
26355883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
26365883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
26375883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
26385883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26395883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26405883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
26415883ad34SMatt Arsenault;
26425883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f64:
26435883ad34SMatt Arsenault; GFX10:       ; %bb.0:
26445883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26455883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
26465883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
26475883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
26485883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
26495883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26505883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26515883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
26525883ad34SMatt Arsenault;
26535883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f64:
26545883ad34SMatt Arsenault; GFX11:       ; %bb.0:
26555883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26565883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
26575883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
26585883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
26595883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
26605883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
26615883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26625883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26635883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
26645883ad34SMatt Arsenault;
26655883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f64:
26665883ad34SMatt Arsenault; GFX12:       ; %bb.0:
26675883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
26685883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
26695883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
26705883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
26715883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
26725883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
26735883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
26745883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
26755883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
26765883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
26775883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[4:5]
26785883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[6:7]
26795883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
26805883ad34SMatt Arsenault  %result = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> %x, <2 x double> %y)
26815883ad34SMatt Arsenault  ret <2 x double> %result
26825883ad34SMatt Arsenault}
26835883ad34SMatt Arsenault
26845883ad34SMatt Arsenaultdefine <2 x double> @v_maximumnum_v2f64_nnan(<2 x double> %x, <2 x double> %y) {
26855883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v2f64_nnan:
26865883ad34SMatt Arsenault; GFX8:       ; %bb.0:
26875883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26885883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26895883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26905883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
26915883ad34SMatt Arsenault;
26925883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v2f64_nnan:
26935883ad34SMatt Arsenault; GFX9:       ; %bb.0:
26945883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26955883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
26965883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
26975883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
26985883ad34SMatt Arsenault;
26995883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v2f64_nnan:
27005883ad34SMatt Arsenault; GFX10:       ; %bb.0:
27015883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27025883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
27035883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
27045883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
27055883ad34SMatt Arsenault;
27065883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v2f64_nnan:
27075883ad34SMatt Arsenault; GFX11:       ; %bb.0:
27085883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27095883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[4:5]
27105883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[6:7]
27115883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
27125883ad34SMatt Arsenault;
27135883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v2f64_nnan:
27145883ad34SMatt Arsenault; GFX12:       ; %bb.0:
27155883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
27165883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
27175883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
27185883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
27195883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
27205883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[4:5]
27215883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[6:7]
27225883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
27235883ad34SMatt Arsenault  %result = call nnan <2 x double> @llvm.maximumnum.v2f64(<2 x double> %x, <2 x double> %y)
27245883ad34SMatt Arsenault  ret <2 x double> %result
27255883ad34SMatt Arsenault}
27265883ad34SMatt Arsenault
27275883ad34SMatt Arsenaultdefine <3 x double> @v_maximumnum_v3f64(<3 x double> %x, <3 x double> %y) {
27285883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f64:
27295883ad34SMatt Arsenault; GFX8:       ; %bb.0:
27305883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27315883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
27325883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
27335883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
27345883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
27355883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
27365883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
27375883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
27385883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
27395883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
27405883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
27415883ad34SMatt Arsenault;
27425883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f64:
27435883ad34SMatt Arsenault; GFX9:       ; %bb.0:
27445883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27455883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
27465883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
27475883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
27485883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
27495883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
27505883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
27515883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
27525883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
27535883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
27545883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
27555883ad34SMatt Arsenault;
27565883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f64:
27575883ad34SMatt Arsenault; GFX10:       ; %bb.0:
27585883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27595883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
27605883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
27615883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
27625883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
27635883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
27645883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
27655883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
27665883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
27675883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
27685883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
27695883ad34SMatt Arsenault;
27705883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f64:
27715883ad34SMatt Arsenault; GFX11:       ; %bb.0:
27725883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27735883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
27745883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
27755883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
27765883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
27775883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
27785883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
27795883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
27805883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
27815883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
27825883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
27835883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
27845883ad34SMatt Arsenault;
27855883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f64:
27865883ad34SMatt Arsenault; GFX12:       ; %bb.0:
27875883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
27885883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
27895883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
27905883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
27915883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
27925883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
27935883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
27945883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[8:9], v[8:9], v[8:9]
27955883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
27965883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[10:11], v[10:11], v[10:11]
27975883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
27985883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[6:7]
27995883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
28005883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[8:9]
28015883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[10:11]
28025883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
28035883ad34SMatt Arsenault  %result = call <3 x double> @llvm.maximumnum.v3f64(<3 x double> %x, <3 x double> %y)
28045883ad34SMatt Arsenault  ret <3 x double> %result
28055883ad34SMatt Arsenault}
28065883ad34SMatt Arsenault
28075883ad34SMatt Arsenaultdefine <3 x double> @v_maximumnum_v3f64_nnan(<3 x double> %x, <3 x double> %y) {
28085883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v3f64_nnan:
28095883ad34SMatt Arsenault; GFX8:       ; %bb.0:
28105883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28115883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
28125883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
28135883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
28145883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
28155883ad34SMatt Arsenault;
28165883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v3f64_nnan:
28175883ad34SMatt Arsenault; GFX9:       ; %bb.0:
28185883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28195883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
28205883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
28215883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
28225883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
28235883ad34SMatt Arsenault;
28245883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v3f64_nnan:
28255883ad34SMatt Arsenault; GFX10:       ; %bb.0:
28265883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28275883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
28285883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
28295883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
28305883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
28315883ad34SMatt Arsenault;
28325883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v3f64_nnan:
28335883ad34SMatt Arsenault; GFX11:       ; %bb.0:
28345883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28355883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[6:7]
28365883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[8:9]
28375883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[10:11]
28385883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
28395883ad34SMatt Arsenault;
28405883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v3f64_nnan:
28415883ad34SMatt Arsenault; GFX12:       ; %bb.0:
28425883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
28435883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
28445883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
28455883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
28465883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
28475883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[6:7]
28485883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[8:9]
28495883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[10:11]
28505883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
28515883ad34SMatt Arsenault  %result = call nnan <3 x double> @llvm.maximumnum.v3f64(<3 x double> %x, <3 x double> %y)
28525883ad34SMatt Arsenault  ret <3 x double> %result
28535883ad34SMatt Arsenault}
28545883ad34SMatt Arsenault
28555883ad34SMatt Arsenaultdefine <4 x double> @v_maximumnum_v4f64(<4 x double> %x, <4 x double> %y) {
28565883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f64:
28575883ad34SMatt Arsenault; GFX8:       ; %bb.0:
28585883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28595883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
28605883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
28615883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
28625883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
28635883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
28645883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
28655883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
28665883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
28675883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
28685883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
28695883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
28705883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
28715883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
28725883ad34SMatt Arsenault;
28735883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f64:
28745883ad34SMatt Arsenault; GFX9:       ; %bb.0:
28755883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28765883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
28775883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
28785883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
28795883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
28805883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
28815883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
28825883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
28835883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
28845883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
28855883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
28865883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
28875883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
28885883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
28895883ad34SMatt Arsenault;
28905883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f64:
28915883ad34SMatt Arsenault; GFX10:       ; %bb.0:
28925883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28935883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
28945883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
28955883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
28965883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
28975883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
28985883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
28995883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
29005883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
29015883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29025883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29035883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29045883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29055883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
29065883ad34SMatt Arsenault;
29075883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f64:
29085883ad34SMatt Arsenault; GFX11:       ; %bb.0:
29095883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29105883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
29115883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
29125883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
29135883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
29145883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
29155883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
29165883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
29175883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
29185883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29195883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29205883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29215883ad34SMatt Arsenault; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
29225883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29235883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
29245883ad34SMatt Arsenault;
29255883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f64:
29265883ad34SMatt Arsenault; GFX12:       ; %bb.0:
29275883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
29285883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
29295883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
29305883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
29315883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
29325883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[8:9], v[8:9], v[8:9]
29335883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
29345883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[10:11], v[10:11], v[10:11]
29355883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
29365883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[12:13], v[12:13], v[12:13]
29375883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
29385883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[14:15], v[14:15], v[14:15]
29395883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
29405883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[8:9]
29415883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[10:11]
29425883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[12:13]
29435883ad34SMatt Arsenault; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4)
29445883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[14:15]
29455883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
29465883ad34SMatt Arsenault  %result = call <4 x double> @llvm.maximumnum.v4f64(<4 x double> %x, <4 x double> %y)
29475883ad34SMatt Arsenault  ret <4 x double> %result
29485883ad34SMatt Arsenault}
29495883ad34SMatt Arsenault
29505883ad34SMatt Arsenaultdefine <4 x double> @v_maximumnum_v4f64_nnan(<4 x double> %x, <4 x double> %y) {
29515883ad34SMatt Arsenault; GFX8-LABEL: v_maximumnum_v4f64_nnan:
29525883ad34SMatt Arsenault; GFX8:       ; %bb.0:
29535883ad34SMatt Arsenault; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29545883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29555883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29565883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29575883ad34SMatt Arsenault; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29585883ad34SMatt Arsenault; GFX8-NEXT:    s_setpc_b64 s[30:31]
29595883ad34SMatt Arsenault;
29605883ad34SMatt Arsenault; GFX9-LABEL: v_maximumnum_v4f64_nnan:
29615883ad34SMatt Arsenault; GFX9:       ; %bb.0:
29625883ad34SMatt Arsenault; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29635883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29645883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29655883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29665883ad34SMatt Arsenault; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29675883ad34SMatt Arsenault; GFX9-NEXT:    s_setpc_b64 s[30:31]
29685883ad34SMatt Arsenault;
29695883ad34SMatt Arsenault; GFX10-LABEL: v_maximumnum_v4f64_nnan:
29705883ad34SMatt Arsenault; GFX10:       ; %bb.0:
29715883ad34SMatt Arsenault; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29725883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29735883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29745883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29755883ad34SMatt Arsenault; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29765883ad34SMatt Arsenault; GFX10-NEXT:    s_setpc_b64 s[30:31]
29775883ad34SMatt Arsenault;
29785883ad34SMatt Arsenault; GFX11-LABEL: v_maximumnum_v4f64_nnan:
29795883ad34SMatt Arsenault; GFX11:       ; %bb.0:
29805883ad34SMatt Arsenault; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29815883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[8:9]
29825883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[10:11]
29835883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[12:13]
29845883ad34SMatt Arsenault; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[14:15]
29855883ad34SMatt Arsenault; GFX11-NEXT:    s_setpc_b64 s[30:31]
29865883ad34SMatt Arsenault;
29875883ad34SMatt Arsenault; GFX12-LABEL: v_maximumnum_v4f64_nnan:
29885883ad34SMatt Arsenault; GFX12:       ; %bb.0:
29895883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
29905883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_expcnt 0x0
29915883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_samplecnt 0x0
29925883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_bvhcnt 0x0
29935883ad34SMatt Arsenault; GFX12-NEXT:    s_wait_kmcnt 0x0
29945883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[8:9]
29955883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[10:11]
29965883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[12:13]
29975883ad34SMatt Arsenault; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[14:15]
29985883ad34SMatt Arsenault; GFX12-NEXT:    s_setpc_b64 s[30:31]
29995883ad34SMatt Arsenault  %result = call nnan <4 x double> @llvm.maximumnum.v4f64(<4 x double> %x, <4 x double> %y)
30005883ad34SMatt Arsenault  ret <4 x double> %result
30015883ad34SMatt Arsenault}
3002