Skip to content

Commit 51827a6

Browse files
committed
added tests for X == +0.0 ? X : Y and X == +0.0 ? +0.0 : Y cases
1 parent c5881f2 commit 51827a6

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

llvm/test/CodeGen/AMDGPU/fold-cndmask-select.ll

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,3 +360,83 @@ bb:
360360
%select = select i1 %icmp, i16 %arg1, i16 4242
361361
ret i16 %select
362362
}
363+
364+
define float @f32_oeq_z_i(float %arg, float %arg1) {
365+
; GFX9-LABEL: f32_oeq_z_i:
366+
; GFX9: ; %bb.0: ; %bb
367+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
368+
; GFX9-NEXT: v_cmp_neq_f32_e32 vcc, 0, v0
369+
; GFX9-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc
370+
; GFX9-NEXT: s_setpc_b64 s[30:31]
371+
;
372+
; GFX10-LABEL: f32_oeq_z_i:
373+
; GFX10: ; %bb.0: ; %bb
374+
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
375+
; GFX10-NEXT: v_cmp_neq_f32_e32 vcc_lo, 0, v0
376+
; GFX10-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc_lo
377+
; GFX10-NEXT: s_setpc_b64 s[30:31]
378+
bb:
379+
%fcmp = fcmp oeq float %arg, 0.000000e+00
380+
%select = select i1 %fcmp, float 0.000000e+00, float %arg1
381+
ret float %select
382+
}
383+
384+
define float @f32_oeq_z_z(float %arg, float %arg1) {
385+
; GFX9-LABEL: f32_oeq_z_z:
386+
; GFX9: ; %bb.0: ; %bb
387+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
388+
; GFX9-NEXT: v_cmp_eq_f32_e32 vcc, 0, v0
389+
; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc
390+
; GFX9-NEXT: s_setpc_b64 s[30:31]
391+
;
392+
; GFX10-LABEL: f32_oeq_z_z:
393+
; GFX10: ; %bb.0: ; %bb
394+
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395+
; GFX10-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v0
396+
; GFX10-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc_lo
397+
; GFX10-NEXT: s_setpc_b64 s[30:31]
398+
bb:
399+
%fcmp = fcmp oeq float %arg, 0.000000e+00
400+
%select = select i1 %fcmp, float %arg, float %arg1
401+
ret float %select
402+
}
403+
404+
define half @f16_oeq_z_i(half %arg, half %arg1) {
405+
; GFX9-LABEL: f16_oeq_z_i:
406+
; GFX9: ; %bb.0: ; %bb
407+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
408+
; GFX9-NEXT: v_cmp_neq_f16_e32 vcc, 0, v0
409+
; GFX9-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc
410+
; GFX9-NEXT: s_setpc_b64 s[30:31]
411+
;
412+
; GFX10-LABEL: f16_oeq_z_i:
413+
; GFX10: ; %bb.0: ; %bb
414+
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
415+
; GFX10-NEXT: v_cmp_neq_f16_e32 vcc_lo, 0, v0
416+
; GFX10-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc_lo
417+
; GFX10-NEXT: s_setpc_b64 s[30:31]
418+
bb:
419+
%fcmp = fcmp oeq half %arg, 0.000000e+00
420+
%select = select i1 %fcmp, half 0.000000e+00, half %arg1
421+
ret half %select
422+
}
423+
424+
define half @f16_oeq_z_z(half %arg, half %arg1) {
425+
; GFX9-LABEL: f16_oeq_z_z:
426+
; GFX9: ; %bb.0: ; %bb
427+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
428+
; GFX9-NEXT: v_cmp_eq_f16_e32 vcc, 0, v0
429+
; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc
430+
; GFX9-NEXT: s_setpc_b64 s[30:31]
431+
;
432+
; GFX10-LABEL: f16_oeq_z_z:
433+
; GFX10: ; %bb.0: ; %bb
434+
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
435+
; GFX10-NEXT: v_cmp_eq_f16_e32 vcc_lo, 0, v0
436+
; GFX10-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc_lo
437+
; GFX10-NEXT: s_setpc_b64 s[30:31]
438+
bb:
439+
%fcmp = fcmp oeq half %arg, 0.000000e+00
440+
%select = select i1 %fcmp, half %arg, half %arg1
441+
ret half %select
442+
}

0 commit comments

Comments
 (0)