| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 < %s | FileCheck -check-prefix=SDAG-GFX1150 %s |
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -global-isel -new-reg-bank-select < %s | FileCheck -check-prefix=GISEL-GFX1150 %s |
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefix=SDAG-GFX1200 %s |
| ; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -global-isel -new-reg-bank-select < %s | FileCheck -check-prefix=GISEL-GFX1200 %s |
| |
| define amdgpu_vs void @f32_olt(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_olt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_lt_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_olt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_lt_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_olt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_lt_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_olt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_lt_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp olt float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_oeq(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_oeq: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_eq_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_oeq: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_eq_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_oeq: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_eq_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_oeq: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_eq_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp oeq float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ole(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ole: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_le_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ole: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ole: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_le_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ole: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ole float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ogt(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ogt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_gt_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ogt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ogt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_gt_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ogt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ogt float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_one(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_one: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_lg_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_one: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_lg_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_one: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_lg_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_one: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_lg_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp one float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_oge(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_oge: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_ge_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_oge: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_ge_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_oge: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_ge_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_oge: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_ge_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp oge float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ord(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ord: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_o_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ord: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_o_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ord: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_o_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ord: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_o_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ord float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_uno(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_uno: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_u_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_uno: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_u_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_uno: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_u_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_uno: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_u_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp uno float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ult(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ult: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nge_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ult: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nge_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ult: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nge_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ult: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nge_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ult float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ueq(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ueq: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nlg_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ueq: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ueq: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nlg_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ueq: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ueq float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ule(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ule: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_ngt_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ule: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_ngt_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ule: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_ngt_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ule: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_ngt_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ule float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_ugt(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_ugt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nle_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_ugt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_ugt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nle_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_ugt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ugt float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_une(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_une: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_neq_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_une: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_neq_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_une: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_neq_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_une: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_neq_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp une float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f32_uge(ptr addrspace(1) inreg %out, float inreg %a, float inreg %b) { |
| ; SDAG-GFX1150-LABEL: f32_uge: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nlt_f32 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f32_uge: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nlt_f32 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f32_uge: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nlt_f32 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f32_uge: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nlt_f32 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp uge float %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_olt(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_olt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_lt_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_olt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_lt_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_olt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_lt_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_olt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_lt_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp olt half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_oeq(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_oeq: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_eq_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_oeq: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_eq_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_oeq: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_eq_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_oeq: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_eq_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp oeq half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ole(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ole: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_le_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ole: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ole: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_le_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ole: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ole half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ogt(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ogt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_gt_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ogt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ogt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_gt_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ogt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ogt half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_one(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_one: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_lg_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_one: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_lg_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_one: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_lg_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_one: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_lg_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp one half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_oge(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_oge: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_ge_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_oge: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_ge_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_oge: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_ge_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_oge: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_ge_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp oge half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ord(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ord: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_o_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ord: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_o_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ord: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_o_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ord: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_o_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ord half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_uno(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_uno: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_u_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_uno: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_u_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_uno: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_u_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_uno: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_u_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp uno half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ult(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ult: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nge_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ult: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nge_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ult: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nge_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ult: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nge_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ult half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ueq(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ueq: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nlg_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ueq: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ueq: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nlg_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ueq: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ueq half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ule(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ule: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_ngt_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ule: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_ngt_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ule: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_ngt_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ule: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_ngt_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ule half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_ugt(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_ugt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nle_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_ugt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_ugt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nle_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_ugt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp ugt half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_une(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_une: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_neq_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_une: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_neq_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_une: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_neq_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_une: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_neq_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp une half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define amdgpu_vs void @f16_uge(ptr addrspace(1) inreg %out, half inreg %a, half inreg %b) { |
| ; SDAG-GFX1150-LABEL: f16_uge: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_cmp_nlt_f16 s2, s3 |
| ; SDAG-GFX1150-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1150-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1150-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1150-LABEL: f16_uge: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_cmp_nlt_f16 s2, s3 |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1150-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1150-NEXT: s_endpgm |
| ; |
| ; SDAG-GFX1200-LABEL: f16_uge: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_cmp_nlt_f16 s2, s3 |
| ; SDAG-GFX1200-NEXT: v_mov_b32_e32 v0, 0 |
| ; SDAG-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; SDAG-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, -1, s2 |
| ; SDAG-GFX1200-NEXT: global_store_b32 v0, v1, s[0:1] |
| ; SDAG-GFX1200-NEXT: s_endpgm |
| ; |
| ; GISEL-GFX1200-LABEL: f16_uge: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_cmp_nlt_f16 s2, s3 |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, -1, 0 |
| ; GISEL-GFX1200-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1200-NEXT: v_mov_b32_e32 v0, s2 |
| ; GISEL-GFX1200-NEXT: global_store_b32 v1, v0, s[0:1] |
| ; GISEL-GFX1200-NEXT: s_endpgm |
| entry: |
| %0 = fcmp uge half %a, %b |
| %1 = sext i1 %0 to i32 |
| store i32 %1, ptr addrspace(1) %out |
| ret void |
| } |
| |
| define <8 x i1> @vector_f32_ole() { |
| ; SDAG-GFX1150-LABEL: vector_f32_ole: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; SDAG-GFX1150-NEXT: s_clause 0x1 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(1) |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v4 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v5 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v6 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v7 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v7, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1150-LABEL: vector_f32_ole: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; GISEL-GFX1150-NEXT: s_clause 0x1 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(1) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s4, v4 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s0, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s5, v5 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s6, v6 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s7, v7 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s2, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s3, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s4, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s4, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s5, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s5, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s6, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s6, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_le_f32 s7, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s7, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7 |
| ; GISEL-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; SDAG-GFX1200-LABEL: vector_f32_ole: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; SDAG-GFX1200-NEXT: s_clause 0x1 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x1 |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v4 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v5 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v6 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_ge_f32_e32 vcc_lo, 0, v7 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v7, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1200-LABEL: vector_f32_ole: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; GISEL-GFX1200-NEXT: s_clause 0x1 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s4, v4 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s0, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s5, v5 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s6, v6 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s7, v7 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s2, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s3, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s4, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s4, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s5, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s5, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s6, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s6, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_le_f32 s7, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s7, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7 |
| ; GISEL-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| entry: |
| %LGV = load <8 x float>, ptr addrspace(1) null, align 32 |
| %C = fcmp ole <8 x float> %LGV, zeroinitializer |
| ret <8 x i1> %C |
| } |
| |
| define <4 x i1> @vector_f32_ogt() { |
| ; SDAG-GFX1150-LABEL: vector_f32_ogt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1150-LABEL: vector_f32_ogt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f32 s0, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f32 s1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f32 s2, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_gt_f32 s3, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; SDAG-GFX1200-LABEL: vector_f32_ogt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1200-LABEL: vector_f32_ogt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f32 s0, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f32 s1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f32 s2, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_gt_f32 s3, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| entry: |
| %LGV = load <4 x float>, ptr addrspace(1) null, align 16 |
| %C = fcmp ogt <4 x float> %LGV, zeroinitializer |
| ret <4 x i1> %C |
| } |
| |
| define <32 x i1> @vector_f32_ueq() { |
| ; SDAG-GFX1150-LABEL: vector_f32_ueq: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v8, 32 :: v_dual_mov_b32 v9, 0 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v12, 48 :: v_dual_mov_b32 v13, 0 |
| ; SDAG-GFX1150-NEXT: s_clause 0x1 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[8:11], v[8:9], off |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v16, 64 :: v_dual_mov_b32 v17, 0 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[12:15], v[12:13], off |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v20, 0x50 :: v_dual_mov_b32 v21, 0 |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v24, 0x60 :: v_dual_mov_b32 v25, 0 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[16:19], v[16:17], off |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v28, 0x70 :: v_dual_mov_b32 v29, 0 |
| ; SDAG-GFX1150-NEXT: s_clause 0x2 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[20:23], v[20:21], off |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[24:27], v[24:25], off |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[28:31], v[28:29], off |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(7) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(6) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v4 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v5 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v6 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v7 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v7, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(5) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v8 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v8, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v9 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v9, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v10 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v10, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v11 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v11, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(4) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v12 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v12, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v13 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v13, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v14 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v14, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v15 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v15, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(3) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v16 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v16, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v17 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v17, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v18 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v18, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v19 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v19, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(2) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v20 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v20, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v21 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v21, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v22 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v22, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v23 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v23, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(1) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v24 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v24, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v25 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v25, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v26 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v26, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v27 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v27, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v28 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v28, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v29 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v29, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v30 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v30, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v31 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v31, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1150-LABEL: vector_f32_ueq: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v8, 32 :: v_dual_mov_b32 v9, 0 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v12, 48 :: v_dual_mov_b32 v13, 0 |
| ; GISEL-GFX1150-NEXT: s_clause 0x1 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[8:11], v[8:9], off |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v16, 64 :: v_dual_mov_b32 v17, 0 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[12:15], v[12:13], off |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v20, 0x50 :: v_dual_mov_b32 v21, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v24, 0x60 :: v_dual_mov_b32 v25, 0 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[16:19], v[16:17], off |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v28, 0x70 :: v_dual_mov_b32 v29, 0 |
| ; GISEL-GFX1150-NEXT: s_clause 0x2 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[20:23], v[20:21], off |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[24:27], v[24:25], off |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[28:31], v[28:29], off |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(7) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(6) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s4, v4 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s0, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s5, v5 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s6, v6 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s7, v7 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s1, 0 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(5) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s8, v8 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s9, v9 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s10, v10 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s2, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s11, v11 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(4) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s12, v12 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s13, v13 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s3, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s14, v14 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s15, v15 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(3) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s16, v16 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s4, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s17, v17 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s18, v18 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s19, v19 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s4, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s5, 0 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(2) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s20, v20 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s21, v21 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s22, v22 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s5, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s6, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s23, v23 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(1) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s24, v24 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s25, v25 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s6, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s7, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s26, v26 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s27, v27 |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s28, v28 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s7, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s8, 0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s29, v29 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s40, v30 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s41, v31 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s8, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s9, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s9, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s10, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s10, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s11, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s11, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s12, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s12, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s13, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s13, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s14, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s14, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s15, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s15, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s16, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s16, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s17, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s17, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s18, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s18, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s19, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s19, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s20, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s20, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s21, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s21, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s22, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s22, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s23, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s23, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s24, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s24, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s25, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s25, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s26, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s26, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s27, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s27, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s28, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s28, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s29, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s29, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s40, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s40, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nlg_f32 s41, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s41, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v30, s40 :: v_dual_mov_b32 v31, s41 |
| ; GISEL-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; SDAG-GFX1200-LABEL: vector_f32_ueq: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v8, 32 :: v_dual_mov_b32 v9, 0 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v12, 48 :: v_dual_mov_b32 v13, 0 |
| ; SDAG-GFX1200-NEXT: s_clause 0x1 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[8:11], v[8:9], off |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v16, 64 :: v_dual_mov_b32 v17, 0 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[12:15], v[12:13], off |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v20, 0x50 :: v_dual_mov_b32 v21, 0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v24, 0x60 :: v_dual_mov_b32 v25, 0 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[16:19], v[16:17], off |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v28, 0x70 :: v_dual_mov_b32 v29, 0 |
| ; SDAG-GFX1200-NEXT: s_clause 0x2 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[20:23], v[20:21], off |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[24:27], v[24:25], off |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[28:31], v[28:29], off |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x7 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x6 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v4 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v5 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v6 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v7 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v7, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x5 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v8 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v8, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v9 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v9, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v10 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v10, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v11 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v11, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x4 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v12 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v12, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v13 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v13, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v14 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v14, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v15 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v15, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x3 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v16 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v16, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v17 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v17, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v18 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v18, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v19 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v19, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x2 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v20 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v20, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v21 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v21, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v22 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v22, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v23 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v23, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x1 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v24 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v24, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v25 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v25, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v26 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v26, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v27 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v27, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v28 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v28, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v29 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v29, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v30 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v30, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nlg_f32_e32 vcc_lo, 0, v31 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v31, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1200-LABEL: vector_f32_ueq: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v4, 16 :: v_dual_mov_b32 v5, 0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v8, 32 :: v_dual_mov_b32 v9, 0 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v12, 48 :: v_dual_mov_b32 v13, 0 |
| ; GISEL-GFX1200-NEXT: s_clause 0x1 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[4:7], v[4:5], off |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[8:11], v[8:9], off |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v16, 64 :: v_dual_mov_b32 v17, 0 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[12:15], v[12:13], off |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v20, 0x50 :: v_dual_mov_b32 v21, 0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v24, 0x60 :: v_dual_mov_b32 v25, 0 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[16:19], v[16:17], off |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v28, 0x70 :: v_dual_mov_b32 v29, 0 |
| ; GISEL-GFX1200-NEXT: s_clause 0x2 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[20:23], v[20:21], off |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[24:27], v[24:25], off |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[28:31], v[28:29], off |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x7 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x6 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s4, v4 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s0, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s5, v5 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s6, v6 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s7, v7 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s1, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x5 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s8, v8 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s9, v9 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s10, v10 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s2, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s11, v11 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x4 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s12, v12 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s13, v13 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s3, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s14, v14 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s15, v15 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x3 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s16, v16 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s4, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s17, v17 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s18, v18 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s19, v19 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s4, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s5, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x2 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s20, v20 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s21, v21 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s22, v22 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s5, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s6, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s23, v23 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s24, v24 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s25, v25 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s6, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s7, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s26, v26 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s27, v27 |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s28, v28 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s7, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s8, 0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s29, v29 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s40, v30 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s41, v31 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s8, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s9, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s9, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s10, 0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s5 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v6, s6 :: v_dual_mov_b32 v7, s7 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s10, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s11, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v8, s8 :: v_dual_mov_b32 v9, s9 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s11, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s12, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v10, s10 :: v_dual_mov_b32 v11, s11 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s12, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s13, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s13, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s14, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v12, s12 :: v_dual_mov_b32 v13, s13 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s14, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s15, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s15, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s16, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v14, s14 :: v_dual_mov_b32 v15, s15 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s16, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s17, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s17, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s18, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v16, s16 :: v_dual_mov_b32 v17, s17 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s18, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s19, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s19, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s20, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v18, s18 :: v_dual_mov_b32 v19, s19 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s20, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s21, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s21, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s22, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v20, s20 :: v_dual_mov_b32 v21, s21 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s22, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s23, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s23, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s24, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v22, s22 :: v_dual_mov_b32 v23, s23 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s24, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s25, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s25, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s26, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v24, s24 :: v_dual_mov_b32 v25, s25 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s26, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s27, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s27, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s28, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v26, s26 :: v_dual_mov_b32 v27, s27 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s28, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s29, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s29, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s40, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v28, s28 :: v_dual_mov_b32 v29, s29 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s40, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nlg_f32 s41, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s41, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v30, s40 :: v_dual_mov_b32 v31, s41 |
| ; GISEL-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| entry: |
| %LGV = load <32 x float>, ptr addrspace(1) null, align 128 |
| %C = fcmp ueq <32 x float> %LGV, zeroinitializer |
| ret <32 x i1> %C |
| } |
| |
| define <4 x i1> @vector_f32_ugt() { |
| ; SDAG-GFX1150-LABEL: vector_f32_ugt: |
| ; SDAG-GFX1150: ; %bb.0: ; %entry |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; SDAG-GFX1150-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1150-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1150-LABEL: vector_f32_ugt: |
| ; GISEL-GFX1150: ; %bb.0: ; %entry |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1150-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1150-NEXT: s_waitcnt vmcnt(0) |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1150-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f32 s0, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f32 s1, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f32 s2, 0 |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_cmp_nle_f32 s3, 0 |
| ; GISEL-GFX1150-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1150-NEXT: s_delay_alu instid0(SALU_CYCLE_1) |
| ; GISEL-GFX1150-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1150-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; SDAG-GFX1200-LABEL: vector_f32_ugt: |
| ; SDAG-GFX1200: ; %bb.0: ; %entry |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; SDAG-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; SDAG-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; SDAG-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; SDAG-GFX1200-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v0 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v1 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v2 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: v_cmp_nge_f32_e32 vcc_lo, 0, v3 |
| ; SDAG-GFX1200-NEXT: s_wait_alu depctr_va_vcc(0) |
| ; SDAG-GFX1200-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc_lo |
| ; SDAG-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| ; |
| ; GISEL-GFX1200-LABEL: vector_f32_ugt: |
| ; GISEL-GFX1200: ; %bb.0: ; %entry |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt_dscnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_expcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_samplecnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_bvhcnt 0x0 |
| ; GISEL-GFX1200-NEXT: s_wait_kmcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0 |
| ; GISEL-GFX1200-NEXT: global_load_b128 v[0:3], v[0:1], off |
| ; GISEL-GFX1200-NEXT: s_wait_loadcnt 0x0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s0, v0 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s1, v1 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s2, v2 |
| ; GISEL-GFX1200-NEXT: v_readfirstlane_b32 s3, v3 |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f32 s0, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s0, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f32 s1, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s1, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f32 s2, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s2, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_cmp_nle_f32 s3, 0 |
| ; GISEL-GFX1200-NEXT: s_cselect_b32 s3, 1, 0 |
| ; GISEL-GFX1200-NEXT: s_wait_alu depctr_sa_sdst(0) |
| ; GISEL-GFX1200-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3 |
| ; GISEL-GFX1200-NEXT: s_setpc_b64 s[30:31] |
| entry: |
| %LGV1 = load <4 x float>, ptr addrspace(1) null, align 16 |
| %C = fcmp ugt <4 x float> %LGV1, zeroinitializer |
| ret <4 x i1> %C |
| } |