Skip to content

Commit e109d7d

Browse files
committed
AMDGPU: Handle f32 minimum3/maximum3 pattern for gfx950
1 parent 593f540 commit e109d7d

File tree

3 files changed

+102
-193
lines changed

3 files changed

+102
-193
lines changed

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13346,7 +13346,8 @@ static bool supportsMin3Max3(const GCNSubtarget &Subtarget, unsigned Opc,
1334613346
return (VT == MVT::f32) || (VT == MVT::f16 && Subtarget.hasMin3Max3_16());
1334713347
case ISD::FMINIMUM:
1334813348
case ISD::FMAXIMUM:
13349-
return (VT == MVT::f32 || VT == MVT::f16) && Subtarget.hasIEEEMinMax3();
13349+
return (VT == MVT::f32 && Subtarget.hasMinimum3Maximum3F32()) ||
13350+
(VT == MVT::f16 && Subtarget.hasMinimum3Maximum3F16());
1335013351
case ISD::SMAX:
1335113352
case ISD::SMIN:
1335213353
case ISD::UMAX:

llvm/test/CodeGen/AMDGPU/fmaximum3.ll

Lines changed: 50 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ define float @v_fmaximum3_f32(float %a, float %b, float %c) {
3131
; GFX950-LABEL: v_fmaximum3_f32:
3232
; GFX950: ; %bb.0:
3333
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
35-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
34+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v2
3635
; GFX950-NEXT: s_setpc_b64 s[30:31]
3736
%max0 = call float @llvm.maximum.f32(float %a, float %b)
3837
%max1 = call float @llvm.maximum.f32(float %max0, float %c)
@@ -67,8 +66,7 @@ define float @v_fmaximum3_f32_commute(float %a, float %b, float %c) {
6766
; GFX950-LABEL: v_fmaximum3_f32_commute:
6867
; GFX950: ; %bb.0:
6968
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
70-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
71-
; GFX950-NEXT: v_maximum3_f32 v0, v2, v0, v0
69+
; GFX950-NEXT: v_maximum3_f32 v0, v2, v0, v1
7270
; GFX950-NEXT: s_setpc_b64 s[30:31]
7371
%max0 = call float @llvm.maximum.f32(float %a, float %b)
7472
%max1 = call float @llvm.maximum.f32(float %c, float %max0)
@@ -102,9 +100,9 @@ define amdgpu_ps i32 @s_fmaximum3_f32(float inreg %a, float inreg %b, float inre
102100
;
103101
; GFX950-LABEL: s_fmaximum3_f32:
104102
; GFX950: ; %bb.0:
105-
; GFX950-NEXT: v_mov_b32_e32 v0, s0
106-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s1, s1
107-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s2, s2
103+
; GFX950-NEXT: v_mov_b32_e32 v0, s1
104+
; GFX950-NEXT: v_mov_b32_e32 v1, s2
105+
; GFX950-NEXT: v_maximum3_f32 v0, s0, v0, v1
108106
; GFX950-NEXT: s_nop 0
109107
; GFX950-NEXT: v_readfirstlane_b32 s0, v0
110108
; GFX950-NEXT: ; return to shader part epilog
@@ -143,8 +141,7 @@ define float @v_fmaximum3_f32_fabs0(float %a, float %b, float %c) {
143141
; GFX950-LABEL: v_fmaximum3_f32_fabs0:
144142
; GFX950: ; %bb.0:
145143
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
146-
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, v1, v1
147-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
144+
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, v1, v2
148145
; GFX950-NEXT: s_setpc_b64 s[30:31]
149146
%a.fabs = call float @llvm.fabs.f32(float %a)
150147
%max0 = call float @llvm.maximum.f32(float %a.fabs, float %b)
@@ -180,8 +177,7 @@ define float @v_fmaximum3_f32_fabs1(float %a, float %b, float %c) {
180177
; GFX950-LABEL: v_fmaximum3_f32_fabs1:
181178
; GFX950: ; %bb.0:
182179
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
183-
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v1|, |v1|
184-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
180+
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v1|, v2
185181
; GFX950-NEXT: s_setpc_b64 s[30:31]
186182
%b.fabs = call float @llvm.fabs.f32(float %b)
187183
%max0 = call float @llvm.maximum.f32(float %a, float %b.fabs)
@@ -217,8 +213,7 @@ define float @v_fmaximum3_f32_fabs2(float %a, float %b, float %c) {
217213
; GFX950-LABEL: v_fmaximum3_f32_fabs2:
218214
; GFX950: ; %bb.0:
219215
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
220-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
221-
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v2|, |v2|
216+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, |v2|
222217
; GFX950-NEXT: s_setpc_b64 s[30:31]
223218
%c.fabs = call float @llvm.fabs.f32(float %c)
224219
%max0 = call float @llvm.maximum.f32(float %a, float %b)
@@ -254,8 +249,7 @@ define float @v_fmaximum3_f32_fabs_all(float %a, float %b, float %c) {
254249
; GFX950-LABEL: v_fmaximum3_f32_fabs_all:
255250
; GFX950: ; %bb.0:
256251
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
257-
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v1|, |v1|
258-
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v2|, |v2|
252+
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v1|, |v2|
259253
; GFX950-NEXT: s_setpc_b64 s[30:31]
260254
%a.fabs = call float @llvm.fabs.f32(float %a)
261255
%b.fabs = call float @llvm.fabs.f32(float %b)
@@ -293,8 +287,7 @@ define float @v_fmaximum3_f32_fneg_all(float %a, float %b, float %c) {
293287
; GFX950-LABEL: v_fmaximum3_f32_fneg_all:
294288
; GFX950: ; %bb.0:
295289
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
296-
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v1, -v1
297-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v2, -v2
290+
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v1, -v2
298291
; GFX950-NEXT: s_setpc_b64 s[30:31]
299292
%a.fneg = fneg float %a
300293
%b.fneg = fneg float %b
@@ -332,8 +325,7 @@ define float @v_fmaximum3_f32_fneg_fabs_all(float %a, float %b, float %c) {
332325
; GFX950-LABEL: v_fmaximum3_f32_fneg_fabs_all:
333326
; GFX950: ; %bb.0:
334327
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
335-
; GFX950-NEXT: v_maximum3_f32 v0, -|v0|, -|v1|, -|v1|
336-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -|v2|, -|v2|
328+
; GFX950-NEXT: v_maximum3_f32 v0, -|v0|, -|v1|, -|v2|
337329
; GFX950-NEXT: s_setpc_b64 s[30:31]
338330
%a.fabs = call float @llvm.fabs.f32(float %a)
339331
%b.fabs = call float @llvm.fabs.f32(float %b)
@@ -374,8 +366,7 @@ define float @v_fmaximum3_f32_fneg0(float %a, float %b, float %c) {
374366
; GFX950-LABEL: v_fmaximum3_f32_fneg0:
375367
; GFX950: ; %bb.0:
376368
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
377-
; GFX950-NEXT: v_maximum3_f32 v0, -v0, v1, v1
378-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
369+
; GFX950-NEXT: v_maximum3_f32 v0, -v0, v1, v2
379370
; GFX950-NEXT: s_setpc_b64 s[30:31]
380371
%a.fneg = fneg float %a
381372
%max0 = call float @llvm.maximum.f32(float %a.fneg, float %b)
@@ -411,8 +402,7 @@ define float @v_fmaximum3_f32_fneg1(float %a, float %b, float %c) {
411402
; GFX950-LABEL: v_fmaximum3_f32_fneg1:
412403
; GFX950: ; %bb.0:
413404
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v1, -v1
415-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
405+
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v1, v2
416406
; GFX950-NEXT: s_setpc_b64 s[30:31]
417407
%b.fneg = fneg float %b
418408
%max0 = call float @llvm.maximum.f32(float %a, float %b.fneg)
@@ -448,8 +438,7 @@ define float @v_fmaximum3_f32_fneg2(float %a, float %b, float %c) {
448438
; GFX950-LABEL: v_fmaximum3_f32_fneg2:
449439
; GFX950: ; %bb.0:
450440
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
451-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
452-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v2, -v2
441+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, -v2
453442
; GFX950-NEXT: s_setpc_b64 s[30:31]
454443
%c.fneg = fneg float %c
455444
%max0 = call float @llvm.maximum.f32(float %a, float %b)
@@ -486,8 +475,7 @@ define float @v_fmaximum3_f32_const0(float %b, float %c) {
486475
; GFX950: ; %bb.0:
487476
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
488477
; GFX950-NEXT: s_mov_b32 s0, 0x41000000
489-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, s0
490-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
478+
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, v1
491479
; GFX950-NEXT: s_setpc_b64 s[30:31]
492480
%max0 = call float @llvm.maximum.f32(float 8.0, float %b)
493481
%max1 = call float @llvm.maximum.f32(float %max0, float %c)
@@ -522,9 +510,8 @@ define float @v_fmaximum3_f32__const2(float %a, float %b) {
522510
; GFX950-LABEL: v_fmaximum3_f32__const2:
523511
; GFX950: ; %bb.0:
524512
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
525-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
526513
; GFX950-NEXT: s_mov_b32 s0, 0x41000000
527-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, s0
514+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, s0
528515
; GFX950-NEXT: s_setpc_b64 s[30:31]
529516
%max0 = call float @llvm.maximum.f32(float %a, float %b)
530517
%max1 = call float @llvm.maximum.f32(float %max0, float 8.0)
@@ -559,8 +546,7 @@ define float @v_fmaximum3_f32_inlineimm0(float %b, float %c) {
559546
; GFX950-LABEL: v_fmaximum3_f32_inlineimm0:
560547
; GFX950: ; %bb.0:
561548
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
562-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 4.0, 4.0
563-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
549+
; GFX950-NEXT: v_maximum3_f32 v0, v0, 4.0, v1
564550
; GFX950-NEXT: s_setpc_b64 s[30:31]
565551
%max0 = call float @llvm.maximum.f32(float 4.0, float %b)
566552
%max1 = call float @llvm.maximum.f32(float %max0, float %c)
@@ -595,8 +581,7 @@ define float @v_fmaximum3_f32__inlineimm(float %a, float %b) {
595581
; GFX950-LABEL: v_fmaximum3_f32__inlineimm:
596582
; GFX950: ; %bb.0:
597583
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
598-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, v1
599-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 4.0, 4.0
584+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v1, 4.0
600585
; GFX950-NEXT: s_setpc_b64 s[30:31]
601586
%max0 = call float @llvm.maximum.f32(float %a, float %b)
602587
%max1 = call float @llvm.maximum.f32(float %max0, float 4.0)
@@ -634,9 +619,8 @@ define float @v_fmaximum3_f32_const1_const2(float %a) {
634619
; GFX950: ; %bb.0:
635620
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
636621
; GFX950-NEXT: s_mov_b32 s0, 0x41000000
637-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, s0
638-
; GFX950-NEXT: s_mov_b32 s0, 0x41800000
639-
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, s0
622+
; GFX950-NEXT: v_mov_b32_e32 v1, 0x41800000
623+
; GFX950-NEXT: v_maximum3_f32 v0, v0, s0, v1
640624
; GFX950-NEXT: s_setpc_b64 s[30:31]
641625
%max0 = call float @llvm.maximum.f32(float %a, float 8.0)
642626
%max1 = call float @llvm.maximum.f32(float %max0, float 16.0)
@@ -680,10 +664,8 @@ define <2 x float> @v_fmaximum3_v2f32(<2 x float> %a, <2 x float> %b, <2 x float
680664
; GFX950-LABEL: v_fmaximum3_v2f32:
681665
; GFX950: ; %bb.0:
682666
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
683-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, v3
684-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
685-
; GFX950-NEXT: v_maximum3_f32 v0, v4, v0, v0
686-
; GFX950-NEXT: v_maximum3_f32 v1, v5, v1, v1
667+
; GFX950-NEXT: v_maximum3_f32 v0, v4, v0, v2
668+
; GFX950-NEXT: v_maximum3_f32 v1, v5, v1, v3
687669
; GFX950-NEXT: s_setpc_b64 s[30:31]
688670
%max0 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> %b)
689671
%max1 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %c, <2 x float> %max0)
@@ -727,10 +709,8 @@ define <2 x float> @v_fmaximum3_v2f32_commute(<2 x float> %a, <2 x float> %b, <2
727709
; GFX950-LABEL: v_fmaximum3_v2f32_commute:
728710
; GFX950: ; %bb.0:
729711
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
730-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, v3
731-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
732-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v4, v4
733-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v5, v5
712+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v4
713+
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, v5
734714
; GFX950-NEXT: s_setpc_b64 s[30:31]
735715
%max0 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> %b)
736716
%max1 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %max0, <2 x float> %c)
@@ -774,10 +754,8 @@ define <2 x float> @v_fmaximum3_v2f32__fabs_all(<2 x float> %a, <2 x float> %b,
774754
; GFX950-LABEL: v_fmaximum3_v2f32__fabs_all:
775755
; GFX950: ; %bb.0:
776756
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
777-
; GFX950-NEXT: v_maximum3_f32 v1, |v1|, |v3|, |v3|
778-
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v2|, |v2|
779-
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v4|, |v4|
780-
; GFX950-NEXT: v_maximum3_f32 v1, v1, |v5|, |v5|
757+
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v2|, |v4|
758+
; GFX950-NEXT: v_maximum3_f32 v1, |v1|, |v3|, |v5|
781759
; GFX950-NEXT: s_setpc_b64 s[30:31]
782760
%a.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %a)
783761
%b.fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %b)
@@ -824,10 +802,8 @@ define <2 x float> @v_fmaximum3_v2f32__fneg_all(<2 x float> %a, <2 x float> %b,
824802
; GFX950-LABEL: v_fmaximum3_v2f32__fneg_all:
825803
; GFX950: ; %bb.0:
826804
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
827-
; GFX950-NEXT: v_maximum3_f32 v1, -v1, -v3, -v3
828-
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v2, -v2
829-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v4, -v4
830-
; GFX950-NEXT: v_maximum3_f32 v1, v1, -v5, -v5
805+
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v2, -v4
806+
; GFX950-NEXT: v_maximum3_f32 v1, -v1, -v3, -v5
831807
; GFX950-NEXT: s_setpc_b64 s[30:31]
832808
%a.fneg = fneg <2 x float> %a
833809
%b.fneg = fneg <2 x float> %b
@@ -874,10 +850,8 @@ define <2 x float> @v_fmaximum3_v2f32__inlineimm1(<2 x float> %a, <2 x float> %c
874850
; GFX950-LABEL: v_fmaximum3_v2f32__inlineimm1:
875851
; GFX950: ; %bb.0:
876852
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
877-
; GFX950-NEXT: v_maximum3_f32 v1, v1, 2.0, 2.0
878-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 2.0, 2.0
879-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
880-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, v3
853+
; GFX950-NEXT: v_maximum3_f32 v0, v0, 2.0, v2
854+
; GFX950-NEXT: v_maximum3_f32 v1, v1, 2.0, v3
881855
; GFX950-NEXT: s_setpc_b64 s[30:31]
882856
%max0 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> <float 2.0, float 2.0>)
883857
%max1 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %max0, <2 x float> %c)
@@ -921,10 +895,8 @@ define <2 x float> @v_fmaximum3_v2f32__inlineimm2(<2 x float> %a, <2 x float> %b
921895
; GFX950-LABEL: v_fmaximum3_v2f32__inlineimm2:
922896
; GFX950: ; %bb.0:
923897
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
924-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, v3
925-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, v2
926-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 4.0, 4.0
927-
; GFX950-NEXT: v_maximum3_f32 v1, v1, 4.0, 4.0
898+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v2, 4.0
899+
; GFX950-NEXT: v_maximum3_f32 v1, v1, v3, 4.0
928900
; GFX950-NEXT: s_setpc_b64 s[30:31]
929901
%max0 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> %b)
930902
%max1 = call <2 x float> @llvm.maximum.v2f32(<2 x float> %max0, <2 x float> <float 4.0, float 4.0>)
@@ -977,12 +949,9 @@ define <3 x float> @v_fmaximum3_v3f32(<3 x float> %a, <3 x float> %b, <3 x float
977949
; GFX950-LABEL: v_fmaximum3_v3f32:
978950
; GFX950: ; %bb.0:
979951
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
980-
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, v5
981-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, v4
982-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, v3
983-
; GFX950-NEXT: v_maximum3_f32 v0, v6, v0, v0
984-
; GFX950-NEXT: v_maximum3_f32 v1, v7, v1, v1
985-
; GFX950-NEXT: v_maximum3_f32 v2, v8, v2, v2
952+
; GFX950-NEXT: v_maximum3_f32 v0, v6, v0, v3
953+
; GFX950-NEXT: v_maximum3_f32 v1, v7, v1, v4
954+
; GFX950-NEXT: v_maximum3_f32 v2, v8, v2, v5
986955
; GFX950-NEXT: s_setpc_b64 s[30:31]
987956
%max0 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %a, <3 x float> %b)
988957
%max1 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %c, <3 x float> %max0)
@@ -1035,12 +1004,9 @@ define <3 x float> @v_fmaximum3_v3f32_commute(<3 x float> %a, <3 x float> %b, <3
10351004
; GFX950-LABEL: v_fmaximum3_v3f32_commute:
10361005
; GFX950: ; %bb.0:
10371006
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1038-
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, v5
1039-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, v4
1040-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, v3
1041-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v6, v6
1042-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v7, v7
1043-
; GFX950-NEXT: v_maximum3_f32 v2, v2, v8, v8
1007+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, v6
1008+
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, v7
1009+
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, v8
10441010
; GFX950-NEXT: s_setpc_b64 s[30:31]
10451011
%max0 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %a, <3 x float> %b)
10461012
%max1 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %max0, <3 x float> %c)
@@ -1093,12 +1059,9 @@ define <3 x float> @v_fmaximum3_v3f32__fabs_all(<3 x float> %a, <3 x float> %b,
10931059
; GFX950-LABEL: v_fmaximum3_v3f32__fabs_all:
10941060
; GFX950: ; %bb.0:
10951061
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1096-
; GFX950-NEXT: v_maximum3_f32 v2, |v2|, |v5|, |v5|
1097-
; GFX950-NEXT: v_maximum3_f32 v1, |v1|, |v4|, |v4|
1098-
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v3|, |v3|
1099-
; GFX950-NEXT: v_maximum3_f32 v0, v0, |v6|, |v6|
1100-
; GFX950-NEXT: v_maximum3_f32 v1, v1, |v7|, |v7|
1101-
; GFX950-NEXT: v_maximum3_f32 v2, v2, |v8|, |v8|
1062+
; GFX950-NEXT: v_maximum3_f32 v0, |v0|, |v3|, |v6|
1063+
; GFX950-NEXT: v_maximum3_f32 v1, |v1|, |v4|, |v7|
1064+
; GFX950-NEXT: v_maximum3_f32 v2, |v2|, |v5|, |v8|
11021065
; GFX950-NEXT: s_setpc_b64 s[30:31]
11031066
%a.fabs = call <3 x float> @llvm.fabs.v3f32(<3 x float> %a)
11041067
%b.fabs = call <3 x float> @llvm.fabs.v3f32(<3 x float> %b)
@@ -1154,12 +1117,9 @@ define <3 x float> @v_fmaximum3_v3f32__fneg_all(<3 x float> %a, <3 x float> %b,
11541117
; GFX950-LABEL: v_fmaximum3_v3f32__fneg_all:
11551118
; GFX950: ; %bb.0:
11561119
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1157-
; GFX950-NEXT: v_maximum3_f32 v2, -v2, -v5, -v5
1158-
; GFX950-NEXT: v_maximum3_f32 v1, -v1, -v4, -v4
1159-
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v3, -v3
1160-
; GFX950-NEXT: v_maximum3_f32 v0, v0, -v6, -v6
1161-
; GFX950-NEXT: v_maximum3_f32 v1, v1, -v7, -v7
1162-
; GFX950-NEXT: v_maximum3_f32 v2, v2, -v8, -v8
1120+
; GFX950-NEXT: v_maximum3_f32 v0, -v0, -v3, -v6
1121+
; GFX950-NEXT: v_maximum3_f32 v1, -v1, -v4, -v7
1122+
; GFX950-NEXT: v_maximum3_f32 v2, -v2, -v5, -v8
11631123
; GFX950-NEXT: s_setpc_b64 s[30:31]
11641124
%a.fneg = fneg <3 x float> %a
11651125
%b.fneg = fneg <3 x float> %b
@@ -1215,12 +1175,9 @@ define <3 x float> @v_fmaximum3_v3f32__inlineimm1(<3 x float> %a, <3 x float> %c
12151175
; GFX950-LABEL: v_fmaximum3_v3f32__inlineimm1:
12161176
; GFX950: ; %bb.0:
12171177
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1218-
; GFX950-NEXT: v_maximum3_f32 v2, v2, 2.0, 2.0
1219-
; GFX950-NEXT: v_maximum3_f32 v1, v1, 2.0, 2.0
1220-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 2.0, 2.0
1221-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, v3
1222-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, v4
1223-
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, v5
1178+
; GFX950-NEXT: v_maximum3_f32 v0, v0, 2.0, v3
1179+
; GFX950-NEXT: v_maximum3_f32 v1, v1, 2.0, v4
1180+
; GFX950-NEXT: v_maximum3_f32 v2, v2, 2.0, v5
12241181
; GFX950-NEXT: s_setpc_b64 s[30:31]
12251182
%max0 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %a, <3 x float> <float 2.0, float 2.0, float 2.0>)
12261183
%max1 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %max0, <3 x float> %c)
@@ -1273,12 +1230,9 @@ define <3 x float> @v_fmaximum3_v3f32__inlineimm2(<3 x float> %a, <3 x float> %b
12731230
; GFX950-LABEL: v_fmaximum3_v3f32__inlineimm2:
12741231
; GFX950: ; %bb.0:
12751232
; GFX950-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1276-
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, v5
1277-
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, v4
1278-
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, v3
1279-
; GFX950-NEXT: v_maximum3_f32 v0, v0, 4.0, 4.0
1280-
; GFX950-NEXT: v_maximum3_f32 v1, v1, 4.0, 4.0
1281-
; GFX950-NEXT: v_maximum3_f32 v2, v2, 4.0, 4.0
1233+
; GFX950-NEXT: v_maximum3_f32 v0, v0, v3, 4.0
1234+
; GFX950-NEXT: v_maximum3_f32 v1, v1, v4, 4.0
1235+
; GFX950-NEXT: v_maximum3_f32 v2, v2, v5, 4.0
12821236
; GFX950-NEXT: s_setpc_b64 s[30:31]
12831237
%max0 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %a, <3 x float> %b)
12841238
%max1 = call <3 x float> @llvm.maximum.v3f32(<3 x float> %max0, <3 x float> <float 4.0, float 4.0, float 4.0>)

0 commit comments

Comments
 (0)