821 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -enable-var-scope -check-prefixes=GFX8,GFX8-SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -enable-var-scope -check-prefixes=GFX8,GFX8-GISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GFX9-SDAG %s5; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GFX9-GISEL %s6; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-FAKE16,GFX11-FAKE16-SDAG %s7; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-FAKE16,GFX11-FAKE16-GISEL %s8; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-TRUE16,GFX11-TRUE16-SDAG %s9; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX11,GFX11-TRUE16,GFX11-TRUE16-GISEL %s10 11define void @undef_lo_v2i16(i16 %arg0) {12; GFX8-SDAG-LABEL: undef_lo_v2i16:13; GFX8-SDAG: ; %bb.0:14; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)15; GFX8-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v016; GFX8-SDAG-NEXT: ;;#ASMSTART17; GFX8-SDAG-NEXT: ; use v018; GFX8-SDAG-NEXT: ;;#ASMEND19; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]20;21; GFX8-GISEL-LABEL: undef_lo_v2i16:22; GFX8-GISEL: ; %bb.0:23; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)24; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v025; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v026; GFX8-GISEL-NEXT: ;;#ASMSTART27; GFX8-GISEL-NEXT: ; use v028; GFX8-GISEL-NEXT: ;;#ASMEND29; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]30;31; GFX9-LABEL: undef_lo_v2i16:32; GFX9: ; %bb.0:33; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v035; GFX9-NEXT: ;;#ASMSTART36; GFX9-NEXT: ; use v037; GFX9-NEXT: ;;#ASMEND38; GFX9-NEXT: s_setpc_b64 s[30:31]39;40; GFX11-FAKE16-LABEL: undef_lo_v2i16:41; GFX11-FAKE16: ; %bb.0:42; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)43; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v044; GFX11-FAKE16-NEXT: ;;#ASMSTART45; GFX11-FAKE16-NEXT: ; use v046; GFX11-FAKE16-NEXT: ;;#ASMEND47; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]48;49; GFX11-TRUE16-LABEL: undef_lo_v2i16:50; GFX11-TRUE16: ; %bb.0:51; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)52; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l53; GFX11-TRUE16-NEXT: ;;#ASMSTART54; GFX11-TRUE16-NEXT: ; use v055; GFX11-TRUE16-NEXT: ;;#ASMEND56; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]57 %undef.lo = insertelement <2 x i16> poison, i16 %arg0, i32 158 call void asm sideeffect "; use $0", "v"(<2 x i16> %undef.lo);59 ret void60}61 62define void @undef_lo_v2f16(half %arg0) {63; GFX8-SDAG-LABEL: undef_lo_v2f16:64; GFX8-SDAG: ; %bb.0:65; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX8-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v067; GFX8-SDAG-NEXT: ;;#ASMSTART68; GFX8-SDAG-NEXT: ; use v069; GFX8-SDAG-NEXT: ;;#ASMEND70; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]71;72; GFX8-GISEL-LABEL: undef_lo_v2f16:73; GFX8-GISEL: ; %bb.0:74; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v076; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v077; GFX8-GISEL-NEXT: ;;#ASMSTART78; GFX8-GISEL-NEXT: ; use v079; GFX8-GISEL-NEXT: ;;#ASMEND80; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]81;82; GFX9-LABEL: undef_lo_v2f16:83; GFX9: ; %bb.0:84; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v086; GFX9-NEXT: ;;#ASMSTART87; GFX9-NEXT: ; use v088; GFX9-NEXT: ;;#ASMEND89; GFX9-NEXT: s_setpc_b64 s[30:31]90;91; GFX11-FAKE16-LABEL: undef_lo_v2f16:92; GFX11-FAKE16: ; %bb.0:93; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)94; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v095; GFX11-FAKE16-NEXT: ;;#ASMSTART96; GFX11-FAKE16-NEXT: ; use v097; GFX11-FAKE16-NEXT: ;;#ASMEND98; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]99;100; GFX11-TRUE16-LABEL: undef_lo_v2f16:101; GFX11-TRUE16: ; %bb.0:102; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l104; GFX11-TRUE16-NEXT: ;;#ASMSTART105; GFX11-TRUE16-NEXT: ; use v0106; GFX11-TRUE16-NEXT: ;;#ASMEND107; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]108 %undef.lo = insertelement <2 x half> poison, half %arg0, i32 1109 call void asm sideeffect "; use $0", "v"(<2 x half> %undef.lo);110 ret void111}112 113define void @undef_lo_op_v2f16(half %arg0) {114; GFX8-SDAG-LABEL: undef_lo_op_v2f16:115; GFX8-SDAG: ; %bb.0:116; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX8-SDAG-NEXT: v_mov_b32_e32 v1, 0x3c00118; GFX8-SDAG-NEXT: v_add_f16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD119; GFX8-SDAG-NEXT: v_or_b32_e32 v0, 0x7e00, v0120; GFX8-SDAG-NEXT: ;;#ASMSTART121; GFX8-SDAG-NEXT: ; use v0122; GFX8-SDAG-NEXT: ;;#ASMEND123; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]124;125; GFX8-GISEL-LABEL: undef_lo_op_v2f16:126; GFX8-GISEL: ; %bb.0:127; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0x3c00129; GFX8-GISEL-NEXT: v_add_f16_e64 v1, s4, 1.0130; GFX8-GISEL-NEXT: v_add_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD131; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v1, v0132; GFX8-GISEL-NEXT: ;;#ASMSTART133; GFX8-GISEL-NEXT: ; use v0134; GFX8-GISEL-NEXT: ;;#ASMEND135; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]136;137; GFX9-LABEL: undef_lo_op_v2f16:138; GFX9: ; %bb.0:139; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)140; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v0141; GFX9-NEXT: v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]142; GFX9-NEXT: ;;#ASMSTART143; GFX9-NEXT: ; use v0144; GFX9-NEXT: ;;#ASMEND145; GFX9-NEXT: s_setpc_b64 s[30:31]146;147; GFX11-FAKE16-LABEL: undef_lo_op_v2f16:148; GFX11-FAKE16: ; %bb.0:149; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)150; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0151; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)152; GFX11-FAKE16-NEXT: v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]153; GFX11-FAKE16-NEXT: ;;#ASMSTART154; GFX11-FAKE16-NEXT: ; use v0155; GFX11-FAKE16-NEXT: ;;#ASMEND156; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]157;158; GFX11-TRUE16-LABEL: undef_lo_op_v2f16:159; GFX11-TRUE16: ; %bb.0:160; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)161; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l162; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)163; GFX11-TRUE16-NEXT: v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]164; GFX11-TRUE16-NEXT: ;;#ASMSTART165; GFX11-TRUE16-NEXT: ; use v0166; GFX11-TRUE16-NEXT: ;;#ASMEND167; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]168 %undef.lo = insertelement <2 x half> poison, half %arg0, i32 1169 %op = fadd <2 x half> %undef.lo, <half 1.0, half 1.0>170 call void asm sideeffect "; use $0", "v"(<2 x half> %op);171 ret void172}173 174define void @undef_lo_op_v2i16(i16 %arg0) {175; GFX8-SDAG-LABEL: undef_lo_op_v2i16:176; GFX8-SDAG: ; %bb.0:177; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)178; GFX8-SDAG-NEXT: v_mov_b32_e32 v1, 0x63179; GFX8-SDAG-NEXT: v_add_u16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD180; GFX8-SDAG-NEXT: ;;#ASMSTART181; GFX8-SDAG-NEXT: ; use v0182; GFX8-SDAG-NEXT: ;;#ASMEND183; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]184;185; GFX8-GISEL-LABEL: undef_lo_op_v2i16:186; GFX8-GISEL: ; %bb.0:187; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)188; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0x63189; GFX8-GISEL-NEXT: s_and_b32 s4, 0xffff, s4190; GFX8-GISEL-NEXT: v_add_u16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD191; GFX8-GISEL-NEXT: v_or_b32_e32 v0, s4, v0192; GFX8-GISEL-NEXT: ;;#ASMSTART193; GFX8-GISEL-NEXT: ; use v0194; GFX8-GISEL-NEXT: ;;#ASMEND195; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]196;197; GFX9-SDAG-LABEL: undef_lo_op_v2i16:198; GFX9-SDAG: ; %bb.0:199; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)200; GFX9-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v0201; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x63202; GFX9-SDAG-NEXT: v_pk_add_u16 v0, v0, s4 op_sel_hi:[1,0]203; GFX9-SDAG-NEXT: ;;#ASMSTART204; GFX9-SDAG-NEXT: ; use v0205; GFX9-SDAG-NEXT: ;;#ASMEND206; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]207;208; GFX9-GISEL-LABEL: undef_lo_op_v2i16:209; GFX9-GISEL: ; %bb.0:210; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX9-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v0212; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x630063213; GFX9-GISEL-NEXT: v_pk_add_u16 v0, v0, v1214; GFX9-GISEL-NEXT: ;;#ASMSTART215; GFX9-GISEL-NEXT: ; use v0216; GFX9-GISEL-NEXT: ;;#ASMEND217; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]218;219; GFX11-FAKE16-SDAG-LABEL: undef_lo_op_v2i16:220; GFX11-FAKE16-SDAG: ; %bb.0:221; GFX11-FAKE16-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)222; GFX11-FAKE16-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v0223; GFX11-FAKE16-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)224; GFX11-FAKE16-SDAG-NEXT: v_pk_add_u16 v0, 0x63, v0 op_sel_hi:[0,1]225; GFX11-FAKE16-SDAG-NEXT: ;;#ASMSTART226; GFX11-FAKE16-SDAG-NEXT: ; use v0227; GFX11-FAKE16-SDAG-NEXT: ;;#ASMEND228; GFX11-FAKE16-SDAG-NEXT: s_setpc_b64 s[30:31]229;230; GFX11-FAKE16-GISEL-LABEL: undef_lo_op_v2i16:231; GFX11-FAKE16-GISEL: ; %bb.0:232; GFX11-FAKE16-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)233; GFX11-FAKE16-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v0234; GFX11-FAKE16-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)235; GFX11-FAKE16-GISEL-NEXT: v_pk_add_u16 v0, 0x630063, v0236; GFX11-FAKE16-GISEL-NEXT: ;;#ASMSTART237; GFX11-FAKE16-GISEL-NEXT: ; use v0238; GFX11-FAKE16-GISEL-NEXT: ;;#ASMEND239; GFX11-FAKE16-GISEL-NEXT: s_setpc_b64 s[30:31]240;241; GFX11-TRUE16-SDAG-LABEL: undef_lo_op_v2i16:242; GFX11-TRUE16-SDAG: ; %bb.0:243; GFX11-TRUE16-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)244; GFX11-TRUE16-SDAG-NEXT: v_mov_b16_e32 v0.h, v0.l245; GFX11-TRUE16-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)246; GFX11-TRUE16-SDAG-NEXT: v_pk_add_u16 v0, 0x63, v0 op_sel_hi:[0,1]247; GFX11-TRUE16-SDAG-NEXT: ;;#ASMSTART248; GFX11-TRUE16-SDAG-NEXT: ; use v0249; GFX11-TRUE16-SDAG-NEXT: ;;#ASMEND250; GFX11-TRUE16-SDAG-NEXT: s_setpc_b64 s[30:31]251;252; GFX11-TRUE16-GISEL-LABEL: undef_lo_op_v2i16:253; GFX11-TRUE16-GISEL: ; %bb.0:254; GFX11-TRUE16-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)255; GFX11-TRUE16-GISEL-NEXT: v_mov_b16_e32 v0.h, v0.l256; GFX11-TRUE16-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)257; GFX11-TRUE16-GISEL-NEXT: v_pk_add_u16 v0, 0x630063, v0258; GFX11-TRUE16-GISEL-NEXT: ;;#ASMSTART259; GFX11-TRUE16-GISEL-NEXT: ; use v0260; GFX11-TRUE16-GISEL-NEXT: ;;#ASMEND261; GFX11-TRUE16-GISEL-NEXT: s_setpc_b64 s[30:31]262 %undef.lo = insertelement <2 x i16> poison, i16 %arg0, i32 1263 %op = add <2 x i16> %undef.lo, <i16 99, i16 99>264 call void asm sideeffect "; use $0", "v"(<2 x i16> %op);265 ret void266}267 268define void @undef_lo3_v4i16(i16 %arg0) {269; GFX8-SDAG-LABEL: undef_lo3_v4i16:270; GFX8-SDAG: ; %bb.0:271; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX8-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v0273; GFX8-SDAG-NEXT: ;;#ASMSTART274; GFX8-SDAG-NEXT: ; use v[0:1]275; GFX8-SDAG-NEXT: ;;#ASMEND276; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]277;278; GFX8-GISEL-LABEL: undef_lo3_v4i16:279; GFX8-GISEL: ; %bb.0:280; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)281; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0282; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v0283; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0284; GFX8-GISEL-NEXT: ;;#ASMSTART285; GFX8-GISEL-NEXT: ; use v[0:1]286; GFX8-GISEL-NEXT: ;;#ASMEND287; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]288;289; GFX9-LABEL: undef_lo3_v4i16:290; GFX9: ; %bb.0:291; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)292; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v0293; GFX9-NEXT: ;;#ASMSTART294; GFX9-NEXT: ; use v[0:1]295; GFX9-NEXT: ;;#ASMEND296; GFX9-NEXT: s_setpc_b64 s[30:31]297;298; GFX11-FAKE16-LABEL: undef_lo3_v4i16:299; GFX11-FAKE16: ; %bb.0:300; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)301; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0302; GFX11-FAKE16-NEXT: ;;#ASMSTART303; GFX11-FAKE16-NEXT: ; use v[0:1]304; GFX11-FAKE16-NEXT: ;;#ASMEND305; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]306;307; GFX11-TRUE16-LABEL: undef_lo3_v4i16:308; GFX11-TRUE16: ; %bb.0:309; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)310; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l311; GFX11-TRUE16-NEXT: ;;#ASMSTART312; GFX11-TRUE16-NEXT: ; use v[0:1]313; GFX11-TRUE16-NEXT: ;;#ASMEND314; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]315 %undef.lo = insertelement <4 x i16> poison, i16 %arg0, i32 1316 call void asm sideeffect "; use $0", "v"(<4 x i16> %undef.lo);317 ret void318}319 320define void @undef_lo3_v4f16(half %arg0) {321; GFX8-SDAG-LABEL: undef_lo3_v4f16:322; GFX8-SDAG: ; %bb.0:323; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)324; GFX8-SDAG-NEXT: v_lshlrev_b32_e32 v0, 16, v0325; GFX8-SDAG-NEXT: ;;#ASMSTART326; GFX8-SDAG-NEXT: ; use v[0:1]327; GFX8-SDAG-NEXT: ;;#ASMEND328; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]329;330; GFX8-GISEL-LABEL: undef_lo3_v4f16:331; GFX8-GISEL: ; %bb.0:332; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)333; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0334; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 16, v0335; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0336; GFX8-GISEL-NEXT: ;;#ASMSTART337; GFX8-GISEL-NEXT: ; use v[0:1]338; GFX8-GISEL-NEXT: ;;#ASMEND339; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]340;341; GFX9-LABEL: undef_lo3_v4f16:342; GFX9: ; %bb.0:343; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v0345; GFX9-NEXT: ;;#ASMSTART346; GFX9-NEXT: ; use v[0:1]347; GFX9-NEXT: ;;#ASMEND348; GFX9-NEXT: s_setpc_b64 s[30:31]349;350; GFX11-FAKE16-LABEL: undef_lo3_v4f16:351; GFX11-FAKE16: ; %bb.0:352; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)353; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v0354; GFX11-FAKE16-NEXT: ;;#ASMSTART355; GFX11-FAKE16-NEXT: ; use v[0:1]356; GFX11-FAKE16-NEXT: ;;#ASMEND357; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]358;359; GFX11-TRUE16-LABEL: undef_lo3_v4f16:360; GFX11-TRUE16: ; %bb.0:361; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)362; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l363; GFX11-TRUE16-NEXT: ;;#ASMSTART364; GFX11-TRUE16-NEXT: ; use v[0:1]365; GFX11-TRUE16-NEXT: ;;#ASMEND366; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]367 %undef.lo = insertelement <4 x half> poison, half %arg0, i32 1368 call void asm sideeffect "; use $0", "v"(<4 x half> %undef.lo);369 ret void370}371 372define void @undef_lo2_v4i16(<2 x i16> %arg0) {373; GFX8-SDAG-LABEL: undef_lo2_v4i16:374; GFX8-SDAG: ; %bb.0:375; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GFX8-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0377; GFX8-SDAG-NEXT: v_alignbit_b32 v0, v1, v0, 16378; GFX8-SDAG-NEXT: ;;#ASMSTART379; GFX8-SDAG-NEXT: ; use v[0:1]380; GFX8-SDAG-NEXT: ;;#ASMEND381; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]382;383; GFX8-GISEL-LABEL: undef_lo2_v4i16:384; GFX8-GISEL: ; %bb.0:385; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)386; GFX8-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0387; GFX8-GISEL-NEXT: v_alignbit_b32 v0, v1, v0, 16388; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0389; GFX8-GISEL-NEXT: ;;#ASMSTART390; GFX8-GISEL-NEXT: ; use v[0:1]391; GFX8-GISEL-NEXT: ;;#ASMEND392; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]393;394; GFX9-LABEL: undef_lo2_v4i16:395; GFX9: ; %bb.0:396; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX9-NEXT: s_mov_b32 s4, 0x7060302398; GFX9-NEXT: v_perm_b32 v0, v0, v0, s4399; GFX9-NEXT: ;;#ASMSTART400; GFX9-NEXT: ; use v[0:1]401; GFX9-NEXT: ;;#ASMEND402; GFX9-NEXT: s_setpc_b64 s[30:31]403;404; GFX11-FAKE16-LABEL: undef_lo2_v4i16:405; GFX11-FAKE16: ; %bb.0:406; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)407; GFX11-FAKE16-NEXT: v_perm_b32 v0, v0, v0, 0x7060302408; GFX11-FAKE16-NEXT: ;;#ASMSTART409; GFX11-FAKE16-NEXT: ; use v[0:1]410; GFX11-FAKE16-NEXT: ;;#ASMEND411; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]412;413; GFX11-TRUE16-LABEL: undef_lo2_v4i16:414; GFX11-TRUE16: ; %bb.0:415; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)416; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h417; GFX11-TRUE16-NEXT: ;;#ASMSTART418; GFX11-TRUE16-NEXT: ; use v[0:1]419; GFX11-TRUE16-NEXT: ;;#ASMEND420; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]421 %undef.lo = shufflevector <2 x i16> %arg0, <2 x i16> poison, <4 x i32> <i32 1, i32 1, i32 2, i32 3>422 call void asm sideeffect "; use $0", "v"(<4 x i16> %undef.lo);423 ret void424}425 426define void @undef_lo2_v4f16(<2 x half> %arg0) {427; GFX8-SDAG-LABEL: undef_lo2_v4f16:428; GFX8-SDAG: ; %bb.0:429; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)430; GFX8-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0431; GFX8-SDAG-NEXT: v_alignbit_b32 v0, v1, v0, 16432; GFX8-SDAG-NEXT: ;;#ASMSTART433; GFX8-SDAG-NEXT: ; use v[0:1]434; GFX8-SDAG-NEXT: ;;#ASMEND435; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]436;437; GFX8-GISEL-LABEL: undef_lo2_v4f16:438; GFX8-GISEL: ; %bb.0:439; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)440; GFX8-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0441; GFX8-GISEL-NEXT: v_alignbit_b32 v0, v1, v0, 16442; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0443; GFX8-GISEL-NEXT: ;;#ASMSTART444; GFX8-GISEL-NEXT: ; use v[0:1]445; GFX8-GISEL-NEXT: ;;#ASMEND446; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]447;448; GFX9-LABEL: undef_lo2_v4f16:449; GFX9: ; %bb.0:450; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)451; GFX9-NEXT: s_mov_b32 s4, 0x7060302452; GFX9-NEXT: v_perm_b32 v0, v0, v0, s4453; GFX9-NEXT: ;;#ASMSTART454; GFX9-NEXT: ; use v[0:1]455; GFX9-NEXT: ;;#ASMEND456; GFX9-NEXT: s_setpc_b64 s[30:31]457;458; GFX11-FAKE16-LABEL: undef_lo2_v4f16:459; GFX11-FAKE16: ; %bb.0:460; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; GFX11-FAKE16-NEXT: v_perm_b32 v0, v0, v0, 0x7060302462; GFX11-FAKE16-NEXT: ;;#ASMSTART463; GFX11-FAKE16-NEXT: ; use v[0:1]464; GFX11-FAKE16-NEXT: ;;#ASMEND465; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]466;467; GFX11-TRUE16-LABEL: undef_lo2_v4f16:468; GFX11-TRUE16: ; %bb.0:469; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)470; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h471; GFX11-TRUE16-NEXT: ;;#ASMSTART472; GFX11-TRUE16-NEXT: ; use v[0:1]473; GFX11-TRUE16-NEXT: ;;#ASMEND474; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]475 %undef.lo = shufflevector <2 x half> %arg0, <2 x half> poison, <4 x i32> <i32 1, i32 1, i32 2, i32 3>476 call void asm sideeffect "; use $0", "v"(<4 x half> %undef.lo);477 ret void478}479 480define void @undef_hi_v2i16(i16 %arg0) {481; GFX8-SDAG-LABEL: undef_hi_v2i16:482; GFX8-SDAG: ; %bb.0:483; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX8-SDAG-NEXT: ;;#ASMSTART485; GFX8-SDAG-NEXT: ; use v0486; GFX8-SDAG-NEXT: ;;#ASMEND487; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]488;489; GFX8-GISEL-LABEL: undef_hi_v2i16:490; GFX8-GISEL: ; %bb.0:491; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)492; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0493; GFX8-GISEL-NEXT: ;;#ASMSTART494; GFX8-GISEL-NEXT: ; use v0495; GFX8-GISEL-NEXT: ;;#ASMEND496; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]497;498; GFX9-LABEL: undef_hi_v2i16:499; GFX9: ; %bb.0:500; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)501; GFX9-NEXT: ;;#ASMSTART502; GFX9-NEXT: ; use v0503; GFX9-NEXT: ;;#ASMEND504; GFX9-NEXT: s_setpc_b64 s[30:31]505;506; GFX11-LABEL: undef_hi_v2i16:507; GFX11: ; %bb.0:508; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)509; GFX11-NEXT: ;;#ASMSTART510; GFX11-NEXT: ; use v0511; GFX11-NEXT: ;;#ASMEND512; GFX11-NEXT: s_setpc_b64 s[30:31]513 %undef.hi = insertelement <2 x i16> poison, i16 %arg0, i32 0514 call void asm sideeffect "; use $0", "v"(<2 x i16> %undef.hi);515 ret void516}517 518define void @undef_hi_v2f16(half %arg0) {519; GFX8-SDAG-LABEL: undef_hi_v2f16:520; GFX8-SDAG: ; %bb.0:521; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)522; GFX8-SDAG-NEXT: ;;#ASMSTART523; GFX8-SDAG-NEXT: ; use v0524; GFX8-SDAG-NEXT: ;;#ASMEND525; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]526;527; GFX8-GISEL-LABEL: undef_hi_v2f16:528; GFX8-GISEL: ; %bb.0:529; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)530; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0531; GFX8-GISEL-NEXT: ;;#ASMSTART532; GFX8-GISEL-NEXT: ; use v0533; GFX8-GISEL-NEXT: ;;#ASMEND534; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]535;536; GFX9-LABEL: undef_hi_v2f16:537; GFX9: ; %bb.0:538; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)539; GFX9-NEXT: ;;#ASMSTART540; GFX9-NEXT: ; use v0541; GFX9-NEXT: ;;#ASMEND542; GFX9-NEXT: s_setpc_b64 s[30:31]543;544; GFX11-LABEL: undef_hi_v2f16:545; GFX11: ; %bb.0:546; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX11-NEXT: ;;#ASMSTART548; GFX11-NEXT: ; use v0549; GFX11-NEXT: ;;#ASMEND550; GFX11-NEXT: s_setpc_b64 s[30:31]551 %undef.hi = insertelement <2 x half> poison, half %arg0, i32 0552 call void asm sideeffect "; use $0", "v"(<2 x half> %undef.hi);553 ret void554}555 556define void @undef_hi_op_v2f16(half %arg0) {557; GFX8-SDAG-LABEL: undef_hi_op_v2f16:558; GFX8-SDAG: ; %bb.0:559; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)560; GFX8-SDAG-NEXT: v_add_f16_e32 v0, 1.0, v0561; GFX8-SDAG-NEXT: v_or_b32_e32 v0, 0x7e000000, v0562; GFX8-SDAG-NEXT: ;;#ASMSTART563; GFX8-SDAG-NEXT: ; use v0564; GFX8-SDAG-NEXT: ;;#ASMEND565; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]566;567; GFX8-GISEL-LABEL: undef_hi_op_v2f16:568; GFX8-GISEL: ; %bb.0:569; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)570; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, s4571; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0x3c00572; GFX8-GISEL-NEXT: v_add_f16_e32 v0, 1.0, v0573; GFX8-GISEL-NEXT: v_add_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD574; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v0, v1575; GFX8-GISEL-NEXT: ;;#ASMSTART576; GFX8-GISEL-NEXT: ; use v0577; GFX8-GISEL-NEXT: ;;#ASMEND578; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]579;580; GFX9-LABEL: undef_hi_op_v2f16:581; GFX9: ; %bb.0:582; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX9-NEXT: v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]584; GFX9-NEXT: ;;#ASMSTART585; GFX9-NEXT: ; use v0586; GFX9-NEXT: ;;#ASMEND587; GFX9-NEXT: s_setpc_b64 s[30:31]588;589; GFX11-LABEL: undef_hi_op_v2f16:590; GFX11: ; %bb.0:591; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)592; GFX11-NEXT: v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]593; GFX11-NEXT: ;;#ASMSTART594; GFX11-NEXT: ; use v0595; GFX11-NEXT: ;;#ASMEND596; GFX11-NEXT: s_setpc_b64 s[30:31]597 %undef.hi = insertelement <2 x half> poison, half %arg0, i32 0598 %op = fadd <2 x half> %undef.hi, <half 1.0, half 1.0>599 call void asm sideeffect "; use $0", "v"(<2 x half> %op);600 ret void601}602 603define void @undef_hi_op_v2i16(i16 %arg0) {604; GFX8-SDAG-LABEL: undef_hi_op_v2i16:605; GFX8-SDAG: ; %bb.0:606; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)607; GFX8-SDAG-NEXT: v_add_u16_e32 v0, 0x63, v0608; GFX8-SDAG-NEXT: ;;#ASMSTART609; GFX8-SDAG-NEXT: ; use v0610; GFX8-SDAG-NEXT: ;;#ASMEND611; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]612;613; GFX8-GISEL-LABEL: undef_hi_op_v2i16:614; GFX8-GISEL: ; %bb.0:615; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)616; GFX8-GISEL-NEXT: s_and_b32 s4, 0xffff, s4617; GFX8-GISEL-NEXT: v_add_u16_e32 v0, 0x63, v0618; GFX8-GISEL-NEXT: s_lshl_b32 s4, s4, 16619; GFX8-GISEL-NEXT: v_or_b32_e32 v0, s4, v0620; GFX8-GISEL-NEXT: ;;#ASMSTART621; GFX8-GISEL-NEXT: ; use v0622; GFX8-GISEL-NEXT: ;;#ASMEND623; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]624;625; GFX9-SDAG-LABEL: undef_hi_op_v2i16:626; GFX9-SDAG: ; %bb.0:627; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x63629; GFX9-SDAG-NEXT: v_pk_add_u16 v0, v0, s4 op_sel_hi:[1,0]630; GFX9-SDAG-NEXT: ;;#ASMSTART631; GFX9-SDAG-NEXT: ; use v0632; GFX9-SDAG-NEXT: ;;#ASMEND633; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]634;635; GFX9-GISEL-LABEL: undef_hi_op_v2i16:636; GFX9-GISEL: ; %bb.0:637; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)638; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x630063639; GFX9-GISEL-NEXT: v_pk_add_u16 v0, v0, v1640; GFX9-GISEL-NEXT: ;;#ASMSTART641; GFX9-GISEL-NEXT: ; use v0642; GFX9-GISEL-NEXT: ;;#ASMEND643; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]644;645; GFX11-FAKE16-SDAG-LABEL: undef_hi_op_v2i16:646; GFX11-FAKE16-SDAG: ; %bb.0:647; GFX11-FAKE16-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)648; GFX11-FAKE16-SDAG-NEXT: v_pk_add_u16 v0, 0x63, v0 op_sel_hi:[0,1]649; GFX11-FAKE16-SDAG-NEXT: ;;#ASMSTART650; GFX11-FAKE16-SDAG-NEXT: ; use v0651; GFX11-FAKE16-SDAG-NEXT: ;;#ASMEND652; GFX11-FAKE16-SDAG-NEXT: s_setpc_b64 s[30:31]653;654; GFX11-FAKE16-GISEL-LABEL: undef_hi_op_v2i16:655; GFX11-FAKE16-GISEL: ; %bb.0:656; GFX11-FAKE16-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)657; GFX11-FAKE16-GISEL-NEXT: v_pk_add_u16 v0, 0x630063, v0658; GFX11-FAKE16-GISEL-NEXT: ;;#ASMSTART659; GFX11-FAKE16-GISEL-NEXT: ; use v0660; GFX11-FAKE16-GISEL-NEXT: ;;#ASMEND661; GFX11-FAKE16-GISEL-NEXT: s_setpc_b64 s[30:31]662;663; GFX11-TRUE16-SDAG-LABEL: undef_hi_op_v2i16:664; GFX11-TRUE16-SDAG: ; %bb.0:665; GFX11-TRUE16-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)666; GFX11-TRUE16-SDAG-NEXT: v_pk_add_u16 v0, 0x63, v0 op_sel_hi:[0,1]667; GFX11-TRUE16-SDAG-NEXT: ;;#ASMSTART668; GFX11-TRUE16-SDAG-NEXT: ; use v0669; GFX11-TRUE16-SDAG-NEXT: ;;#ASMEND670; GFX11-TRUE16-SDAG-NEXT: s_setpc_b64 s[30:31]671;672; GFX11-TRUE16-GISEL-LABEL: undef_hi_op_v2i16:673; GFX11-TRUE16-GISEL: ; %bb.0:674; GFX11-TRUE16-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)675; GFX11-TRUE16-GISEL-NEXT: v_pk_add_u16 v0, 0x630063, v0676; GFX11-TRUE16-GISEL-NEXT: ;;#ASMSTART677; GFX11-TRUE16-GISEL-NEXT: ; use v0678; GFX11-TRUE16-GISEL-NEXT: ;;#ASMEND679; GFX11-TRUE16-GISEL-NEXT: s_setpc_b64 s[30:31]680 %undef.hi = insertelement <2 x i16> poison, i16 %arg0, i32 0681 %op = add <2 x i16> %undef.hi, <i16 99, i16 99>682 call void asm sideeffect "; use $0", "v"(<2 x i16> %op);683 ret void684}685 686define void @undef_hi3_v4i16(i16 %arg0) {687; GFX8-SDAG-LABEL: undef_hi3_v4i16:688; GFX8-SDAG: ; %bb.0:689; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)690; GFX8-SDAG-NEXT: ;;#ASMSTART691; GFX8-SDAG-NEXT: ; use v[0:1]692; GFX8-SDAG-NEXT: ;;#ASMEND693; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]694;695; GFX8-GISEL-LABEL: undef_hi3_v4i16:696; GFX8-GISEL: ; %bb.0:697; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)698; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0699; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0700; GFX8-GISEL-NEXT: ;;#ASMSTART701; GFX8-GISEL-NEXT: ; use v[0:1]702; GFX8-GISEL-NEXT: ;;#ASMEND703; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]704;705; GFX9-LABEL: undef_hi3_v4i16:706; GFX9: ; %bb.0:707; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)708; GFX9-NEXT: ;;#ASMSTART709; GFX9-NEXT: ; use v[0:1]710; GFX9-NEXT: ;;#ASMEND711; GFX9-NEXT: s_setpc_b64 s[30:31]712;713; GFX11-LABEL: undef_hi3_v4i16:714; GFX11: ; %bb.0:715; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)716; GFX11-NEXT: ;;#ASMSTART717; GFX11-NEXT: ; use v[0:1]718; GFX11-NEXT: ;;#ASMEND719; GFX11-NEXT: s_setpc_b64 s[30:31]720 %undef.hi = insertelement <4 x i16> poison, i16 %arg0, i32 0721 call void asm sideeffect "; use $0", "v"(<4 x i16> %undef.hi);722 ret void723}724 725define void @undef_hi3_v4f16(half %arg0) {726; GFX8-SDAG-LABEL: undef_hi3_v4f16:727; GFX8-SDAG: ; %bb.0:728; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)729; GFX8-SDAG-NEXT: ;;#ASMSTART730; GFX8-SDAG-NEXT: ; use v[0:1]731; GFX8-SDAG-NEXT: ;;#ASMEND732; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]733;734; GFX8-GISEL-LABEL: undef_hi3_v4f16:735; GFX8-GISEL: ; %bb.0:736; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)737; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0738; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0739; GFX8-GISEL-NEXT: ;;#ASMSTART740; GFX8-GISEL-NEXT: ; use v[0:1]741; GFX8-GISEL-NEXT: ;;#ASMEND742; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]743;744; GFX9-LABEL: undef_hi3_v4f16:745; GFX9: ; %bb.0:746; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)747; GFX9-NEXT: ;;#ASMSTART748; GFX9-NEXT: ; use v[0:1]749; GFX9-NEXT: ;;#ASMEND750; GFX9-NEXT: s_setpc_b64 s[30:31]751;752; GFX11-LABEL: undef_hi3_v4f16:753; GFX11: ; %bb.0:754; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)755; GFX11-NEXT: ;;#ASMSTART756; GFX11-NEXT: ; use v[0:1]757; GFX11-NEXT: ;;#ASMEND758; GFX11-NEXT: s_setpc_b64 s[30:31]759 %undef.hi = insertelement <4 x half> poison, half %arg0, i32 0760 call void asm sideeffect "; use $0", "v"(<4 x half> %undef.hi);761 ret void762}763 764define void @undef_hi2_v4i16(<2 x i16> %arg0) {765; GFX8-LABEL: undef_hi2_v4i16:766; GFX8: ; %bb.0:767; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)768; GFX8-NEXT: ;;#ASMSTART769; GFX8-NEXT: ; use v[0:1]770; GFX8-NEXT: ;;#ASMEND771; GFX8-NEXT: s_setpc_b64 s[30:31]772;773; GFX9-LABEL: undef_hi2_v4i16:774; GFX9: ; %bb.0:775; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)776; GFX9-NEXT: ;;#ASMSTART777; GFX9-NEXT: ; use v[0:1]778; GFX9-NEXT: ;;#ASMEND779; GFX9-NEXT: s_setpc_b64 s[30:31]780;781; GFX11-LABEL: undef_hi2_v4i16:782; GFX11: ; %bb.0:783; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)784; GFX11-NEXT: ;;#ASMSTART785; GFX11-NEXT: ; use v[0:1]786; GFX11-NEXT: ;;#ASMEND787; GFX11-NEXT: s_setpc_b64 s[30:31]788 %undef.hi = shufflevector <2 x i16> %arg0, <2 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>789 call void asm sideeffect "; use $0", "v"(<4 x i16> %undef.hi);790 ret void791}792 793define void @undef_hi2_v4f16(<2 x half> %arg0) {794; GFX8-LABEL: undef_hi2_v4f16:795; GFX8: ; %bb.0:796; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)797; GFX8-NEXT: ;;#ASMSTART798; GFX8-NEXT: ; use v[0:1]799; GFX8-NEXT: ;;#ASMEND800; GFX8-NEXT: s_setpc_b64 s[30:31]801;802; GFX9-LABEL: undef_hi2_v4f16:803; GFX9: ; %bb.0:804; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)805; GFX9-NEXT: ;;#ASMSTART806; GFX9-NEXT: ; use v[0:1]807; GFX9-NEXT: ;;#ASMEND808; GFX9-NEXT: s_setpc_b64 s[30:31]809;810; GFX11-LABEL: undef_hi2_v4f16:811; GFX11: ; %bb.0:812; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)813; GFX11-NEXT: ;;#ASMSTART814; GFX11-NEXT: ; use v[0:1]815; GFX11-NEXT: ;;#ASMEND816; GFX11-NEXT: s_setpc_b64 s[30:31]817 %undef.hi = shufflevector <2 x half> %arg0, <2 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>818 call void asm sideeffect "; use $0", "v"(<4 x half> %undef.hi);819 ret void820}821