795 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; FIXME: Fails expensive checks, should re-enable verifier, see issue #1308843; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -verify-machineinstrs=0 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX940 %s6 7; Test that we can form v_pk_mov_b32 in certain shuffles when they8; originate from 32-bit physreg copy sequences.9 10; TODO: Test 16-bit paired cases11 12define void @shufflevector_v2i32_10_physreg_even_vgpr_pair_copy(ptr addrspace(1) inreg %ptr) {13; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy:14; GFX900: ; %bb.0:15; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)16; GFX900-NEXT: v_mov_b32_e32 v0, 017; GFX900-NEXT: ;;#ASMSTART18; GFX900-NEXT: ; def v4, v519; GFX900-NEXT: ;;#ASMEND20; GFX900-NEXT: v_mov_b32_e32 v3, v521; GFX900-NEXT: global_store_dwordx2 v0, v[3:4], s[16:17]22; GFX900-NEXT: s_waitcnt vmcnt(0)23; GFX900-NEXT: s_setpc_b64 s[30:31]24;25; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy:26; GFX90A: ; %bb.0:27; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GFX90A-NEXT: v_mov_b32_e32 v0, 029; GFX90A-NEXT: ;;#ASMSTART30; GFX90A-NEXT: ; def v4, v531; GFX90A-NEXT: ;;#ASMEND32; GFX90A-NEXT: v_mov_b32_e32 v2, v533; GFX90A-NEXT: v_mov_b32_e32 v3, v434; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17]35; GFX90A-NEXT: s_waitcnt vmcnt(0)36; GFX90A-NEXT: s_setpc_b64 s[30:31]37;38; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy:39; GFX940: ; %bb.0:40; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)41; GFX940-NEXT: v_mov_b32_e32 v0, 042; GFX940-NEXT: ;;#ASMSTART43; GFX940-NEXT: ; def v4, v544; GFX940-NEXT: ;;#ASMEND45; GFX940-NEXT: s_nop 046; GFX940-NEXT: v_mov_b32_e32 v2, v547; GFX940-NEXT: v_mov_b32_e32 v3, v448; GFX940-NEXT: global_store_dwordx2 v0, v[2:3], s[0:1]49; GFX940-NEXT: s_waitcnt vmcnt(0)50; GFX940-NEXT: s_setpc_b64 s[30:31]51 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v5}"()52 %asm.0 = extractvalue { i32, i32 } %asm, 053 %asm.1 = extractvalue { i32, i32 } %asm, 154 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 055 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 156 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>57 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 858 ret void59}60 61define void @shufflevector_v2i32_10_physreg_odd_vgpr_pair_copy(ptr addrspace(1) inreg %ptr) {62; GFX900-LABEL: shufflevector_v2i32_10_physreg_odd_vgpr_pair_copy:63; GFX900: ; %bb.0:64; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX900-NEXT: v_mov_b32_e32 v0, 066; GFX900-NEXT: ;;#ASMSTART67; GFX900-NEXT: ; def v5, v668; GFX900-NEXT: ;;#ASMEND69; GFX900-NEXT: v_mov_b32_e32 v4, v670; GFX900-NEXT: global_store_dwordx2 v0, v[4:5], s[16:17]71; GFX900-NEXT: s_waitcnt vmcnt(0)72; GFX900-NEXT: s_setpc_b64 s[30:31]73;74; GFX90A-LABEL: shufflevector_v2i32_10_physreg_odd_vgpr_pair_copy:75; GFX90A: ; %bb.0:76; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)77; GFX90A-NEXT: v_mov_b32_e32 v0, 078; GFX90A-NEXT: ;;#ASMSTART79; GFX90A-NEXT: ; def v5, v680; GFX90A-NEXT: ;;#ASMEND81; GFX90A-NEXT: v_mov_b32_e32 v4, v682; GFX90A-NEXT: global_store_dwordx2 v0, v[4:5], s[16:17]83; GFX90A-NEXT: s_waitcnt vmcnt(0)84; GFX90A-NEXT: s_setpc_b64 s[30:31]85;86; GFX940-LABEL: shufflevector_v2i32_10_physreg_odd_vgpr_pair_copy:87; GFX940: ; %bb.0:88; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)89; GFX940-NEXT: v_mov_b32_e32 v0, 090; GFX940-NEXT: ;;#ASMSTART91; GFX940-NEXT: ; def v5, v692; GFX940-NEXT: ;;#ASMEND93; GFX940-NEXT: s_nop 094; GFX940-NEXT: v_mov_b32_e32 v4, v695; GFX940-NEXT: global_store_dwordx2 v0, v[4:5], s[0:1]96; GFX940-NEXT: s_waitcnt vmcnt(0)97; GFX940-NEXT: s_setpc_b64 s[30:31]98 %asm = call { i32, i32 } asm "; def $0, $1", "={v5},={v6}"()99 %asm.0 = extractvalue { i32, i32 } %asm, 0100 %asm.1 = extractvalue { i32, i32 } %asm, 1101 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0102 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1103 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>104 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8105 ret void106}107 108define void @shufflevector_v2i32_10_physreg_even_disjoint_even_vgpr_pair(ptr addrspace(1) inreg %ptr) {109; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_disjoint_even_vgpr_pair:110; GFX900: ; %bb.0:111; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)112; GFX900-NEXT: v_mov_b32_e32 v0, 0113; GFX900-NEXT: ;;#ASMSTART114; GFX900-NEXT: ; def v4, v6115; GFX900-NEXT: ;;#ASMEND116; GFX900-NEXT: v_mov_b32_e32 v3, v6117; GFX900-NEXT: global_store_dwordx2 v0, v[3:4], s[16:17]118; GFX900-NEXT: s_waitcnt vmcnt(0)119; GFX900-NEXT: s_setpc_b64 s[30:31]120;121; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_disjoint_even_vgpr_pair:122; GFX90A: ; %bb.0:123; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; GFX90A-NEXT: v_mov_b32_e32 v0, 0125; GFX90A-NEXT: ;;#ASMSTART126; GFX90A-NEXT: ; def v4, v6127; GFX90A-NEXT: ;;#ASMEND128; GFX90A-NEXT: v_mov_b32_e32 v7, v4129; GFX90A-NEXT: global_store_dwordx2 v0, v[6:7], s[16:17]130; GFX90A-NEXT: s_waitcnt vmcnt(0)131; GFX90A-NEXT: s_setpc_b64 s[30:31]132;133; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_disjoint_even_vgpr_pair:134; GFX940: ; %bb.0:135; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GFX940-NEXT: v_mov_b32_e32 v0, 0137; GFX940-NEXT: ;;#ASMSTART138; GFX940-NEXT: ; def v4, v6139; GFX940-NEXT: ;;#ASMEND140; GFX940-NEXT: s_nop 0141; GFX940-NEXT: v_mov_b32_e32 v7, v4142; GFX940-NEXT: global_store_dwordx2 v0, v[6:7], s[0:1]143; GFX940-NEXT: s_waitcnt vmcnt(0)144; GFX940-NEXT: s_setpc_b64 s[30:31]145 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v6}"()146 %asm.0 = extractvalue { i32, i32 } %asm, 0147 %asm.1 = extractvalue { i32, i32 } %asm, 1148 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0149 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1150 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>151 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8152 ret void153}154 155define void @shufflevector_v2i32_00_physreg_even_vgpr_pair_copy(ptr addrspace(1) inreg %ptr) {156; GFX900-LABEL: shufflevector_v2i32_00_physreg_even_vgpr_pair_copy:157; GFX900: ; %bb.0:158; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)159; GFX900-NEXT: ;;#ASMSTART160; GFX900-NEXT: ; def v4, v5161; GFX900-NEXT: ;;#ASMEND162; GFX900-NEXT: v_mov_b32_e32 v0, 0163; GFX900-NEXT: v_mov_b32_e32 v5, v4164; GFX900-NEXT: global_store_dwordx2 v0, v[4:5], s[16:17]165; GFX900-NEXT: s_waitcnt vmcnt(0)166; GFX900-NEXT: s_setpc_b64 s[30:31]167;168; GFX90A-LABEL: shufflevector_v2i32_00_physreg_even_vgpr_pair_copy:169; GFX90A: ; %bb.0:170; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)171; GFX90A-NEXT: ;;#ASMSTART172; GFX90A-NEXT: ; def v4, v5173; GFX90A-NEXT: ;;#ASMEND174; GFX90A-NEXT: v_mov_b32_e32 v0, 0175; GFX90A-NEXT: v_mov_b32_e32 v5, v4176; GFX90A-NEXT: global_store_dwordx2 v0, v[4:5], s[16:17]177; GFX90A-NEXT: s_waitcnt vmcnt(0)178; GFX90A-NEXT: s_setpc_b64 s[30:31]179;180; GFX940-LABEL: shufflevector_v2i32_00_physreg_even_vgpr_pair_copy:181; GFX940: ; %bb.0:182; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)183; GFX940-NEXT: ;;#ASMSTART184; GFX940-NEXT: ; def v4, v5185; GFX940-NEXT: ;;#ASMEND186; GFX940-NEXT: v_mov_b32_e32 v0, 0187; GFX940-NEXT: v_mov_b32_e32 v5, v4188; GFX940-NEXT: global_store_dwordx2 v0, v[4:5], s[0:1]189; GFX940-NEXT: s_waitcnt vmcnt(0)190; GFX940-NEXT: s_setpc_b64 s[30:31]191 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v5}"()192 %asm.0 = extractvalue { i32, i32 } %asm, 0193 %asm.1 = extractvalue { i32, i32 } %asm, 1194 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0195 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1196 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> zeroinitializer197 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8198 ret void199}200 201define void @shufflevector_v2i32_11_physreg_even_vgpr_pair_copy(ptr addrspace(1) inreg %ptr) {202; GFX900-LABEL: shufflevector_v2i32_11_physreg_even_vgpr_pair_copy:203; GFX900: ; %bb.0:204; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)205; GFX900-NEXT: v_mov_b32_e32 v0, 0206; GFX900-NEXT: ;;#ASMSTART207; GFX900-NEXT: ; def v4, v5208; GFX900-NEXT: ;;#ASMEND209; GFX900-NEXT: v_mov_b32_e32 v6, v5210; GFX900-NEXT: global_store_dwordx2 v0, v[5:6], s[16:17]211; GFX900-NEXT: s_waitcnt vmcnt(0)212; GFX900-NEXT: s_setpc_b64 s[30:31]213;214; GFX90A-LABEL: shufflevector_v2i32_11_physreg_even_vgpr_pair_copy:215; GFX90A: ; %bb.0:216; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)217; GFX90A-NEXT: v_mov_b32_e32 v0, 0218; GFX90A-NEXT: ;;#ASMSTART219; GFX90A-NEXT: ; def v4, v5220; GFX90A-NEXT: ;;#ASMEND221; GFX90A-NEXT: v_mov_b32_e32 v2, v5222; GFX90A-NEXT: v_mov_b32_e32 v3, v5223; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17]224; GFX90A-NEXT: s_waitcnt vmcnt(0)225; GFX90A-NEXT: s_setpc_b64 s[30:31]226;227; GFX940-LABEL: shufflevector_v2i32_11_physreg_even_vgpr_pair_copy:228; GFX940: ; %bb.0:229; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)230; GFX940-NEXT: v_mov_b32_e32 v0, 0231; GFX940-NEXT: ;;#ASMSTART232; GFX940-NEXT: ; def v4, v5233; GFX940-NEXT: ;;#ASMEND234; GFX940-NEXT: s_nop 0235; GFX940-NEXT: v_mov_b32_e32 v2, v5236; GFX940-NEXT: v_mov_b32_e32 v3, v5237; GFX940-NEXT: global_store_dwordx2 v0, v[2:3], s[0:1]238; GFX940-NEXT: s_waitcnt vmcnt(0)239; GFX940-NEXT: s_setpc_b64 s[30:31]240 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v5}"()241 %asm.0 = extractvalue { i32, i32 } %asm, 0242 %asm.1 = extractvalue { i32, i32 } %asm, 1243 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0244 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1245 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> splat (i32 1)246 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8247 ret void248}249 250define void @shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy(ptr addrspace(1) inreg %ptr) {251; GFX900-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy:252; GFX900: ; %bb.0:253; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX900-NEXT: v_mov_b32_e32 v0, 0255; GFX900-NEXT: ;;#ASMSTART256; GFX900-NEXT: ; def v4, v5, v6, v7257; GFX900-NEXT: ;;#ASMEND258; GFX900-NEXT: v_mov_b32_e32 v3, v5259; GFX900-NEXT: v_mov_b32_e32 v2, v6260; GFX900-NEXT: v_mov_b32_e32 v1, v7261; GFX900-NEXT: global_store_dwordx4 v0, v[1:4], s[16:17]262; GFX900-NEXT: s_waitcnt vmcnt(0)263; GFX900-NEXT: s_setpc_b64 s[30:31]264;265; GFX90A-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy:266; GFX90A: ; %bb.0:267; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)268; GFX90A-NEXT: v_mov_b32_e32 v0, 0269; GFX90A-NEXT: ;;#ASMSTART270; GFX90A-NEXT: ; def v4, v5, v6, v7271; GFX90A-NEXT: ;;#ASMEND272; GFX90A-NEXT: v_mov_b32_e32 v10, v5273; GFX90A-NEXT: v_mov_b32_e32 v9, v6274; GFX90A-NEXT: v_mov_b32_e32 v8, v7275; GFX90A-NEXT: v_mov_b32_e32 v11, v4276; GFX90A-NEXT: global_store_dwordx4 v0, v[8:11], s[16:17]277; GFX90A-NEXT: s_waitcnt vmcnt(0)278; GFX90A-NEXT: s_setpc_b64 s[30:31]279;280; GFX940-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy:281; GFX940: ; %bb.0:282; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)283; GFX940-NEXT: v_mov_b32_e32 v0, 0284; GFX940-NEXT: ;;#ASMSTART285; GFX940-NEXT: ; def v4, v5, v6, v7286; GFX940-NEXT: ;;#ASMEND287; GFX940-NEXT: s_nop 0288; GFX940-NEXT: v_mov_b32_e32 v10, v5289; GFX940-NEXT: v_mov_b32_e32 v9, v6290; GFX940-NEXT: v_mov_b32_e32 v8, v7291; GFX940-NEXT: v_mov_b32_e32 v11, v4292; GFX940-NEXT: global_store_dwordx4 v0, v[8:11], s[0:1]293; GFX940-NEXT: s_waitcnt vmcnt(0)294; GFX940-NEXT: s_setpc_b64 s[30:31]295 %asm = call { i32, i32, i32, i32 } asm "; def $0, $1, $2, $3", "={v4},={v5},={v6},={v7}"()296 %asm.0 = extractvalue { i32, i32, i32, i32 } %asm, 0297 %asm.1 = extractvalue { i32, i32, i32, i32 } %asm, 1298 %asm.2 = extractvalue { i32, i32, i32, i32 } %asm, 2299 %asm.3 = extractvalue { i32, i32, i32, i32 } %asm, 3300 301 %insert0 = insertelement <4 x i32> poison, i32 %asm.0, i32 0302 %insert1 = insertelement <4 x i32> %insert0, i32 %asm.1, i32 1303 %insert2 = insertelement <4 x i32> %insert1, i32 %asm.2, i32 2304 %insert3 = insertelement <4 x i32> %insert2, i32 %asm.3, i32 3305 306 %shuffle = shufflevector <4 x i32> %insert3, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>307 store <4 x i32> %shuffle, ptr addrspace(1) %ptr, align 8308 ret void309}310 311 312 313define void @shufflevector_v4i32_1032_physreg_even_vgpr_quad_copy(ptr addrspace(1) inreg %ptr) {314; GFX900-LABEL: shufflevector_v4i32_1032_physreg_even_vgpr_quad_copy:315; GFX900: ; %bb.0:316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX900-NEXT: ;;#ASMSTART318; GFX900-NEXT: ; def v4, v5, v6, v7319; GFX900-NEXT: ;;#ASMEND320; GFX900-NEXT: v_mov_b32_e32 v0, 0321; GFX900-NEXT: v_mov_b32_e32 v3, v5322; GFX900-NEXT: v_mov_b32_e32 v5, v7323; GFX900-NEXT: global_store_dwordx4 v0, v[3:6], s[16:17]324; GFX900-NEXT: s_waitcnt vmcnt(0)325; GFX900-NEXT: s_setpc_b64 s[30:31]326;327; GFX90A-LABEL: shufflevector_v4i32_1032_physreg_even_vgpr_quad_copy:328; GFX90A: ; %bb.0:329; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)330; GFX90A-NEXT: v_mov_b32_e32 v0, 0331; GFX90A-NEXT: ;;#ASMSTART332; GFX90A-NEXT: ; def v4, v5, v6, v7333; GFX90A-NEXT: ;;#ASMEND334; GFX90A-NEXT: v_mov_b32_e32 v8, v5335; GFX90A-NEXT: v_mov_b32_e32 v11, v6336; GFX90A-NEXT: v_mov_b32_e32 v10, v7337; GFX90A-NEXT: v_mov_b32_e32 v9, v4338; GFX90A-NEXT: global_store_dwordx4 v0, v[8:11], s[16:17]339; GFX90A-NEXT: s_waitcnt vmcnt(0)340; GFX90A-NEXT: s_setpc_b64 s[30:31]341;342; GFX940-LABEL: shufflevector_v4i32_1032_physreg_even_vgpr_quad_copy:343; GFX940: ; %bb.0:344; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)345; GFX940-NEXT: v_mov_b32_e32 v0, 0346; GFX940-NEXT: ;;#ASMSTART347; GFX940-NEXT: ; def v4, v5, v6, v7348; GFX940-NEXT: ;;#ASMEND349; GFX940-NEXT: s_nop 0350; GFX940-NEXT: v_mov_b32_e32 v8, v5351; GFX940-NEXT: v_mov_b32_e32 v11, v6352; GFX940-NEXT: v_mov_b32_e32 v10, v7353; GFX940-NEXT: v_mov_b32_e32 v9, v4354; GFX940-NEXT: global_store_dwordx4 v0, v[8:11], s[0:1]355; GFX940-NEXT: s_waitcnt vmcnt(0)356; GFX940-NEXT: s_setpc_b64 s[30:31]357 %asm = call { i32, i32, i32, i32 } asm "; def $0, $1, $2, $3", "={v4},={v5},={v6},={v7}"()358 %asm.0 = extractvalue { i32, i32, i32, i32 } %asm, 0359 %asm.1 = extractvalue { i32, i32, i32, i32 } %asm, 1360 %asm.2 = extractvalue { i32, i32, i32, i32 } %asm, 2361 %asm.3 = extractvalue { i32, i32, i32, i32 } %asm, 3362 363 %insert0 = insertelement <4 x i32> poison, i32 %asm.0, i32 0364 %insert1 = insertelement <4 x i32> %insert0, i32 %asm.1, i32 1365 %insert2 = insertelement <4 x i32> %insert1, i32 %asm.2, i32 2366 %insert3 = insertelement <4 x i32> %insert2, i32 %asm.3, i32 3367 368 %shuffle = shufflevector <4 x i32> %insert3, <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>369 store <4 x i32> %shuffle, ptr addrspace(1) %ptr, align 8370 ret void371}372 373define void @shufflevector_v4i32_1132_physreg_even_vgpr_quad_copy(ptr addrspace(1) inreg %ptr) {374; GFX900-LABEL: shufflevector_v4i32_1132_physreg_even_vgpr_quad_copy:375; GFX900: ; %bb.0:376; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX900-NEXT: ;;#ASMSTART378; GFX900-NEXT: ; def v4, v5, v6, v7379; GFX900-NEXT: ;;#ASMEND380; GFX900-NEXT: v_mov_b32_e32 v0, 0381; GFX900-NEXT: v_mov_b32_e32 v8, v6382; GFX900-NEXT: v_mov_b32_e32 v6, v5383; GFX900-NEXT: global_store_dwordx4 v0, v[5:8], s[16:17]384; GFX900-NEXT: s_waitcnt vmcnt(0)385; GFX900-NEXT: s_setpc_b64 s[30:31]386;387; GFX90A-LABEL: shufflevector_v4i32_1132_physreg_even_vgpr_quad_copy:388; GFX90A: ; %bb.0:389; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX90A-NEXT: v_mov_b32_e32 v8, 0391; GFX90A-NEXT: ;;#ASMSTART392; GFX90A-NEXT: ; def v4, v5, v6, v7393; GFX90A-NEXT: ;;#ASMEND394; GFX90A-NEXT: v_mov_b32_e32 v0, v5395; GFX90A-NEXT: v_pk_mov_b32 v[2:3], v[6:7], v[6:7] op_sel:[1,0]396; GFX90A-NEXT: v_mov_b32_e32 v1, v5397; GFX90A-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17]398; GFX90A-NEXT: s_waitcnt vmcnt(0)399; GFX90A-NEXT: s_setpc_b64 s[30:31]400;401; GFX940-LABEL: shufflevector_v4i32_1132_physreg_even_vgpr_quad_copy:402; GFX940: ; %bb.0:403; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)404; GFX940-NEXT: v_mov_b32_e32 v8, 0405; GFX940-NEXT: ;;#ASMSTART406; GFX940-NEXT: ; def v4, v5, v6, v7407; GFX940-NEXT: ;;#ASMEND408; GFX940-NEXT: s_nop 0409; GFX940-NEXT: v_mov_b32_e32 v0, v5410; GFX940-NEXT: v_pk_mov_b32 v[2:3], v[6:7], v[6:7] op_sel:[1,0]411; GFX940-NEXT: v_mov_b32_e32 v1, v5412; GFX940-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]413; GFX940-NEXT: s_waitcnt vmcnt(0)414; GFX940-NEXT: s_setpc_b64 s[30:31]415 %asm = call { i32, i32, i32, i32 } asm "; def $0, $1, $2, $3", "={v4},={v5},={v6},={v7}"()416 %asm.0 = extractvalue { i32, i32, i32, i32 } %asm, 0417 %asm.1 = extractvalue { i32, i32, i32, i32 } %asm, 1418 %asm.2 = extractvalue { i32, i32, i32, i32 } %asm, 2419 %asm.3 = extractvalue { i32, i32, i32, i32 } %asm, 3420 421 %insert0 = insertelement <4 x i32> poison, i32 %asm.0, i32 0422 %insert1 = insertelement <4 x i32> %insert0, i32 %asm.1, i32 1423 %insert2 = insertelement <4 x i32> %insert1, i32 %asm.2, i32 2424 %insert3 = insertelement <4 x i32> %insert2, i32 %asm.3, i32 3425 426 %shuffle = shufflevector <4 x i32> %insert3, <4 x i32> poison, <4 x i32> <i32 1, i32 1, i32 3, i32 2>427 store <4 x i32> %shuffle, ptr addrspace(1) %ptr, align 8428 ret void429}430 431define void @shufflevector_v4i32_3201_physreg_even_vgpr_quad_copy(ptr addrspace(1) inreg %ptr) {432; GFX900-LABEL: shufflevector_v4i32_3201_physreg_even_vgpr_quad_copy:433; GFX900: ; %bb.0:434; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)435; GFX900-NEXT: v_mov_b32_e32 v0, 0436; GFX900-NEXT: ;;#ASMSTART437; GFX900-NEXT: ; def v4, v5, v6, v7438; GFX900-NEXT: ;;#ASMEND439; GFX900-NEXT: v_mov_b32_e32 v3, v6440; GFX900-NEXT: v_mov_b32_e32 v2, v7441; GFX900-NEXT: global_store_dwordx4 v0, v[2:5], s[16:17]442; GFX900-NEXT: s_waitcnt vmcnt(0)443; GFX900-NEXT: s_setpc_b64 s[30:31]444;445; GFX90A-LABEL: shufflevector_v4i32_3201_physreg_even_vgpr_quad_copy:446; GFX90A: ; %bb.0:447; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)448; GFX90A-NEXT: v_mov_b32_e32 v0, 0449; GFX90A-NEXT: ;;#ASMSTART450; GFX90A-NEXT: ; def v4, v5, v6, v7451; GFX90A-NEXT: ;;#ASMEND452; GFX90A-NEXT: v_mov_b32_e32 v3, v6453; GFX90A-NEXT: v_mov_b32_e32 v2, v7454; GFX90A-NEXT: global_store_dwordx4 v0, v[2:5], s[16:17]455; GFX90A-NEXT: s_waitcnt vmcnt(0)456; GFX90A-NEXT: s_setpc_b64 s[30:31]457;458; GFX940-LABEL: shufflevector_v4i32_3201_physreg_even_vgpr_quad_copy:459; GFX940: ; %bb.0:460; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; GFX940-NEXT: v_mov_b32_e32 v0, 0462; GFX940-NEXT: ;;#ASMSTART463; GFX940-NEXT: ; def v4, v5, v6, v7464; GFX940-NEXT: ;;#ASMEND465; GFX940-NEXT: s_nop 0466; GFX940-NEXT: v_mov_b32_e32 v3, v6467; GFX940-NEXT: v_mov_b32_e32 v2, v7468; GFX940-NEXT: global_store_dwordx4 v0, v[2:5], s[0:1]469; GFX940-NEXT: s_waitcnt vmcnt(0)470; GFX940-NEXT: s_setpc_b64 s[30:31]471 %asm = call { i32, i32, i32, i32 } asm "; def $0, $1, $2, $3", "={v4},={v5},={v6},={v7}"()472 %asm.0 = extractvalue { i32, i32, i32, i32 } %asm, 0473 %asm.1 = extractvalue { i32, i32, i32, i32 } %asm, 1474 %asm.2 = extractvalue { i32, i32, i32, i32 } %asm, 2475 %asm.3 = extractvalue { i32, i32, i32, i32 } %asm, 3476 477 %insert0 = insertelement <4 x i32> poison, i32 %asm.0, i32 0478 %insert1 = insertelement <4 x i32> %insert0, i32 %asm.1, i32 1479 %insert2 = insertelement <4 x i32> %insert1, i32 %asm.2, i32 2480 %insert3 = insertelement <4 x i32> %insert2, i32 %asm.3, i32 3481 482 %shuffle = shufflevector <4 x i32> %insert3, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 0, i32 1>483 store <4 x i32> %shuffle, ptr addrspace(1) %ptr, align 8484 ret void485}486 487define void @shufflevector_v2i32_10_physreg_even_sgpr_pair_copy() {488; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_sgpr_pair_copy:489; GFX900: ; %bb.0:490; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)491; GFX900-NEXT: ;;#ASMSTART492; GFX900-NEXT: ; def s4, s5493; GFX900-NEXT: ;;#ASMEND494; GFX900-NEXT: s_mov_b32 s7, s4495; GFX900-NEXT: s_mov_b32 s6, s5496; GFX900-NEXT: ;;#ASMSTART497; GFX900-NEXT: ; use s[6:7]498; GFX900-NEXT: ;;#ASMEND499; GFX900-NEXT: s_setpc_b64 s[30:31]500;501; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_sgpr_pair_copy:502; GFX90A: ; %bb.0:503; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)504; GFX90A-NEXT: ;;#ASMSTART505; GFX90A-NEXT: ; def s4, s5506; GFX90A-NEXT: ;;#ASMEND507; GFX90A-NEXT: s_mov_b32 s7, s4508; GFX90A-NEXT: s_mov_b32 s6, s5509; GFX90A-NEXT: ;;#ASMSTART510; GFX90A-NEXT: ; use s[6:7]511; GFX90A-NEXT: ;;#ASMEND512; GFX90A-NEXT: s_setpc_b64 s[30:31]513;514; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_sgpr_pair_copy:515; GFX940: ; %bb.0:516; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)517; GFX940-NEXT: ;;#ASMSTART518; GFX940-NEXT: ; def s4, s5519; GFX940-NEXT: ;;#ASMEND520; GFX940-NEXT: s_mov_b32 s1, s4521; GFX940-NEXT: s_mov_b32 s0, s5522; GFX940-NEXT: ;;#ASMSTART523; GFX940-NEXT: ; use s[0:1]524; GFX940-NEXT: ;;#ASMEND525; GFX940-NEXT: s_setpc_b64 s[30:31]526 %asm = call { i32, i32 } asm "; def $0, $1", "={s4},={s5}"()527 %asm.0 = extractvalue { i32, i32 } %asm, 0528 %asm.1 = extractvalue { i32, i32 } %asm, 1529 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0530 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1531 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>532 call void asm sideeffect "; use $0", "s"(<2 x i32> %shuffle)533 ret void534}535 536define void @shufflevector_v2i32_10_physreg_odd_sgpr_pair_copy() {537; GFX9-LABEL: shufflevector_v2i32_10_physreg_odd_sgpr_pair_copy:538; GFX9: ; %bb.0:539; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)540; GFX9-NEXT: ;;#ASMSTART541; GFX9-NEXT: ; def s5, s6542; GFX9-NEXT: ;;#ASMEND543; GFX9-NEXT: s_mov_b32 s7, s5544; GFX9-NEXT: ;;#ASMSTART545; GFX9-NEXT: ; use s[6:7]546; GFX9-NEXT: ;;#ASMEND547; GFX9-NEXT: s_setpc_b64 s[30:31]548 %asm = call { i32, i32 } asm "; def $0, $1", "={s5},={s6}"()549 %asm.0 = extractvalue { i32, i32 } %asm, 0550 %asm.1 = extractvalue { i32, i32 } %asm, 1551 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0552 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1553 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>554 call void asm sideeffect "; use $0", "s"(<2 x i32> %shuffle)555 ret void556}557 558define void @shufflevector_v2i32_10_physreg_even_agpr_pair_copy(ptr addrspace(1) inreg %ptr) {559; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_agpr_pair_copy:560; GFX900: ; %bb.0:561; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)562; GFX900-NEXT: v_mov_b32_e32 v2, 0563; GFX900-NEXT: ;;#ASMSTART564; GFX900-NEXT: ; def a4, a5565; GFX900-NEXT: ;;#ASMEND566; GFX900-NEXT: v_accvgpr_read_b32 v0, a5567; GFX900-NEXT: v_accvgpr_read_b32 v1, a4568; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]569; GFX900-NEXT: s_waitcnt vmcnt(0)570; GFX900-NEXT: s_setpc_b64 s[30:31]571;572; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_agpr_pair_copy:573; GFX90A: ; %bb.0:574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)575; GFX90A-NEXT: v_mov_b32_e32 v0, 0576; GFX90A-NEXT: ;;#ASMSTART577; GFX90A-NEXT: ; def a4, a5578; GFX90A-NEXT: ;;#ASMEND579; GFX90A-NEXT: v_accvgpr_read_b32 v2, a5580; GFX90A-NEXT: v_accvgpr_read_b32 v3, a4581; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17]582; GFX90A-NEXT: s_waitcnt vmcnt(0)583; GFX90A-NEXT: s_setpc_b64 s[30:31]584;585; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_agpr_pair_copy:586; GFX940: ; %bb.0:587; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)588; GFX940-NEXT: v_mov_b32_e32 v0, 0589; GFX940-NEXT: ;;#ASMSTART590; GFX940-NEXT: ; def a4, a5591; GFX940-NEXT: ;;#ASMEND592; GFX940-NEXT: s_nop 0593; GFX940-NEXT: v_accvgpr_read_b32 v2, a5594; GFX940-NEXT: v_accvgpr_read_b32 v3, a4595; GFX940-NEXT: global_store_dwordx2 v0, v[2:3], s[0:1]596; GFX940-NEXT: s_waitcnt vmcnt(0)597; GFX940-NEXT: s_setpc_b64 s[30:31]598 %asm = call { i32, i32 } asm "; def $0, $1", "={a4},={a5}"()599 %asm.0 = extractvalue { i32, i32 } %asm, 0600 %asm.1 = extractvalue { i32, i32 } %asm, 1601 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0602 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1603 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>604 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8605 ret void606}607 608define void @shufflevector_v2i32_10_physreg_odd_agpr_pair_copy(ptr addrspace(1) inreg %ptr) {609; GFX900-LABEL: shufflevector_v2i32_10_physreg_odd_agpr_pair_copy:610; GFX900: ; %bb.0:611; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)612; GFX900-NEXT: v_mov_b32_e32 v2, 0613; GFX900-NEXT: ;;#ASMSTART614; GFX900-NEXT: ; def a5, a6615; GFX900-NEXT: ;;#ASMEND616; GFX900-NEXT: v_accvgpr_read_b32 v0, a6617; GFX900-NEXT: v_accvgpr_read_b32 v1, a5618; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]619; GFX900-NEXT: s_waitcnt vmcnt(0)620; GFX900-NEXT: s_setpc_b64 s[30:31]621;622; GFX90A-LABEL: shufflevector_v2i32_10_physreg_odd_agpr_pair_copy:623; GFX90A: ; %bb.0:624; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)625; GFX90A-NEXT: v_mov_b32_e32 v0, 0626; GFX90A-NEXT: ;;#ASMSTART627; GFX90A-NEXT: ; def a5, a6628; GFX90A-NEXT: ;;#ASMEND629; GFX90A-NEXT: v_accvgpr_mov_b32 a4, a6630; GFX90A-NEXT: global_store_dwordx2 v0, a[4:5], s[16:17]631; GFX90A-NEXT: s_waitcnt vmcnt(0)632; GFX90A-NEXT: s_setpc_b64 s[30:31]633;634; GFX940-LABEL: shufflevector_v2i32_10_physreg_odd_agpr_pair_copy:635; GFX940: ; %bb.0:636; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX940-NEXT: v_mov_b32_e32 v0, 0638; GFX940-NEXT: ;;#ASMSTART639; GFX940-NEXT: ; def a5, a6640; GFX940-NEXT: ;;#ASMEND641; GFX940-NEXT: s_nop 0642; GFX940-NEXT: v_accvgpr_mov_b32 a4, a6643; GFX940-NEXT: global_store_dwordx2 v0, a[4:5], s[0:1]644; GFX940-NEXT: s_waitcnt vmcnt(0)645; GFX940-NEXT: s_setpc_b64 s[30:31]646 %asm = call { i32, i32 } asm "; def $0, $1", "={a5},={a6}"()647 %asm.0 = extractvalue { i32, i32 } %asm, 0648 %asm.1 = extractvalue { i32, i32 } %asm, 1649 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0650 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1651 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>652 store <2 x i32> %shuffle, ptr addrspace(1) %ptr, align 8653 ret void654}655 656define i32 @shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt0(ptr addrspace(1) inreg %ptr) {657; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt0:658; GFX900: ; %bb.0:659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)660; GFX900-NEXT: ;;#ASMSTART661; GFX900-NEXT: ; def v4, v5662; GFX900-NEXT: ;;#ASMEND663; GFX900-NEXT: v_mov_b32_e32 v0, v4664; GFX900-NEXT: s_setpc_b64 s[30:31]665;666; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt0:667; GFX90A: ; %bb.0:668; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)669; GFX90A-NEXT: ;;#ASMSTART670; GFX90A-NEXT: ; def v4, v5671; GFX90A-NEXT: ;;#ASMEND672; GFX90A-NEXT: v_mov_b32_e32 v0, v4673; GFX90A-NEXT: s_setpc_b64 s[30:31]674;675; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt0:676; GFX940: ; %bb.0:677; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)678; GFX940-NEXT: ;;#ASMSTART679; GFX940-NEXT: ; def v4, v5680; GFX940-NEXT: ;;#ASMEND681; GFX940-NEXT: s_nop 0682; GFX940-NEXT: v_mov_b32_e32 v0, v4683; GFX940-NEXT: s_setpc_b64 s[30:31]684 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v5}"()685 %asm.0 = extractvalue { i32, i32 } %asm, 0686 %asm.1 = extractvalue { i32, i32 } %asm, 1687 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0688 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1689 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>690 ret i32 %asm.0 ; other use of copy691}692 693define i32 @shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt1(ptr addrspace(1) inreg %ptr) {694; GFX900-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt1:695; GFX900: ; %bb.0:696; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX900-NEXT: ;;#ASMSTART698; GFX900-NEXT: ; def v4, v5699; GFX900-NEXT: ;;#ASMEND700; GFX900-NEXT: v_mov_b32_e32 v0, v5701; GFX900-NEXT: s_setpc_b64 s[30:31]702;703; GFX90A-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt1:704; GFX90A: ; %bb.0:705; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)706; GFX90A-NEXT: ;;#ASMSTART707; GFX90A-NEXT: ; def v4, v5708; GFX90A-NEXT: ;;#ASMEND709; GFX90A-NEXT: v_mov_b32_e32 v0, v5710; GFX90A-NEXT: s_setpc_b64 s[30:31]711;712; GFX940-LABEL: shufflevector_v2i32_10_physreg_even_vgpr_pair_copy_other_use_elt1:713; GFX940: ; %bb.0:714; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)715; GFX940-NEXT: ;;#ASMSTART716; GFX940-NEXT: ; def v4, v5717; GFX940-NEXT: ;;#ASMEND718; GFX940-NEXT: s_nop 0719; GFX940-NEXT: v_mov_b32_e32 v0, v5720; GFX940-NEXT: s_setpc_b64 s[30:31]721 %asm = call { i32, i32 } asm "; def $0, $1", "={v4},={v5}"()722 %asm.0 = extractvalue { i32, i32 } %asm, 0723 %asm.1 = extractvalue { i32, i32 } %asm, 1724 %insert0 = insertelement <2 x i32> poison, i32 %asm.0, i32 0725 %insert1 = insertelement <2 x i32> %insert0, i32 %asm.1, i32 1726 %shuffle = shufflevector <2 x i32> %insert1, <2 x i32> poison, <2 x i32> <i32 1, i32 0>727 ret i32 %asm.1 ; other use of copy728}729 730define i32 @shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy_other_use_elt(ptr addrspace(1) inreg %ptr) {731; GFX900-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy_other_use_elt:732; GFX900: ; %bb.0:733; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)734; GFX900-NEXT: v_mov_b32_e32 v0, 0735; GFX900-NEXT: ;;#ASMSTART736; GFX900-NEXT: ; def v4, v5, v6, v7737; GFX900-NEXT: ;;#ASMEND738; GFX900-NEXT: v_mov_b32_e32 v9, v5739; GFX900-NEXT: v_mov_b32_e32 v8, v6740; GFX900-NEXT: v_mov_b32_e32 v10, v4741; GFX900-NEXT: global_store_dwordx4 v0, v[7:10], s[16:17]742; GFX900-NEXT: v_mov_b32_e32 v0, v6743; GFX900-NEXT: s_waitcnt vmcnt(0)744; GFX900-NEXT: s_setpc_b64 s[30:31]745;746; GFX90A-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy_other_use_elt:747; GFX90A: ; %bb.0:748; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)749; GFX90A-NEXT: v_mov_b32_e32 v0, 0750; GFX90A-NEXT: ;;#ASMSTART751; GFX90A-NEXT: ; def v4, v5, v6, v7752; GFX90A-NEXT: ;;#ASMEND753; GFX90A-NEXT: v_mov_b32_e32 v10, v5754; GFX90A-NEXT: v_mov_b32_e32 v9, v6755; GFX90A-NEXT: v_mov_b32_e32 v8, v7756; GFX90A-NEXT: v_mov_b32_e32 v11, v4757; GFX90A-NEXT: global_store_dwordx4 v0, v[8:11], s[16:17]758; GFX90A-NEXT: v_mov_b32_e32 v0, v6759; GFX90A-NEXT: s_waitcnt vmcnt(0)760; GFX90A-NEXT: s_setpc_b64 s[30:31]761;762; GFX940-LABEL: shufflevector_v4i32_3210_physreg_even_vgpr_quad_copy_other_use_elt:763; GFX940: ; %bb.0:764; GFX940-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)765; GFX940-NEXT: v_mov_b32_e32 v0, 0766; GFX940-NEXT: ;;#ASMSTART767; GFX940-NEXT: ; def v4, v5, v6, v7768; GFX940-NEXT: ;;#ASMEND769; GFX940-NEXT: s_nop 0770; GFX940-NEXT: v_mov_b32_e32 v10, v5771; GFX940-NEXT: v_mov_b32_e32 v9, v6772; GFX940-NEXT: v_mov_b32_e32 v8, v7773; GFX940-NEXT: v_mov_b32_e32 v11, v4774; GFX940-NEXT: global_store_dwordx4 v0, v[8:11], s[0:1]775; GFX940-NEXT: v_mov_b32_e32 v0, v6776; GFX940-NEXT: s_waitcnt vmcnt(0)777; GFX940-NEXT: s_setpc_b64 s[30:31]778 %asm = call { i32, i32, i32, i32 } asm "; def $0, $1, $2, $3", "={v4},={v5},={v6},={v7}"()779 %asm.0 = extractvalue { i32, i32, i32, i32 } %asm, 0780 %asm.1 = extractvalue { i32, i32, i32, i32 } %asm, 1781 %asm.2 = extractvalue { i32, i32, i32, i32 } %asm, 2782 %asm.3 = extractvalue { i32, i32, i32, i32 } %asm, 3783 784 %insert0 = insertelement <4 x i32> poison, i32 %asm.0, i32 0785 %insert1 = insertelement <4 x i32> %insert0, i32 %asm.1, i32 1786 %insert2 = insertelement <4 x i32> %insert1, i32 %asm.2, i32 2787 %insert3 = insertelement <4 x i32> %insert2, i32 %asm.3, i32 3788 789 %shuffle = shufflevector <4 x i32> %insert3, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>790 store <4 x i32> %shuffle, ptr addrspace(1) %ptr, align 8791 ret i32 %asm.2792}793;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:794; GFX90APLUS: {{.*}}795