@@ -162,6 +162,47 @@ define amdgpu_cs void @test_u32_eq(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out
162162 ret void
163163}
164164
165+ define amdgpu_cs void @test_negative_case (i32 %a , i32 %p , i32 %q , ptr addrspace (1 ) %out ) {
166+ ; GCN-LABEL: test_negative_case:
167+ ; GCN: ; %bb.0: ; %.entry
168+ ; GCN-NEXT: v_cmp_eq_u32_e32 vcc_lo, -1, v0
169+ ; GCN-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc_lo
170+ ; GCN-NEXT: v_cndmask_b32_e64 v1, v2, 0, vcc_lo
171+ ; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off
172+ ; GCN-NEXT: s_endpgm
173+ .entry:
174+ %vcc = icmp eq i32 %a , -1
175+ %val1 = select i1 %vcc , i32 %p , i32 0
176+ %val2 = select i1 %vcc , i32 0 , i32 %q
177+ %ret0 = insertelement <2 x i32 > poison, i32 %val1 , i32 0
178+ %ret1 = insertelement <2 x i32 > %ret0 , i32 %val2 , i32 1
179+ store <2 x i32 > %ret1 , ptr addrspace (1 ) %out
180+ ret void
181+ }
182+
183+ define amdgpu_cs void @test_mixed (i32 %a , i32 %p , i32 %q , i32 %r , i32 %s , ptr addrspace (1 ) %out ) {
184+ ; GCN-LABEL: test_mixed:
185+ ; GCN: ; %bb.0: ; %.entry
186+ ; GCN-NEXT: v_cmp_eq_u32_e32 vcc_lo, -1, v0
187+ ; GCN-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc_lo
188+ ; GCN-NEXT: v_cndmask_b32_e64 v1, v2, 0, vcc_lo
189+ ; GCN-NEXT: v_dual_cndmask_b32 v2, 0, v3 :: v_dual_cndmask_b32 v3, 0, v4
190+ ; GCN-NEXT: global_store_b128 v[5:6], v[0:3], off
191+ ; GCN-NEXT: s_endpgm
192+ .entry:
193+ %vcc = icmp eq i32 %a , -1
194+ %val1 = select i1 %vcc , i32 %p , i32 0
195+ %val2 = select i1 %vcc , i32 0 , i32 %q
196+ %val3 = select i1 %vcc , i32 %r , i32 0
197+ %val4 = select i1 %vcc , i32 %s , i32 0
198+ %ret0 = insertelement <4 x i32 > poison, i32 %val1 , i32 0
199+ %ret1 = insertelement <4 x i32 > %ret0 , i32 %val2 , i32 1
200+ %ret2 = insertelement <4 x i32 > %ret1 , i32 %val3 , i32 2
201+ %ret3 = insertelement <4 x i32 > %ret2 , i32 %val4 , i32 3
202+ store <4 x i32 > %ret3 , ptr addrspace (1 ) %out
203+ ret void
204+ }
205+
165206define amdgpu_cs void @test_u32_ne (i32 %a , i32 %p , i32 %q , ptr addrspace (1 ) %out ) {
166207; GCN-LABEL: test_u32_ne:
167208; GCN: ; %bb.0: ; %.entry
@@ -374,6 +415,25 @@ define amdgpu_cs void @test_f32_oeq(float %a, float %p, float %q, ptr addrspace(
374415 ret void
375416}
376417
418+ define amdgpu_cs void @test_f32_negative_modifiers (float %a , float %p , float %q , ptr addrspace (1 ) %out ) {
419+ ; GCN-LABEL: test_f32_negative_modifiers:
420+ ; GCN: ; %bb.0: ; %.entry
421+ ; GCN-NEXT: v_cmp_eq_f32_e32 vcc_lo, 2.0, v0
422+ ; GCN-NEXT: v_cndmask_b32_e64 v0, -v1, 0, vcc_lo
423+ ; GCN-NEXT: v_cndmask_b32_e64 v1, -v2, 0, vcc_lo
424+ ; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off
425+ ; GCN-NEXT: s_endpgm
426+ .entry:
427+ %r = fneg float %p
428+ %s = fneg float %q
429+ %vcc = fcmp oeq float 2 .0 , %a
430+ %val1 = select i1 %vcc , float 0 .0 , float %r
431+ %val2 = select i1 %vcc , float 0 .0 , float %s
432+ %ret0 = insertelement <2 x float > poison, float %val1 , i32 0
433+ %ret1 = insertelement <2 x float > %ret0 , float %val2 , i32 1
434+ store <2 x float > %ret1 , ptr addrspace (1 ) %out
435+ ret void
436+ }
377437
378438define amdgpu_cs void @test_f32_one (float %a , float %p , float %q , ptr addrspace (1 ) %out ) {
379439; GCN-LABEL: test_f32_one:
0 commit comments