brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.5 KiB · 58c8462 Raw
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