893 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=fiji < %s | FileCheck -check-prefix=GFX8 %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s4 5define void @add_v3i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {6; GFX8-LABEL: add_v3i16:7; GFX8: ; %bb.0:8; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; GFX8-NEXT: v_add_u32_e32 v6, vcc, 2, v010; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc11; GFX8-NEXT: flat_load_ushort v8, v[0:1]12; GFX8-NEXT: v_add_u32_e32 v0, vcc, 4, v013; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc14; GFX8-NEXT: flat_load_ushort v9, v[6:7]15; GFX8-NEXT: flat_load_ushort v10, v[0:1]16; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v217; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc18; GFX8-NEXT: v_add_u32_e32 v6, vcc, 4, v219; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v3, vcc20; GFX8-NEXT: flat_load_ushort v11, v[2:3]21; GFX8-NEXT: flat_load_ushort v12, v[0:1]22; GFX8-NEXT: flat_load_ushort v6, v[6:7]23; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v424; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc25; GFX8-NEXT: v_add_u32_e32 v2, vcc, 4, v426; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v5, vcc27; GFX8-NEXT: s_waitcnt vmcnt(2)28; GFX8-NEXT: v_add_u16_e32 v7, v8, v1129; GFX8-NEXT: s_waitcnt vmcnt(1)30; GFX8-NEXT: v_add_u16_e32 v8, v9, v1231; GFX8-NEXT: s_waitcnt vmcnt(0)32; GFX8-NEXT: v_add_u16_e32 v6, v10, v633; GFX8-NEXT: flat_store_short v[4:5], v734; GFX8-NEXT: flat_store_short v[0:1], v835; GFX8-NEXT: flat_store_short v[2:3], v636; GFX8-NEXT: s_waitcnt vmcnt(0)37; GFX8-NEXT: s_setpc_b64 s[30:31]38;39; GFX9-LABEL: add_v3i16:40; GFX9: ; %bb.0:41; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)42; GFX9-NEXT: global_load_ushort v6, v[0:1], off43; GFX9-NEXT: global_load_ushort v7, v[2:3], off44; GFX9-NEXT: global_load_ushort v8, v[2:3], off offset:445; GFX9-NEXT: global_load_ushort v9, v[0:1], off offset:446; GFX9-NEXT: global_load_ushort v10, v[0:1], off offset:247; GFX9-NEXT: global_load_ushort v11, v[2:3], off offset:248; GFX9-NEXT: s_waitcnt vmcnt(5)49; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v650; GFX9-NEXT: s_waitcnt vmcnt(4)51; GFX9-NEXT: v_and_b32_e32 v1, 0xffff, v752; GFX9-NEXT: s_waitcnt vmcnt(2)53; GFX9-NEXT: v_pk_add_u16 v2, v9, v854; GFX9-NEXT: s_waitcnt vmcnt(1)55; GFX9-NEXT: v_lshl_or_b32 v0, v10, 16, v056; GFX9-NEXT: s_waitcnt vmcnt(0)57; GFX9-NEXT: v_lshl_or_b32 v1, v11, 16, v158; GFX9-NEXT: v_pk_add_u16 v0, v0, v159; GFX9-NEXT: global_store_short v[4:5], v0, off60; GFX9-NEXT: global_store_short_d16_hi v[4:5], v0, off offset:261; GFX9-NEXT: global_store_short v[4:5], v2, off offset:462; GFX9-NEXT: s_waitcnt vmcnt(0)63; GFX9-NEXT: s_setpc_b64 s[30:31]64 %a = load <3 x i16>, ptr addrspace(1) %ptra, align 465 %b = load <3 x i16>, ptr addrspace(1) %ptrb, align 466 %add = add <3 x i16> %a, %b67 store <3 x i16> %add, ptr addrspace(1) %ptr2, align 468 ret void69}70 71define <3 x i16> @add_v3i16_arg(<3 x i16> %a, <3 x i16> %b) {72; GFX8-LABEL: add_v3i16_arg:73; GFX8: ; %bb.0:74; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX8-NEXT: v_add_u16_e32 v4, v0, v276; GFX8-NEXT: v_add_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_177; GFX8-NEXT: v_or_b32_e32 v0, v4, v078; GFX8-NEXT: v_add_u16_e32 v1, v1, v379; GFX8-NEXT: s_setpc_b64 s[30:31]80;81; GFX9-LABEL: add_v3i16_arg:82; GFX9: ; %bb.0:83; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX9-NEXT: v_pk_add_u16 v0, v0, v285; GFX9-NEXT: v_pk_add_u16 v1, v1, v386; GFX9-NEXT: s_setpc_b64 s[30:31]87 %add = add <3 x i16> %a, %b88 ret <3 x i16> %add89}90 91define void @add_v4i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {92; GFX8-LABEL: add_v4i16:93; GFX8: ; %bb.0:94; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1]96; GFX8-NEXT: flat_load_dwordx2 v[2:3], v[2:3]97; GFX8-NEXT: s_waitcnt vmcnt(0)98; GFX8-NEXT: v_add_u16_e32 v6, v0, v299; GFX8-NEXT: v_add_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1100; GFX8-NEXT: v_add_u16_e32 v2, v1, v3101; GFX8-NEXT: v_add_u16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1102; GFX8-NEXT: v_or_b32_e32 v0, v6, v0103; GFX8-NEXT: v_or_b32_e32 v1, v2, v1104; GFX8-NEXT: flat_store_dwordx2 v[4:5], v[0:1]105; GFX8-NEXT: s_waitcnt vmcnt(0)106; GFX8-NEXT: s_setpc_b64 s[30:31]107;108; GFX9-LABEL: add_v4i16:109; GFX9: ; %bb.0:110; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)111; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off112; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off113; GFX9-NEXT: s_waitcnt vmcnt(0)114; GFX9-NEXT: v_pk_add_u16 v0, v6, v8115; GFX9-NEXT: v_pk_add_u16 v1, v7, v9116; GFX9-NEXT: global_store_dwordx2 v[4:5], v[0:1], off117; GFX9-NEXT: s_waitcnt vmcnt(0)118; GFX9-NEXT: s_setpc_b64 s[30:31]119 %a = load <4 x i16>, ptr addrspace(1) %ptra, align 4120 %b = load <4 x i16>, ptr addrspace(1) %ptrb, align 4121 %add = add <4 x i16> %a, %b122 store <4 x i16> %add, ptr addrspace(1) %ptr2, align 4123 ret void124}125 126define <4 x i16> @add_v4i16_arg(<4 x i16> %a, <4 x i16> %b) {127; GFX8-LABEL: add_v4i16_arg:128; GFX8: ; %bb.0:129; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)130; GFX8-NEXT: v_add_u16_e32 v4, v0, v2131; GFX8-NEXT: v_add_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1132; GFX8-NEXT: v_add_u16_e32 v2, v1, v3133; GFX8-NEXT: v_add_u16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1134; GFX8-NEXT: v_or_b32_e32 v0, v4, v0135; GFX8-NEXT: v_or_b32_e32 v1, v2, v1136; GFX8-NEXT: s_setpc_b64 s[30:31]137;138; GFX9-LABEL: add_v4i16_arg:139; GFX9: ; %bb.0:140; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX9-NEXT: v_pk_add_u16 v0, v0, v2142; GFX9-NEXT: v_pk_add_u16 v1, v1, v3143; GFX9-NEXT: s_setpc_b64 s[30:31]144 %add = add <4 x i16> %a, %b145 ret <4 x i16> %add146}147 148define void @add_v5i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {149; GFX8-LABEL: add_v5i16:150; GFX8: ; %bb.0:151; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GFX8-NEXT: v_add_u32_e32 v6, vcc, 2, v0153; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc154; GFX8-NEXT: v_add_u32_e32 v8, vcc, 4, v0155; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v1, vcc156; GFX8-NEXT: v_add_u32_e32 v10, vcc, 6, v0157; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v1, vcc158; GFX8-NEXT: flat_load_ushort v12, v[0:1]159; GFX8-NEXT: v_add_u32_e32 v0, vcc, 8, v0160; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc161; GFX8-NEXT: flat_load_ushort v13, v[6:7]162; GFX8-NEXT: flat_load_ushort v14, v[8:9]163; GFX8-NEXT: flat_load_ushort v15, v[10:11]164; GFX8-NEXT: flat_load_ushort v16, v[0:1]165; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v2166; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc167; GFX8-NEXT: v_add_u32_e32 v6, vcc, 4, v2168; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v3, vcc169; GFX8-NEXT: v_add_u32_e32 v8, vcc, 6, v2170; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v3, vcc171; GFX8-NEXT: v_add_u32_e32 v10, vcc, 8, v2172; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v3, vcc173; GFX8-NEXT: flat_load_ushort v17, v[2:3]174; GFX8-NEXT: flat_load_ushort v18, v[0:1]175; GFX8-NEXT: flat_load_ushort v19, v[6:7]176; GFX8-NEXT: flat_load_ushort v20, v[8:9]177; GFX8-NEXT: flat_load_ushort v10, v[10:11]178; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v4179; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc180; GFX8-NEXT: v_add_u32_e32 v2, vcc, 4, v4181; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v5, vcc182; GFX8-NEXT: v_add_u32_e32 v6, vcc, 6, v4183; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v5, vcc184; GFX8-NEXT: v_add_u32_e32 v8, vcc, 8, v4185; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v5, vcc186; GFX8-NEXT: s_waitcnt vmcnt(4)187; GFX8-NEXT: v_add_u16_e32 v11, v12, v17188; GFX8-NEXT: s_waitcnt vmcnt(3)189; GFX8-NEXT: v_add_u16_e32 v12, v13, v18190; GFX8-NEXT: s_waitcnt vmcnt(2)191; GFX8-NEXT: v_add_u16_e32 v13, v14, v19192; GFX8-NEXT: s_waitcnt vmcnt(1)193; GFX8-NEXT: v_add_u16_e32 v14, v15, v20194; GFX8-NEXT: s_waitcnt vmcnt(0)195; GFX8-NEXT: v_add_u16_e32 v10, v16, v10196; GFX8-NEXT: flat_store_short v[4:5], v11197; GFX8-NEXT: flat_store_short v[0:1], v12198; GFX8-NEXT: flat_store_short v[2:3], v13199; GFX8-NEXT: flat_store_short v[6:7], v14200; GFX8-NEXT: flat_store_short v[8:9], v10201; GFX8-NEXT: s_waitcnt vmcnt(0)202; GFX8-NEXT: s_setpc_b64 s[30:31]203;204; GFX9-LABEL: add_v5i16:205; GFX9: ; %bb.0:206; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX9-NEXT: global_load_ushort v6, v[0:1], off208; GFX9-NEXT: global_load_ushort v7, v[0:1], off offset:4209; GFX9-NEXT: global_load_ushort v8, v[2:3], off210; GFX9-NEXT: global_load_ushort v9, v[2:3], off offset:4211; GFX9-NEXT: global_load_ushort v10, v[2:3], off offset:8212; GFX9-NEXT: global_load_ushort v11, v[0:1], off offset:8213; GFX9-NEXT: global_load_ushort v12, v[0:1], off offset:2214; GFX9-NEXT: global_load_ushort v13, v[0:1], off offset:6215; GFX9-NEXT: global_load_ushort v14, v[2:3], off offset:2216; GFX9-NEXT: global_load_ushort v15, v[2:3], off offset:6217; GFX9-NEXT: s_waitcnt vmcnt(9)218; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v6219; GFX9-NEXT: s_waitcnt vmcnt(8)220; GFX9-NEXT: v_and_b32_e32 v1, 0xffff, v7221; GFX9-NEXT: s_waitcnt vmcnt(7)222; GFX9-NEXT: v_and_b32_e32 v2, 0xffff, v8223; GFX9-NEXT: s_waitcnt vmcnt(6)224; GFX9-NEXT: v_and_b32_e32 v3, 0xffff, v9225; GFX9-NEXT: s_waitcnt vmcnt(4)226; GFX9-NEXT: v_pk_add_u16 v6, v11, v10227; GFX9-NEXT: s_waitcnt vmcnt(3)228; GFX9-NEXT: v_lshl_or_b32 v0, v12, 16, v0229; GFX9-NEXT: s_waitcnt vmcnt(2)230; GFX9-NEXT: v_lshl_or_b32 v1, v13, 16, v1231; GFX9-NEXT: s_waitcnt vmcnt(1)232; GFX9-NEXT: v_lshl_or_b32 v2, v14, 16, v2233; GFX9-NEXT: s_waitcnt vmcnt(0)234; GFX9-NEXT: v_lshl_or_b32 v3, v15, 16, v3235; GFX9-NEXT: v_pk_add_u16 v0, v0, v2236; GFX9-NEXT: v_pk_add_u16 v1, v1, v3237; GFX9-NEXT: global_store_short v[4:5], v0, off238; GFX9-NEXT: global_store_short_d16_hi v[4:5], v0, off offset:2239; GFX9-NEXT: global_store_short v[4:5], v1, off offset:4240; GFX9-NEXT: global_store_short_d16_hi v[4:5], v1, off offset:6241; GFX9-NEXT: global_store_short v[4:5], v6, off offset:8242; GFX9-NEXT: s_waitcnt vmcnt(0)243; GFX9-NEXT: s_setpc_b64 s[30:31]244 %a = load <5 x i16>, ptr addrspace(1) %ptra, align 4245 %b = load <5 x i16>, ptr addrspace(1) %ptrb, align 4246 %add = add <5 x i16> %a, %b247 store <5 x i16> %add, ptr addrspace(1) %ptr2, align 4248 ret void249}250 251define <5 x i16> @add_v5i16_arg(<5 x i16> %a, <5 x i16> %b) {252; GFX8-LABEL: add_v5i16_arg:253; GFX8: ; %bb.0:254; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)255; GFX8-NEXT: v_add_u16_e32 v6, v0, v3256; GFX8-NEXT: v_add_u16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1257; GFX8-NEXT: v_add_u16_e32 v3, v1, v4258; GFX8-NEXT: v_add_u16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1259; GFX8-NEXT: v_or_b32_e32 v0, v6, v0260; GFX8-NEXT: v_or_b32_e32 v1, v3, v1261; GFX8-NEXT: v_add_u16_e32 v2, v2, v5262; GFX8-NEXT: s_setpc_b64 s[30:31]263;264; GFX9-LABEL: add_v5i16_arg:265; GFX9: ; %bb.0:266; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)267; GFX9-NEXT: v_pk_add_u16 v0, v0, v3268; GFX9-NEXT: v_pk_add_u16 v1, v1, v4269; GFX9-NEXT: v_pk_add_u16 v2, v2, v5270; GFX9-NEXT: s_setpc_b64 s[30:31]271 %add = add <5 x i16> %a, %b272 ret <5 x i16> %add273}274 275define void @add_v6i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {276; GFX8-LABEL: add_v6i16:277; GFX8: ; %bb.0:278; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GFX8-NEXT: flat_load_dwordx3 v[6:8], v[0:1]280; GFX8-NEXT: flat_load_dwordx3 v[0:2], v[2:3]281; GFX8-NEXT: s_waitcnt vmcnt(0)282; GFX8-NEXT: v_add_u16_e32 v3, v6, v0283; GFX8-NEXT: v_add_u16_sdwa v0, v6, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1284; GFX8-NEXT: v_add_u16_e32 v6, v7, v1285; GFX8-NEXT: v_add_u16_sdwa v1, v7, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1286; GFX8-NEXT: v_add_u16_e32 v7, v8, v2287; GFX8-NEXT: v_add_u16_sdwa v2, v8, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1288; GFX8-NEXT: v_or_b32_e32 v0, v3, v0289; GFX8-NEXT: v_or_b32_e32 v1, v6, v1290; GFX8-NEXT: v_or_b32_e32 v2, v7, v2291; GFX8-NEXT: flat_store_dwordx3 v[4:5], v[0:2]292; GFX8-NEXT: s_waitcnt vmcnt(0)293; GFX8-NEXT: s_setpc_b64 s[30:31]294;295; GFX9-LABEL: add_v6i16:296; GFX9: ; %bb.0:297; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)298; GFX9-NEXT: global_load_dwordx3 v[6:8], v[0:1], off299; GFX9-NEXT: global_load_dwordx3 v[9:11], v[2:3], off300; GFX9-NEXT: s_waitcnt vmcnt(0)301; GFX9-NEXT: v_pk_add_u16 v0, v6, v9302; GFX9-NEXT: v_pk_add_u16 v1, v7, v10303; GFX9-NEXT: v_pk_add_u16 v2, v8, v11304; GFX9-NEXT: global_store_dwordx3 v[4:5], v[0:2], off305; GFX9-NEXT: s_waitcnt vmcnt(0)306; GFX9-NEXT: s_setpc_b64 s[30:31]307 %a = load <6 x i16>, ptr addrspace(1) %ptra, align 4308 %b = load <6 x i16>, ptr addrspace(1) %ptrb, align 4309 %add = add <6 x i16> %a, %b310 store <6 x i16> %add, ptr addrspace(1) %ptr2, align 4311 ret void312}313 314define <6 x i16> @add_v6i16_arg(<6 x i16> %a, <6 x i16> %b) {315; GFX8-LABEL: add_v6i16_arg:316; GFX8: ; %bb.0:317; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)318; GFX8-NEXT: v_add_u16_e32 v6, v0, v3319; GFX8-NEXT: v_add_u16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1320; GFX8-NEXT: v_add_u16_e32 v3, v1, v4321; GFX8-NEXT: v_add_u16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1322; GFX8-NEXT: v_or_b32_e32 v1, v3, v1323; GFX8-NEXT: v_add_u16_e32 v3, v2, v5324; GFX8-NEXT: v_add_u16_sdwa v2, v2, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1325; GFX8-NEXT: v_or_b32_e32 v0, v6, v0326; GFX8-NEXT: v_or_b32_e32 v2, v3, v2327; GFX8-NEXT: s_setpc_b64 s[30:31]328;329; GFX9-LABEL: add_v6i16_arg:330; GFX9: ; %bb.0:331; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)332; GFX9-NEXT: v_pk_add_u16 v0, v0, v3333; GFX9-NEXT: v_pk_add_u16 v1, v1, v4334; GFX9-NEXT: v_pk_add_u16 v2, v2, v5335; GFX9-NEXT: s_setpc_b64 s[30:31]336 %add = add <6 x i16> %a, %b337 ret <6 x i16> %add338}339 340define void @addv_7i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {341; GFX8-LABEL: addv_7i16:342; GFX8: ; %bb.0:343; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GFX8-NEXT: v_add_u32_e32 v6, vcc, 2, v0345; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc346; GFX8-NEXT: v_add_u32_e32 v8, vcc, 4, v0347; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v1, vcc348; GFX8-NEXT: v_add_u32_e32 v10, vcc, 6, v0349; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v1, vcc350; GFX8-NEXT: v_add_u32_e32 v12, vcc, 8, v0351; GFX8-NEXT: v_addc_u32_e32 v13, vcc, 0, v1, vcc352; GFX8-NEXT: v_add_u32_e32 v14, vcc, 10, v0353; GFX8-NEXT: v_addc_u32_e32 v15, vcc, 0, v1, vcc354; GFX8-NEXT: flat_load_ushort v16, v[0:1]355; GFX8-NEXT: v_add_u32_e32 v0, vcc, 12, v0356; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc357; GFX8-NEXT: flat_load_ushort v17, v[6:7]358; GFX8-NEXT: flat_load_ushort v18, v[8:9]359; GFX8-NEXT: flat_load_ushort v19, v[10:11]360; GFX8-NEXT: flat_load_ushort v20, v[12:13]361; GFX8-NEXT: flat_load_ushort v21, v[14:15]362; GFX8-NEXT: flat_load_ushort v22, v[0:1]363; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v2364; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc365; GFX8-NEXT: v_add_u32_e32 v6, vcc, 4, v2366; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v3, vcc367; GFX8-NEXT: v_add_u32_e32 v8, vcc, 6, v2368; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v3, vcc369; GFX8-NEXT: v_add_u32_e32 v10, vcc, 8, v2370; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v3, vcc371; GFX8-NEXT: v_add_u32_e32 v12, vcc, 10, v2372; GFX8-NEXT: v_addc_u32_e32 v13, vcc, 0, v3, vcc373; GFX8-NEXT: v_add_u32_e32 v14, vcc, 12, v2374; GFX8-NEXT: v_addc_u32_e32 v15, vcc, 0, v3, vcc375; GFX8-NEXT: flat_load_ushort v2, v[2:3]376; GFX8-NEXT: flat_load_ushort v3, v[0:1]377; GFX8-NEXT: flat_load_ushort v6, v[6:7]378; GFX8-NEXT: flat_load_ushort v7, v[8:9]379; GFX8-NEXT: flat_load_ushort v8, v[10:11]380; GFX8-NEXT: flat_load_ushort v9, v[12:13]381; GFX8-NEXT: flat_load_ushort v10, v[14:15]382; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v4383; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc384; GFX8-NEXT: s_waitcnt vmcnt(6)385; GFX8-NEXT: v_add_u16_e32 v2, v16, v2386; GFX8-NEXT: s_waitcnt vmcnt(5)387; GFX8-NEXT: v_add_u16_e32 v3, v17, v3388; GFX8-NEXT: flat_store_short v[4:5], v2389; GFX8-NEXT: flat_store_short v[0:1], v3390; GFX8-NEXT: v_add_u32_e32 v0, vcc, 4, v4391; GFX8-NEXT: s_waitcnt vmcnt(6)392; GFX8-NEXT: v_add_u16_e32 v6, v18, v6393; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc394; GFX8-NEXT: flat_store_short v[0:1], v6395; GFX8-NEXT: v_add_u32_e32 v0, vcc, 6, v4396; GFX8-NEXT: s_waitcnt vmcnt(6)397; GFX8-NEXT: v_add_u16_e32 v7, v19, v7398; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc399; GFX8-NEXT: flat_store_short v[0:1], v7400; GFX8-NEXT: v_add_u32_e32 v0, vcc, 8, v4401; GFX8-NEXT: s_waitcnt vmcnt(6)402; GFX8-NEXT: v_add_u16_e32 v8, v20, v8403; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc404; GFX8-NEXT: flat_store_short v[0:1], v8405; GFX8-NEXT: v_add_u32_e32 v0, vcc, 10, v4406; GFX8-NEXT: s_waitcnt vmcnt(6)407; GFX8-NEXT: v_add_u16_e32 v9, v21, v9408; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc409; GFX8-NEXT: flat_store_short v[0:1], v9410; GFX8-NEXT: v_add_u32_e32 v0, vcc, 12, v4411; GFX8-NEXT: s_waitcnt vmcnt(6)412; GFX8-NEXT: v_add_u16_e32 v10, v22, v10413; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc414; GFX8-NEXT: flat_store_short v[0:1], v10415; GFX8-NEXT: s_waitcnt vmcnt(0)416; GFX8-NEXT: s_setpc_b64 s[30:31]417;418; GFX9-LABEL: addv_7i16:419; GFX9: ; %bb.0:420; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)421; GFX9-NEXT: global_load_ushort v6, v[0:1], off422; GFX9-NEXT: global_load_ushort v7, v[0:1], off offset:4423; GFX9-NEXT: global_load_ushort v8, v[0:1], off offset:8424; GFX9-NEXT: global_load_ushort v9, v[2:3], off425; GFX9-NEXT: global_load_ushort v10, v[2:3], off offset:4426; GFX9-NEXT: global_load_ushort v11, v[2:3], off offset:8427; GFX9-NEXT: global_load_ushort v12, v[2:3], off offset:12428; GFX9-NEXT: global_load_ushort v13, v[0:1], off offset:12429; GFX9-NEXT: global_load_ushort v14, v[0:1], off offset:2430; GFX9-NEXT: global_load_ushort v15, v[0:1], off offset:6431; GFX9-NEXT: global_load_ushort v16, v[0:1], off offset:10432; GFX9-NEXT: global_load_ushort v17, v[2:3], off offset:2433; GFX9-NEXT: global_load_ushort v18, v[2:3], off offset:6434; GFX9-NEXT: global_load_ushort v19, v[2:3], off offset:10435; GFX9-NEXT: s_waitcnt vmcnt(13)436; GFX9-NEXT: v_and_b32_e32 v0, 0xffff, v6437; GFX9-NEXT: s_waitcnt vmcnt(12)438; GFX9-NEXT: v_and_b32_e32 v1, 0xffff, v7439; GFX9-NEXT: s_waitcnt vmcnt(11)440; GFX9-NEXT: v_and_b32_e32 v2, 0xffff, v8441; GFX9-NEXT: s_waitcnt vmcnt(10)442; GFX9-NEXT: v_and_b32_e32 v3, 0xffff, v9443; GFX9-NEXT: s_waitcnt vmcnt(9)444; GFX9-NEXT: v_and_b32_e32 v6, 0xffff, v10445; GFX9-NEXT: s_waitcnt vmcnt(8)446; GFX9-NEXT: v_and_b32_e32 v7, 0xffff, v11447; GFX9-NEXT: s_waitcnt vmcnt(6)448; GFX9-NEXT: v_pk_add_u16 v8, v13, v12449; GFX9-NEXT: s_waitcnt vmcnt(5)450; GFX9-NEXT: v_lshl_or_b32 v0, v14, 16, v0451; GFX9-NEXT: s_waitcnt vmcnt(4)452; GFX9-NEXT: v_lshl_or_b32 v1, v15, 16, v1453; GFX9-NEXT: s_waitcnt vmcnt(3)454; GFX9-NEXT: v_lshl_or_b32 v2, v16, 16, v2455; GFX9-NEXT: s_waitcnt vmcnt(2)456; GFX9-NEXT: v_lshl_or_b32 v3, v17, 16, v3457; GFX9-NEXT: s_waitcnt vmcnt(1)458; GFX9-NEXT: v_lshl_or_b32 v6, v18, 16, v6459; GFX9-NEXT: s_waitcnt vmcnt(0)460; GFX9-NEXT: v_lshl_or_b32 v7, v19, 16, v7461; GFX9-NEXT: v_pk_add_u16 v0, v0, v3462; GFX9-NEXT: v_pk_add_u16 v1, v1, v6463; GFX9-NEXT: v_pk_add_u16 v2, v2, v7464; GFX9-NEXT: global_store_short v[4:5], v0, off465; GFX9-NEXT: global_store_short_d16_hi v[4:5], v0, off offset:2466; GFX9-NEXT: global_store_short v[4:5], v1, off offset:4467; GFX9-NEXT: global_store_short_d16_hi v[4:5], v1, off offset:6468; GFX9-NEXT: global_store_short v[4:5], v2, off offset:8469; GFX9-NEXT: global_store_short_d16_hi v[4:5], v2, off offset:10470; GFX9-NEXT: global_store_short v[4:5], v8, off offset:12471; GFX9-NEXT: s_waitcnt vmcnt(0)472; GFX9-NEXT: s_setpc_b64 s[30:31]473 %a = load <7 x i16>, ptr addrspace(1) %ptra, align 4474 %b = load <7 x i16>, ptr addrspace(1) %ptrb, align 4475 %add = add <7 x i16> %a, %b476 store <7 x i16> %add, ptr addrspace(1) %ptr2, align 4477 ret void478}479 480define <7 x i16> @add_v7i16_arg(<7 x i16> %a, <7 x i16> %b) {481; GFX8-LABEL: add_v7i16_arg:482; GFX8: ; %bb.0:483; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX8-NEXT: v_add_u16_e32 v8, v0, v4485; GFX8-NEXT: v_add_u16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1486; GFX8-NEXT: v_add_u16_e32 v4, v1, v5487; GFX8-NEXT: v_add_u16_sdwa v1, v1, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1488; GFX8-NEXT: v_or_b32_e32 v1, v4, v1489; GFX8-NEXT: v_add_u16_e32 v4, v2, v6490; GFX8-NEXT: v_add_u16_sdwa v2, v2, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1491; GFX8-NEXT: v_or_b32_e32 v0, v8, v0492; GFX8-NEXT: v_or_b32_e32 v2, v4, v2493; GFX8-NEXT: v_add_u16_e32 v3, v3, v7494; GFX8-NEXT: s_setpc_b64 s[30:31]495;496; GFX9-LABEL: add_v7i16_arg:497; GFX9: ; %bb.0:498; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX9-NEXT: v_pk_add_u16 v0, v0, v4500; GFX9-NEXT: v_pk_add_u16 v1, v1, v5501; GFX9-NEXT: v_pk_add_u16 v2, v2, v6502; GFX9-NEXT: v_pk_add_u16 v3, v3, v7503; GFX9-NEXT: s_setpc_b64 s[30:31]504 %add = add <7 x i16> %a, %b505 ret <7 x i16> %add506}507 508define void @add_v9i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {509; GFX8-LABEL: add_v9i16:510; GFX8: ; %bb.0:511; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)512; GFX8-NEXT: flat_load_dwordx4 v[6:9], v[0:1]513; GFX8-NEXT: flat_load_dwordx4 v[10:13], v[2:3]514; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v0515; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc516; GFX8-NEXT: flat_load_ushort v14, v[0:1]517; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v2518; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc519; GFX8-NEXT: flat_load_ushort v0, v[0:1]520; GFX8-NEXT: s_waitcnt vmcnt(2)521; GFX8-NEXT: v_add_u16_e32 v1, v6, v10522; GFX8-NEXT: v_add_u16_sdwa v2, v6, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1523; GFX8-NEXT: v_add_u16_e32 v3, v7, v11524; GFX8-NEXT: v_add_u16_sdwa v10, v7, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1525; GFX8-NEXT: v_add_u16_e32 v11, v8, v12526; GFX8-NEXT: v_add_u16_sdwa v8, v8, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1527; GFX8-NEXT: v_add_u16_e32 v12, v9, v13528; GFX8-NEXT: v_add_u16_sdwa v9, v9, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1529; GFX8-NEXT: v_add_u32_e32 v6, vcc, 16, v4530; GFX8-NEXT: s_waitcnt vmcnt(0)531; GFX8-NEXT: v_add_u16_e32 v13, v14, v0532; GFX8-NEXT: v_or_b32_e32 v0, v1, v2533; GFX8-NEXT: v_or_b32_e32 v1, v3, v10534; GFX8-NEXT: v_or_b32_e32 v2, v11, v8535; GFX8-NEXT: v_or_b32_e32 v3, v12, v9536; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v5, vcc537; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]538; GFX8-NEXT: flat_store_short v[6:7], v13539; GFX8-NEXT: s_waitcnt vmcnt(0)540; GFX8-NEXT: s_setpc_b64 s[30:31]541;542; GFX9-LABEL: add_v9i16:543; GFX9: ; %bb.0:544; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)545; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off546; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off547; GFX9-NEXT: global_load_ushort v14, v[0:1], off offset:16548; GFX9-NEXT: global_load_ushort v15, v[2:3], off offset:16549; GFX9-NEXT: s_waitcnt vmcnt(2)550; GFX9-NEXT: v_pk_add_u16 v0, v10, v6551; GFX9-NEXT: v_pk_add_u16 v1, v11, v7552; GFX9-NEXT: v_pk_add_u16 v2, v12, v8553; GFX9-NEXT: v_pk_add_u16 v3, v13, v9554; GFX9-NEXT: s_waitcnt vmcnt(0)555; GFX9-NEXT: v_pk_add_u16 v6, v14, v15556; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off557; GFX9-NEXT: global_store_short v[4:5], v6, off offset:16558; GFX9-NEXT: s_waitcnt vmcnt(0)559; GFX9-NEXT: s_setpc_b64 s[30:31]560 %a = load <9 x i16>, ptr addrspace(1) %ptra, align 4561 %b = load <9 x i16>, ptr addrspace(1) %ptrb, align 4562 %add = add <9 x i16> %a, %b563 store <9 x i16> %add, ptr addrspace(1) %ptr2, align 4564 ret void565}566 567define <9 x i16> @add_v9i16_arg(<9 x i16> %a, <9 x i16> %b) {568; GFX8-LABEL: add_v9i16_arg:569; GFX8: ; %bb.0:570; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)571; GFX8-NEXT: v_add_u16_e32 v10, v0, v5572; GFX8-NEXT: v_add_u16_sdwa v0, v0, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1573; GFX8-NEXT: v_add_u16_e32 v5, v1, v6574; GFX8-NEXT: v_add_u16_sdwa v1, v1, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1575; GFX8-NEXT: v_or_b32_e32 v1, v5, v1576; GFX8-NEXT: v_add_u16_e32 v5, v2, v7577; GFX8-NEXT: v_add_u16_sdwa v2, v2, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1578; GFX8-NEXT: v_or_b32_e32 v2, v5, v2579; GFX8-NEXT: v_add_u16_e32 v5, v3, v8580; GFX8-NEXT: v_add_u16_sdwa v3, v3, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1581; GFX8-NEXT: v_or_b32_e32 v0, v10, v0582; GFX8-NEXT: v_or_b32_e32 v3, v5, v3583; GFX8-NEXT: v_add_u16_e32 v4, v4, v9584; GFX8-NEXT: s_setpc_b64 s[30:31]585;586; GFX9-LABEL: add_v9i16_arg:587; GFX9: ; %bb.0:588; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)589; GFX9-NEXT: v_pk_add_u16 v0, v0, v5590; GFX9-NEXT: v_pk_add_u16 v1, v1, v6591; GFX9-NEXT: v_pk_add_u16 v2, v2, v7592; GFX9-NEXT: v_pk_add_u16 v3, v3, v8593; GFX9-NEXT: v_pk_add_u16 v4, v4, v9594; GFX9-NEXT: s_setpc_b64 s[30:31]595 %add = add <9 x i16> %a, %b596 ret <9 x i16> %add597}598 599define void @add_v10i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {600; GFX8-LABEL: add_v10i16:601; GFX8: ; %bb.0:602; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)603; GFX8-NEXT: flat_load_dwordx4 v[6:9], v[0:1]604; GFX8-NEXT: flat_load_dwordx4 v[10:13], v[2:3]605; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v0606; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc607; GFX8-NEXT: flat_load_dword v14, v[0:1]608; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v2609; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v3, vcc610; GFX8-NEXT: flat_load_dword v15, v[0:1]611; GFX8-NEXT: s_waitcnt vmcnt(2)612; GFX8-NEXT: v_add_u16_e32 v0, v6, v10613; GFX8-NEXT: v_add_u16_sdwa v1, v6, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1614; GFX8-NEXT: v_add_u16_e32 v2, v7, v11615; GFX8-NEXT: v_add_u16_sdwa v3, v7, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1616; GFX8-NEXT: v_add_u16_e32 v6, v8, v12617; GFX8-NEXT: v_add_u16_sdwa v7, v8, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1618; GFX8-NEXT: v_add_u16_e32 v8, v9, v13619; GFX8-NEXT: v_add_u16_sdwa v9, v9, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1620; GFX8-NEXT: v_or_b32_e32 v0, v0, v1621; GFX8-NEXT: v_or_b32_e32 v1, v2, v3622; GFX8-NEXT: v_or_b32_e32 v2, v6, v7623; GFX8-NEXT: v_or_b32_e32 v3, v8, v9624; GFX8-NEXT: s_waitcnt vmcnt(0)625; GFX8-NEXT: v_add_u16_e32 v6, v14, v15626; GFX8-NEXT: v_add_u16_sdwa v7, v14, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1627; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]628; GFX8-NEXT: v_or_b32_e32 v6, v6, v7629; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v4630; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc631; GFX8-NEXT: flat_store_dword v[0:1], v6632; GFX8-NEXT: s_waitcnt vmcnt(0)633; GFX8-NEXT: s_setpc_b64 s[30:31]634;635; GFX9-LABEL: add_v10i16:636; GFX9: ; %bb.0:637; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)638; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off639; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off640; GFX9-NEXT: global_load_dword v14, v[0:1], off offset:16641; GFX9-NEXT: global_load_dword v15, v[2:3], off offset:16642; GFX9-NEXT: s_waitcnt vmcnt(2)643; GFX9-NEXT: v_pk_add_u16 v0, v10, v6644; GFX9-NEXT: v_pk_add_u16 v1, v11, v7645; GFX9-NEXT: v_pk_add_u16 v2, v12, v8646; GFX9-NEXT: v_pk_add_u16 v3, v13, v9647; GFX9-NEXT: s_waitcnt vmcnt(0)648; GFX9-NEXT: v_pk_add_u16 v6, v14, v15649; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off650; GFX9-NEXT: global_store_dword v[4:5], v6, off offset:16651; GFX9-NEXT: s_waitcnt vmcnt(0)652; GFX9-NEXT: s_setpc_b64 s[30:31]653 %a = load <10 x i16>, ptr addrspace(1) %ptra, align 4654 %b = load <10 x i16>, ptr addrspace(1) %ptrb, align 4655 %add = add <10 x i16> %a, %b656 store <10 x i16> %add, ptr addrspace(1) %ptr2, align 4657 ret void658}659 660define void @add_v11i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {661; GFX8-LABEL: add_v11i16:662; GFX8: ; %bb.0:663; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)664; GFX8-NEXT: flat_load_dwordx4 v[6:9], v[0:1]665; GFX8-NEXT: flat_load_dwordx4 v[10:13], v[2:3]666; GFX8-NEXT: v_add_u32_e32 v14, vcc, 16, v2667; GFX8-NEXT: v_addc_u32_e32 v15, vcc, 0, v3, vcc668; GFX8-NEXT: v_add_u32_e32 v16, vcc, 18, v2669; GFX8-NEXT: v_addc_u32_e32 v17, vcc, 0, v3, vcc670; GFX8-NEXT: v_add_u32_e32 v2, vcc, 20, v2671; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc672; GFX8-NEXT: flat_load_ushort v14, v[14:15]673; GFX8-NEXT: flat_load_ushort v15, v[16:17]674; GFX8-NEXT: flat_load_ushort v16, v[2:3]675; GFX8-NEXT: v_add_u32_e32 v2, vcc, 16, v0676; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v1, vcc677; GFX8-NEXT: s_waitcnt vmcnt(3)678; GFX8-NEXT: v_add_u16_e32 v17, v6, v10679; GFX8-NEXT: v_add_u16_sdwa v10, v6, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1680; GFX8-NEXT: v_add_u32_e32 v6, vcc, 18, v0681; GFX8-NEXT: v_add_u16_e32 v18, v7, v11682; GFX8-NEXT: v_add_u16_sdwa v11, v7, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1683; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc684; GFX8-NEXT: v_add_u32_e32 v0, vcc, 20, v0685; GFX8-NEXT: flat_load_ushort v2, v[2:3]686; GFX8-NEXT: flat_load_ushort v3, v[6:7]687; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc688; GFX8-NEXT: flat_load_ushort v21, v[0:1]689; GFX8-NEXT: v_add_u32_e32 v6, vcc, 16, v4690; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v5, vcc691; GFX8-NEXT: v_add_u16_e32 v19, v8, v12692; GFX8-NEXT: v_add_u16_sdwa v12, v8, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1693; GFX8-NEXT: v_add_u32_e32 v8, vcc, 18, v4694; GFX8-NEXT: v_add_u16_e32 v20, v9, v13695; GFX8-NEXT: v_add_u16_sdwa v13, v9, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1696; GFX8-NEXT: v_addc_u32_e32 v9, vcc, 0, v5, vcc697; GFX8-NEXT: v_or_b32_e32 v0, v17, v10698; GFX8-NEXT: v_or_b32_e32 v1, v18, v11699; GFX8-NEXT: v_add_u32_e32 v10, vcc, 20, v4700; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v5, vcc701; GFX8-NEXT: s_waitcnt vmcnt(2)702; GFX8-NEXT: v_add_u16_e32 v14, v2, v14703; GFX8-NEXT: s_waitcnt vmcnt(1)704; GFX8-NEXT: v_add_u16_e32 v15, v3, v15705; GFX8-NEXT: v_or_b32_e32 v2, v19, v12706; GFX8-NEXT: v_or_b32_e32 v3, v20, v13707; GFX8-NEXT: s_waitcnt vmcnt(0)708; GFX8-NEXT: v_add_u16_e32 v16, v21, v16709; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]710; GFX8-NEXT: flat_store_short v[6:7], v14711; GFX8-NEXT: flat_store_short v[8:9], v15712; GFX8-NEXT: flat_store_short v[10:11], v16713; GFX8-NEXT: s_waitcnt vmcnt(0)714; GFX8-NEXT: s_setpc_b64 s[30:31]715;716; GFX9-LABEL: add_v11i16:717; GFX9: ; %bb.0:718; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)719; GFX9-NEXT: global_load_dwordx4 v[6:9], v[0:1], off720; GFX9-NEXT: global_load_ushort v14, v[0:1], off offset:16721; GFX9-NEXT: global_load_ushort v15, v[2:3], off offset:16722; GFX9-NEXT: global_load_dwordx4 v[10:13], v[2:3], off723; GFX9-NEXT: global_load_ushort v16, v[2:3], off offset:20724; GFX9-NEXT: global_load_ushort v17, v[0:1], off offset:20725; GFX9-NEXT: global_load_ushort v18, v[0:1], off offset:18726; GFX9-NEXT: global_load_ushort v19, v[2:3], off offset:18727; GFX9-NEXT: s_waitcnt vmcnt(6)728; GFX9-NEXT: v_and_b32_e32 v14, 0xffff, v14729; GFX9-NEXT: s_waitcnt vmcnt(5)730; GFX9-NEXT: v_and_b32_e32 v15, 0xffff, v15731; GFX9-NEXT: s_waitcnt vmcnt(4)732; GFX9-NEXT: v_pk_add_u16 v0, v6, v10733; GFX9-NEXT: v_pk_add_u16 v1, v7, v11734; GFX9-NEXT: v_pk_add_u16 v2, v8, v12735; GFX9-NEXT: v_pk_add_u16 v3, v9, v13736; GFX9-NEXT: s_waitcnt vmcnt(1)737; GFX9-NEXT: v_lshl_or_b32 v7, v18, 16, v14738; GFX9-NEXT: s_waitcnt vmcnt(0)739; GFX9-NEXT: v_lshl_or_b32 v8, v19, 16, v15740; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off741; GFX9-NEXT: v_pk_add_u16 v6, v17, v16742; GFX9-NEXT: v_pk_add_u16 v0, v7, v8743; GFX9-NEXT: global_store_short v[4:5], v0, off offset:16744; GFX9-NEXT: global_store_short_d16_hi v[4:5], v0, off offset:18745; GFX9-NEXT: global_store_short v[4:5], v6, off offset:20746; GFX9-NEXT: s_waitcnt vmcnt(0)747; GFX9-NEXT: s_setpc_b64 s[30:31]748 %a = load <11 x i16>, ptr addrspace(1) %ptra, align 4749 %b = load <11 x i16>, ptr addrspace(1) %ptrb, align 4750 %add = add <11 x i16> %a, %b751 store <11 x i16> %add, ptr addrspace(1) %ptr2, align 4752 ret void753}754 755define <11 x i16> @add_v11i16_arg(<11 x i16> %a, <11 x i16> %b) {756; GFX8-LABEL: add_v11i16_arg:757; GFX8: ; %bb.0:758; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX8-NEXT: v_add_u16_e32 v12, v0, v6760; GFX8-NEXT: v_add_u16_sdwa v0, v0, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1761; GFX8-NEXT: v_add_u16_e32 v6, v1, v7762; GFX8-NEXT: v_add_u16_sdwa v1, v1, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1763; GFX8-NEXT: v_or_b32_e32 v1, v6, v1764; GFX8-NEXT: v_add_u16_e32 v6, v2, v8765; GFX8-NEXT: v_add_u16_sdwa v2, v2, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1766; GFX8-NEXT: v_or_b32_e32 v2, v6, v2767; GFX8-NEXT: v_add_u16_e32 v6, v3, v9768; GFX8-NEXT: v_add_u16_sdwa v3, v3, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1769; GFX8-NEXT: v_or_b32_e32 v3, v6, v3770; GFX8-NEXT: v_add_u16_e32 v6, v4, v10771; GFX8-NEXT: v_add_u16_sdwa v4, v4, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1772; GFX8-NEXT: v_or_b32_e32 v0, v12, v0773; GFX8-NEXT: v_or_b32_e32 v4, v6, v4774; GFX8-NEXT: v_add_u16_e32 v5, v5, v11775; GFX8-NEXT: s_setpc_b64 s[30:31]776;777; GFX9-LABEL: add_v11i16_arg:778; GFX9: ; %bb.0:779; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)780; GFX9-NEXT: v_pk_add_u16 v0, v0, v6781; GFX9-NEXT: v_pk_add_u16 v1, v1, v7782; GFX9-NEXT: v_pk_add_u16 v2, v2, v8783; GFX9-NEXT: v_pk_add_u16 v3, v3, v9784; GFX9-NEXT: v_pk_add_u16 v4, v4, v10785; GFX9-NEXT: v_pk_add_u16 v5, v5, v11786; GFX9-NEXT: s_setpc_b64 s[30:31]787 %add = add <11 x i16> %a, %b788 ret <11 x i16> %add789}790 791define void @add_v12i16(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb, ptr addrspace(1) %ptr2) {792; GFX8-LABEL: add_v12i16:793; GFX8: ; %bb.0:794; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX8-NEXT: flat_load_dwordx4 v[6:9], v[0:1]796; GFX8-NEXT: flat_load_dwordx4 v[10:13], v[2:3]797; GFX8-NEXT: v_add_u32_e32 v2, vcc, 16, v2798; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc799; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v0800; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc801; GFX8-NEXT: flat_load_dwordx2 v[14:15], v[2:3]802; GFX8-NEXT: s_waitcnt vmcnt(1)803; GFX8-NEXT: v_add_u16_e32 v2, v6, v10804; GFX8-NEXT: v_add_u16_sdwa v3, v6, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1805; GFX8-NEXT: v_add_u16_e32 v10, v7, v11806; GFX8-NEXT: v_add_u16_sdwa v11, v7, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1807; GFX8-NEXT: flat_load_dwordx2 v[6:7], v[0:1]808; GFX8-NEXT: v_add_u16_e32 v16, v8, v12809; GFX8-NEXT: v_add_u16_sdwa v8, v8, v12 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1810; GFX8-NEXT: v_add_u16_e32 v12, v9, v13811; GFX8-NEXT: v_add_u16_sdwa v9, v9, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1812; GFX8-NEXT: v_or_b32_e32 v0, v2, v3813; GFX8-NEXT: v_or_b32_e32 v1, v10, v11814; GFX8-NEXT: v_or_b32_e32 v2, v16, v8815; GFX8-NEXT: v_or_b32_e32 v3, v12, v9816; GFX8-NEXT: flat_store_dwordx4 v[4:5], v[0:3]817; GFX8-NEXT: s_waitcnt vmcnt(1)818; GFX8-NEXT: v_add_u16_e32 v8, v6, v14819; GFX8-NEXT: v_add_u16_sdwa v6, v6, v14 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1820; GFX8-NEXT: v_add_u16_e32 v9, v7, v15821; GFX8-NEXT: v_add_u16_sdwa v7, v7, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1822; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v4823; GFX8-NEXT: v_or_b32_e32 v6, v8, v6824; GFX8-NEXT: v_or_b32_e32 v7, v9, v7825; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v5, vcc826; GFX8-NEXT: flat_store_dwordx2 v[0:1], v[6:7]827; GFX8-NEXT: s_waitcnt vmcnt(0)828; GFX8-NEXT: s_setpc_b64 s[30:31]829;830; GFX9-LABEL: add_v12i16:831; GFX9: ; %bb.0:832; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)833; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off834; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off835; GFX9-NEXT: global_load_dwordx2 v[14:15], v[0:1], off offset:16836; GFX9-NEXT: global_load_dwordx2 v[16:17], v[2:3], off offset:16837; GFX9-NEXT: s_waitcnt vmcnt(2)838; GFX9-NEXT: v_pk_add_u16 v0, v10, v6839; GFX9-NEXT: v_pk_add_u16 v1, v11, v7840; GFX9-NEXT: v_pk_add_u16 v2, v12, v8841; GFX9-NEXT: v_pk_add_u16 v3, v13, v9842; GFX9-NEXT: s_waitcnt vmcnt(0)843; GFX9-NEXT: v_pk_add_u16 v6, v14, v16844; GFX9-NEXT: v_pk_add_u16 v7, v15, v17845; GFX9-NEXT: global_store_dwordx4 v[4:5], v[0:3], off846; GFX9-NEXT: global_store_dwordx2 v[4:5], v[6:7], off offset:16847; GFX9-NEXT: s_waitcnt vmcnt(0)848; GFX9-NEXT: s_setpc_b64 s[30:31]849 %a = load <12 x i16>, ptr addrspace(1) %ptra, align 4850 %b = load <12 x i16>, ptr addrspace(1) %ptrb, align 4851 %add = add <12 x i16> %a, %b852 store <12 x i16> %add, ptr addrspace(1) %ptr2, align 4853 ret void854}855 856define <12 x i16> @add_v12i16_arg(<12 x i16> %a, <12 x i16> %b) {857; GFX8-LABEL: add_v12i16_arg:858; GFX8: ; %bb.0:859; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GFX8-NEXT: v_add_u16_e32 v12, v0, v6861; GFX8-NEXT: v_add_u16_sdwa v0, v0, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1862; GFX8-NEXT: v_add_u16_e32 v6, v1, v7863; GFX8-NEXT: v_add_u16_sdwa v1, v1, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1864; GFX8-NEXT: v_or_b32_e32 v1, v6, v1865; GFX8-NEXT: v_add_u16_e32 v6, v2, v8866; GFX8-NEXT: v_add_u16_sdwa v2, v2, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1867; GFX8-NEXT: v_or_b32_e32 v2, v6, v2868; GFX8-NEXT: v_add_u16_e32 v6, v3, v9869; GFX8-NEXT: v_add_u16_sdwa v3, v3, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1870; GFX8-NEXT: v_or_b32_e32 v3, v6, v3871; GFX8-NEXT: v_add_u16_e32 v6, v4, v10872; GFX8-NEXT: v_add_u16_sdwa v4, v4, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1873; GFX8-NEXT: v_or_b32_e32 v4, v6, v4874; GFX8-NEXT: v_add_u16_e32 v6, v5, v11875; GFX8-NEXT: v_add_u16_sdwa v5, v5, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1876; GFX8-NEXT: v_or_b32_e32 v0, v12, v0877; GFX8-NEXT: v_or_b32_e32 v5, v6, v5878; GFX8-NEXT: s_setpc_b64 s[30:31]879;880; GFX9-LABEL: add_v12i16_arg:881; GFX9: ; %bb.0:882; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)883; GFX9-NEXT: v_pk_add_u16 v0, v0, v6884; GFX9-NEXT: v_pk_add_u16 v1, v1, v7885; GFX9-NEXT: v_pk_add_u16 v2, v2, v8886; GFX9-NEXT: v_pk_add_u16 v3, v3, v9887; GFX9-NEXT: v_pk_add_u16 v4, v4, v10888; GFX9-NEXT: v_pk_add_u16 v5, v5, v11889; GFX9-NEXT: s_setpc_b64 s[30:31]890 %add = add <12 x i16> %a, %b891 ret <12 x i16> %add892}893