@@ -105,41 +105,61 @@ define amdgpu_kernel void @v_test_no_global_nnans_med3_f32_pat0_srcmod0(float ad
105
105
; SI-NEXT: buffer_load_dword v4, v[0:1], s[8:11], 0 addr64
106
106
; SI-NEXT: s_waitcnt vmcnt(2)
107
107
; SI-NEXT: v_sub_f32_e32 v2, 0x80000000, v2
108
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
109
+ ; SI-NEXT: s_waitcnt vmcnt(1)
110
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v3
111
+ ; SI-NEXT: v_min_f32_e32 v5, v2, v3
112
+ ; SI-NEXT: v_max_f32_e32 v2, v2, v3
108
113
; SI-NEXT: s_waitcnt vmcnt(0)
109
- ; SI-NEXT: v_med3_f32 v2, v2, v3, v4
114
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v4
115
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
116
+ ; SI-NEXT: v_min_f32_e32 v2, v2, v3
117
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v5
118
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
119
+ ; SI-NEXT: v_max_f32_e32 v2, v3, v2
110
120
; SI-NEXT: s_mov_b64 s[2:3], s[10:11]
111
121
; SI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
112
122
; SI-NEXT: s_endpgm
113
123
;
114
124
; VI-LABEL: v_test_no_global_nnans_med3_f32_pat0_srcmod0:
115
125
; VI: ; %bb.0:
116
126
; VI-NEXT: s_load_dwordx8 s[0:7], s[0:1], 0x24
117
- ; VI-NEXT: v_lshlrev_b32_e32 v8 , 2, v0
127
+ ; VI-NEXT: v_lshlrev_b32_e32 v6 , 2, v0
118
128
; VI-NEXT: s_waitcnt lgkmcnt(0)
119
129
; VI-NEXT: v_mov_b32_e32 v0, s2
120
130
; VI-NEXT: v_mov_b32_e32 v1, s3
121
- ; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v8
131
+ ; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v6
122
132
; VI-NEXT: v_mov_b32_e32 v2, s4
123
133
; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc
124
134
; VI-NEXT: v_mov_b32_e32 v3, s5
125
- ; VI-NEXT: v_add_u32_e32 v2, vcc, v2, v8
135
+ ; VI-NEXT: v_add_u32_e32 v2, vcc, v2, v6
126
136
; VI-NEXT: v_mov_b32_e32 v4, s6
127
137
; VI-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc
128
138
; VI-NEXT: v_mov_b32_e32 v5, s7
129
- ; VI-NEXT: v_add_u32_e32 v4, vcc, v4, v8
139
+ ; VI-NEXT: v_add_u32_e32 v4, vcc, v4, v6
130
140
; VI-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc
131
- ; VI-NEXT: flat_load_dword v0 , v[0:1]
132
- ; VI-NEXT: flat_load_dword v1 , v[2:3]
133
- ; VI-NEXT: flat_load_dword v2 , v[4:5]
134
- ; VI-NEXT: v_mov_b32_e32 v7, s1
135
- ; VI-NEXT: v_mov_b32_e32 v6, s0
136
- ; VI-NEXT: v_add_u32_e32 v6 , vcc, v6, v8
137
- ; VI-NEXT: v_addc_u32_e32 v7 , vcc, 0, v7 , vcc
141
+ ; VI-NEXT: flat_load_dword v7 , v[0:1]
142
+ ; VI-NEXT: flat_load_dword v2 , v[2:3]
143
+ ; VI-NEXT: flat_load_dword v3 , v[4:5]
144
+ ; VI-NEXT: v_mov_b32_e32 v0, s0
145
+ ; VI-NEXT: v_mov_b32_e32 v1, s1
146
+ ; VI-NEXT: v_add_u32_e32 v0 , vcc, v0, v6
147
+ ; VI-NEXT: v_addc_u32_e32 v1 , vcc, 0, v1 , vcc
138
148
; VI-NEXT: s_waitcnt vmcnt(2) lgkmcnt(2)
139
- ; VI-NEXT: v_sub_f32_e32 v0, 0x80000000, v0
149
+ ; VI-NEXT: v_sub_f32_e32 v4, 0x80000000, v7
150
+ ; VI-NEXT: s_waitcnt vmcnt(1) lgkmcnt(1)
151
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
152
+ ; VI-NEXT: v_mul_f32_e32 v4, 1.0, v4
153
+ ; VI-NEXT: v_min_f32_e32 v5, v4, v2
154
+ ; VI-NEXT: v_max_f32_e32 v2, v4, v2
140
155
; VI-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
141
- ; VI-NEXT: v_med3_f32 v0, v0, v1, v2
142
- ; VI-NEXT: flat_store_dword v[6:7], v0
156
+ ; VI-NEXT: v_mul_f32_e32 v3, 1.0, v3
157
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
158
+ ; VI-NEXT: v_min_f32_e32 v2, v2, v3
159
+ ; VI-NEXT: v_mul_f32_e32 v3, 1.0, v5
160
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
161
+ ; VI-NEXT: v_max_f32_e32 v2, v3, v2
162
+ ; VI-NEXT: flat_store_dword v[0:1], v2
143
163
; VI-NEXT: s_endpgm
144
164
;
145
165
; GFX9-LABEL: v_test_no_global_nnans_med3_f32_pat0_srcmod0:
@@ -152,8 +172,18 @@ define amdgpu_kernel void @v_test_no_global_nnans_med3_f32_pat0_srcmod0(float ad
152
172
; GFX9-NEXT: global_load_dword v3, v0, s[6:7]
153
173
; GFX9-NEXT: s_waitcnt vmcnt(2)
154
174
; GFX9-NEXT: v_sub_f32_e32 v1, 0x80000000, v1
175
+ ; GFX9-NEXT: s_waitcnt vmcnt(1)
176
+ ; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
177
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
178
+ ; GFX9-NEXT: v_min_f32_e32 v4, v1, v2
179
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v2
155
180
; GFX9-NEXT: s_waitcnt vmcnt(0)
156
- ; GFX9-NEXT: v_med3_f32 v1, v1, v2, v3
181
+ ; GFX9-NEXT: v_max_f32_e32 v3, v3, v3
182
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
183
+ ; GFX9-NEXT: v_min_f32_e32 v1, v1, v3
184
+ ; GFX9-NEXT: v_max_f32_e32 v2, v4, v4
185
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
186
+ ; GFX9-NEXT: v_max_f32_e32 v1, v2, v1
157
187
; GFX9-NEXT: global_store_dword v0, v1, s[0:1]
158
188
; GFX9-NEXT: s_endpgm
159
189
%tid = call i32 @llvm.amdgcn.workitem.id.x ()
@@ -396,7 +426,13 @@ define amdgpu_kernel void @v_nnan_inputs_med3_f32_pat0(float addrspace(1)* %out,
396
426
; SI-NEXT: v_add_f32_e32 v3, 2.0, v3
397
427
; SI-NEXT: s_waitcnt vmcnt(0)
398
428
; SI-NEXT: v_add_f32_e32 v4, 4.0, v4
399
- ; SI-NEXT: v_med3_f32 v2, v2, v3, v4
429
+ ; SI-NEXT: v_min_f32_e32 v5, v2, v3
430
+ ; SI-NEXT: v_max_f32_e32 v2, v2, v3
431
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
432
+ ; SI-NEXT: v_min_f32_e32 v2, v2, v4
433
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v5
434
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
435
+ ; SI-NEXT: v_max_f32_e32 v2, v3, v2
400
436
; SI-NEXT: s_mov_b64 s[2:3], s[10:11]
401
437
; SI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
402
438
; SI-NEXT: s_endpgm
@@ -429,9 +465,15 @@ define amdgpu_kernel void @v_nnan_inputs_med3_f32_pat0(float addrspace(1)* %out,
429
465
; VI-NEXT: v_add_f32_e32 v4, 1.0, v7
430
466
; VI-NEXT: s_waitcnt vmcnt(1) lgkmcnt(1)
431
467
; VI-NEXT: v_add_f32_e32 v2, 2.0, v2
468
+ ; VI-NEXT: v_min_f32_e32 v5, v4, v2
469
+ ; VI-NEXT: v_max_f32_e32 v2, v4, v2
432
470
; VI-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
433
471
; VI-NEXT: v_add_f32_e32 v3, 4.0, v3
434
- ; VI-NEXT: v_med3_f32 v2, v4, v2, v3
472
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
473
+ ; VI-NEXT: v_min_f32_e32 v2, v2, v3
474
+ ; VI-NEXT: v_mul_f32_e32 v3, 1.0, v5
475
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
476
+ ; VI-NEXT: v_max_f32_e32 v2, v3, v2
435
477
; VI-NEXT: flat_store_dword v[0:1], v2
436
478
; VI-NEXT: s_endpgm
437
479
;
@@ -447,9 +489,15 @@ define amdgpu_kernel void @v_nnan_inputs_med3_f32_pat0(float addrspace(1)* %out,
447
489
; GFX9-NEXT: v_add_f32_e32 v1, 1.0, v1
448
490
; GFX9-NEXT: s_waitcnt vmcnt(1)
449
491
; GFX9-NEXT: v_add_f32_e32 v2, 2.0, v2
492
+ ; GFX9-NEXT: v_min_f32_e32 v4, v1, v2
493
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v2
450
494
; GFX9-NEXT: s_waitcnt vmcnt(0)
451
495
; GFX9-NEXT: v_add_f32_e32 v3, 4.0, v3
452
- ; GFX9-NEXT: v_med3_f32 v1, v1, v2, v3
496
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
497
+ ; GFX9-NEXT: v_min_f32_e32 v1, v1, v3
498
+ ; GFX9-NEXT: v_max_f32_e32 v2, v4, v4
499
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
500
+ ; GFX9-NEXT: v_max_f32_e32 v1, v2, v1
453
501
; GFX9-NEXT: global_store_dword v0, v1, s[0:1]
454
502
; GFX9-NEXT: s_endpgm
455
503
%tid = call i32 @llvm.amdgcn.workitem.id.x ()
@@ -495,13 +543,20 @@ define amdgpu_kernel void @v_test_safe_med3_f32_pat0_multi_use0(float addrspace(
495
543
; SI-NEXT: s_mov_b32 s3, s11
496
544
; SI-NEXT: s_mov_b64 s[8:9], s[6:7]
497
545
; SI-NEXT: buffer_load_dword v4, v[0:1], s[8:11], 0 addr64
546
+ ; SI-NEXT: s_waitcnt vmcnt(2)
547
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
498
548
; SI-NEXT: s_waitcnt vmcnt(1)
549
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v3
499
550
; SI-NEXT: v_min_f32_e32 v5, v2, v3
500
551
; SI-NEXT: v_max_f32_e32 v2, v2, v3
552
+ ; SI-NEXT: s_waitcnt vmcnt(0)
553
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v4
501
554
; SI-NEXT: buffer_store_dword v5, off, s[0:3], 0
502
- ; SI-NEXT: s_waitcnt vmcnt(1)
503
- ; SI-NEXT: v_min_f32_e32 v2, v2, v4
504
- ; SI-NEXT: v_max_f32_e32 v2, v5, v2
555
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
556
+ ; SI-NEXT: v_min_f32_e32 v2, v2, v3
557
+ ; SI-NEXT: v_mul_f32_e32 v3, 1.0, v5
558
+ ; SI-NEXT: v_mul_f32_e32 v2, 1.0, v2
559
+ ; SI-NEXT: v_max_f32_e32 v2, v3, v2
505
560
; SI-NEXT: s_mov_b64 s[2:3], s[10:11]
506
561
; SI-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
507
562
; SI-NEXT: s_endpgm
@@ -530,13 +585,20 @@ define amdgpu_kernel void @v_test_safe_med3_f32_pat0_multi_use0(float addrspace(
530
585
; VI-NEXT: v_mov_b32_e32 v1, s1
531
586
; VI-NEXT: v_add_u32_e32 v0, vcc, v0, v6
532
587
; VI-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc
588
+ ; VI-NEXT: s_waitcnt vmcnt(2) lgkmcnt(2)
589
+ ; VI-NEXT: v_mul_f32_e32 v4, 1.0, v7
533
590
; VI-NEXT: s_waitcnt vmcnt(1) lgkmcnt(1)
534
- ; VI-NEXT: v_min_f32_e32 v4, v7, v2
535
- ; VI-NEXT: v_max_f32_e32 v2, v7, v2
591
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
592
+ ; VI-NEXT: v_min_f32_e32 v5, v4, v2
593
+ ; VI-NEXT: v_max_f32_e32 v2, v4, v2
536
594
; VI-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
595
+ ; VI-NEXT: v_mul_f32_e32 v3, 1.0, v3
596
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
537
597
; VI-NEXT: v_min_f32_e32 v2, v2, v3
538
- ; VI-NEXT: v_max_f32_e32 v2, v4, v2
539
- ; VI-NEXT: flat_store_dword v[0:1], v4
598
+ ; VI-NEXT: v_mul_f32_e32 v3, 1.0, v5
599
+ ; VI-NEXT: v_mul_f32_e32 v2, 1.0, v2
600
+ ; VI-NEXT: v_max_f32_e32 v2, v3, v2
601
+ ; VI-NEXT: flat_store_dword v[0:1], v5
540
602
; VI-NEXT: flat_store_dword v[0:1], v2
541
603
; VI-NEXT: s_endpgm
542
604
;
@@ -548,13 +610,20 @@ define amdgpu_kernel void @v_test_safe_med3_f32_pat0_multi_use0(float addrspace(
548
610
; GFX9-NEXT: global_load_dword v1, v0, s[2:3]
549
611
; GFX9-NEXT: global_load_dword v2, v0, s[4:5]
550
612
; GFX9-NEXT: global_load_dword v3, v0, s[6:7]
613
+ ; GFX9-NEXT: s_waitcnt vmcnt(2)
614
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
551
615
; GFX9-NEXT: s_waitcnt vmcnt(1)
616
+ ; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
552
617
; GFX9-NEXT: v_min_f32_e32 v4, v1, v2
553
618
; GFX9-NEXT: v_max_f32_e32 v1, v1, v2
554
619
; GFX9-NEXT: global_store_dword v[0:1], v4, off
555
620
; GFX9-NEXT: s_waitcnt vmcnt(1)
621
+ ; GFX9-NEXT: v_max_f32_e32 v3, v3, v3
622
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
556
623
; GFX9-NEXT: v_min_f32_e32 v1, v1, v3
557
- ; GFX9-NEXT: v_max_f32_e32 v1, v4, v1
624
+ ; GFX9-NEXT: v_max_f32_e32 v2, v4, v4
625
+ ; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
626
+ ; GFX9-NEXT: v_max_f32_e32 v1, v2, v1
558
627
; GFX9-NEXT: global_store_dword v0, v1, s[0:1]
559
628
; GFX9-NEXT: s_endpgm
560
629
%tid = call i32 @llvm.amdgcn.workitem.id.x ()
0 commit comments