2637 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx700 < %s | FileCheck -check-prefixes=GFX7,GFX7-SDAG %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx801 < %s | FileCheck -check-prefixes=GFX8,GFX8-SDAG %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX9-SDAG %s5; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10,GFX10-SDAG %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG,GFX11-SDAG-TRUE16 %s7; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG,GFX11-SDAG-FAKE16 %s8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-TRUE16 %s9; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-FAKE16 %s10 11define half @test_vector_reduce_fmaximum_v2half(<2 x half> %v) {12; GFX7-LABEL: test_vector_reduce_fmaximum_v2half:13; GFX7: ; %bb.0: ; %entry14; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)15; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v116; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v017; GFX7-NEXT: v_mov_b32_e32 v2, 0x7fc0000018; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v119; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v020; GFX7-NEXT: v_max_f32_e32 v3, v0, v121; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v122; GFX7-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc23; GFX7-NEXT: s_setpc_b64 s[30:31]24;25; GFX8-LABEL: test_vector_reduce_fmaximum_v2half:26; GFX8: ; %bb.0: ; %entry27; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GFX8-NEXT: v_lshrrev_b32_e32 v1, 16, v029; GFX8-NEXT: v_max_f16_e32 v2, v0, v130; GFX8-NEXT: v_mov_b32_e32 v3, 0x7e0031; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v132; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc33; GFX8-NEXT: s_setpc_b64 s[30:31]34;35; GFX9-LABEL: test_vector_reduce_fmaximum_v2half:36; GFX9: ; %bb.0: ; %entry37; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX9-NEXT: v_max_f16_sdwa v1, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_139; GFX9-NEXT: v_mov_b32_e32 v2, 0x7e0040; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v0 src0_sel:DWORD src1_sel:WORD_141; GFX9-NEXT: s_nop 142; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc43; GFX9-NEXT: s_setpc_b64 s[30:31]44;45; GFX10-LABEL: test_vector_reduce_fmaximum_v2half:46; GFX10: ; %bb.0: ; %entry47; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; GFX10-NEXT: v_max_f16_sdwa v1, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_149; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v0 src0_sel:DWORD src1_sel:WORD_150; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v1, vcc_lo51; GFX10-NEXT: s_setpc_b64 s[30:31]52;53; GFX11-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v2half:54; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry55; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h57; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h58; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)59; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo60; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]61;62; GFX11-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v2half:63; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry64; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v066; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)67; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v168; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v169; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo70; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]71;72; GFX12-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v2half:73; GFX12-SDAG-TRUE16: ; %bb.0: ; %entry74; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x075; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x076; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x077; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x078; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x079; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h80; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]81;82; GFX12-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v2half:83; GFX12-SDAG-FAKE16: ; %bb.0: ; %entry84; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x085; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x086; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x087; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x088; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x089; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v090; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)91; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v192; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]93entry:94 %res = call half @llvm.vector.reduce.fmaximum.v2half(<2 x half> %v)95 ret half %res96}97 98define half @test_vector_reduce_fmaximum_v3half(<3 x half> %v) {99; GFX7-LABEL: test_vector_reduce_fmaximum_v3half:100; GFX7: ; %bb.0: ; %entry101; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1103; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0104; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2105; GFX7-NEXT: v_mov_b32_e32 v4, 0x7fc00000106; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1107; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0108; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2109; GFX7-NEXT: v_max_f32_e32 v3, v0, v1110; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v1111; GFX7-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc112; GFX7-NEXT: v_max_f32_e32 v1, v0, v2113; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v2114; GFX7-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc115; GFX7-NEXT: s_setpc_b64 s[30:31]116;117; GFX8-LABEL: test_vector_reduce_fmaximum_v3half:118; GFX8: ; %bb.0: ; %entry119; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX8-NEXT: v_lshrrev_b32_e32 v2, 16, v0121; GFX8-NEXT: v_max_f16_e32 v3, v0, v2122; GFX8-NEXT: v_mov_b32_e32 v4, 0x7e00123; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v2124; GFX8-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc125; GFX8-NEXT: v_max_f16_e32 v2, v0, v1126; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v1127; GFX8-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc128; GFX8-NEXT: s_setpc_b64 s[30:31]129;130; GFX9-LABEL: test_vector_reduce_fmaximum_v3half:131; GFX9: ; %bb.0: ; %entry132; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)133; GFX9-NEXT: v_max_f16_sdwa v2, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1134; GFX9-NEXT: v_mov_b32_e32 v3, 0x7e00135; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v0 src0_sel:DWORD src1_sel:WORD_1136; GFX9-NEXT: s_nop 1137; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc138; GFX9-NEXT: v_max_f16_e32 v2, v0, v1139; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v1140; GFX9-NEXT: s_nop 1141; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc142; GFX9-NEXT: s_setpc_b64 s[30:31]143;144; GFX10-LABEL: test_vector_reduce_fmaximum_v3half:145; GFX10: ; %bb.0: ; %entry146; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)147; GFX10-NEXT: v_max_f16_sdwa v2, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1148; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v0 src0_sel:DWORD src1_sel:WORD_1149; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo150; GFX10-NEXT: v_max_f16_e32 v2, v0, v1151; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1152; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo153; GFX10-NEXT: s_setpc_b64 s[30:31]154;155; GFX11-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v3half:156; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry157; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h159; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h160; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)161; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo162; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v1.l163; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v1.l164; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)165; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo166; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]167;168; GFX11-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v3half:169; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry170; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)171; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v0172; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)173; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v3, v0, v2174; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2175; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v3, vcc_lo176; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)177; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v1178; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1179; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo180; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]181;182; GFX12-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v3half:183; GFX12-SDAG-TRUE16: ; %bb.0: ; %entry184; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0185; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0186; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0187; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0188; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0189; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.h, 0xfc00190; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)191; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v1192; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h193; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]194;195; GFX12-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v3half:196; GFX12-SDAG-FAKE16: ; %bb.0: ; %entry197; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0198; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0199; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0200; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0201; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0202; GFX12-SDAG-FAKE16-NEXT: s_mov_b32 s0, 0xfc00203; GFX12-SDAG-FAKE16-NEXT: s_wait_alu depctr_sa_sdst(0)204; GFX12-SDAG-FAKE16-NEXT: v_perm_b32 v1, s0, v1, 0x5040100205; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)206; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v1207; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0208; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)209; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v1210; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]211entry:212 %res = call half @llvm.vector.reduce.fmaximum.v3half(<3 x half> %v)213 ret half %res214}215 216define half @test_vector_reduce_fmaximum_v4half(<4 x half> %v) {217; GFX7-LABEL: test_vector_reduce_fmaximum_v4half:218; GFX7: ; %bb.0: ; %entry219; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)220; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1221; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0222; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2223; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3224; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1225; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0226; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2227; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3228; GFX7-NEXT: v_mov_b32_e32 v5, 0x7fc00000229; GFX7-NEXT: v_max_f32_e32 v4, v0, v1230; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v1231; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc232; GFX7-NEXT: v_max_f32_e32 v1, v0, v2233; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v2234; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc235; GFX7-NEXT: v_max_f32_e32 v1, v0, v3236; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v3237; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc238; GFX7-NEXT: s_setpc_b64 s[30:31]239;240; GFX8-LABEL: test_vector_reduce_fmaximum_v4half:241; GFX8: ; %bb.0: ; %entry242; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)243; GFX8-NEXT: v_lshrrev_b32_e32 v3, 16, v0244; GFX8-NEXT: v_max_f16_e32 v4, v0, v3245; GFX8-NEXT: v_mov_b32_e32 v5, 0x7e00246; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v3247; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc248; GFX8-NEXT: v_max_f16_e32 v3, v0, v1249; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v1250; GFX8-NEXT: v_lshrrev_b32_e32 v2, 16, v1251; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v3, vcc252; GFX8-NEXT: v_max_f16_e32 v1, v0, v2253; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v2254; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc255; GFX8-NEXT: s_setpc_b64 s[30:31]256;257; GFX9-LABEL: test_vector_reduce_fmaximum_v4half:258; GFX9: ; %bb.0: ; %entry259; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX9-NEXT: v_max_f16_sdwa v2, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1261; GFX9-NEXT: v_mov_b32_e32 v3, 0x7e00262; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v0 src0_sel:DWORD src1_sel:WORD_1263; GFX9-NEXT: s_nop 1264; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc265; GFX9-NEXT: v_max_f16_e32 v2, v0, v1266; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v1267; GFX9-NEXT: s_nop 1268; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc269; GFX9-NEXT: v_max_f16_sdwa v2, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1270; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:DWORD src1_sel:WORD_1271; GFX9-NEXT: s_nop 1272; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc273; GFX9-NEXT: s_setpc_b64 s[30:31]274;275; GFX10-LABEL: test_vector_reduce_fmaximum_v4half:276; GFX10: ; %bb.0: ; %entry277; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX10-NEXT: v_max_f16_sdwa v2, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1279; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v0 src0_sel:DWORD src1_sel:WORD_1280; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo281; GFX10-NEXT: v_max_f16_e32 v2, v0, v1282; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1283; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo284; GFX10-NEXT: v_max_f16_sdwa v2, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1285; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v1 src0_sel:DWORD src1_sel:WORD_1286; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo287; GFX10-NEXT: s_setpc_b64 s[30:31]288;289; GFX11-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v4half:290; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry291; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)292; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h293; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h294; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)295; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo296; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v1.l297; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v1.l298; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)299; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo300; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v1.h301; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v1.h302; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)303; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo304; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]305;306; GFX11-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v4half:307; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry308; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v0310; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)311; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v3, v0, v2312; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2313; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v3, vcc_lo314; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v1315; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)316; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v1317; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1318; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo319; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)320; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v1, v0, v3321; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v3322; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v1, vcc_lo323; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]324;325; GFX12-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v4half:326; GFX12-SDAG-TRUE16: ; %bb.0: ; %entry327; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0328; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0329; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0330; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0331; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0332; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v1333; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)334; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h335; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]336;337; GFX12-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v4half:338; GFX12-SDAG-FAKE16: ; %bb.0: ; %entry339; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0340; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0341; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0342; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0343; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0344; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v1345; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)346; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0347; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v1348; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]349entry:350 %res = call half @llvm.vector.reduce.fmaximum.v4half(<4 x half> %v)351 ret half %res352}353 354define half @test_vector_reduce_fmaximum_v8half(<8 x half> %v) {355; GFX7-LABEL: test_vector_reduce_fmaximum_v8half:356; GFX7: ; %bb.0: ; %entry357; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1359; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0360; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2361; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3362; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1363; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0364; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4365; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2366; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5367; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3368; GFX7-NEXT: v_max_f32_e32 v8, v0, v1369; GFX7-NEXT: v_mov_b32_e32 v9, 0x7fc00000370; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v1371; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc372; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6373; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4374; GFX7-NEXT: v_max_f32_e32 v1, v0, v2375; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v2376; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc377; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7378; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5379; GFX7-NEXT: v_max_f32_e32 v1, v0, v3380; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v3381; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc382; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6383; GFX7-NEXT: v_max_f32_e32 v1, v0, v4384; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v4385; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc386; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7387; GFX7-NEXT: v_max_f32_e32 v1, v0, v5388; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v5389; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc390; GFX7-NEXT: v_max_f32_e32 v1, v0, v6391; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v6392; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc393; GFX7-NEXT: v_max_f32_e32 v1, v0, v7394; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v7395; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc396; GFX7-NEXT: s_setpc_b64 s[30:31]397;398; GFX8-LABEL: test_vector_reduce_fmaximum_v8half:399; GFX8: ; %bb.0: ; %entry400; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)401; GFX8-NEXT: v_lshrrev_b32_e32 v7, 16, v0402; GFX8-NEXT: v_max_f16_e32 v8, v0, v7403; GFX8-NEXT: v_mov_b32_e32 v9, 0x7e00404; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v7405; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc406; GFX8-NEXT: v_max_f16_e32 v7, v0, v1407; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v1408; GFX8-NEXT: v_lshrrev_b32_e32 v6, 16, v1409; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v7, vcc410; GFX8-NEXT: v_max_f16_e32 v1, v0, v6411; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v6412; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc413; GFX8-NEXT: v_max_f16_e32 v1, v0, v2414; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v2415; GFX8-NEXT: v_lshrrev_b32_e32 v5, 16, v2416; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc417; GFX8-NEXT: v_max_f16_e32 v1, v0, v5418; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v5419; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc420; GFX8-NEXT: v_max_f16_e32 v1, v0, v3421; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v3422; GFX8-NEXT: v_lshrrev_b32_e32 v4, 16, v3423; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc424; GFX8-NEXT: v_max_f16_e32 v1, v0, v4425; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v4426; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc427; GFX8-NEXT: s_setpc_b64 s[30:31]428;429; GFX9-LABEL: test_vector_reduce_fmaximum_v8half:430; GFX9: ; %bb.0: ; %entry431; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX9-NEXT: v_pk_max_f16 v4, v0, v2433; GFX9-NEXT: v_mov_b32_e32 v5, 0x7e00434; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v2435; GFX9-NEXT: s_nop 1436; GFX9-NEXT: v_cndmask_b32_e32 v6, v5, v4, vcc437; GFX9-NEXT: v_lshrrev_b32_e32 v4, 16, v4438; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1439; GFX9-NEXT: s_nop 1440; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc441; GFX9-NEXT: v_max_f16_e32 v2, v6, v0442; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v6, v0443; GFX9-NEXT: s_nop 1444; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v2, vcc445; GFX9-NEXT: v_pk_max_f16 v2, v1, v3446; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v1, v3447; GFX9-NEXT: s_nop 1448; GFX9-NEXT: v_cndmask_b32_e32 v4, v5, v2, vcc449; GFX9-NEXT: v_max_f16_e32 v6, v0, v4450; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v4451; GFX9-NEXT: s_nop 1452; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v6, vcc453; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1454; GFX9-NEXT: s_nop 1455; GFX9-NEXT: v_cndmask_b32_sdwa v1, v5, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1456; GFX9-NEXT: v_max_f16_e32 v2, v0, v1457; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v1458; GFX9-NEXT: s_nop 1459; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v2, vcc460; GFX9-NEXT: s_setpc_b64 s[30:31]461;462; GFX10-LABEL: test_vector_reduce_fmaximum_v8half:463; GFX10: ; %bb.0: ; %entry464; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)465; GFX10-NEXT: v_pk_max_f16 v4, v0, v2466; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2467; GFX10-NEXT: v_lshrrev_b32_e32 v5, 16, v4468; GFX10-NEXT: v_cndmask_b32_e32 v4, 0x7e00, v4, vcc_lo469; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1470; GFX10-NEXT: v_pk_max_f16 v2, v1, v3471; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo472; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v3473; GFX10-NEXT: v_max_f16_e32 v5, v4, v0474; GFX10-NEXT: v_cndmask_b32_e32 v6, 0x7e00, v2, vcc_lo475; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v4, v0476; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo477; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1478; GFX10-NEXT: v_mov_b32_e32 v1, 0x7e00479; GFX10-NEXT: v_max_f16_e32 v4, v0, v6480; GFX10-NEXT: v_cmp_o_f16_e64 s4, v0, v6481; GFX10-NEXT: v_cndmask_b32_sdwa v1, v1, v2, vcc_lo dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1482; GFX10-NEXT: v_cndmask_b32_e64 v0, 0x7e00, v4, s4483; GFX10-NEXT: v_max_f16_e32 v2, v0, v1484; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1485; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo486; GFX10-NEXT: s_setpc_b64 s[30:31]487;488; GFX11-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v8half:489; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry490; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)491; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v2.l492; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v4, v0, v2493; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v0.h, v2.h494; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v2, v1, v3495; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)496; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v4.l, vcc_lo497; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v4.h, s0498; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1.l, v3.l499; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)500; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v0.l, v0.h501; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h502; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v2.l, vcc_lo503; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1.h, v3.h504; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, s0505; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)506; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v0.l, v0.h507; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h508; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v2.h, vcc_lo509; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, s0510; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)511; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h512; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h513; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo514; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]515;516; GFX11-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v8half:517; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry518; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v4, v0, v2520; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v2521; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v0522; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2523; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)524; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v4525; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v4, vcc_lo526; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v6, v5527; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v4, v1, v3528; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)529; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v2, 0x7e00, v7, vcc_lo530; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v3531; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v1532; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v5, v0, v2533; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v6, 0x7e00, v4, vcc_lo534; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2535; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v3536; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v4537; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo538; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)539; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v3, v0, v6540; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v6541; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v3, vcc_lo542; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v2543; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo544; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)545; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v1546; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1547; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo548; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]549;550; GFX12-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v8half:551; GFX12-SDAG-TRUE16: ; %bb.0: ; %entry552; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0553; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0554; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0555; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0556; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0557; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v1, v1, v3558; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v2559; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)560; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v1561; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h562; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]563;564; GFX12-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v8half:565; GFX12-SDAG-FAKE16: ; %bb.0: ; %entry566; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0567; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0568; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0569; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0570; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0571; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v1, v1, v3572; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v2573; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)574; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v1575; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0576; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)577; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v1578; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]579entry:580 %res = call half @llvm.vector.reduce.fmaximum.v8half(<8 x half> %v)581 ret half %res582}583 584define half @test_vector_reduce_fmaximum_v16half(<16 x half> %v) {585; GFX7-LABEL: test_vector_reduce_fmaximum_v16half:586; GFX7: ; %bb.0: ; %entry587; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)588; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1589; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0590; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2591; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3592; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1593; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0594; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4595; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2596; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5597; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3598; GFX7-NEXT: v_max_f32_e32 v16, v0, v1599; GFX7-NEXT: v_mov_b32_e32 v17, 0x7fc00000600; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v1601; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v16, vcc602; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6603; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4604; GFX7-NEXT: v_max_f32_e32 v1, v0, v2605; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v2606; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc607; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7608; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5609; GFX7-NEXT: v_max_f32_e32 v1, v0, v3610; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v3611; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc612; GFX7-NEXT: v_cvt_f16_f32_e32 v8, v8613; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6614; GFX7-NEXT: v_max_f32_e32 v1, v0, v4615; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v4616; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc617; GFX7-NEXT: v_cvt_f16_f32_e32 v9, v9618; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7619; GFX7-NEXT: v_max_f32_e32 v1, v0, v5620; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v5621; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc622; GFX7-NEXT: v_cvt_f16_f32_e32 v10, v10623; GFX7-NEXT: v_cvt_f32_f16_e32 v8, v8624; GFX7-NEXT: v_max_f32_e32 v1, v0, v6625; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v6626; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc627; GFX7-NEXT: v_cvt_f16_f32_e32 v11, v11628; GFX7-NEXT: v_cvt_f32_f16_e32 v9, v9629; GFX7-NEXT: v_max_f32_e32 v1, v0, v7630; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v7631; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc632; GFX7-NEXT: v_cvt_f16_f32_e32 v12, v12633; GFX7-NEXT: v_cvt_f32_f16_e32 v10, v10634; GFX7-NEXT: v_max_f32_e32 v1, v0, v8635; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v8636; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc637; GFX7-NEXT: v_cvt_f16_f32_e32 v13, v13638; GFX7-NEXT: v_cvt_f32_f16_e32 v11, v11639; GFX7-NEXT: v_max_f32_e32 v1, v0, v9640; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v9641; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc642; GFX7-NEXT: v_cvt_f16_f32_e32 v14, v14643; GFX7-NEXT: v_cvt_f32_f16_e32 v12, v12644; GFX7-NEXT: v_max_f32_e32 v1, v0, v10645; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v10646; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc647; GFX7-NEXT: v_cvt_f16_f32_e32 v15, v15648; GFX7-NEXT: v_cvt_f32_f16_e32 v13, v13649; GFX7-NEXT: v_max_f32_e32 v1, v0, v11650; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11651; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc652; GFX7-NEXT: v_cvt_f32_f16_e32 v14, v14653; GFX7-NEXT: v_max_f32_e32 v1, v0, v12654; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v12655; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc656; GFX7-NEXT: v_cvt_f32_f16_e32 v15, v15657; GFX7-NEXT: v_max_f32_e32 v1, v0, v13658; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v13659; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc660; GFX7-NEXT: v_max_f32_e32 v1, v0, v14661; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v14662; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc663; GFX7-NEXT: v_max_f32_e32 v1, v0, v15664; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v15665; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc666; GFX7-NEXT: s_setpc_b64 s[30:31]667;668; GFX8-LABEL: test_vector_reduce_fmaximum_v16half:669; GFX8: ; %bb.0: ; %entry670; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX8-NEXT: v_lshrrev_b32_e32 v15, 16, v0672; GFX8-NEXT: v_max_f16_e32 v16, v0, v15673; GFX8-NEXT: v_mov_b32_e32 v17, 0x7e00674; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v15675; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v16, vcc676; GFX8-NEXT: v_max_f16_e32 v15, v0, v1677; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v1678; GFX8-NEXT: v_lshrrev_b32_e32 v14, 16, v1679; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v15, vcc680; GFX8-NEXT: v_max_f16_e32 v1, v0, v14681; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v14682; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc683; GFX8-NEXT: v_max_f16_e32 v1, v0, v2684; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v2685; GFX8-NEXT: v_lshrrev_b32_e32 v13, 16, v2686; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc687; GFX8-NEXT: v_max_f16_e32 v1, v0, v13688; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v13689; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc690; GFX8-NEXT: v_max_f16_e32 v1, v0, v3691; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v3692; GFX8-NEXT: v_lshrrev_b32_e32 v12, 16, v3693; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc694; GFX8-NEXT: v_max_f16_e32 v1, v0, v12695; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v12696; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc697; GFX8-NEXT: v_max_f16_e32 v1, v0, v4698; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v4699; GFX8-NEXT: v_lshrrev_b32_e32 v11, 16, v4700; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc701; GFX8-NEXT: v_max_f16_e32 v1, v0, v11702; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v11703; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc704; GFX8-NEXT: v_max_f16_e32 v1, v0, v5705; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v5706; GFX8-NEXT: v_lshrrev_b32_e32 v10, 16, v5707; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc708; GFX8-NEXT: v_max_f16_e32 v1, v0, v10709; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v10710; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc711; GFX8-NEXT: v_max_f16_e32 v1, v0, v6712; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v6713; GFX8-NEXT: v_lshrrev_b32_e32 v9, 16, v6714; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc715; GFX8-NEXT: v_max_f16_e32 v1, v0, v9716; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v9717; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc718; GFX8-NEXT: v_max_f16_e32 v1, v0, v7719; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v7720; GFX8-NEXT: v_lshrrev_b32_e32 v8, 16, v7721; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc722; GFX8-NEXT: v_max_f16_e32 v1, v0, v8723; GFX8-NEXT: v_cmp_o_f16_e32 vcc, v0, v8724; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc725; GFX8-NEXT: s_setpc_b64 s[30:31]726;727; GFX9-LABEL: test_vector_reduce_fmaximum_v16half:728; GFX9: ; %bb.0: ; %entry729; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)730; GFX9-NEXT: v_pk_max_f16 v8, v2, v6731; GFX9-NEXT: v_mov_b32_e32 v9, 0x7e00732; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v2, v6733; GFX9-NEXT: s_mov_b32 s0, 0x5040100734; GFX9-NEXT: s_nop 0735; GFX9-NEXT: v_cndmask_b32_e32 v10, v9, v8, vcc736; GFX9-NEXT: v_lshrrev_b32_e32 v8, 16, v8737; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v2, v6 src0_sel:WORD_1 src1_sel:WORD_1738; GFX9-NEXT: s_nop 1739; GFX9-NEXT: v_cndmask_b32_e32 v2, v9, v8, vcc740; GFX9-NEXT: v_pk_max_f16 v8, v0, v4741; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v4742; GFX9-NEXT: v_perm_b32 v6, v2, v10, s0743; GFX9-NEXT: s_nop 0744; GFX9-NEXT: v_cndmask_b32_e32 v11, v9, v8, vcc745; GFX9-NEXT: v_lshrrev_b32_e32 v8, 16, v8746; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v0, v4 src0_sel:WORD_1 src1_sel:WORD_1747; GFX9-NEXT: s_nop 1748; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc749; GFX9-NEXT: v_perm_b32 v4, v0, v11, s0750; GFX9-NEXT: v_pk_max_f16 v4, v4, v6751; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v11, v10752; GFX9-NEXT: s_nop 1753; GFX9-NEXT: v_cndmask_b32_e32 v6, v9, v4, vcc754; GFX9-NEXT: v_lshrrev_b32_e32 v4, 16, v4755; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v2756; GFX9-NEXT: s_nop 1757; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v4, vcc758; GFX9-NEXT: v_max_f16_e32 v2, v6, v0759; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v6, v0760; GFX9-NEXT: v_pk_max_f16 v6, v1, v5761; GFX9-NEXT: s_nop 0762; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v2, vcc763; GFX9-NEXT: v_pk_max_f16 v2, v3, v7764; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v3, v7765; GFX9-NEXT: s_nop 1766; GFX9-NEXT: v_cndmask_b32_e32 v4, v9, v2, vcc767; GFX9-NEXT: v_lshrrev_b32_e32 v2, 16, v2768; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v3, v7 src0_sel:WORD_1 src1_sel:WORD_1769; GFX9-NEXT: s_nop 1770; GFX9-NEXT: v_cndmask_b32_e32 v2, v9, v2, vcc771; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v1, v5772; GFX9-NEXT: v_perm_b32 v3, v2, v4, s0773; GFX9-NEXT: s_nop 0774; GFX9-NEXT: v_cndmask_b32_e32 v7, v9, v6, vcc775; GFX9-NEXT: v_lshrrev_b32_e32 v6, 16, v6776; GFX9-NEXT: v_cmp_o_f16_sdwa vcc, v1, v5 src0_sel:WORD_1 src1_sel:WORD_1777; GFX9-NEXT: s_nop 1778; GFX9-NEXT: v_cndmask_b32_e32 v1, v9, v6, vcc779; GFX9-NEXT: v_perm_b32 v5, v1, v7, s0780; GFX9-NEXT: v_pk_max_f16 v3, v5, v3781; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v7, v4782; GFX9-NEXT: s_nop 1783; GFX9-NEXT: v_cndmask_b32_e32 v4, v9, v3, vcc784; GFX9-NEXT: v_max_f16_e32 v5, v0, v4785; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v4786; GFX9-NEXT: s_nop 1787; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v5, vcc788; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v1, v2789; GFX9-NEXT: s_nop 1790; GFX9-NEXT: v_cndmask_b32_sdwa v1, v9, v3, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1791; GFX9-NEXT: v_max_f16_e32 v2, v0, v1792; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v1793; GFX9-NEXT: s_nop 1794; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v2, vcc795; GFX9-NEXT: s_setpc_b64 s[30:31]796;797; GFX10-LABEL: test_vector_reduce_fmaximum_v16half:798; GFX10: ; %bb.0: ; %entry799; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)800; GFX10-NEXT: v_pk_max_f16 v8, v2, v6801; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v2, v6802; GFX10-NEXT: v_pk_max_f16 v9, v0, v4803; GFX10-NEXT: v_lshrrev_b32_e32 v10, 16, v8804; GFX10-NEXT: v_cndmask_b32_e32 v8, 0x7e00, v8, vcc_lo805; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v2, v6 src0_sel:WORD_1 src1_sel:WORD_1806; GFX10-NEXT: v_lshrrev_b32_e32 v11, 16, v9807; GFX10-NEXT: v_cndmask_b32_e32 v2, 0x7e00, v10, vcc_lo808; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v4809; GFX10-NEXT: v_cndmask_b32_e32 v6, 0x7e00, v9, vcc_lo810; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v0, v4 src0_sel:WORD_1 src1_sel:WORD_1811; GFX10-NEXT: v_pk_max_f16 v9, v3, v7812; GFX10-NEXT: v_perm_b32 v4, v2, v8, 0x5040100813; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v11, vcc_lo814; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v3, v7815; GFX10-NEXT: v_lshrrev_b32_e32 v12, 16, v9816; GFX10-NEXT: v_pk_max_f16 v11, v1, v5817; GFX10-NEXT: v_perm_b32 v10, v0, v6, 0x5040100818; GFX10-NEXT: v_cndmask_b32_e32 v9, 0x7e00, v9, vcc_lo819; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v3, v7 src0_sel:WORD_1 src1_sel:WORD_1820; GFX10-NEXT: v_pk_max_f16 v4, v10, v4821; GFX10-NEXT: v_lshrrev_b32_e32 v10, 16, v11822; GFX10-NEXT: v_cndmask_b32_e32 v3, 0x7e00, v12, vcc_lo823; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v5824; GFX10-NEXT: v_cndmask_b32_e32 v7, 0x7e00, v11, vcc_lo825; GFX10-NEXT: v_cmp_o_f16_sdwa vcc_lo, v1, v5 src0_sel:WORD_1 src1_sel:WORD_1826; GFX10-NEXT: v_lshrrev_b32_e32 v5, 16, v4827; GFX10-NEXT: v_cndmask_b32_e32 v1, 0x7e00, v10, vcc_lo828; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v6, v8829; GFX10-NEXT: v_perm_b32 v6, v3, v9, 0x5040100830; GFX10-NEXT: v_perm_b32 v8, v1, v7, 0x5040100831; GFX10-NEXT: v_cndmask_b32_e32 v4, 0x7e00, v4, vcc_lo832; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2833; GFX10-NEXT: v_pk_max_f16 v2, v8, v6834; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo835; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v7, v9836; GFX10-NEXT: v_max_f16_e32 v5, v4, v0837; GFX10-NEXT: v_cndmask_b32_e32 v6, 0x7e00, v2, vcc_lo838; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v4, v0839; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo840; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v3841; GFX10-NEXT: v_mov_b32_e32 v1, 0x7e00842; GFX10-NEXT: v_max_f16_e32 v4, v0, v6843; GFX10-NEXT: v_cmp_o_f16_e64 s4, v0, v6844; GFX10-NEXT: v_cndmask_b32_sdwa v1, v1, v2, vcc_lo dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1845; GFX10-NEXT: v_cndmask_b32_e64 v0, 0x7e00, v4, s4846; GFX10-NEXT: v_max_f16_e32 v2, v0, v1847; GFX10-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1848; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo849; GFX10-NEXT: s_setpc_b64 s[30:31]850;851; GFX11-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v16half:852; GFX11-SDAG-TRUE16: ; %bb.0: ; %entry853; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)854; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v2.l, v6.l855; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v8, v2, v6856; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v2.h, v6.h857; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s1, v0.l, v4.l858; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v2, v0, v4859; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s2, v0.h, v4.h860; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v8.l, vcc_lo861; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v8.h, s0862; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v3.l, v7.l863; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v2.l, 0x7e00, v2.l, s1864; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v2.h, 0x7e00, v2.h, s2865; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s1, v3.h, v7.h866; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s2, v1.l, v5.l867; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s3, v1.h, v5.h868; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v2.l, v0.l869; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v4, v2, v0870; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_3)871; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v4.l, vcc_lo872; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v2.h, v0.h873; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v2, v3, v7874; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v3, v1, v5875; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v4.h, vcc_lo876; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v1.l, 0x7e00, v2.l, s0877; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)878; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v1.h, 0x7e00, v2.h, s1879; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v2.l, 0x7e00, v3.l, s2880; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v2.h, 0x7e00, v3.h, s3881; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h882; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h883; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)884; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v2.l, v1.l885; GFX11-SDAG-TRUE16-NEXT: v_pk_max_f16 v3, v2, v1886; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)887; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo888; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v3.l, s0889; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e64 s0, v2.h, v1.h890; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)891; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h892; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h893; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.h, 0x7e00, v3.h, s0894; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)895; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo896; GFX11-SDAG-TRUE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0.l, v0.h897; GFX11-SDAG-TRUE16-NEXT: v_max_f16_e32 v0.l, v0.l, v0.h898; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)899; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x7e00, v0.l, vcc_lo900; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]901;902; GFX11-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v16half:903; GFX11-SDAG-FAKE16: ; %bb.0: ; %entry904; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)905; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v8, v2, v6906; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v2, v6907; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v6908; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v2909; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v10, v0, v4910; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v11, 16, v4911; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v9, 0x7e00, v8, vcc_lo912; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v8, 16, v8913; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v2, v6914; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v12, 16, v0915; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v13, 16, v10916; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v14, 16, v1917; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v2, 0x7e00, v8, vcc_lo918; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v4919; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)920; GFX11-SDAG-FAKE16-NEXT: v_perm_b32 v6, v2, v9, 0x5040100921; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v10, vcc_lo922; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v12, v11923; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v10, v3, v7924; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v12, v1, v5925; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v4, 0x7e00, v13, vcc_lo926; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v3, v7927; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v7928; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v3929; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v13, 16, v5930; GFX11-SDAG-FAKE16-NEXT: v_perm_b32 v8, v4, v0, 0x5040100931; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v15, 16, v12932; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)933; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v6, v8, v6934; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v8, 0x7e00, v10, vcc_lo935; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v10, 16, v10936; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v3, v7937; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v11, 16, v6938; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)939; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v3, 0x7e00, v10, vcc_lo940; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v5941; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v1, 0x7e00, v12, vcc_lo942; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v14, v13943; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v5, 0x7e00, v15, vcc_lo944; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v9945; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v6, vcc_lo946; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v4, v2947; GFX11-SDAG-FAKE16-NEXT: v_perm_b32 v4, v3, v8, 0x5040100948; GFX11-SDAG-FAKE16-NEXT: v_perm_b32 v6, v5, v1, 0x5040100949; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v2, 0x7e00, v11, vcc_lo950; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)951; GFX11-SDAG-FAKE16-NEXT: v_pk_max_f16 v4, v6, v4952; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v7, v0, v2953; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v2954; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)955; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v7, vcc_lo956; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v1, v8957; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo958; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v4959; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v1960; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1961; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)962; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo963; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v5, v3964; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo965; GFX11-SDAG-FAKE16-NEXT: v_max_f16_e32 v2, v0, v1966; GFX11-SDAG-FAKE16-NEXT: v_cmp_o_f16_e32 vcc_lo, v0, v1967; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)968; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo969; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]970;971; GFX12-SDAG-TRUE16-LABEL: test_vector_reduce_fmaximum_v16half:972; GFX12-SDAG-TRUE16: ; %bb.0: ; %entry973; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0974; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0975; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0976; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0977; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0978; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v3, v3, v7979; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v1, v1, v5980; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v2, v2, v6981; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v4982; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)983; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v1, v1, v3984; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v2985; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)986; GFX12-SDAG-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v1987; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h988; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]989;990; GFX12-SDAG-FAKE16-LABEL: test_vector_reduce_fmaximum_v16half:991; GFX12-SDAG-FAKE16: ; %bb.0: ; %entry992; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0993; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0994; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0995; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0996; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0997; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v3, v3, v7998; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v1, v1, v5999; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v2, v2, v61000; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v41001; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)1002; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v1, v1, v31003; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v21004; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1005; GFX12-SDAG-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v11006; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v01007; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1008; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v11009; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1010entry:1011 %res = call half @llvm.vector.reduce.fmaximum.v16half(<16 x half> %v)1012 ret half %res1013}1014 1015define float @test_vector_reduce_fmaximum_v2float(<2 x float> %v) {1016; GFX7-LABEL: test_vector_reduce_fmaximum_v2float:1017; GFX7: ; %bb.0: ; %entry1018; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX7-NEXT: v_max_f32_e32 v2, v0, v11020; GFX7-NEXT: v_mov_b32_e32 v3, 0x7fc000001021; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11022; GFX7-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc1023; GFX7-NEXT: s_setpc_b64 s[30:31]1024;1025; GFX8-LABEL: test_vector_reduce_fmaximum_v2float:1026; GFX8: ; %bb.0: ; %entry1027; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1028; GFX8-NEXT: v_max_f32_e32 v2, v0, v11029; GFX8-NEXT: v_mov_b32_e32 v3, 0x7fc000001030; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v11031; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc1032; GFX8-NEXT: s_setpc_b64 s[30:31]1033;1034; GFX9-LABEL: test_vector_reduce_fmaximum_v2float:1035; GFX9: ; %bb.0: ; %entry1036; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1037; GFX9-NEXT: v_max_f32_e32 v2, v0, v11038; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc000001039; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11040; GFX9-NEXT: s_nop 11041; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc1042; GFX9-NEXT: s_setpc_b64 s[30:31]1043;1044; GFX10-LABEL: test_vector_reduce_fmaximum_v2float:1045; GFX10: ; %bb.0: ; %entry1046; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1047; GFX10-NEXT: v_max_f32_e32 v2, v0, v11048; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11049; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v2, vcc_lo1050; GFX10-NEXT: s_setpc_b64 s[30:31]1051;1052; GFX11-LABEL: test_vector_reduce_fmaximum_v2float:1053; GFX11: ; %bb.0: ; %entry1054; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1055; GFX11-NEXT: v_max_f32_e32 v2, v0, v11056; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11057; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1058; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v2, vcc_lo1059; GFX11-NEXT: s_setpc_b64 s[30:31]1060;1061; GFX12-LABEL: test_vector_reduce_fmaximum_v2float:1062; GFX12: ; %bb.0: ; %entry1063; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01064; GFX12-NEXT: s_wait_expcnt 0x01065; GFX12-NEXT: s_wait_samplecnt 0x01066; GFX12-NEXT: s_wait_bvhcnt 0x01067; GFX12-NEXT: s_wait_kmcnt 0x01068; GFX12-NEXT: v_maximum_f32 v0, v0, v11069; GFX12-NEXT: s_setpc_b64 s[30:31]1070entry:1071 %res = call float @llvm.vector.reduce.fmaximum.v2float(<2 x float> %v)1072 ret float %res1073}1074 1075define float @test_vector_reduce_fmaximum_v3float(<3 x float> %v) {1076; GFX7-LABEL: test_vector_reduce_fmaximum_v3float:1077; GFX7: ; %bb.0: ; %entry1078; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX7-NEXT: v_max_f32_e32 v3, v0, v11080; GFX7-NEXT: v_mov_b32_e32 v4, 0x7fc000001081; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11082; GFX7-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc1083; GFX7-NEXT: v_max_f32_e32 v1, v0, v21084; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v21085; GFX7-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc1086; GFX7-NEXT: s_setpc_b64 s[30:31]1087;1088; GFX8-LABEL: test_vector_reduce_fmaximum_v3float:1089; GFX8: ; %bb.0: ; %entry1090; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1091; GFX8-NEXT: v_max_f32_e32 v3, v0, v11092; GFX8-NEXT: v_mov_b32_e32 v4, 0x7fc000001093; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v11094; GFX8-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc1095; GFX8-NEXT: v_max_f32_e32 v1, v0, v21096; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v21097; GFX8-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc1098; GFX8-NEXT: s_setpc_b64 s[30:31]1099;1100; GFX9-LABEL: test_vector_reduce_fmaximum_v3float:1101; GFX9: ; %bb.0: ; %entry1102; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1103; GFX9-NEXT: v_max_f32_e32 v3, v0, v11104; GFX9-NEXT: v_mov_b32_e32 v4, 0x7fc000001105; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11106; GFX9-NEXT: s_nop 11107; GFX9-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc1108; GFX9-NEXT: v_max_f32_e32 v1, v0, v21109; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v21110; GFX9-NEXT: s_nop 11111; GFX9-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc1112; GFX9-NEXT: s_setpc_b64 s[30:31]1113;1114; GFX10-LABEL: test_vector_reduce_fmaximum_v3float:1115; GFX10: ; %bb.0: ; %entry1116; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1117; GFX10-NEXT: v_max_f32_e32 v3, v0, v11118; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11119; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v3, vcc_lo1120; GFX10-NEXT: v_max_f32_e32 v1, v0, v21121; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21122; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1123; GFX10-NEXT: s_setpc_b64 s[30:31]1124;1125; GFX11-LABEL: test_vector_reduce_fmaximum_v3float:1126; GFX11: ; %bb.0: ; %entry1127; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1128; GFX11-NEXT: v_max_f32_e32 v3, v0, v11129; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11130; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1131; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v3, vcc_lo1132; GFX11-NEXT: v_max_f32_e32 v1, v0, v21133; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21134; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1135; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1136; GFX11-NEXT: s_setpc_b64 s[30:31]1137;1138; GFX12-LABEL: test_vector_reduce_fmaximum_v3float:1139; GFX12: ; %bb.0: ; %entry1140; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01141; GFX12-NEXT: s_wait_expcnt 0x01142; GFX12-NEXT: s_wait_samplecnt 0x01143; GFX12-NEXT: s_wait_bvhcnt 0x01144; GFX12-NEXT: s_wait_kmcnt 0x01145; GFX12-NEXT: v_maximum3_f32 v0, v0, v1, v21146; GFX12-NEXT: s_setpc_b64 s[30:31]1147entry:1148 %res = call float @llvm.vector.reduce.fmaximum.v3float(<3 x float> %v)1149 ret float %res1150}1151 1152define float @test_vector_reduce_fmaximum_v4float(<4 x float> %v) {1153; GFX7-LABEL: test_vector_reduce_fmaximum_v4float:1154; GFX7: ; %bb.0: ; %entry1155; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1156; GFX7-NEXT: v_max_f32_e32 v4, v0, v11157; GFX7-NEXT: v_mov_b32_e32 v5, 0x7fc000001158; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11159; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc1160; GFX7-NEXT: v_max_f32_e32 v1, v0, v21161; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v21162; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1163; GFX7-NEXT: v_max_f32_e32 v1, v0, v31164; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v31165; GFX7-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1166; GFX7-NEXT: s_setpc_b64 s[30:31]1167;1168; GFX8-LABEL: test_vector_reduce_fmaximum_v4float:1169; GFX8: ; %bb.0: ; %entry1170; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1171; GFX8-NEXT: v_max_f32_e32 v4, v0, v11172; GFX8-NEXT: v_mov_b32_e32 v5, 0x7fc000001173; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v11174; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc1175; GFX8-NEXT: v_max_f32_e32 v1, v0, v21176; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v21177; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1178; GFX8-NEXT: v_max_f32_e32 v1, v0, v31179; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v31180; GFX8-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1181; GFX8-NEXT: s_setpc_b64 s[30:31]1182;1183; GFX9-LABEL: test_vector_reduce_fmaximum_v4float:1184; GFX9: ; %bb.0: ; %entry1185; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1186; GFX9-NEXT: v_max_f32_e32 v4, v0, v11187; GFX9-NEXT: v_mov_b32_e32 v5, 0x7fc000001188; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11189; GFX9-NEXT: s_nop 11190; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc1191; GFX9-NEXT: v_max_f32_e32 v1, v0, v21192; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v21193; GFX9-NEXT: s_nop 11194; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1195; GFX9-NEXT: v_max_f32_e32 v1, v0, v31196; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v31197; GFX9-NEXT: s_nop 11198; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v1, vcc1199; GFX9-NEXT: s_setpc_b64 s[30:31]1200;1201; GFX10-LABEL: test_vector_reduce_fmaximum_v4float:1202; GFX10: ; %bb.0: ; %entry1203; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1204; GFX10-NEXT: v_max_f32_e32 v4, v0, v11205; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11206; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v4, vcc_lo1207; GFX10-NEXT: v_max_f32_e32 v1, v0, v21208; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21209; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1210; GFX10-NEXT: v_max_f32_e32 v1, v0, v31211; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31212; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1213; GFX10-NEXT: s_setpc_b64 s[30:31]1214;1215; GFX11-LABEL: test_vector_reduce_fmaximum_v4float:1216; GFX11: ; %bb.0: ; %entry1217; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1218; GFX11-NEXT: v_max_f32_e32 v4, v0, v11219; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11220; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1221; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v4, vcc_lo1222; GFX11-NEXT: v_max_f32_e32 v1, v0, v21223; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21224; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1225; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1226; GFX11-NEXT: v_max_f32_e32 v1, v0, v31227; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31228; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1229; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1230; GFX11-NEXT: s_setpc_b64 s[30:31]1231;1232; GFX12-LABEL: test_vector_reduce_fmaximum_v4float:1233; GFX12: ; %bb.0: ; %entry1234; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01235; GFX12-NEXT: s_wait_expcnt 0x01236; GFX12-NEXT: s_wait_samplecnt 0x01237; GFX12-NEXT: s_wait_bvhcnt 0x01238; GFX12-NEXT: s_wait_kmcnt 0x01239; GFX12-NEXT: v_maximum_f32 v0, v0, v11240; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1241; GFX12-NEXT: v_maximum3_f32 v0, v0, v2, v31242; GFX12-NEXT: s_setpc_b64 s[30:31]1243entry:1244 %res = call float @llvm.vector.reduce.fmaximum.v4float(<4 x float> %v)1245 ret float %res1246}1247 1248define float @test_vector_reduce_fmaximum_v8float(<8 x float> %v) {1249; GFX7-LABEL: test_vector_reduce_fmaximum_v8float:1250; GFX7: ; %bb.0: ; %entry1251; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX7-NEXT: v_max_f32_e32 v8, v0, v11253; GFX7-NEXT: v_mov_b32_e32 v9, 0x7fc000001254; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11255; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc1256; GFX7-NEXT: v_max_f32_e32 v1, v0, v21257; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v21258; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1259; GFX7-NEXT: v_max_f32_e32 v1, v0, v31260; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v31261; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1262; GFX7-NEXT: v_max_f32_e32 v1, v0, v41263; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v41264; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1265; GFX7-NEXT: v_max_f32_e32 v1, v0, v51266; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v51267; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1268; GFX7-NEXT: v_max_f32_e32 v1, v0, v61269; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v61270; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1271; GFX7-NEXT: v_max_f32_e32 v1, v0, v71272; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v71273; GFX7-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1274; GFX7-NEXT: s_setpc_b64 s[30:31]1275;1276; GFX8-LABEL: test_vector_reduce_fmaximum_v8float:1277; GFX8: ; %bb.0: ; %entry1278; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1279; GFX8-NEXT: v_max_f32_e32 v8, v0, v11280; GFX8-NEXT: v_mov_b32_e32 v9, 0x7fc000001281; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v11282; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc1283; GFX8-NEXT: v_max_f32_e32 v1, v0, v21284; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v21285; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1286; GFX8-NEXT: v_max_f32_e32 v1, v0, v31287; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v31288; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1289; GFX8-NEXT: v_max_f32_e32 v1, v0, v41290; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v41291; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1292; GFX8-NEXT: v_max_f32_e32 v1, v0, v51293; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v51294; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1295; GFX8-NEXT: v_max_f32_e32 v1, v0, v61296; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v61297; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1298; GFX8-NEXT: v_max_f32_e32 v1, v0, v71299; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v71300; GFX8-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1301; GFX8-NEXT: s_setpc_b64 s[30:31]1302;1303; GFX9-LABEL: test_vector_reduce_fmaximum_v8float:1304; GFX9: ; %bb.0: ; %entry1305; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1306; GFX9-NEXT: v_max_f32_e32 v8, v0, v11307; GFX9-NEXT: v_mov_b32_e32 v9, 0x7fc000001308; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11309; GFX9-NEXT: s_nop 11310; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc1311; GFX9-NEXT: v_max_f32_e32 v1, v0, v21312; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v21313; GFX9-NEXT: s_nop 11314; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1315; GFX9-NEXT: v_max_f32_e32 v1, v0, v31316; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v31317; GFX9-NEXT: s_nop 11318; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1319; GFX9-NEXT: v_max_f32_e32 v1, v0, v41320; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v41321; GFX9-NEXT: s_nop 11322; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1323; GFX9-NEXT: v_max_f32_e32 v1, v0, v51324; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v51325; GFX9-NEXT: s_nop 11326; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1327; GFX9-NEXT: v_max_f32_e32 v1, v0, v61328; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v61329; GFX9-NEXT: s_nop 11330; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1331; GFX9-NEXT: v_max_f32_e32 v1, v0, v71332; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v71333; GFX9-NEXT: s_nop 11334; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v1, vcc1335; GFX9-NEXT: s_setpc_b64 s[30:31]1336;1337; GFX10-LABEL: test_vector_reduce_fmaximum_v8float:1338; GFX10: ; %bb.0: ; %entry1339; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1340; GFX10-NEXT: v_max_f32_e32 v8, v0, v11341; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11342; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v8, vcc_lo1343; GFX10-NEXT: v_max_f32_e32 v1, v0, v21344; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21345; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1346; GFX10-NEXT: v_max_f32_e32 v1, v0, v31347; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31348; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1349; GFX10-NEXT: v_max_f32_e32 v1, v0, v41350; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v41351; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1352; GFX10-NEXT: v_max_f32_e32 v1, v0, v51353; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v51354; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1355; GFX10-NEXT: v_max_f32_e32 v1, v0, v61356; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v61357; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1358; GFX10-NEXT: v_max_f32_e32 v1, v0, v71359; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v71360; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1361; GFX10-NEXT: s_setpc_b64 s[30:31]1362;1363; GFX11-LABEL: test_vector_reduce_fmaximum_v8float:1364; GFX11: ; %bb.0: ; %entry1365; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1366; GFX11-NEXT: v_max_f32_e32 v8, v0, v11367; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11368; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1369; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v8, vcc_lo1370; GFX11-NEXT: v_max_f32_e32 v1, v0, v21371; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21372; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1373; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1374; GFX11-NEXT: v_max_f32_e32 v1, v0, v31375; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31376; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1377; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1378; GFX11-NEXT: v_max_f32_e32 v1, v0, v41379; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v41380; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1381; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1382; GFX11-NEXT: v_max_f32_e32 v1, v0, v51383; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v51384; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1385; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1386; GFX11-NEXT: v_max_f32_e32 v1, v0, v61387; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v61388; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1389; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1390; GFX11-NEXT: v_max_f32_e32 v1, v0, v71391; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v71392; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1393; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1394; GFX11-NEXT: s_setpc_b64 s[30:31]1395;1396; GFX12-LABEL: test_vector_reduce_fmaximum_v8float:1397; GFX12: ; %bb.0: ; %entry1398; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01399; GFX12-NEXT: s_wait_expcnt 0x01400; GFX12-NEXT: s_wait_samplecnt 0x01401; GFX12-NEXT: s_wait_bvhcnt 0x01402; GFX12-NEXT: s_wait_kmcnt 0x01403; GFX12-NEXT: v_maximum_f32 v0, v0, v11404; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1405; GFX12-NEXT: v_maximum3_f32 v0, v0, v2, v31406; GFX12-NEXT: v_maximum3_f32 v0, v0, v4, v51407; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1408; GFX12-NEXT: v_maximum3_f32 v0, v0, v6, v71409; GFX12-NEXT: s_setpc_b64 s[30:31]1410entry:1411 %res = call float @llvm.vector.reduce.fmaximum.v8float(<8 x float> %v)1412 ret float %res1413}1414 1415define float @test_vector_reduce_fmaximum_v16float(<16 x float> %v) {1416; GFX7-LABEL: test_vector_reduce_fmaximum_v16float:1417; GFX7: ; %bb.0: ; %entry1418; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1419; GFX7-NEXT: v_max_f32_e32 v16, v0, v11420; GFX7-NEXT: v_mov_b32_e32 v17, 0x7fc000001421; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v11422; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v16, vcc1423; GFX7-NEXT: v_max_f32_e32 v1, v0, v21424; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v21425; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1426; GFX7-NEXT: v_max_f32_e32 v1, v0, v31427; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v31428; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1429; GFX7-NEXT: v_max_f32_e32 v1, v0, v41430; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v41431; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1432; GFX7-NEXT: v_max_f32_e32 v1, v0, v51433; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v51434; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1435; GFX7-NEXT: v_max_f32_e32 v1, v0, v61436; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v61437; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1438; GFX7-NEXT: v_max_f32_e32 v1, v0, v71439; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v71440; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1441; GFX7-NEXT: v_max_f32_e32 v1, v0, v81442; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v81443; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1444; GFX7-NEXT: v_max_f32_e32 v1, v0, v91445; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v91446; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1447; GFX7-NEXT: v_max_f32_e32 v1, v0, v101448; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v101449; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1450; GFX7-NEXT: v_max_f32_e32 v1, v0, v111451; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v111452; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1453; GFX7-NEXT: v_max_f32_e32 v1, v0, v121454; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v121455; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1456; GFX7-NEXT: v_max_f32_e32 v1, v0, v131457; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v131458; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1459; GFX7-NEXT: v_max_f32_e32 v1, v0, v141460; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v141461; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1462; GFX7-NEXT: v_max_f32_e32 v1, v0, v151463; GFX7-NEXT: v_cmp_o_f32_e32 vcc, v0, v151464; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1465; GFX7-NEXT: s_setpc_b64 s[30:31]1466;1467; GFX8-LABEL: test_vector_reduce_fmaximum_v16float:1468; GFX8: ; %bb.0: ; %entry1469; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1470; GFX8-NEXT: v_max_f32_e32 v16, v0, v11471; GFX8-NEXT: v_mov_b32_e32 v17, 0x7fc000001472; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v11473; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v16, vcc1474; GFX8-NEXT: v_max_f32_e32 v1, v0, v21475; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v21476; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1477; GFX8-NEXT: v_max_f32_e32 v1, v0, v31478; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v31479; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1480; GFX8-NEXT: v_max_f32_e32 v1, v0, v41481; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v41482; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1483; GFX8-NEXT: v_max_f32_e32 v1, v0, v51484; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v51485; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1486; GFX8-NEXT: v_max_f32_e32 v1, v0, v61487; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v61488; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1489; GFX8-NEXT: v_max_f32_e32 v1, v0, v71490; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v71491; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1492; GFX8-NEXT: v_max_f32_e32 v1, v0, v81493; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v81494; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1495; GFX8-NEXT: v_max_f32_e32 v1, v0, v91496; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v91497; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1498; GFX8-NEXT: v_max_f32_e32 v1, v0, v101499; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v101500; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1501; GFX8-NEXT: v_max_f32_e32 v1, v0, v111502; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v111503; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1504; GFX8-NEXT: v_max_f32_e32 v1, v0, v121505; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v121506; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1507; GFX8-NEXT: v_max_f32_e32 v1, v0, v131508; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v131509; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1510; GFX8-NEXT: v_max_f32_e32 v1, v0, v141511; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v141512; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1513; GFX8-NEXT: v_max_f32_e32 v1, v0, v151514; GFX8-NEXT: v_cmp_o_f32_e32 vcc, v0, v151515; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1516; GFX8-NEXT: s_setpc_b64 s[30:31]1517;1518; GFX9-LABEL: test_vector_reduce_fmaximum_v16float:1519; GFX9: ; %bb.0: ; %entry1520; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1521; GFX9-NEXT: v_max_f32_e32 v16, v0, v11522; GFX9-NEXT: v_mov_b32_e32 v17, 0x7fc000001523; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11524; GFX9-NEXT: s_nop 11525; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v16, vcc1526; GFX9-NEXT: v_max_f32_e32 v1, v0, v21527; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v21528; GFX9-NEXT: s_nop 11529; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1530; GFX9-NEXT: v_max_f32_e32 v1, v0, v31531; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v31532; GFX9-NEXT: s_nop 11533; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1534; GFX9-NEXT: v_max_f32_e32 v1, v0, v41535; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v41536; GFX9-NEXT: s_nop 11537; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1538; GFX9-NEXT: v_max_f32_e32 v1, v0, v51539; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v51540; GFX9-NEXT: s_nop 11541; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1542; GFX9-NEXT: v_max_f32_e32 v1, v0, v61543; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v61544; GFX9-NEXT: s_nop 11545; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1546; GFX9-NEXT: v_max_f32_e32 v1, v0, v71547; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v71548; GFX9-NEXT: s_nop 11549; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1550; GFX9-NEXT: v_max_f32_e32 v1, v0, v81551; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v81552; GFX9-NEXT: s_nop 11553; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1554; GFX9-NEXT: v_max_f32_e32 v1, v0, v91555; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v91556; GFX9-NEXT: s_nop 11557; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1558; GFX9-NEXT: v_max_f32_e32 v1, v0, v101559; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v101560; GFX9-NEXT: s_nop 11561; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1562; GFX9-NEXT: v_max_f32_e32 v1, v0, v111563; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v111564; GFX9-NEXT: s_nop 11565; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1566; GFX9-NEXT: v_max_f32_e32 v1, v0, v121567; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v121568; GFX9-NEXT: s_nop 11569; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1570; GFX9-NEXT: v_max_f32_e32 v1, v0, v131571; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v131572; GFX9-NEXT: s_nop 11573; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1574; GFX9-NEXT: v_max_f32_e32 v1, v0, v141575; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v141576; GFX9-NEXT: s_nop 11577; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1578; GFX9-NEXT: v_max_f32_e32 v1, v0, v151579; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v151580; GFX9-NEXT: s_nop 11581; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v1, vcc1582; GFX9-NEXT: s_setpc_b64 s[30:31]1583;1584; GFX10-LABEL: test_vector_reduce_fmaximum_v16float:1585; GFX10: ; %bb.0: ; %entry1586; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1587; GFX10-NEXT: v_max_f32_e32 v16, v0, v11588; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11589; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v16, vcc_lo1590; GFX10-NEXT: v_max_f32_e32 v1, v0, v21591; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21592; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1593; GFX10-NEXT: v_max_f32_e32 v1, v0, v31594; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31595; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1596; GFX10-NEXT: v_max_f32_e32 v1, v0, v41597; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v41598; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1599; GFX10-NEXT: v_max_f32_e32 v1, v0, v51600; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v51601; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1602; GFX10-NEXT: v_max_f32_e32 v1, v0, v61603; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v61604; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1605; GFX10-NEXT: v_max_f32_e32 v1, v0, v71606; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v71607; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1608; GFX10-NEXT: v_max_f32_e32 v1, v0, v81609; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v81610; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1611; GFX10-NEXT: v_max_f32_e32 v1, v0, v91612; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v91613; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1614; GFX10-NEXT: v_max_f32_e32 v1, v0, v101615; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v101616; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1617; GFX10-NEXT: v_max_f32_e32 v1, v0, v111618; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v111619; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1620; GFX10-NEXT: v_max_f32_e32 v1, v0, v121621; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v121622; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1623; GFX10-NEXT: v_max_f32_e32 v1, v0, v131624; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v131625; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1626; GFX10-NEXT: v_max_f32_e32 v1, v0, v141627; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v141628; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1629; GFX10-NEXT: v_max_f32_e32 v1, v0, v151630; GFX10-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v151631; GFX10-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1632; GFX10-NEXT: s_setpc_b64 s[30:31]1633;1634; GFX11-LABEL: test_vector_reduce_fmaximum_v16float:1635; GFX11: ; %bb.0: ; %entry1636; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1637; GFX11-NEXT: v_max_f32_e32 v16, v0, v11638; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v11639; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1640; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v16, vcc_lo1641; GFX11-NEXT: v_max_f32_e32 v1, v0, v21642; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v21643; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1644; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1645; GFX11-NEXT: v_max_f32_e32 v1, v0, v31646; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v31647; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1648; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1649; GFX11-NEXT: v_max_f32_e32 v1, v0, v41650; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v41651; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1652; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1653; GFX11-NEXT: v_max_f32_e32 v1, v0, v51654; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v51655; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1656; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1657; GFX11-NEXT: v_max_f32_e32 v1, v0, v61658; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v61659; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1660; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1661; GFX11-NEXT: v_max_f32_e32 v1, v0, v71662; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v71663; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1664; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1665; GFX11-NEXT: v_max_f32_e32 v1, v0, v81666; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v81667; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1668; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1669; GFX11-NEXT: v_max_f32_e32 v1, v0, v91670; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v91671; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1672; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1673; GFX11-NEXT: v_max_f32_e32 v1, v0, v101674; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v101675; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1676; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1677; GFX11-NEXT: v_max_f32_e32 v1, v0, v111678; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v111679; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1680; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1681; GFX11-NEXT: v_max_f32_e32 v1, v0, v121682; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v121683; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1684; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1685; GFX11-NEXT: v_max_f32_e32 v1, v0, v131686; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v131687; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1688; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1689; GFX11-NEXT: v_max_f32_e32 v1, v0, v141690; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v141691; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1692; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1693; GFX11-NEXT: v_max_f32_e32 v1, v0, v151694; GFX11-NEXT: v_cmp_o_f32_e32 vcc_lo, v0, v151695; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)1696; GFX11-NEXT: v_cndmask_b32_e32 v0, 0x7fc00000, v1, vcc_lo1697; GFX11-NEXT: s_setpc_b64 s[30:31]1698;1699; GFX12-LABEL: test_vector_reduce_fmaximum_v16float:1700; GFX12: ; %bb.0: ; %entry1701; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01702; GFX12-NEXT: s_wait_expcnt 0x01703; GFX12-NEXT: s_wait_samplecnt 0x01704; GFX12-NEXT: s_wait_bvhcnt 0x01705; GFX12-NEXT: s_wait_kmcnt 0x01706; GFX12-NEXT: v_maximum_f32 v0, v0, v11707; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1708; GFX12-NEXT: v_maximum3_f32 v0, v0, v2, v31709; GFX12-NEXT: v_maximum3_f32 v0, v0, v4, v51710; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1711; GFX12-NEXT: v_maximum3_f32 v0, v0, v6, v71712; GFX12-NEXT: v_maximum3_f32 v0, v0, v8, v91713; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1714; GFX12-NEXT: v_maximum3_f32 v0, v0, v10, v111715; GFX12-NEXT: v_maximum3_f32 v0, v0, v12, v131716; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1717; GFX12-NEXT: v_maximum3_f32 v0, v0, v14, v151718; GFX12-NEXT: s_setpc_b64 s[30:31]1719entry:1720 %res = call float @llvm.vector.reduce.fmaximum.v16float(<16 x float> %v)1721 ret float %res1722}1723 1724 1725define double @test_vector_reduce_fmaximum_v2double(<2 x double> %v) {1726; GFX7-LABEL: test_vector_reduce_fmaximum_v2double:1727; GFX7: ; %bb.0: ; %entry1728; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1729; GFX7-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]1730; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1731; GFX7-NEXT: v_mov_b32_e32 v1, 0x7ff800001732; GFX7-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc1733; GFX7-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc1734; GFX7-NEXT: s_setpc_b64 s[30:31]1735;1736; GFX8-LABEL: test_vector_reduce_fmaximum_v2double:1737; GFX8: ; %bb.0: ; %entry1738; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1739; GFX8-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]1740; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1741; GFX8-NEXT: v_mov_b32_e32 v1, 0x7ff800001742; GFX8-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc1743; GFX8-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc1744; GFX8-NEXT: s_setpc_b64 s[30:31]1745;1746; GFX9-LABEL: test_vector_reduce_fmaximum_v2double:1747; GFX9: ; %bb.0: ; %entry1748; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1749; GFX9-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]1750; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1751; GFX9-NEXT: v_mov_b32_e32 v1, 0x7ff800001752; GFX9-NEXT: s_nop 01753; GFX9-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc1754; GFX9-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc1755; GFX9-NEXT: s_setpc_b64 s[30:31]1756;1757; GFX10-LABEL: test_vector_reduce_fmaximum_v2double:1758; GFX10: ; %bb.0: ; %entry1759; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1760; GFX10-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]1761; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1762; GFX10-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc_lo1763; GFX10-NEXT: v_cndmask_b32_e64 v1, v5, 0x7ff80000, vcc_lo1764; GFX10-NEXT: s_setpc_b64 s[30:31]1765;1766; GFX11-LABEL: test_vector_reduce_fmaximum_v2double:1767; GFX11: ; %bb.0: ; %entry1768; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1769; GFX11-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]1770; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1771; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)1772; GFX11-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc_lo1773; GFX11-NEXT: v_cndmask_b32_e64 v1, v5, 0x7ff80000, vcc_lo1774; GFX11-NEXT: s_setpc_b64 s[30:31]1775;1776; GFX12-LABEL: test_vector_reduce_fmaximum_v2double:1777; GFX12: ; %bb.0: ; %entry1778; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01779; GFX12-NEXT: s_wait_expcnt 0x01780; GFX12-NEXT: s_wait_samplecnt 0x01781; GFX12-NEXT: s_wait_bvhcnt 0x01782; GFX12-NEXT: s_wait_kmcnt 0x01783; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]1784; GFX12-NEXT: s_setpc_b64 s[30:31]1785entry:1786 %res = call double @llvm.vector.reduce.fmaximum.v2double(<2 x double> %v)1787 ret double %res1788}1789 1790define double @test_vector_reduce_fmaximum_v3double(<3 x double> %v) {1791; GFX7-LABEL: test_vector_reduce_fmaximum_v3double:1792; GFX7: ; %bb.0: ; %entry1793; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1794; GFX7-NEXT: v_max_f64 v[6:7], v[0:1], v[2:3]1795; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1796; GFX7-NEXT: v_mov_b32_e32 v8, 0x7ff800001797; GFX7-NEXT: v_cndmask_b32_e32 v1, v7, v8, vcc1798; GFX7-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc1799; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1800; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1801; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1802; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v8, vcc1803; GFX7-NEXT: s_setpc_b64 s[30:31]1804;1805; GFX8-LABEL: test_vector_reduce_fmaximum_v3double:1806; GFX8: ; %bb.0: ; %entry1807; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1808; GFX8-NEXT: v_max_f64 v[6:7], v[0:1], v[2:3]1809; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1810; GFX8-NEXT: v_mov_b32_e32 v8, 0x7ff800001811; GFX8-NEXT: v_cndmask_b32_e32 v1, v7, v8, vcc1812; GFX8-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc1813; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1814; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1815; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1816; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v8, vcc1817; GFX8-NEXT: s_setpc_b64 s[30:31]1818;1819; GFX9-LABEL: test_vector_reduce_fmaximum_v3double:1820; GFX9: ; %bb.0: ; %entry1821; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1822; GFX9-NEXT: v_max_f64 v[6:7], v[0:1], v[2:3]1823; GFX9-NEXT: v_mov_b32_e32 v8, 0x7ff800001824; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1825; GFX9-NEXT: s_nop 11826; GFX9-NEXT: v_cndmask_b32_e32 v1, v7, v8, vcc1827; GFX9-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc1828; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1829; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1830; GFX9-NEXT: s_nop 11831; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1832; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v8, vcc1833; GFX9-NEXT: s_setpc_b64 s[30:31]1834;1835; GFX10-LABEL: test_vector_reduce_fmaximum_v3double:1836; GFX10: ; %bb.0: ; %entry1837; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1838; GFX10-NEXT: v_max_f64 v[6:7], v[0:1], v[2:3]1839; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1840; GFX10-NEXT: v_cndmask_b32_e64 v1, v7, 0x7ff80000, vcc_lo1841; GFX10-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc_lo1842; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1843; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]1844; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1845; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1846; GFX10-NEXT: s_setpc_b64 s[30:31]1847;1848; GFX11-LABEL: test_vector_reduce_fmaximum_v3double:1849; GFX11: ; %bb.0: ; %entry1850; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1851; GFX11-NEXT: v_max_f64 v[6:7], v[0:1], v[2:3]1852; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1853; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)1854; GFX11-NEXT: v_cndmask_b32_e64 v1, v7, 0x7ff80000, vcc_lo1855; GFX11-NEXT: v_cndmask_b32_e64 v0, v6, 0, vcc_lo1856; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1857; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1858; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]1859; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1860; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)1861; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1862; GFX11-NEXT: s_setpc_b64 s[30:31]1863;1864; GFX12-LABEL: test_vector_reduce_fmaximum_v3double:1865; GFX12: ; %bb.0: ; %entry1866; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01867; GFX12-NEXT: s_wait_expcnt 0x01868; GFX12-NEXT: s_wait_samplecnt 0x01869; GFX12-NEXT: s_wait_bvhcnt 0x01870; GFX12-NEXT: s_wait_kmcnt 0x01871; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]1872; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)1873; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[4:5]1874; GFX12-NEXT: s_setpc_b64 s[30:31]1875entry:1876 %res = call double @llvm.vector.reduce.fmaximum.v3double(<3 x double> %v)1877 ret double %res1878}1879 1880define double @test_vector_reduce_fmaximum_v4double(<4 x double> %v) {1881; GFX7-LABEL: test_vector_reduce_fmaximum_v4double:1882; GFX7: ; %bb.0: ; %entry1883; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1884; GFX7-NEXT: v_max_f64 v[8:9], v[0:1], v[2:3]1885; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1886; GFX7-NEXT: v_mov_b32_e32 v10, 0x7ff800001887; GFX7-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc1888; GFX7-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc1889; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1890; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1891; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1892; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1893; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1894; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]1895; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1896; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1897; GFX7-NEXT: s_setpc_b64 s[30:31]1898;1899; GFX8-LABEL: test_vector_reduce_fmaximum_v4double:1900; GFX8: ; %bb.0: ; %entry1901; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1902; GFX8-NEXT: v_max_f64 v[8:9], v[0:1], v[2:3]1903; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1904; GFX8-NEXT: v_mov_b32_e32 v10, 0x7ff800001905; GFX8-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc1906; GFX8-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc1907; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1908; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1909; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1910; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1911; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1912; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]1913; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1914; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1915; GFX8-NEXT: s_setpc_b64 s[30:31]1916;1917; GFX9-LABEL: test_vector_reduce_fmaximum_v4double:1918; GFX9: ; %bb.0: ; %entry1919; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1920; GFX9-NEXT: v_max_f64 v[8:9], v[0:1], v[2:3]1921; GFX9-NEXT: v_mov_b32_e32 v10, 0x7ff800001922; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1923; GFX9-NEXT: s_nop 11924; GFX9-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc1925; GFX9-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc1926; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1927; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]1928; GFX9-NEXT: s_nop 11929; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1930; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1931; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1932; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]1933; GFX9-NEXT: s_nop 11934; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc1935; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc1936; GFX9-NEXT: s_setpc_b64 s[30:31]1937;1938; GFX10-LABEL: test_vector_reduce_fmaximum_v4double:1939; GFX10: ; %bb.0: ; %entry1940; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1941; GFX10-NEXT: v_max_f64 v[8:9], v[0:1], v[2:3]1942; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1943; GFX10-NEXT: v_cndmask_b32_e64 v1, v9, 0x7ff80000, vcc_lo1944; GFX10-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc_lo1945; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1946; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]1947; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1948; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1949; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1950; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]1951; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1952; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1953; GFX10-NEXT: s_setpc_b64 s[30:31]1954;1955; GFX11-LABEL: test_vector_reduce_fmaximum_v4double:1956; GFX11: ; %bb.0: ; %entry1957; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1958; GFX11-NEXT: v_max_f64 v[8:9], v[0:1], v[2:3]1959; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]1960; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)1961; GFX11-NEXT: v_cndmask_b32_e64 v1, v9, 0x7ff80000, vcc_lo1962; GFX11-NEXT: v_cndmask_b32_e64 v0, v8, 0, vcc_lo1963; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1964; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]1965; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]1966; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1967; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)1968; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1969; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]1970; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]1971; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)1972; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo1973; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo1974; GFX11-NEXT: s_setpc_b64 s[30:31]1975;1976; GFX12-LABEL: test_vector_reduce_fmaximum_v4double:1977; GFX12: ; %bb.0: ; %entry1978; GFX12-NEXT: s_wait_loadcnt_dscnt 0x01979; GFX12-NEXT: s_wait_expcnt 0x01980; GFX12-NEXT: s_wait_samplecnt 0x01981; GFX12-NEXT: s_wait_bvhcnt 0x01982; GFX12-NEXT: s_wait_kmcnt 0x01983; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]1984; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1985; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[4:5]1986; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[6:7]1987; GFX12-NEXT: s_setpc_b64 s[30:31]1988entry:1989 %res = call double @llvm.vector.reduce.fmaximum.v4double(<4 x double> %v)1990 ret double %res1991}1992 1993define double @test_vector_reduce_fmaximum_v8double(<8 x double> %v) {1994; GFX7-LABEL: test_vector_reduce_fmaximum_v8double:1995; GFX7: ; %bb.0: ; %entry1996; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1997; GFX7-NEXT: v_max_f64 v[16:17], v[0:1], v[2:3]1998; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]1999; GFX7-NEXT: v_mov_b32_e32 v18, 0x7ff800002000; GFX7-NEXT: v_cndmask_b32_e32 v1, v17, v18, vcc2001; GFX7-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc2002; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2003; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2004; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2005; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2006; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2007; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2008; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2009; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2010; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2011; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2012; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2013; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2014; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2015; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2016; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2017; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2018; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2019; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2020; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2021; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2022; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2023; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2024; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2025; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2026; GFX7-NEXT: s_setpc_b64 s[30:31]2027;2028; GFX8-LABEL: test_vector_reduce_fmaximum_v8double:2029; GFX8: ; %bb.0: ; %entry2030; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2031; GFX8-NEXT: v_max_f64 v[16:17], v[0:1], v[2:3]2032; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]2033; GFX8-NEXT: v_mov_b32_e32 v18, 0x7ff800002034; GFX8-NEXT: v_cndmask_b32_e32 v1, v17, v18, vcc2035; GFX8-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc2036; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2037; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2038; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2039; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2040; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2041; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2042; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2043; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2044; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2045; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2046; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2047; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2048; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2049; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2050; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2051; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2052; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2053; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2054; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2055; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2056; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2057; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2058; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2059; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2060; GFX8-NEXT: s_setpc_b64 s[30:31]2061;2062; GFX9-LABEL: test_vector_reduce_fmaximum_v8double:2063; GFX9: ; %bb.0: ; %entry2064; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2065; GFX9-NEXT: v_max_f64 v[16:17], v[0:1], v[2:3]2066; GFX9-NEXT: v_mov_b32_e32 v18, 0x7ff800002067; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]2068; GFX9-NEXT: s_nop 12069; GFX9-NEXT: v_cndmask_b32_e32 v1, v17, v18, vcc2070; GFX9-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc2071; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2072; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2073; GFX9-NEXT: s_nop 12074; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2075; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2076; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2077; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2078; GFX9-NEXT: s_nop 12079; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2080; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2081; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2082; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2083; GFX9-NEXT: s_nop 12084; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2085; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2086; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2087; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2088; GFX9-NEXT: s_nop 12089; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2090; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2091; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2092; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2093; GFX9-NEXT: s_nop 12094; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2095; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2096; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2097; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2098; GFX9-NEXT: s_nop 12099; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2100; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v18, vcc2101; GFX9-NEXT: s_setpc_b64 s[30:31]2102;2103; GFX10-LABEL: test_vector_reduce_fmaximum_v8double:2104; GFX10: ; %bb.0: ; %entry2105; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2106; GFX10-NEXT: v_max_f64 v[16:17], v[0:1], v[2:3]2107; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]2108; GFX10-NEXT: v_cndmask_b32_e64 v1, v17, 0x7ff80000, vcc_lo2109; GFX10-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc_lo2110; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2111; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]2112; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2113; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2114; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2115; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]2116; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2117; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2118; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2119; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[8:9]2120; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2121; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2122; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2123; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[10:11]2124; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2125; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2126; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2127; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[12:13]2128; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2129; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2130; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2131; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[14:15]2132; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2133; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2134; GFX10-NEXT: s_setpc_b64 s[30:31]2135;2136; GFX11-LABEL: test_vector_reduce_fmaximum_v8double:2137; GFX11: ; %bb.0: ; %entry2138; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2139; GFX11-NEXT: v_max_f64 v[16:17], v[0:1], v[2:3]2140; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]2141; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2142; GFX11-NEXT: v_cndmask_b32_e64 v1, v17, 0x7ff80000, vcc_lo2143; GFX11-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc_lo2144; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2145; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2146; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]2147; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2148; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2149; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2150; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2151; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]2152; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2153; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2154; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2155; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2156; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2157; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[8:9]2158; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2159; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2160; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2161; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2162; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[10:11]2163; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2164; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2165; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2166; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2167; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2168; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[12:13]2169; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2170; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2171; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2172; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2173; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[14:15]2174; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2175; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2176; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2177; GFX11-NEXT: s_setpc_b64 s[30:31]2178;2179; GFX12-LABEL: test_vector_reduce_fmaximum_v8double:2180; GFX12: ; %bb.0: ; %entry2181; GFX12-NEXT: s_wait_loadcnt_dscnt 0x02182; GFX12-NEXT: s_wait_expcnt 0x02183; GFX12-NEXT: s_wait_samplecnt 0x02184; GFX12-NEXT: s_wait_bvhcnt 0x02185; GFX12-NEXT: s_wait_kmcnt 0x02186; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]2187; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2188; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[4:5]2189; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[6:7]2190; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2191; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[8:9]2192; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[10:11]2193; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2194; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[12:13]2195; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[14:15]2196; GFX12-NEXT: s_setpc_b64 s[30:31]2197entry:2198 %res = call double @llvm.vector.reduce.fmaximum.v8double(<8 x double> %v)2199 ret double %res2200}2201 2202define double @test_vector_reduce_fmaximum_v16double(<16 x double> %v) {2203; GFX7-LABEL: test_vector_reduce_fmaximum_v16double:2204; GFX7: ; %bb.0: ; %entry2205; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2206; GFX7-NEXT: v_max_f64 v[31:32], v[0:1], v[2:3]2207; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]2208; GFX7-NEXT: v_mov_b32_e32 v33, 0x7ff800002209; GFX7-NEXT: v_cndmask_b32_e32 v1, v32, v33, vcc2210; GFX7-NEXT: v_cndmask_b32_e64 v0, v31, 0, vcc2211; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2212; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2213; GFX7-NEXT: buffer_load_dword v31, off, s[0:3], s322214; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2215; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2216; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2217; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2218; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2219; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2220; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2221; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2222; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2223; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2224; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2225; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2226; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2227; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2228; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2229; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2230; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2231; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2232; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2233; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2234; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2235; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2236; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[16:17]2237; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]2238; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2239; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2240; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[18:19]2241; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[18:19]2242; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2243; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2244; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[20:21]2245; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[20:21]2246; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2247; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2248; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[22:23]2249; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[22:23]2250; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2251; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2252; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[24:25]2253; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[24:25]2254; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2255; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2256; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[26:27]2257; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[26:27]2258; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2259; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2260; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[28:29]2261; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[28:29]2262; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2263; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2264; GFX7-NEXT: s_waitcnt vmcnt(0)2265; GFX7-NEXT: v_max_f64 v[2:3], v[0:1], v[30:31]2266; GFX7-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[30:31]2267; GFX7-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2268; GFX7-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2269; GFX7-NEXT: s_setpc_b64 s[30:31]2270;2271; GFX8-LABEL: test_vector_reduce_fmaximum_v16double:2272; GFX8: ; %bb.0: ; %entry2273; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2274; GFX8-NEXT: v_max_f64 v[31:32], v[0:1], v[2:3]2275; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]2276; GFX8-NEXT: v_mov_b32_e32 v33, 0x7ff800002277; GFX8-NEXT: v_cndmask_b32_e32 v1, v32, v33, vcc2278; GFX8-NEXT: v_cndmask_b32_e64 v0, v31, 0, vcc2279; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2280; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2281; GFX8-NEXT: buffer_load_dword v31, off, s[0:3], s322282; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2283; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2284; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2285; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2286; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2287; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2288; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2289; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2290; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2291; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2292; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2293; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2294; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2295; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2296; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2297; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2298; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2299; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2300; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2301; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2302; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2303; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2304; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[16:17]2305; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]2306; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2307; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2308; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[18:19]2309; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[18:19]2310; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2311; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2312; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[20:21]2313; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[20:21]2314; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2315; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2316; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[22:23]2317; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[22:23]2318; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2319; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2320; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[24:25]2321; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[24:25]2322; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2323; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2324; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[26:27]2325; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[26:27]2326; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2327; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2328; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[28:29]2329; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[28:29]2330; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2331; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2332; GFX8-NEXT: s_waitcnt vmcnt(0)2333; GFX8-NEXT: v_max_f64 v[2:3], v[0:1], v[30:31]2334; GFX8-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[30:31]2335; GFX8-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2336; GFX8-NEXT: v_cndmask_b32_e32 v1, v3, v33, vcc2337; GFX8-NEXT: s_setpc_b64 s[30:31]2338;2339; GFX9-LABEL: test_vector_reduce_fmaximum_v16double:2340; GFX9: ; %bb.0: ; %entry2341; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2342; GFX9-NEXT: scratch_load_dword v31, off, s322343; GFX9-NEXT: v_max_f64 v[32:33], v[0:1], v[2:3]2344; GFX9-NEXT: v_mov_b32_e32 v34, 0x7ff800002345; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]2346; GFX9-NEXT: s_nop 12347; GFX9-NEXT: v_cndmask_b32_e32 v1, v33, v34, vcc2348; GFX9-NEXT: v_cndmask_b32_e64 v0, v32, 0, vcc2349; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2350; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[4:5]2351; GFX9-NEXT: s_nop 12352; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2353; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2354; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2355; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[6:7]2356; GFX9-NEXT: s_nop 12357; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2358; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2359; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2360; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]2361; GFX9-NEXT: s_nop 12362; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2363; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2364; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2365; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[10:11]2366; GFX9-NEXT: s_nop 12367; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2368; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2369; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2370; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[12:13]2371; GFX9-NEXT: s_nop 12372; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2373; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2374; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2375; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[14:15]2376; GFX9-NEXT: s_nop 12377; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2378; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2379; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[16:17]2380; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[16:17]2381; GFX9-NEXT: s_nop 12382; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2383; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2384; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[18:19]2385; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[18:19]2386; GFX9-NEXT: s_nop 12387; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2388; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2389; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[20:21]2390; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[20:21]2391; GFX9-NEXT: s_nop 12392; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2393; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2394; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[22:23]2395; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[22:23]2396; GFX9-NEXT: s_nop 12397; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2398; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2399; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[24:25]2400; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[24:25]2401; GFX9-NEXT: s_nop 12402; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2403; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2404; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[26:27]2405; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[26:27]2406; GFX9-NEXT: s_nop 12407; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2408; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2409; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[28:29]2410; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[28:29]2411; GFX9-NEXT: s_nop 12412; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2413; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2414; GFX9-NEXT: s_waitcnt vmcnt(0)2415; GFX9-NEXT: v_max_f64 v[2:3], v[0:1], v[30:31]2416; GFX9-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[30:31]2417; GFX9-NEXT: s_nop 12418; GFX9-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc2419; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v34, vcc2420; GFX9-NEXT: s_setpc_b64 s[30:31]2421;2422; GFX10-LABEL: test_vector_reduce_fmaximum_v16double:2423; GFX10: ; %bb.0: ; %entry2424; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2425; GFX10-NEXT: v_max_f64 v[31:32], v[0:1], v[2:3]2426; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]2427; GFX10-NEXT: v_cndmask_b32_e64 v1, v32, 0x7ff80000, vcc_lo2428; GFX10-NEXT: v_cndmask_b32_e64 v0, v31, 0, vcc_lo2429; GFX10-NEXT: buffer_load_dword v31, off, s[0:3], s322430; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2431; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]2432; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2433; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2434; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2435; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]2436; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2437; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2438; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2439; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[8:9]2440; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2441; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2442; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2443; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[10:11]2444; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2445; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2446; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2447; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[12:13]2448; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2449; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2450; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2451; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[14:15]2452; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2453; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2454; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[16:17]2455; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[16:17]2456; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2457; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2458; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[18:19]2459; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[18:19]2460; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2461; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2462; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[20:21]2463; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[20:21]2464; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2465; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2466; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[22:23]2467; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[22:23]2468; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2469; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2470; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[24:25]2471; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[24:25]2472; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2473; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2474; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[26:27]2475; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[26:27]2476; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2477; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2478; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[28:29]2479; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[28:29]2480; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2481; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2482; GFX10-NEXT: s_waitcnt vmcnt(0)2483; GFX10-NEXT: v_max_f64 v[2:3], v[0:1], v[30:31]2484; GFX10-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[30:31]2485; GFX10-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2486; GFX10-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2487; GFX10-NEXT: s_setpc_b64 s[30:31]2488;2489; GFX11-LABEL: test_vector_reduce_fmaximum_v16double:2490; GFX11: ; %bb.0: ; %entry2491; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX11-NEXT: v_max_f64 v[31:32], v[0:1], v[2:3]2493; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[2:3]2494; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2495; GFX11-NEXT: v_cndmask_b32_e64 v1, v32, 0x7ff80000, vcc_lo2496; GFX11-NEXT: v_cndmask_b32_e64 v0, v31, 0, vcc_lo2497; GFX11-NEXT: scratch_load_b32 v31, off, s322498; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[4:5]2499; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[4:5]2500; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2501; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2502; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2503; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2504; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[6:7]2505; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[6:7]2506; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2507; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2508; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2509; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[8:9]2510; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[8:9]2511; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2512; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2513; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2514; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2515; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[10:11]2516; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[10:11]2517; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2518; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2519; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2520; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[12:13]2521; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[12:13]2522; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2523; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2524; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2525; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2526; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[14:15]2527; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[14:15]2528; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2529; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2530; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2531; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[16:17]2532; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[16:17]2533; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2534; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2535; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2536; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2537; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[18:19]2538; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[18:19]2539; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2540; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2541; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2542; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[20:21]2543; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[20:21]2544; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2545; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2546; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2547; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2548; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[22:23]2549; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[22:23]2550; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2551; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2552; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2553; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[24:25]2554; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[24:25]2555; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2556; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2557; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2558; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2559; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[26:27]2560; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[26:27]2561; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2562; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)2563; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2564; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[28:29]2565; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[28:29]2566; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)2567; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2568; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2569; GFX11-NEXT: s_waitcnt vmcnt(0)2570; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2571; GFX11-NEXT: v_max_f64 v[2:3], v[0:1], v[30:31]2572; GFX11-NEXT: v_cmp_u_f64_e32 vcc_lo, v[0:1], v[30:31]2573; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc_lo2574; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3)2575; GFX11-NEXT: v_cndmask_b32_e64 v1, v3, 0x7ff80000, vcc_lo2576; GFX11-NEXT: s_setpc_b64 s[30:31]2577;2578; GFX12-LABEL: test_vector_reduce_fmaximum_v16double:2579; GFX12: ; %bb.0: ; %entry2580; GFX12-NEXT: s_wait_loadcnt_dscnt 0x02581; GFX12-NEXT: s_wait_expcnt 0x02582; GFX12-NEXT: s_wait_samplecnt 0x02583; GFX12-NEXT: s_wait_bvhcnt 0x02584; GFX12-NEXT: s_wait_kmcnt 0x02585; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]2586; GFX12-NEXT: scratch_load_b32 v31, off, s322587; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[4:5]2588; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2589; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[6:7]2590; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[8:9]2591; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2592; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[10:11]2593; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[12:13]2594; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2595; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[14:15]2596; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[16:17]2597; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2598; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[18:19]2599; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[20:21]2600; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2601; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[22:23]2602; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[24:25]2603; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2604; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[26:27]2605; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[28:29]2606; GFX12-NEXT: s_wait_loadcnt 0x02607; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)2608; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[30:31]2609; GFX12-NEXT: s_setpc_b64 s[30:31]2610entry:2611 %res = call double @llvm.vector.reduce.fmaximum.v16double(<16 x double> %v)2612 ret double %res2613}2614 2615declare half @llvm.vector.reduce.fmaximum.v2half(<2 x half>)2616declare half @llvm.vector.reduce.fmaximum.v3half(<3 x half>)2617declare half @llvm.vector.reduce.fmaximum.v4half(<4 x half>)2618declare half @llvm.vector.reduce.fmaximum.v8half(<8 x half>)2619declare half @llvm.vector.reduce.fmaximum.v16half(<16 x half>)2620declare float @llvm.vector.reduce.fmaximum.v2float(<2 x float>)2621declare float @llvm.vector.reduce.fmaximum.v3float(<3 x float>)2622declare float @llvm.vector.reduce.fmaximum.v4float(<4 x float>)2623declare float @llvm.vector.reduce.fmaximum.v8float(<8 x float>)2624declare float @llvm.vector.reduce.fmaximum.v16float(<16 x float>)2625declare double @llvm.vector.reduce.fmaximum.v2double(<2 x double>)2626declare double @llvm.vector.reduce.fmaximum.v3double(<3 x double>)2627declare double @llvm.vector.reduce.fmaximum.v4double(<4 x double>)2628declare double @llvm.vector.reduce.fmaximum.v8double(<8 x double>)2629declare double @llvm.vector.reduce.fmaximum.v16double(<16 x double>)2630;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2631; GFX10-SDAG: {{.*}}2632; GFX11-SDAG: {{.*}}2633; GFX12-SDAG: {{.*}}2634; GFX7-SDAG: {{.*}}2635; GFX8-SDAG: {{.*}}2636; GFX9-SDAG: {{.*}}2637