3805 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v3p0_v2p0__u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v3p0_v2p0__u_u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <2 x ptr> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> poison14 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 3215 ret void16}17 18define void @v_shuffle_v3p0_v2p0__0_u_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_u_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v4, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v[0:3]25; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_u_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v4, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v[0:3]36; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v3p0_v2p0__0_u_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v4, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v[0:3]47; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x ptr> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 poison, i32 poison>53 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 3254 ret void55}56 57define void @v_shuffle_v3p0_v2p0__1_u_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_u_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: v_mov_b32_e32 v4, 062; GFX900-NEXT: ;;#ASMSTART63; GFX900-NEXT: ; def v[0:3]64; GFX900-NEXT: ;;#ASMEND65; GFX900-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]66; GFX900-NEXT: s_waitcnt vmcnt(0)67; GFX900-NEXT: s_setpc_b64 s[30:31]68;69; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_u_u:70; GFX90A: ; %bb.0:71; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX90A-NEXT: v_mov_b32_e32 v4, 073; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v[0:3]75; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]77; GFX90A-NEXT: s_waitcnt vmcnt(0)78; GFX90A-NEXT: s_setpc_b64 s[30:31]79;80; GFX942-LABEL: v_shuffle_v3p0_v2p0__1_u_u:81; GFX942: ; %bb.0:82; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)83; GFX942-NEXT: v_mov_b32_e32 v4, 084; GFX942-NEXT: ;;#ASMSTART85; GFX942-NEXT: ; def v[0:3]86; GFX942-NEXT: ;;#ASMEND87; GFX942-NEXT: global_store_dwordx4 v4, v[2:5], s[0:1]88; GFX942-NEXT: s_waitcnt vmcnt(0)89; GFX942-NEXT: s_setpc_b64 s[30:31]90 %vec0 = call <2 x ptr> asm "; def $0", "=v"()91 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 poison, i32 poison>92 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 3293 ret void94}95 96define void @v_shuffle_v3p0_v2p0__2_u_u(ptr addrspace(1) inreg %ptr) {97; GFX9-LABEL: v_shuffle_v3p0_v2p0__2_u_u:98; GFX9: ; %bb.0:99; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GFX9-NEXT: s_setpc_b64 s[30:31]101 %vec0 = call <2 x ptr> asm "; def $0", "=v"()102 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 poison, i32 poison>103 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32104 ret void105}106 107define void @v_shuffle_v3p0_v2p0__3_u_u(ptr addrspace(1) inreg %ptr) {108; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_u:109; GFX900: ; %bb.0:110; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)111; GFX900-NEXT: v_mov_b32_e32 v4, 0112; GFX900-NEXT: ;;#ASMSTART113; GFX900-NEXT: ; def v[0:3]114; GFX900-NEXT: ;;#ASMEND115; GFX900-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]116; GFX900-NEXT: s_waitcnt vmcnt(0)117; GFX900-NEXT: s_setpc_b64 s[30:31]118;119; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_u:120; GFX90A: ; %bb.0:121; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)122; GFX90A-NEXT: v_mov_b32_e32 v4, 0123; GFX90A-NEXT: ;;#ASMSTART124; GFX90A-NEXT: ; def v[0:3]125; GFX90A-NEXT: ;;#ASMEND126; GFX90A-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]127; GFX90A-NEXT: s_waitcnt vmcnt(0)128; GFX90A-NEXT: s_setpc_b64 s[30:31]129;130; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_u_u:131; GFX942: ; %bb.0:132; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)133; GFX942-NEXT: v_mov_b32_e32 v4, 0134; GFX942-NEXT: ;;#ASMSTART135; GFX942-NEXT: ; def v[0:3]136; GFX942-NEXT: ;;#ASMEND137; GFX942-NEXT: global_store_dwordx4 v4, v[2:5], s[0:1]138; GFX942-NEXT: s_waitcnt vmcnt(0)139; GFX942-NEXT: s_setpc_b64 s[30:31]140 %vec0 = call <2 x ptr> asm "; def $0", "=v"()141 %vec1 = call <2 x ptr> asm "; def $0", "=v"()142 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>143 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32144 ret void145}146 147define void @v_shuffle_v3p0_v2p0__3_0_u(ptr addrspace(1) inreg %ptr) {148; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_u:149; GFX900: ; %bb.0:150; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)151; GFX900-NEXT: v_mov_b32_e32 v8, 0152; GFX900-NEXT: ;;#ASMSTART153; GFX900-NEXT: ; def v[4:7]154; GFX900-NEXT: ;;#ASMEND155; GFX900-NEXT: ;;#ASMSTART156; GFX900-NEXT: ; def v[0:3]157; GFX900-NEXT: ;;#ASMEND158; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]159; GFX900-NEXT: s_waitcnt vmcnt(0)160; GFX900-NEXT: s_setpc_b64 s[30:31]161;162; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_u:163; GFX90A: ; %bb.0:164; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)165; GFX90A-NEXT: v_mov_b32_e32 v8, 0166; GFX90A-NEXT: ;;#ASMSTART167; GFX90A-NEXT: ; def v[4:7]168; GFX90A-NEXT: ;;#ASMEND169; GFX90A-NEXT: ;;#ASMSTART170; GFX90A-NEXT: ; def v[0:3]171; GFX90A-NEXT: ;;#ASMEND172; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]173; GFX90A-NEXT: s_waitcnt vmcnt(0)174; GFX90A-NEXT: s_setpc_b64 s[30:31]175;176; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_0_u:177; GFX942: ; %bb.0:178; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)179; GFX942-NEXT: v_mov_b32_e32 v8, 0180; GFX942-NEXT: ;;#ASMSTART181; GFX942-NEXT: ; def v[4:7]182; GFX942-NEXT: ;;#ASMEND183; GFX942-NEXT: ;;#ASMSTART184; GFX942-NEXT: ; def v[0:3]185; GFX942-NEXT: ;;#ASMEND186; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]187; GFX942-NEXT: s_waitcnt vmcnt(0)188; GFX942-NEXT: s_setpc_b64 s[30:31]189 %vec0 = call <2 x ptr> asm "; def $0", "=v"()190 %vec1 = call <2 x ptr> asm "; def $0", "=v"()191 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>192 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32193 ret void194}195 196define void @v_shuffle_v3p0_v2p0__3_1_u(ptr addrspace(1) inreg %ptr) {197; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_u:198; GFX900: ; %bb.0:199; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)200; GFX900-NEXT: v_mov_b32_e32 v6, 0201; GFX900-NEXT: ;;#ASMSTART202; GFX900-NEXT: ; def v[2:5]203; GFX900-NEXT: ;;#ASMEND204; GFX900-NEXT: ;;#ASMSTART205; GFX900-NEXT: ; def v[0:3]206; GFX900-NEXT: ;;#ASMEND207; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]208; GFX900-NEXT: s_waitcnt vmcnt(0)209; GFX900-NEXT: s_setpc_b64 s[30:31]210;211; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_u:212; GFX90A: ; %bb.0:213; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX90A-NEXT: v_mov_b32_e32 v6, 0215; GFX90A-NEXT: ;;#ASMSTART216; GFX90A-NEXT: ; def v[2:5]217; GFX90A-NEXT: ;;#ASMEND218; GFX90A-NEXT: ;;#ASMSTART219; GFX90A-NEXT: ; def v[0:3]220; GFX90A-NEXT: ;;#ASMEND221; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]222; GFX90A-NEXT: s_waitcnt vmcnt(0)223; GFX90A-NEXT: s_setpc_b64 s[30:31]224;225; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_1_u:226; GFX942: ; %bb.0:227; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX942-NEXT: v_mov_b32_e32 v6, 0229; GFX942-NEXT: ;;#ASMSTART230; GFX942-NEXT: ; def v[2:5]231; GFX942-NEXT: ;;#ASMEND232; GFX942-NEXT: s_nop 0233; GFX942-NEXT: ;;#ASMSTART234; GFX942-NEXT: ; def v[0:3]235; GFX942-NEXT: ;;#ASMEND236; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]237; GFX942-NEXT: s_waitcnt vmcnt(0)238; GFX942-NEXT: s_setpc_b64 s[30:31]239 %vec0 = call <2 x ptr> asm "; def $0", "=v"()240 %vec1 = call <2 x ptr> asm "; def $0", "=v"()241 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>242 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32243 ret void244}245 246define void @v_shuffle_v3p0_v2p0__3_2_u(ptr addrspace(1) inreg %ptr) {247; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_u:248; GFX900: ; %bb.0:249; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)250; GFX900-NEXT: v_mov_b32_e32 v6, 0251; GFX900-NEXT: ;;#ASMSTART252; GFX900-NEXT: ; def v[0:3]253; GFX900-NEXT: ;;#ASMEND254; GFX900-NEXT: v_mov_b32_e32 v4, v0255; GFX900-NEXT: v_mov_b32_e32 v5, v1256; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]257; GFX900-NEXT: s_waitcnt vmcnt(0)258; GFX900-NEXT: s_setpc_b64 s[30:31]259;260; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_u:261; GFX90A: ; %bb.0:262; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)263; GFX90A-NEXT: v_mov_b32_e32 v6, 0264; GFX90A-NEXT: ;;#ASMSTART265; GFX90A-NEXT: ; def v[0:3]266; GFX90A-NEXT: ;;#ASMEND267; GFX90A-NEXT: v_mov_b32_e32 v4, v0268; GFX90A-NEXT: v_mov_b32_e32 v5, v1269; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]270; GFX90A-NEXT: s_waitcnt vmcnt(0)271; GFX90A-NEXT: s_setpc_b64 s[30:31]272;273; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_2_u:274; GFX942: ; %bb.0:275; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)276; GFX942-NEXT: v_mov_b32_e32 v6, 0277; GFX942-NEXT: ;;#ASMSTART278; GFX942-NEXT: ; def v[0:3]279; GFX942-NEXT: ;;#ASMEND280; GFX942-NEXT: s_nop 0281; GFX942-NEXT: v_mov_b32_e32 v4, v0282; GFX942-NEXT: v_mov_b32_e32 v5, v1283; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]284; GFX942-NEXT: s_waitcnt vmcnt(0)285; GFX942-NEXT: s_setpc_b64 s[30:31]286 %vec0 = call <2 x ptr> asm "; def $0", "=v"()287 %vec1 = call <2 x ptr> asm "; def $0", "=v"()288 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>289 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32290 ret void291}292 293define void @v_shuffle_v3p0_v2p0__3_3_u(ptr addrspace(1) inreg %ptr) {294; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_u:295; GFX900: ; %bb.0:296; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GFX900-NEXT: v_mov_b32_e32 v6, 0298; GFX900-NEXT: ;;#ASMSTART299; GFX900-NEXT: ; def v[0:3]300; GFX900-NEXT: ;;#ASMEND301; GFX900-NEXT: v_mov_b32_e32 v4, v2302; GFX900-NEXT: v_mov_b32_e32 v5, v3303; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]304; GFX900-NEXT: s_waitcnt vmcnt(0)305; GFX900-NEXT: s_setpc_b64 s[30:31]306;307; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_u:308; GFX90A: ; %bb.0:309; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)310; GFX90A-NEXT: v_mov_b32_e32 v6, 0311; GFX90A-NEXT: ;;#ASMSTART312; GFX90A-NEXT: ; def v[0:3]313; GFX90A-NEXT: ;;#ASMEND314; GFX90A-NEXT: v_mov_b32_e32 v4, v2315; GFX90A-NEXT: v_mov_b32_e32 v5, v3316; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]317; GFX90A-NEXT: s_waitcnt vmcnt(0)318; GFX90A-NEXT: s_setpc_b64 s[30:31]319;320; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_3_u:321; GFX942: ; %bb.0:322; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)323; GFX942-NEXT: v_mov_b32_e32 v6, 0324; GFX942-NEXT: ;;#ASMSTART325; GFX942-NEXT: ; def v[0:3]326; GFX942-NEXT: ;;#ASMEND327; GFX942-NEXT: s_nop 0328; GFX942-NEXT: v_mov_b32_e32 v4, v2329; GFX942-NEXT: v_mov_b32_e32 v5, v3330; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]331; GFX942-NEXT: s_waitcnt vmcnt(0)332; GFX942-NEXT: s_setpc_b64 s[30:31]333 %vec0 = call <2 x ptr> asm "; def $0", "=v"()334 %vec1 = call <2 x ptr> asm "; def $0", "=v"()335 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>336 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32337 ret void338}339 340define void @v_shuffle_v3p0_v2p0__3_3_0(ptr addrspace(1) inreg %ptr) {341; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_0:342; GFX900: ; %bb.0:343; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GFX900-NEXT: v_mov_b32_e32 v8, 0345; GFX900-NEXT: ;;#ASMSTART346; GFX900-NEXT: ; def v[4:7]347; GFX900-NEXT: ;;#ASMEND348; GFX900-NEXT: ;;#ASMSTART349; GFX900-NEXT: ; def v[0:3]350; GFX900-NEXT: ;;#ASMEND351; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16352; GFX900-NEXT: v_mov_b32_e32 v4, v2353; GFX900-NEXT: v_mov_b32_e32 v5, v3354; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]355; GFX900-NEXT: s_waitcnt vmcnt(0)356; GFX900-NEXT: s_setpc_b64 s[30:31]357;358; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_0:359; GFX90A: ; %bb.0:360; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)361; GFX90A-NEXT: v_mov_b32_e32 v8, 0362; GFX90A-NEXT: ;;#ASMSTART363; GFX90A-NEXT: ; def v[4:7]364; GFX90A-NEXT: ;;#ASMEND365; GFX90A-NEXT: ;;#ASMSTART366; GFX90A-NEXT: ; def v[0:3]367; GFX90A-NEXT: ;;#ASMEND368; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16369; GFX90A-NEXT: v_mov_b32_e32 v4, v2370; GFX90A-NEXT: v_mov_b32_e32 v5, v3371; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]372; GFX90A-NEXT: s_waitcnt vmcnt(0)373; GFX90A-NEXT: s_setpc_b64 s[30:31]374;375; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_3_0:376; GFX942: ; %bb.0:377; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)378; GFX942-NEXT: v_mov_b32_e32 v8, 0379; GFX942-NEXT: ;;#ASMSTART380; GFX942-NEXT: ; def v[4:7]381; GFX942-NEXT: ;;#ASMEND382; GFX942-NEXT: ;;#ASMSTART383; GFX942-NEXT: ; def v[0:3]384; GFX942-NEXT: ;;#ASMEND385; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] offset:16386; GFX942-NEXT: v_mov_b32_e32 v4, v2387; GFX942-NEXT: v_mov_b32_e32 v5, v3388; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]389; GFX942-NEXT: s_waitcnt vmcnt(0)390; GFX942-NEXT: s_setpc_b64 s[30:31]391 %vec0 = call <2 x ptr> asm "; def $0", "=v"()392 %vec1 = call <2 x ptr> asm "; def $0", "=v"()393 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 0>394 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32395 ret void396}397 398define void @v_shuffle_v3p0_v2p0__3_3_1(ptr addrspace(1) inreg %ptr) {399; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_1:400; GFX900: ; %bb.0:401; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)402; GFX900-NEXT: v_mov_b32_e32 v6, 0403; GFX900-NEXT: ;;#ASMSTART404; GFX900-NEXT: ; def v[2:5]405; GFX900-NEXT: ;;#ASMEND406; GFX900-NEXT: ;;#ASMSTART407; GFX900-NEXT: ; def v[0:3]408; GFX900-NEXT: ;;#ASMEND409; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:16410; GFX900-NEXT: v_mov_b32_e32 v4, v2411; GFX900-NEXT: v_mov_b32_e32 v5, v3412; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]413; GFX900-NEXT: s_waitcnt vmcnt(0)414; GFX900-NEXT: s_setpc_b64 s[30:31]415;416; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_1:417; GFX90A: ; %bb.0:418; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)419; GFX90A-NEXT: v_mov_b32_e32 v6, 0420; GFX90A-NEXT: ;;#ASMSTART421; GFX90A-NEXT: ; def v[2:5]422; GFX90A-NEXT: ;;#ASMEND423; GFX90A-NEXT: ;;#ASMSTART424; GFX90A-NEXT: ; def v[0:3]425; GFX90A-NEXT: ;;#ASMEND426; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:16427; GFX90A-NEXT: v_mov_b32_e32 v4, v2428; GFX90A-NEXT: v_mov_b32_e32 v5, v3429; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]430; GFX90A-NEXT: s_waitcnt vmcnt(0)431; GFX90A-NEXT: s_setpc_b64 s[30:31]432;433; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_3_1:434; GFX942: ; %bb.0:435; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)436; GFX942-NEXT: v_mov_b32_e32 v6, 0437; GFX942-NEXT: ;;#ASMSTART438; GFX942-NEXT: ; def v[2:5]439; GFX942-NEXT: ;;#ASMEND440; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] offset:16441; GFX942-NEXT: ;;#ASMSTART442; GFX942-NEXT: ; def v[0:3]443; GFX942-NEXT: ;;#ASMEND444; GFX942-NEXT: s_nop 0445; GFX942-NEXT: v_mov_b32_e32 v4, v2446; GFX942-NEXT: v_mov_b32_e32 v5, v3447; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]448; GFX942-NEXT: s_waitcnt vmcnt(0)449; GFX942-NEXT: s_setpc_b64 s[30:31]450 %vec0 = call <2 x ptr> asm "; def $0", "=v"()451 %vec1 = call <2 x ptr> asm "; def $0", "=v"()452 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 1>453 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32454 ret void455}456 457define void @v_shuffle_v3p0_v2p0__3_3_2(ptr addrspace(1) inreg %ptr) {458; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_2:459; GFX900: ; %bb.0:460; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; GFX900-NEXT: v_mov_b32_e32 v6, 0462; GFX900-NEXT: ;;#ASMSTART463; GFX900-NEXT: ; def v[0:3]464; GFX900-NEXT: ;;#ASMEND465; GFX900-NEXT: v_mov_b32_e32 v4, v2466; GFX900-NEXT: v_mov_b32_e32 v5, v3467; GFX900-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:16468; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]469; GFX900-NEXT: s_waitcnt vmcnt(0)470; GFX900-NEXT: s_setpc_b64 s[30:31]471;472; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_2:473; GFX90A: ; %bb.0:474; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)475; GFX90A-NEXT: v_mov_b32_e32 v6, 0476; GFX90A-NEXT: ;;#ASMSTART477; GFX90A-NEXT: ; def v[0:3]478; GFX90A-NEXT: ;;#ASMEND479; GFX90A-NEXT: v_mov_b32_e32 v4, v2480; GFX90A-NEXT: v_mov_b32_e32 v5, v3481; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:16482; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]483; GFX90A-NEXT: s_waitcnt vmcnt(0)484; GFX90A-NEXT: s_setpc_b64 s[30:31]485;486; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_3_2:487; GFX942: ; %bb.0:488; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)489; GFX942-NEXT: v_mov_b32_e32 v6, 0490; GFX942-NEXT: ;;#ASMSTART491; GFX942-NEXT: ; def v[0:3]492; GFX942-NEXT: ;;#ASMEND493; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] offset:16494; GFX942-NEXT: v_mov_b32_e32 v4, v2495; GFX942-NEXT: v_mov_b32_e32 v5, v3496; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]497; GFX942-NEXT: s_waitcnt vmcnt(0)498; GFX942-NEXT: s_setpc_b64 s[30:31]499 %vec0 = call <2 x ptr> asm "; def $0", "=v"()500 %vec1 = call <2 x ptr> asm "; def $0", "=v"()501 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 2>502 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32503 ret void504}505 506define void @v_shuffle_v3p0_v2p0__3_3_3(ptr addrspace(1) inreg %ptr) {507; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_3:508; GFX900: ; %bb.0:509; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)510; GFX900-NEXT: v_mov_b32_e32 v6, 0511; GFX900-NEXT: ;;#ASMSTART512; GFX900-NEXT: ; def v[0:3]513; GFX900-NEXT: ;;#ASMEND514; GFX900-NEXT: v_mov_b32_e32 v4, v2515; GFX900-NEXT: v_mov_b32_e32 v5, v3516; GFX900-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:16517; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]518; GFX900-NEXT: s_waitcnt vmcnt(0)519; GFX900-NEXT: s_setpc_b64 s[30:31]520;521; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_3:522; GFX90A: ; %bb.0:523; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)524; GFX90A-NEXT: v_mov_b32_e32 v6, 0525; GFX90A-NEXT: ;;#ASMSTART526; GFX90A-NEXT: ; def v[0:3]527; GFX90A-NEXT: ;;#ASMEND528; GFX90A-NEXT: v_mov_b32_e32 v4, v2529; GFX90A-NEXT: v_mov_b32_e32 v5, v3530; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:16531; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]532; GFX90A-NEXT: s_waitcnt vmcnt(0)533; GFX90A-NEXT: s_setpc_b64 s[30:31]534;535; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_3_3:536; GFX942: ; %bb.0:537; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)538; GFX942-NEXT: v_mov_b32_e32 v6, 0539; GFX942-NEXT: ;;#ASMSTART540; GFX942-NEXT: ; def v[0:3]541; GFX942-NEXT: ;;#ASMEND542; GFX942-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1] offset:16543; GFX942-NEXT: v_mov_b32_e32 v4, v2544; GFX942-NEXT: v_mov_b32_e32 v5, v3545; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]546; GFX942-NEXT: s_waitcnt vmcnt(0)547; GFX942-NEXT: s_setpc_b64 s[30:31]548 %vec0 = call <2 x ptr> asm "; def $0", "=v"()549 %vec1 = call <2 x ptr> asm "; def $0", "=v"()550 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 3>551 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32552 ret void553}554 555define void @v_shuffle_v3p0_v2p0__u_0_0(ptr addrspace(1) inreg %ptr) {556; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_0_0:557; GFX900: ; %bb.0:558; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)559; GFX900-NEXT: v_mov_b32_e32 v0, 0560; GFX900-NEXT: ;;#ASMSTART561; GFX900-NEXT: ; def v[2:5]562; GFX900-NEXT: ;;#ASMEND563; GFX900-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17] offset:16564; GFX900-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]565; GFX900-NEXT: s_waitcnt vmcnt(0)566; GFX900-NEXT: s_setpc_b64 s[30:31]567;568; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_0_0:569; GFX90A: ; %bb.0:570; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)571; GFX90A-NEXT: v_mov_b32_e32 v0, 0572; GFX90A-NEXT: ;;#ASMSTART573; GFX90A-NEXT: ; def v[2:5]574; GFX90A-NEXT: ;;#ASMEND575; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17] offset:16576; GFX90A-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]577; GFX90A-NEXT: s_waitcnt vmcnt(0)578; GFX90A-NEXT: s_setpc_b64 s[30:31]579;580; GFX942-LABEL: v_shuffle_v3p0_v2p0__u_0_0:581; GFX942: ; %bb.0:582; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX942-NEXT: v_mov_b32_e32 v0, 0584; GFX942-NEXT: ;;#ASMSTART585; GFX942-NEXT: ; def v[2:5]586; GFX942-NEXT: ;;#ASMEND587; GFX942-NEXT: global_store_dwordx2 v0, v[2:3], s[0:1] offset:16588; GFX942-NEXT: global_store_dwordx4 v0, v[0:3], s[0:1]589; GFX942-NEXT: s_waitcnt vmcnt(0)590; GFX942-NEXT: s_setpc_b64 s[30:31]591 %vec0 = call <2 x ptr> asm "; def $0", "=v"()592 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>593 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32594 ret void595}596 597define void @v_shuffle_v3p0_v2p0__0_0_0(ptr addrspace(1) inreg %ptr) {598; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_0_0:599; GFX900: ; %bb.0:600; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)601; GFX900-NEXT: ;;#ASMSTART602; GFX900-NEXT: ; def v[0:3]603; GFX900-NEXT: ;;#ASMEND604; GFX900-NEXT: v_mov_b32_e32 v4, 0605; GFX900-NEXT: v_mov_b32_e32 v2, v0606; GFX900-NEXT: v_mov_b32_e32 v3, v1607; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] offset:16608; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]609; GFX900-NEXT: s_waitcnt vmcnt(0)610; GFX900-NEXT: s_setpc_b64 s[30:31]611;612; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_0_0:613; GFX90A: ; %bb.0:614; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)615; GFX90A-NEXT: ;;#ASMSTART616; GFX90A-NEXT: ; def v[0:3]617; GFX90A-NEXT: ;;#ASMEND618; GFX90A-NEXT: v_mov_b32_e32 v4, 0619; GFX90A-NEXT: v_mov_b32_e32 v2, v0620; GFX90A-NEXT: v_mov_b32_e32 v3, v1621; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] offset:16622; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]623; GFX90A-NEXT: s_waitcnt vmcnt(0)624; GFX90A-NEXT: s_setpc_b64 s[30:31]625;626; GFX942-LABEL: v_shuffle_v3p0_v2p0__0_0_0:627; GFX942: ; %bb.0:628; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)629; GFX942-NEXT: ;;#ASMSTART630; GFX942-NEXT: ; def v[0:3]631; GFX942-NEXT: ;;#ASMEND632; GFX942-NEXT: v_mov_b32_e32 v4, 0633; GFX942-NEXT: v_mov_b32_e32 v2, v0634; GFX942-NEXT: v_mov_b32_e32 v3, v1635; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] offset:16636; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]637; GFX942-NEXT: s_waitcnt vmcnt(0)638; GFX942-NEXT: s_setpc_b64 s[30:31]639 %vec0 = call <2 x ptr> asm "; def $0", "=v"()640 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> zeroinitializer641 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32642 ret void643}644 645define void @v_shuffle_v3p0_v2p0__1_0_0(ptr addrspace(1) inreg %ptr) {646; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_0_0:647; GFX900: ; %bb.0:648; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)649; GFX900-NEXT: v_mov_b32_e32 v6, 0650; GFX900-NEXT: ;;#ASMSTART651; GFX900-NEXT: ; def v[0:3]652; GFX900-NEXT: ;;#ASMEND653; GFX900-NEXT: v_mov_b32_e32 v4, v0654; GFX900-NEXT: v_mov_b32_e32 v5, v1655; GFX900-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:16656; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]657; GFX900-NEXT: s_waitcnt vmcnt(0)658; GFX900-NEXT: s_setpc_b64 s[30:31]659;660; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_0_0:661; GFX90A: ; %bb.0:662; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)663; GFX90A-NEXT: v_mov_b32_e32 v6, 0664; GFX90A-NEXT: ;;#ASMSTART665; GFX90A-NEXT: ; def v[0:3]666; GFX90A-NEXT: ;;#ASMEND667; GFX90A-NEXT: v_mov_b32_e32 v4, v0668; GFX90A-NEXT: v_mov_b32_e32 v5, v1669; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:16670; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]671; GFX90A-NEXT: s_waitcnt vmcnt(0)672; GFX90A-NEXT: s_setpc_b64 s[30:31]673;674; GFX942-LABEL: v_shuffle_v3p0_v2p0__1_0_0:675; GFX942: ; %bb.0:676; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)677; GFX942-NEXT: v_mov_b32_e32 v6, 0678; GFX942-NEXT: ;;#ASMSTART679; GFX942-NEXT: ; def v[0:3]680; GFX942-NEXT: ;;#ASMEND681; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] offset:16682; GFX942-NEXT: v_mov_b32_e32 v4, v0683; GFX942-NEXT: v_mov_b32_e32 v5, v1684; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]685; GFX942-NEXT: s_waitcnt vmcnt(0)686; GFX942-NEXT: s_setpc_b64 s[30:31]687 %vec0 = call <2 x ptr> asm "; def $0", "=v"()688 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>689 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32690 ret void691}692 693define void @v_shuffle_v3p0_v2p0__2_0_0(ptr addrspace(1) inreg %ptr) {694; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_0_0:695; GFX900: ; %bb.0:696; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX900-NEXT: v_mov_b32_e32 v0, 0698; GFX900-NEXT: ;;#ASMSTART699; GFX900-NEXT: ; def v[2:5]700; GFX900-NEXT: ;;#ASMEND701; GFX900-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17] offset:16702; GFX900-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]703; GFX900-NEXT: s_waitcnt vmcnt(0)704; GFX900-NEXT: s_setpc_b64 s[30:31]705;706; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_0_0:707; GFX90A: ; %bb.0:708; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX90A-NEXT: v_mov_b32_e32 v0, 0710; GFX90A-NEXT: ;;#ASMSTART711; GFX90A-NEXT: ; def v[2:5]712; GFX90A-NEXT: ;;#ASMEND713; GFX90A-NEXT: global_store_dwordx2 v0, v[2:3], s[16:17] offset:16714; GFX90A-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]715; GFX90A-NEXT: s_waitcnt vmcnt(0)716; GFX90A-NEXT: s_setpc_b64 s[30:31]717;718; GFX942-LABEL: v_shuffle_v3p0_v2p0__2_0_0:719; GFX942: ; %bb.0:720; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX942-NEXT: v_mov_b32_e32 v0, 0722; GFX942-NEXT: ;;#ASMSTART723; GFX942-NEXT: ; def v[2:5]724; GFX942-NEXT: ;;#ASMEND725; GFX942-NEXT: global_store_dwordx2 v0, v[2:3], s[0:1] offset:16726; GFX942-NEXT: global_store_dwordx4 v0, v[0:3], s[0:1]727; GFX942-NEXT: s_waitcnt vmcnt(0)728; GFX942-NEXT: s_setpc_b64 s[30:31]729 %vec0 = call <2 x ptr> asm "; def $0", "=v"()730 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>731 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32732 ret void733}734 735define void @v_shuffle_v3p0_v2p0__3_0_0(ptr addrspace(1) inreg %ptr) {736; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_0:737; GFX900: ; %bb.0:738; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)739; GFX900-NEXT: v_mov_b32_e32 v8, 0740; GFX900-NEXT: ;;#ASMSTART741; GFX900-NEXT: ; def v[4:7]742; GFX900-NEXT: ;;#ASMEND743; GFX900-NEXT: ;;#ASMSTART744; GFX900-NEXT: ; def v[0:3]745; GFX900-NEXT: ;;#ASMEND746; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16747; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]748; GFX900-NEXT: s_waitcnt vmcnt(0)749; GFX900-NEXT: s_setpc_b64 s[30:31]750;751; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_0:752; GFX90A: ; %bb.0:753; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)754; GFX90A-NEXT: v_mov_b32_e32 v8, 0755; GFX90A-NEXT: ;;#ASMSTART756; GFX90A-NEXT: ; def v[4:7]757; GFX90A-NEXT: ;;#ASMEND758; GFX90A-NEXT: ;;#ASMSTART759; GFX90A-NEXT: ; def v[0:3]760; GFX90A-NEXT: ;;#ASMEND761; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16762; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]763; GFX90A-NEXT: s_waitcnt vmcnt(0)764; GFX90A-NEXT: s_setpc_b64 s[30:31]765;766; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_0_0:767; GFX942: ; %bb.0:768; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)769; GFX942-NEXT: v_mov_b32_e32 v8, 0770; GFX942-NEXT: ;;#ASMSTART771; GFX942-NEXT: ; def v[4:7]772; GFX942-NEXT: ;;#ASMEND773; GFX942-NEXT: ;;#ASMSTART774; GFX942-NEXT: ; def v[0:3]775; GFX942-NEXT: ;;#ASMEND776; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] offset:16777; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]778; GFX942-NEXT: s_waitcnt vmcnt(0)779; GFX942-NEXT: s_setpc_b64 s[30:31]780 %vec0 = call <2 x ptr> asm "; def $0", "=v"()781 %vec1 = call <2 x ptr> asm "; def $0", "=v"()782 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 0>783 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32784 ret void785}786 787define void @v_shuffle_v3p0_v2p0__3_u_0(ptr addrspace(1) inreg %ptr) {788; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_0:789; GFX900: ; %bb.0:790; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)791; GFX900-NEXT: v_mov_b32_e32 v8, 0792; GFX900-NEXT: ;;#ASMSTART793; GFX900-NEXT: ; def v[4:7]794; GFX900-NEXT: ;;#ASMEND795; GFX900-NEXT: ;;#ASMSTART796; GFX900-NEXT: ; def v[0:3]797; GFX900-NEXT: ;;#ASMEND798; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16799; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]800; GFX900-NEXT: s_waitcnt vmcnt(0)801; GFX900-NEXT: s_setpc_b64 s[30:31]802;803; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_0:804; GFX90A: ; %bb.0:805; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)806; GFX90A-NEXT: v_mov_b32_e32 v8, 0807; GFX90A-NEXT: ;;#ASMSTART808; GFX90A-NEXT: ; def v[4:7]809; GFX90A-NEXT: ;;#ASMEND810; GFX90A-NEXT: ;;#ASMSTART811; GFX90A-NEXT: ; def v[0:3]812; GFX90A-NEXT: ;;#ASMEND813; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16814; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]815; GFX90A-NEXT: s_waitcnt vmcnt(0)816; GFX90A-NEXT: s_setpc_b64 s[30:31]817;818; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_u_0:819; GFX942: ; %bb.0:820; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)821; GFX942-NEXT: v_mov_b32_e32 v8, 0822; GFX942-NEXT: ;;#ASMSTART823; GFX942-NEXT: ; def v[4:7]824; GFX942-NEXT: ;;#ASMEND825; GFX942-NEXT: ;;#ASMSTART826; GFX942-NEXT: ; def v[0:3]827; GFX942-NEXT: ;;#ASMEND828; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] offset:16829; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]830; GFX942-NEXT: s_waitcnt vmcnt(0)831; GFX942-NEXT: s_setpc_b64 s[30:31]832 %vec0 = call <2 x ptr> asm "; def $0", "=v"()833 %vec1 = call <2 x ptr> asm "; def $0", "=v"()834 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>835 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32836 ret void837}838 839define void @v_shuffle_v3p0_v2p0__3_1_0(ptr addrspace(1) inreg %ptr) {840; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_0:841; GFX900: ; %bb.0:842; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)843; GFX900-NEXT: v_mov_b32_e32 v8, 0844; GFX900-NEXT: ;;#ASMSTART845; GFX900-NEXT: ; def v[4:7]846; GFX900-NEXT: ;;#ASMEND847; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16848; GFX900-NEXT: v_mov_b32_e32 v4, v6849; GFX900-NEXT: v_mov_b32_e32 v5, v7850; GFX900-NEXT: ;;#ASMSTART851; GFX900-NEXT: ; def v[0:3]852; GFX900-NEXT: ;;#ASMEND853; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]854; GFX900-NEXT: s_waitcnt vmcnt(0)855; GFX900-NEXT: s_setpc_b64 s[30:31]856;857; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_0:858; GFX90A: ; %bb.0:859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GFX90A-NEXT: v_mov_b32_e32 v8, 0861; GFX90A-NEXT: ;;#ASMSTART862; GFX90A-NEXT: ; def v[4:7]863; GFX90A-NEXT: ;;#ASMEND864; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16865; GFX90A-NEXT: v_mov_b32_e32 v4, v6866; GFX90A-NEXT: v_mov_b32_e32 v5, v7867; GFX90A-NEXT: ;;#ASMSTART868; GFX90A-NEXT: ; def v[0:3]869; GFX90A-NEXT: ;;#ASMEND870; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]871; GFX90A-NEXT: s_waitcnt vmcnt(0)872; GFX90A-NEXT: s_setpc_b64 s[30:31]873;874; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_1_0:875; GFX942: ; %bb.0:876; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)877; GFX942-NEXT: v_mov_b32_e32 v8, 0878; GFX942-NEXT: ;;#ASMSTART879; GFX942-NEXT: ; def v[4:7]880; GFX942-NEXT: ;;#ASMEND881; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] offset:16882; GFX942-NEXT: v_mov_b32_e32 v4, v6883; GFX942-NEXT: v_mov_b32_e32 v5, v7884; GFX942-NEXT: ;;#ASMSTART885; GFX942-NEXT: ; def v[0:3]886; GFX942-NEXT: ;;#ASMEND887; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]888; GFX942-NEXT: s_waitcnt vmcnt(0)889; GFX942-NEXT: s_setpc_b64 s[30:31]890 %vec0 = call <2 x ptr> asm "; def $0", "=v"()891 %vec1 = call <2 x ptr> asm "; def $0", "=v"()892 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 0>893 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32894 ret void895}896 897define void @v_shuffle_v3p0_v2p0__3_2_0(ptr addrspace(1) inreg %ptr) {898; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_0:899; GFX900: ; %bb.0:900; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)901; GFX900-NEXT: v_mov_b32_e32 v8, 0902; GFX900-NEXT: ;;#ASMSTART903; GFX900-NEXT: ; def v[4:7]904; GFX900-NEXT: ;;#ASMEND905; GFX900-NEXT: ;;#ASMSTART906; GFX900-NEXT: ; def v[0:3]907; GFX900-NEXT: ;;#ASMEND908; GFX900-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16909; GFX900-NEXT: v_mov_b32_e32 v4, v0910; GFX900-NEXT: v_mov_b32_e32 v5, v1911; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]912; GFX900-NEXT: s_waitcnt vmcnt(0)913; GFX900-NEXT: s_setpc_b64 s[30:31]914;915; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_0:916; GFX90A: ; %bb.0:917; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)918; GFX90A-NEXT: v_mov_b32_e32 v8, 0919; GFX90A-NEXT: ;;#ASMSTART920; GFX90A-NEXT: ; def v[4:7]921; GFX90A-NEXT: ;;#ASMEND922; GFX90A-NEXT: ;;#ASMSTART923; GFX90A-NEXT: ; def v[0:3]924; GFX90A-NEXT: ;;#ASMEND925; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17] offset:16926; GFX90A-NEXT: v_mov_b32_e32 v4, v0927; GFX90A-NEXT: v_mov_b32_e32 v5, v1928; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]929; GFX90A-NEXT: s_waitcnt vmcnt(0)930; GFX90A-NEXT: s_setpc_b64 s[30:31]931;932; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_2_0:933; GFX942: ; %bb.0:934; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)935; GFX942-NEXT: v_mov_b32_e32 v8, 0936; GFX942-NEXT: ;;#ASMSTART937; GFX942-NEXT: ; def v[4:7]938; GFX942-NEXT: ;;#ASMEND939; GFX942-NEXT: ;;#ASMSTART940; GFX942-NEXT: ; def v[0:3]941; GFX942-NEXT: ;;#ASMEND942; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1] offset:16943; GFX942-NEXT: v_mov_b32_e32 v4, v0944; GFX942-NEXT: v_mov_b32_e32 v5, v1945; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]946; GFX942-NEXT: s_waitcnt vmcnt(0)947; GFX942-NEXT: s_setpc_b64 s[30:31]948 %vec0 = call <2 x ptr> asm "; def $0", "=v"()949 %vec1 = call <2 x ptr> asm "; def $0", "=v"()950 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 0>951 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32952 ret void953}954 955define void @v_shuffle_v3p0_v2p0__u_1_1(ptr addrspace(1) inreg %ptr) {956; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_1_1:957; GFX900: ; %bb.0:958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)959; GFX900-NEXT: v_mov_b32_e32 v4, 0960; GFX900-NEXT: ;;#ASMSTART961; GFX900-NEXT: ; def v[0:3]962; GFX900-NEXT: ;;#ASMEND963; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:16964; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]965; GFX900-NEXT: s_waitcnt vmcnt(0)966; GFX900-NEXT: s_setpc_b64 s[30:31]967;968; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_1_1:969; GFX90A: ; %bb.0:970; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)971; GFX90A-NEXT: v_mov_b32_e32 v4, 0972; GFX90A-NEXT: ;;#ASMSTART973; GFX90A-NEXT: ; def v[0:3]974; GFX90A-NEXT: ;;#ASMEND975; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:16976; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]977; GFX90A-NEXT: s_waitcnt vmcnt(0)978; GFX90A-NEXT: s_setpc_b64 s[30:31]979;980; GFX942-LABEL: v_shuffle_v3p0_v2p0__u_1_1:981; GFX942: ; %bb.0:982; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)983; GFX942-NEXT: v_mov_b32_e32 v4, 0984; GFX942-NEXT: ;;#ASMSTART985; GFX942-NEXT: ; def v[0:3]986; GFX942-NEXT: ;;#ASMEND987; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:16988; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]989; GFX942-NEXT: s_waitcnt vmcnt(0)990; GFX942-NEXT: s_setpc_b64 s[30:31]991 %vec0 = call <2 x ptr> asm "; def $0", "=v"()992 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>993 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32994 ret void995}996 997define void @v_shuffle_v3p0_v2p0__0_1_1(ptr addrspace(1) inreg %ptr) {998; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_1_1:999; GFX900: ; %bb.0:1000; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1001; GFX900-NEXT: v_mov_b32_e32 v4, 01002; GFX900-NEXT: ;;#ASMSTART1003; GFX900-NEXT: ; def v[0:3]1004; GFX900-NEXT: ;;#ASMEND1005; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161006; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1007; GFX900-NEXT: s_waitcnt vmcnt(0)1008; GFX900-NEXT: s_setpc_b64 s[30:31]1009;1010; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_1_1:1011; GFX90A: ; %bb.0:1012; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1013; GFX90A-NEXT: v_mov_b32_e32 v4, 01014; GFX90A-NEXT: ;;#ASMSTART1015; GFX90A-NEXT: ; def v[0:3]1016; GFX90A-NEXT: ;;#ASMEND1017; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161018; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1019; GFX90A-NEXT: s_waitcnt vmcnt(0)1020; GFX90A-NEXT: s_setpc_b64 s[30:31]1021;1022; GFX942-LABEL: v_shuffle_v3p0_v2p0__0_1_1:1023; GFX942: ; %bb.0:1024; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1025; GFX942-NEXT: v_mov_b32_e32 v4, 01026; GFX942-NEXT: ;;#ASMSTART1027; GFX942-NEXT: ; def v[0:3]1028; GFX942-NEXT: ;;#ASMEND1029; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:161030; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1031; GFX942-NEXT: s_waitcnt vmcnt(0)1032; GFX942-NEXT: s_setpc_b64 s[30:31]1033 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1034 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>1035 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321036 ret void1037}1038 1039define void @v_shuffle_v3p0_v2p0__1_1_1(ptr addrspace(1) inreg %ptr) {1040; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_1_1:1041; GFX900: ; %bb.0:1042; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1043; GFX900-NEXT: v_mov_b32_e32 v6, 01044; GFX900-NEXT: ;;#ASMSTART1045; GFX900-NEXT: ; def v[0:3]1046; GFX900-NEXT: ;;#ASMEND1047; GFX900-NEXT: v_mov_b32_e32 v4, v21048; GFX900-NEXT: v_mov_b32_e32 v5, v31049; GFX900-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:161050; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1051; GFX900-NEXT: s_waitcnt vmcnt(0)1052; GFX900-NEXT: s_setpc_b64 s[30:31]1053;1054; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_1_1:1055; GFX90A: ; %bb.0:1056; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1057; GFX90A-NEXT: v_mov_b32_e32 v6, 01058; GFX90A-NEXT: ;;#ASMSTART1059; GFX90A-NEXT: ; def v[0:3]1060; GFX90A-NEXT: ;;#ASMEND1061; GFX90A-NEXT: v_mov_b32_e32 v4, v21062; GFX90A-NEXT: v_mov_b32_e32 v5, v31063; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:161064; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1065; GFX90A-NEXT: s_waitcnt vmcnt(0)1066; GFX90A-NEXT: s_setpc_b64 s[30:31]1067;1068; GFX942-LABEL: v_shuffle_v3p0_v2p0__1_1_1:1069; GFX942: ; %bb.0:1070; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1071; GFX942-NEXT: v_mov_b32_e32 v6, 01072; GFX942-NEXT: ;;#ASMSTART1073; GFX942-NEXT: ; def v[0:3]1074; GFX942-NEXT: ;;#ASMEND1075; GFX942-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1] offset:161076; GFX942-NEXT: v_mov_b32_e32 v4, v21077; GFX942-NEXT: v_mov_b32_e32 v5, v31078; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1079; GFX942-NEXT: s_waitcnt vmcnt(0)1080; GFX942-NEXT: s_setpc_b64 s[30:31]1081 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1082 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>1083 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321084 ret void1085}1086 1087define void @v_shuffle_v3p0_v2p0__2_1_1(ptr addrspace(1) inreg %ptr) {1088; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_1_1:1089; GFX900: ; %bb.0:1090; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1091; GFX900-NEXT: v_mov_b32_e32 v4, 01092; GFX900-NEXT: ;;#ASMSTART1093; GFX900-NEXT: ; def v[0:3]1094; GFX900-NEXT: ;;#ASMEND1095; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161096; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1097; GFX900-NEXT: s_waitcnt vmcnt(0)1098; GFX900-NEXT: s_setpc_b64 s[30:31]1099;1100; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_1_1:1101; GFX90A: ; %bb.0:1102; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1103; GFX90A-NEXT: v_mov_b32_e32 v4, 01104; GFX90A-NEXT: ;;#ASMSTART1105; GFX90A-NEXT: ; def v[0:3]1106; GFX90A-NEXT: ;;#ASMEND1107; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161108; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1109; GFX90A-NEXT: s_waitcnt vmcnt(0)1110; GFX90A-NEXT: s_setpc_b64 s[30:31]1111;1112; GFX942-LABEL: v_shuffle_v3p0_v2p0__2_1_1:1113; GFX942: ; %bb.0:1114; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX942-NEXT: v_mov_b32_e32 v4, 01116; GFX942-NEXT: ;;#ASMSTART1117; GFX942-NEXT: ; def v[0:3]1118; GFX942-NEXT: ;;#ASMEND1119; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:161120; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1121; GFX942-NEXT: s_waitcnt vmcnt(0)1122; GFX942-NEXT: s_setpc_b64 s[30:31]1123 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1124 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>1125 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321126 ret void1127}1128 1129define void @v_shuffle_v3p0_v2p0__3_1_1(ptr addrspace(1) inreg %ptr) {1130; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_1:1131; GFX900: ; %bb.0:1132; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1133; GFX900-NEXT: ;;#ASMSTART1134; GFX900-NEXT: ; def v[2:5]1135; GFX900-NEXT: ;;#ASMEND1136; GFX900-NEXT: v_mov_b32_e32 v6, 01137; GFX900-NEXT: ;;#ASMSTART1138; GFX900-NEXT: ; def v[0:3]1139; GFX900-NEXT: ;;#ASMEND1140; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161141; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1142; GFX900-NEXT: s_waitcnt vmcnt(0)1143; GFX900-NEXT: s_setpc_b64 s[30:31]1144;1145; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_1:1146; GFX90A: ; %bb.0:1147; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1148; GFX90A-NEXT: ;;#ASMSTART1149; GFX90A-NEXT: ; def v[2:5]1150; GFX90A-NEXT: ;;#ASMEND1151; GFX90A-NEXT: v_mov_b32_e32 v6, 01152; GFX90A-NEXT: ;;#ASMSTART1153; GFX90A-NEXT: ; def v[0:3]1154; GFX90A-NEXT: ;;#ASMEND1155; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161156; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1157; GFX90A-NEXT: s_waitcnt vmcnt(0)1158; GFX90A-NEXT: s_setpc_b64 s[30:31]1159;1160; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_1_1:1161; GFX942: ; %bb.0:1162; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1163; GFX942-NEXT: ;;#ASMSTART1164; GFX942-NEXT: ; def v[2:5]1165; GFX942-NEXT: ;;#ASMEND1166; GFX942-NEXT: v_mov_b32_e32 v6, 01167; GFX942-NEXT: ;;#ASMSTART1168; GFX942-NEXT: ; def v[0:3]1169; GFX942-NEXT: ;;#ASMEND1170; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] offset:161171; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1172; GFX942-NEXT: s_waitcnt vmcnt(0)1173; GFX942-NEXT: s_setpc_b64 s[30:31]1174 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1175 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1176 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 1>1177 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321178 ret void1179}1180 1181define void @v_shuffle_v3p0_v2p0__3_u_1(ptr addrspace(1) inreg %ptr) {1182; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_1:1183; GFX900: ; %bb.0:1184; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1185; GFX900-NEXT: ;;#ASMSTART1186; GFX900-NEXT: ; def v[2:5]1187; GFX900-NEXT: ;;#ASMEND1188; GFX900-NEXT: v_mov_b32_e32 v6, 01189; GFX900-NEXT: ;;#ASMSTART1190; GFX900-NEXT: ; def v[0:3]1191; GFX900-NEXT: ;;#ASMEND1192; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161193; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1194; GFX900-NEXT: s_waitcnt vmcnt(0)1195; GFX900-NEXT: s_setpc_b64 s[30:31]1196;1197; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_1:1198; GFX90A: ; %bb.0:1199; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1200; GFX90A-NEXT: ;;#ASMSTART1201; GFX90A-NEXT: ; def v[2:5]1202; GFX90A-NEXT: ;;#ASMEND1203; GFX90A-NEXT: v_mov_b32_e32 v6, 01204; GFX90A-NEXT: ;;#ASMSTART1205; GFX90A-NEXT: ; def v[0:3]1206; GFX90A-NEXT: ;;#ASMEND1207; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161208; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1209; GFX90A-NEXT: s_waitcnt vmcnt(0)1210; GFX90A-NEXT: s_setpc_b64 s[30:31]1211;1212; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_u_1:1213; GFX942: ; %bb.0:1214; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1215; GFX942-NEXT: ;;#ASMSTART1216; GFX942-NEXT: ; def v[2:5]1217; GFX942-NEXT: ;;#ASMEND1218; GFX942-NEXT: v_mov_b32_e32 v6, 01219; GFX942-NEXT: ;;#ASMSTART1220; GFX942-NEXT: ; def v[0:3]1221; GFX942-NEXT: ;;#ASMEND1222; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] offset:161223; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1224; GFX942-NEXT: s_waitcnt vmcnt(0)1225; GFX942-NEXT: s_setpc_b64 s[30:31]1226 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1227 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1228 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>1229 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321230 ret void1231}1232 1233define void @v_shuffle_v3p0_v2p0__3_0_1(ptr addrspace(1) inreg %ptr) {1234; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_1:1235; GFX900: ; %bb.0:1236; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1237; GFX900-NEXT: v_mov_b32_e32 v8, 01238; GFX900-NEXT: ;;#ASMSTART1239; GFX900-NEXT: ; def v[4:7]1240; GFX900-NEXT: ;;#ASMEND1241; GFX900-NEXT: ;;#ASMSTART1242; GFX900-NEXT: ; def v[0:3]1243; GFX900-NEXT: ;;#ASMEND1244; GFX900-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] offset:161245; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1246; GFX900-NEXT: s_waitcnt vmcnt(0)1247; GFX900-NEXT: s_setpc_b64 s[30:31]1248;1249; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_1:1250; GFX90A: ; %bb.0:1251; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX90A-NEXT: v_mov_b32_e32 v8, 01253; GFX90A-NEXT: ;;#ASMSTART1254; GFX90A-NEXT: ; def v[4:7]1255; GFX90A-NEXT: ;;#ASMEND1256; GFX90A-NEXT: ;;#ASMSTART1257; GFX90A-NEXT: ; def v[0:3]1258; GFX90A-NEXT: ;;#ASMEND1259; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] offset:161260; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1261; GFX90A-NEXT: s_waitcnt vmcnt(0)1262; GFX90A-NEXT: s_setpc_b64 s[30:31]1263;1264; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_0_1:1265; GFX942: ; %bb.0:1266; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1267; GFX942-NEXT: v_mov_b32_e32 v8, 01268; GFX942-NEXT: ;;#ASMSTART1269; GFX942-NEXT: ; def v[4:7]1270; GFX942-NEXT: ;;#ASMEND1271; GFX942-NEXT: ;;#ASMSTART1272; GFX942-NEXT: ; def v[0:3]1273; GFX942-NEXT: ;;#ASMEND1274; GFX942-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1] offset:161275; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]1276; GFX942-NEXT: s_waitcnt vmcnt(0)1277; GFX942-NEXT: s_setpc_b64 s[30:31]1278 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1279 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1280 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 1>1281 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321282 ret void1283}1284 1285define void @v_shuffle_v3p0_v2p0__3_2_1(ptr addrspace(1) inreg %ptr) {1286; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_1:1287; GFX900: ; %bb.0:1288; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1289; GFX900-NEXT: v_mov_b32_e32 v6, 01290; GFX900-NEXT: ;;#ASMSTART1291; GFX900-NEXT: ; def v[2:5]1292; GFX900-NEXT: ;;#ASMEND1293; GFX900-NEXT: ;;#ASMSTART1294; GFX900-NEXT: ; def v[0:3]1295; GFX900-NEXT: ;;#ASMEND1296; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161297; GFX900-NEXT: v_mov_b32_e32 v4, v01298; GFX900-NEXT: v_mov_b32_e32 v5, v11299; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1300; GFX900-NEXT: s_waitcnt vmcnt(0)1301; GFX900-NEXT: s_setpc_b64 s[30:31]1302;1303; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_1:1304; GFX90A: ; %bb.0:1305; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1306; GFX90A-NEXT: v_mov_b32_e32 v6, 01307; GFX90A-NEXT: ;;#ASMSTART1308; GFX90A-NEXT: ; def v[2:5]1309; GFX90A-NEXT: ;;#ASMEND1310; GFX90A-NEXT: ;;#ASMSTART1311; GFX90A-NEXT: ; def v[0:3]1312; GFX90A-NEXT: ;;#ASMEND1313; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161314; GFX90A-NEXT: v_mov_b32_e32 v4, v01315; GFX90A-NEXT: v_mov_b32_e32 v5, v11316; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1317; GFX90A-NEXT: s_waitcnt vmcnt(0)1318; GFX90A-NEXT: s_setpc_b64 s[30:31]1319;1320; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_2_1:1321; GFX942: ; %bb.0:1322; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1323; GFX942-NEXT: v_mov_b32_e32 v6, 01324; GFX942-NEXT: ;;#ASMSTART1325; GFX942-NEXT: ; def v[2:5]1326; GFX942-NEXT: ;;#ASMEND1327; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] offset:161328; GFX942-NEXT: ;;#ASMSTART1329; GFX942-NEXT: ; def v[0:3]1330; GFX942-NEXT: ;;#ASMEND1331; GFX942-NEXT: s_nop 01332; GFX942-NEXT: v_mov_b32_e32 v4, v01333; GFX942-NEXT: v_mov_b32_e32 v5, v11334; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1335; GFX942-NEXT: s_waitcnt vmcnt(0)1336; GFX942-NEXT: s_setpc_b64 s[30:31]1337 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1338 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1339 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 1>1340 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321341 ret void1342}1343 1344define void @v_shuffle_v3p0_v2p0__u_2_2(ptr addrspace(1) inreg %ptr) {1345; GFX9-LABEL: v_shuffle_v3p0_v2p0__u_2_2:1346; GFX9: ; %bb.0:1347; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1348; GFX9-NEXT: s_setpc_b64 s[30:31]1349 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1350 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>1351 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321352 ret void1353}1354 1355define void @v_shuffle_v3p0_v2p0__0_2_2(ptr addrspace(1) inreg %ptr) {1356; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_2_2:1357; GFX900: ; %bb.0:1358; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1359; GFX900-NEXT: v_mov_b32_e32 v4, 01360; GFX900-NEXT: ;;#ASMSTART1361; GFX900-NEXT: ; def v[0:3]1362; GFX900-NEXT: ;;#ASMEND1363; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1364; GFX900-NEXT: s_waitcnt vmcnt(0)1365; GFX900-NEXT: s_setpc_b64 s[30:31]1366;1367; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_2_2:1368; GFX90A: ; %bb.0:1369; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1370; GFX90A-NEXT: v_mov_b32_e32 v4, 01371; GFX90A-NEXT: ;;#ASMSTART1372; GFX90A-NEXT: ; def v[0:3]1373; GFX90A-NEXT: ;;#ASMEND1374; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1375; GFX90A-NEXT: s_waitcnt vmcnt(0)1376; GFX90A-NEXT: s_setpc_b64 s[30:31]1377;1378; GFX942-LABEL: v_shuffle_v3p0_v2p0__0_2_2:1379; GFX942: ; %bb.0:1380; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1381; GFX942-NEXT: v_mov_b32_e32 v4, 01382; GFX942-NEXT: ;;#ASMSTART1383; GFX942-NEXT: ; def v[0:3]1384; GFX942-NEXT: ;;#ASMEND1385; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1386; GFX942-NEXT: s_waitcnt vmcnt(0)1387; GFX942-NEXT: s_setpc_b64 s[30:31]1388 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1389 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>1390 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321391 ret void1392}1393 1394define void @v_shuffle_v3p0_v2p0__1_2_2(ptr addrspace(1) inreg %ptr) {1395; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_2_2:1396; GFX900: ; %bb.0:1397; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1398; GFX900-NEXT: v_mov_b32_e32 v4, 01399; GFX900-NEXT: ;;#ASMSTART1400; GFX900-NEXT: ; def v[0:3]1401; GFX900-NEXT: ;;#ASMEND1402; GFX900-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1403; GFX900-NEXT: s_waitcnt vmcnt(0)1404; GFX900-NEXT: s_setpc_b64 s[30:31]1405;1406; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_2_2:1407; GFX90A: ; %bb.0:1408; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1409; GFX90A-NEXT: v_mov_b32_e32 v4, 01410; GFX90A-NEXT: ;;#ASMSTART1411; GFX90A-NEXT: ; def v[0:3]1412; GFX90A-NEXT: ;;#ASMEND1413; GFX90A-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1414; GFX90A-NEXT: s_waitcnt vmcnt(0)1415; GFX90A-NEXT: s_setpc_b64 s[30:31]1416;1417; GFX942-LABEL: v_shuffle_v3p0_v2p0__1_2_2:1418; GFX942: ; %bb.0:1419; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1420; GFX942-NEXT: v_mov_b32_e32 v4, 01421; GFX942-NEXT: ;;#ASMSTART1422; GFX942-NEXT: ; def v[0:3]1423; GFX942-NEXT: ;;#ASMEND1424; GFX942-NEXT: global_store_dwordx4 v4, v[2:5], s[0:1]1425; GFX942-NEXT: s_waitcnt vmcnt(0)1426; GFX942-NEXT: s_setpc_b64 s[30:31]1427 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1428 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>1429 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321430 ret void1431}1432 1433define void @v_shuffle_v3p0_v2p0__2_2_2(ptr addrspace(1) inreg %ptr) {1434; GFX9-LABEL: v_shuffle_v3p0_v2p0__2_2_2:1435; GFX9: ; %bb.0:1436; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1437; GFX9-NEXT: s_setpc_b64 s[30:31]1438 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1439 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>1440 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321441 ret void1442}1443 1444define void @v_shuffle_v3p0_v2p0__3_2_2(ptr addrspace(1) inreg %ptr) {1445; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_2:1446; GFX900: ; %bb.0:1447; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX900-NEXT: v_mov_b32_e32 v6, 01449; GFX900-NEXT: ;;#ASMSTART1450; GFX900-NEXT: ; def v[0:3]1451; GFX900-NEXT: ;;#ASMEND1452; GFX900-NEXT: v_mov_b32_e32 v4, v01453; GFX900-NEXT: v_mov_b32_e32 v5, v11454; GFX900-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:161455; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1456; GFX900-NEXT: s_waitcnt vmcnt(0)1457; GFX900-NEXT: s_setpc_b64 s[30:31]1458;1459; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_2:1460; GFX90A: ; %bb.0:1461; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1462; GFX90A-NEXT: v_mov_b32_e32 v6, 01463; GFX90A-NEXT: ;;#ASMSTART1464; GFX90A-NEXT: ; def v[0:3]1465; GFX90A-NEXT: ;;#ASMEND1466; GFX90A-NEXT: v_mov_b32_e32 v4, v01467; GFX90A-NEXT: v_mov_b32_e32 v5, v11468; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:161469; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1470; GFX90A-NEXT: s_waitcnt vmcnt(0)1471; GFX90A-NEXT: s_setpc_b64 s[30:31]1472;1473; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_2_2:1474; GFX942: ; %bb.0:1475; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1476; GFX942-NEXT: v_mov_b32_e32 v6, 01477; GFX942-NEXT: ;;#ASMSTART1478; GFX942-NEXT: ; def v[0:3]1479; GFX942-NEXT: ;;#ASMEND1480; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] offset:161481; GFX942-NEXT: v_mov_b32_e32 v4, v01482; GFX942-NEXT: v_mov_b32_e32 v5, v11483; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1484; GFX942-NEXT: s_waitcnt vmcnt(0)1485; GFX942-NEXT: s_setpc_b64 s[30:31]1486 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1487 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1488 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 2>1489 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321490 ret void1491}1492 1493define void @v_shuffle_v3p0_v2p0__3_u_2(ptr addrspace(1) inreg %ptr) {1494; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_2:1495; GFX900: ; %bb.0:1496; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1497; GFX900-NEXT: v_mov_b32_e32 v4, 01498; GFX900-NEXT: ;;#ASMSTART1499; GFX900-NEXT: ; def v[0:3]1500; GFX900-NEXT: ;;#ASMEND1501; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] offset:161502; GFX900-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1503; GFX900-NEXT: s_waitcnt vmcnt(0)1504; GFX900-NEXT: s_setpc_b64 s[30:31]1505;1506; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_2:1507; GFX90A: ; %bb.0:1508; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1509; GFX90A-NEXT: v_mov_b32_e32 v4, 01510; GFX90A-NEXT: ;;#ASMSTART1511; GFX90A-NEXT: ; def v[0:3]1512; GFX90A-NEXT: ;;#ASMEND1513; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17] offset:161514; GFX90A-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1515; GFX90A-NEXT: s_waitcnt vmcnt(0)1516; GFX90A-NEXT: s_setpc_b64 s[30:31]1517;1518; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_u_2:1519; GFX942: ; %bb.0:1520; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1521; GFX942-NEXT: v_mov_b32_e32 v4, 01522; GFX942-NEXT: ;;#ASMSTART1523; GFX942-NEXT: ; def v[0:3]1524; GFX942-NEXT: ;;#ASMEND1525; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1] offset:161526; GFX942-NEXT: global_store_dwordx4 v4, v[2:5], s[0:1]1527; GFX942-NEXT: s_waitcnt vmcnt(0)1528; GFX942-NEXT: s_setpc_b64 s[30:31]1529 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1530 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1531 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>1532 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321533 ret void1534}1535 1536define void @v_shuffle_v3p0_v2p0__3_0_2(ptr addrspace(1) inreg %ptr) {1537; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_2:1538; GFX900: ; %bb.0:1539; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1540; GFX900-NEXT: v_mov_b32_e32 v8, 01541; GFX900-NEXT: ;;#ASMSTART1542; GFX900-NEXT: ; def v[0:3]1543; GFX900-NEXT: ;;#ASMEND1544; GFX900-NEXT: ;;#ASMSTART1545; GFX900-NEXT: ; def v[4:7]1546; GFX900-NEXT: ;;#ASMEND1547; GFX900-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17] offset:161548; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1549; GFX900-NEXT: s_waitcnt vmcnt(0)1550; GFX900-NEXT: s_setpc_b64 s[30:31]1551;1552; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_2:1553; GFX90A: ; %bb.0:1554; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1555; GFX90A-NEXT: v_mov_b32_e32 v8, 01556; GFX90A-NEXT: ;;#ASMSTART1557; GFX90A-NEXT: ; def v[0:3]1558; GFX90A-NEXT: ;;#ASMEND1559; GFX90A-NEXT: ;;#ASMSTART1560; GFX90A-NEXT: ; def v[4:7]1561; GFX90A-NEXT: ;;#ASMEND1562; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17] offset:161563; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1564; GFX90A-NEXT: s_waitcnt vmcnt(0)1565; GFX90A-NEXT: s_setpc_b64 s[30:31]1566;1567; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_0_2:1568; GFX942: ; %bb.0:1569; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1570; GFX942-NEXT: v_mov_b32_e32 v8, 01571; GFX942-NEXT: ;;#ASMSTART1572; GFX942-NEXT: ; def v[0:3]1573; GFX942-NEXT: ;;#ASMEND1574; GFX942-NEXT: ;;#ASMSTART1575; GFX942-NEXT: ; def v[4:7]1576; GFX942-NEXT: ;;#ASMEND1577; GFX942-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1] offset:161578; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]1579; GFX942-NEXT: s_waitcnt vmcnt(0)1580; GFX942-NEXT: s_setpc_b64 s[30:31]1581 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1582 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1583 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 2>1584 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321585 ret void1586}1587 1588define void @v_shuffle_v3p0_v2p0__3_1_2(ptr addrspace(1) inreg %ptr) {1589; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_2:1590; GFX900: ; %bb.0:1591; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1592; GFX900-NEXT: ;;#ASMSTART1593; GFX900-NEXT: ; def v[2:5]1594; GFX900-NEXT: ;;#ASMEND1595; GFX900-NEXT: v_mov_b32_e32 v6, 01596; GFX900-NEXT: ;;#ASMSTART1597; GFX900-NEXT: ; def v[0:3]1598; GFX900-NEXT: ;;#ASMEND1599; GFX900-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:161600; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1601; GFX900-NEXT: s_waitcnt vmcnt(0)1602; GFX900-NEXT: s_setpc_b64 s[30:31]1603;1604; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_2:1605; GFX90A: ; %bb.0:1606; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1607; GFX90A-NEXT: ;;#ASMSTART1608; GFX90A-NEXT: ; def v[2:5]1609; GFX90A-NEXT: ;;#ASMEND1610; GFX90A-NEXT: v_mov_b32_e32 v6, 01611; GFX90A-NEXT: ;;#ASMSTART1612; GFX90A-NEXT: ; def v[0:3]1613; GFX90A-NEXT: ;;#ASMEND1614; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17] offset:161615; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1616; GFX90A-NEXT: s_waitcnt vmcnt(0)1617; GFX90A-NEXT: s_setpc_b64 s[30:31]1618;1619; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_1_2:1620; GFX942: ; %bb.0:1621; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX942-NEXT: ;;#ASMSTART1623; GFX942-NEXT: ; def v[2:5]1624; GFX942-NEXT: ;;#ASMEND1625; GFX942-NEXT: v_mov_b32_e32 v6, 01626; GFX942-NEXT: ;;#ASMSTART1627; GFX942-NEXT: ; def v[0:3]1628; GFX942-NEXT: ;;#ASMEND1629; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1] offset:161630; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1631; GFX942-NEXT: s_waitcnt vmcnt(0)1632; GFX942-NEXT: s_setpc_b64 s[30:31]1633 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1634 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1635 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 2>1636 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321637 ret void1638}1639 1640define void @v_shuffle_v3p0_v2p0__u_3_3(ptr addrspace(1) inreg %ptr) {1641; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_3_3:1642; GFX900: ; %bb.0:1643; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1644; GFX900-NEXT: v_mov_b32_e32 v4, 01645; GFX900-NEXT: ;;#ASMSTART1646; GFX900-NEXT: ; def v[0:3]1647; GFX900-NEXT: ;;#ASMEND1648; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161649; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1650; GFX900-NEXT: s_waitcnt vmcnt(0)1651; GFX900-NEXT: s_setpc_b64 s[30:31]1652;1653; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_3_3:1654; GFX90A: ; %bb.0:1655; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1656; GFX90A-NEXT: v_mov_b32_e32 v4, 01657; GFX90A-NEXT: ;;#ASMSTART1658; GFX90A-NEXT: ; def v[0:3]1659; GFX90A-NEXT: ;;#ASMEND1660; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161661; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1662; GFX90A-NEXT: s_waitcnt vmcnt(0)1663; GFX90A-NEXT: s_setpc_b64 s[30:31]1664;1665; GFX942-LABEL: v_shuffle_v3p0_v2p0__u_3_3:1666; GFX942: ; %bb.0:1667; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1668; GFX942-NEXT: v_mov_b32_e32 v4, 01669; GFX942-NEXT: ;;#ASMSTART1670; GFX942-NEXT: ; def v[0:3]1671; GFX942-NEXT: ;;#ASMEND1672; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:161673; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1674; GFX942-NEXT: s_waitcnt vmcnt(0)1675; GFX942-NEXT: s_setpc_b64 s[30:31]1676 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1677 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1678 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>1679 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321680 ret void1681}1682 1683define void @v_shuffle_v3p0_v2p0__0_3_3(ptr addrspace(1) inreg %ptr) {1684; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_3_3:1685; GFX900: ; %bb.0:1686; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1687; GFX900-NEXT: ;;#ASMSTART1688; GFX900-NEXT: ; def v[0:3]1689; GFX900-NEXT: ;;#ASMEND1690; GFX900-NEXT: ;;#ASMSTART1691; GFX900-NEXT: ; def v[2:5]1692; GFX900-NEXT: ;;#ASMEND1693; GFX900-NEXT: v_mov_b32_e32 v6, 01694; GFX900-NEXT: v_mov_b32_e32 v2, v41695; GFX900-NEXT: v_mov_b32_e32 v3, v51696; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161697; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]1698; GFX900-NEXT: s_waitcnt vmcnt(0)1699; GFX900-NEXT: s_setpc_b64 s[30:31]1700;1701; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_3_3:1702; GFX90A: ; %bb.0:1703; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1704; GFX90A-NEXT: ;;#ASMSTART1705; GFX90A-NEXT: ; def v[0:3]1706; GFX90A-NEXT: ;;#ASMEND1707; GFX90A-NEXT: ;;#ASMSTART1708; GFX90A-NEXT: ; def v[2:5]1709; GFX90A-NEXT: ;;#ASMEND1710; GFX90A-NEXT: v_mov_b32_e32 v6, 01711; GFX90A-NEXT: v_mov_b32_e32 v2, v41712; GFX90A-NEXT: v_mov_b32_e32 v3, v51713; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17] offset:161714; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]1715; GFX90A-NEXT: s_waitcnt vmcnt(0)1716; GFX90A-NEXT: s_setpc_b64 s[30:31]1717;1718; GFX942-LABEL: v_shuffle_v3p0_v2p0__0_3_3:1719; GFX942: ; %bb.0:1720; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1721; GFX942-NEXT: ;;#ASMSTART1722; GFX942-NEXT: ; def v[0:3]1723; GFX942-NEXT: ;;#ASMEND1724; GFX942-NEXT: v_mov_b32_e32 v6, 01725; GFX942-NEXT: ;;#ASMSTART1726; GFX942-NEXT: ; def v[2:5]1727; GFX942-NEXT: ;;#ASMEND1728; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1] offset:161729; GFX942-NEXT: v_mov_b32_e32 v2, v41730; GFX942-NEXT: v_mov_b32_e32 v3, v51731; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]1732; GFX942-NEXT: s_waitcnt vmcnt(0)1733; GFX942-NEXT: s_setpc_b64 s[30:31]1734 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1735 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1736 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 0, i32 3, i32 3>1737 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321738 ret void1739}1740 1741define void @v_shuffle_v3p0_v2p0__1_3_3(ptr addrspace(1) inreg %ptr) {1742; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_3_3:1743; GFX900: ; %bb.0:1744; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1745; GFX900-NEXT: ;;#ASMSTART1746; GFX900-NEXT: ; def v[4:7]1747; GFX900-NEXT: ;;#ASMEND1748; GFX900-NEXT: v_mov_b32_e32 v8, 01749; GFX900-NEXT: v_mov_b32_e32 v4, v61750; GFX900-NEXT: v_mov_b32_e32 v5, v71751; GFX900-NEXT: ;;#ASMSTART1752; GFX900-NEXT: ; def v[0:3]1753; GFX900-NEXT: ;;#ASMEND1754; GFX900-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] offset:161755; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1756; GFX900-NEXT: s_waitcnt vmcnt(0)1757; GFX900-NEXT: s_setpc_b64 s[30:31]1758;1759; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_3_3:1760; GFX90A: ; %bb.0:1761; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1762; GFX90A-NEXT: ;;#ASMSTART1763; GFX90A-NEXT: ; def v[4:7]1764; GFX90A-NEXT: ;;#ASMEND1765; GFX90A-NEXT: v_mov_b32_e32 v8, 01766; GFX90A-NEXT: v_mov_b32_e32 v4, v61767; GFX90A-NEXT: v_mov_b32_e32 v5, v71768; GFX90A-NEXT: ;;#ASMSTART1769; GFX90A-NEXT: ; def v[0:3]1770; GFX90A-NEXT: ;;#ASMEND1771; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17] offset:161772; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1773; GFX90A-NEXT: s_waitcnt vmcnt(0)1774; GFX90A-NEXT: s_setpc_b64 s[30:31]1775;1776; GFX942-LABEL: v_shuffle_v3p0_v2p0__1_3_3:1777; GFX942: ; %bb.0:1778; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1779; GFX942-NEXT: ;;#ASMSTART1780; GFX942-NEXT: ; def v[4:7]1781; GFX942-NEXT: ;;#ASMEND1782; GFX942-NEXT: v_mov_b32_e32 v8, 01783; GFX942-NEXT: v_mov_b32_e32 v4, v61784; GFX942-NEXT: v_mov_b32_e32 v5, v71785; GFX942-NEXT: ;;#ASMSTART1786; GFX942-NEXT: ; def v[0:3]1787; GFX942-NEXT: ;;#ASMEND1788; GFX942-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1] offset:161789; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]1790; GFX942-NEXT: s_waitcnt vmcnt(0)1791; GFX942-NEXT: s_setpc_b64 s[30:31]1792 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1793 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1794 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 1, i32 3, i32 3>1795 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321796 ret void1797}1798 1799define void @v_shuffle_v3p0_v2p0__2_3_3(ptr addrspace(1) inreg %ptr) {1800; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_3_3:1801; GFX900: ; %bb.0:1802; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1803; GFX900-NEXT: v_mov_b32_e32 v4, 01804; GFX900-NEXT: ;;#ASMSTART1805; GFX900-NEXT: ; def v[0:3]1806; GFX900-NEXT: ;;#ASMEND1807; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161808; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1809; GFX900-NEXT: s_waitcnt vmcnt(0)1810; GFX900-NEXT: s_setpc_b64 s[30:31]1811;1812; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_3_3:1813; GFX90A: ; %bb.0:1814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX90A-NEXT: v_mov_b32_e32 v4, 01816; GFX90A-NEXT: ;;#ASMSTART1817; GFX90A-NEXT: ; def v[0:3]1818; GFX90A-NEXT: ;;#ASMEND1819; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161820; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1821; GFX90A-NEXT: s_waitcnt vmcnt(0)1822; GFX90A-NEXT: s_setpc_b64 s[30:31]1823;1824; GFX942-LABEL: v_shuffle_v3p0_v2p0__2_3_3:1825; GFX942: ; %bb.0:1826; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1827; GFX942-NEXT: v_mov_b32_e32 v4, 01828; GFX942-NEXT: ;;#ASMSTART1829; GFX942-NEXT: ; def v[0:3]1830; GFX942-NEXT: ;;#ASMEND1831; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:161832; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1833; GFX942-NEXT: s_waitcnt vmcnt(0)1834; GFX942-NEXT: s_setpc_b64 s[30:31]1835 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1836 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1837 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 2, i32 3, i32 3>1838 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321839 ret void1840}1841 1842define void @v_shuffle_v3p0_v2p0__3_u_3(ptr addrspace(1) inreg %ptr) {1843; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_3:1844; GFX900: ; %bb.0:1845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1846; GFX900-NEXT: v_mov_b32_e32 v4, 01847; GFX900-NEXT: ;;#ASMSTART1848; GFX900-NEXT: ; def v[0:3]1849; GFX900-NEXT: ;;#ASMEND1850; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161851; GFX900-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1852; GFX900-NEXT: s_waitcnt vmcnt(0)1853; GFX900-NEXT: s_setpc_b64 s[30:31]1854;1855; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_3:1856; GFX90A: ; %bb.0:1857; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1858; GFX90A-NEXT: v_mov_b32_e32 v4, 01859; GFX90A-NEXT: ;;#ASMSTART1860; GFX90A-NEXT: ; def v[0:3]1861; GFX90A-NEXT: ;;#ASMEND1862; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17] offset:161863; GFX90A-NEXT: global_store_dwordx4 v4, v[2:5], s[16:17]1864; GFX90A-NEXT: s_waitcnt vmcnt(0)1865; GFX90A-NEXT: s_setpc_b64 s[30:31]1866;1867; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_u_3:1868; GFX942: ; %bb.0:1869; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1870; GFX942-NEXT: v_mov_b32_e32 v4, 01871; GFX942-NEXT: ;;#ASMSTART1872; GFX942-NEXT: ; def v[0:3]1873; GFX942-NEXT: ;;#ASMEND1874; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1] offset:161875; GFX942-NEXT: global_store_dwordx4 v4, v[2:5], s[0:1]1876; GFX942-NEXT: s_waitcnt vmcnt(0)1877; GFX942-NEXT: s_setpc_b64 s[30:31]1878 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1879 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1880 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>1881 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321882 ret void1883}1884 1885define void @v_shuffle_v3p0_v2p0__3_0_3(ptr addrspace(1) inreg %ptr) {1886; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_3:1887; GFX900: ; %bb.0:1888; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1889; GFX900-NEXT: v_mov_b32_e32 v8, 01890; GFX900-NEXT: ;;#ASMSTART1891; GFX900-NEXT: ; def v[4:7]1892; GFX900-NEXT: ;;#ASMEND1893; GFX900-NEXT: ;;#ASMSTART1894; GFX900-NEXT: ; def v[0:3]1895; GFX900-NEXT: ;;#ASMEND1896; GFX900-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] offset:161897; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1898; GFX900-NEXT: s_waitcnt vmcnt(0)1899; GFX900-NEXT: s_setpc_b64 s[30:31]1900;1901; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_3:1902; GFX90A: ; %bb.0:1903; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1904; GFX90A-NEXT: v_mov_b32_e32 v8, 01905; GFX90A-NEXT: ;;#ASMSTART1906; GFX90A-NEXT: ; def v[4:7]1907; GFX90A-NEXT: ;;#ASMEND1908; GFX90A-NEXT: ;;#ASMSTART1909; GFX90A-NEXT: ; def v[0:3]1910; GFX90A-NEXT: ;;#ASMEND1911; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17] offset:161912; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]1913; GFX90A-NEXT: s_waitcnt vmcnt(0)1914; GFX90A-NEXT: s_setpc_b64 s[30:31]1915;1916; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_0_3:1917; GFX942: ; %bb.0:1918; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1919; GFX942-NEXT: v_mov_b32_e32 v8, 01920; GFX942-NEXT: ;;#ASMSTART1921; GFX942-NEXT: ; def v[4:7]1922; GFX942-NEXT: ;;#ASMEND1923; GFX942-NEXT: ;;#ASMSTART1924; GFX942-NEXT: ; def v[0:3]1925; GFX942-NEXT: ;;#ASMEND1926; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1] offset:161927; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]1928; GFX942-NEXT: s_waitcnt vmcnt(0)1929; GFX942-NEXT: s_setpc_b64 s[30:31]1930 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1931 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1932 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 3>1933 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321934 ret void1935}1936 1937define void @v_shuffle_v3p0_v2p0__3_1_3(ptr addrspace(1) inreg %ptr) {1938; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_3:1939; GFX900: ; %bb.0:1940; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1941; GFX900-NEXT: ;;#ASMSTART1942; GFX900-NEXT: ; def v[2:5]1943; GFX900-NEXT: ;;#ASMEND1944; GFX900-NEXT: v_mov_b32_e32 v6, 01945; GFX900-NEXT: ;;#ASMSTART1946; GFX900-NEXT: ; def v[0:3]1947; GFX900-NEXT: ;;#ASMEND1948; GFX900-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:161949; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1950; GFX900-NEXT: s_waitcnt vmcnt(0)1951; GFX900-NEXT: s_setpc_b64 s[30:31]1952;1953; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_3:1954; GFX90A: ; %bb.0:1955; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1956; GFX90A-NEXT: ;;#ASMSTART1957; GFX90A-NEXT: ; def v[2:5]1958; GFX90A-NEXT: ;;#ASMEND1959; GFX90A-NEXT: v_mov_b32_e32 v6, 01960; GFX90A-NEXT: ;;#ASMSTART1961; GFX90A-NEXT: ; def v[0:3]1962; GFX90A-NEXT: ;;#ASMEND1963; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:161964; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]1965; GFX90A-NEXT: s_waitcnt vmcnt(0)1966; GFX90A-NEXT: s_setpc_b64 s[30:31]1967;1968; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_1_3:1969; GFX942: ; %bb.0:1970; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1971; GFX942-NEXT: ;;#ASMSTART1972; GFX942-NEXT: ; def v[2:5]1973; GFX942-NEXT: ;;#ASMEND1974; GFX942-NEXT: v_mov_b32_e32 v6, 01975; GFX942-NEXT: ;;#ASMSTART1976; GFX942-NEXT: ; def v[0:3]1977; GFX942-NEXT: ;;#ASMEND1978; GFX942-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1] offset:161979; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]1980; GFX942-NEXT: s_waitcnt vmcnt(0)1981; GFX942-NEXT: s_setpc_b64 s[30:31]1982 %vec0 = call <2 x ptr> asm "; def $0", "=v"()1983 %vec1 = call <2 x ptr> asm "; def $0", "=v"()1984 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 3>1985 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 321986 ret void1987}1988 1989define void @v_shuffle_v3p0_v2p0__3_2_3(ptr addrspace(1) inreg %ptr) {1990; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_3:1991; GFX900: ; %bb.0:1992; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1993; GFX900-NEXT: v_mov_b32_e32 v6, 01994; GFX900-NEXT: ;;#ASMSTART1995; GFX900-NEXT: ; def v[0:3]1996; GFX900-NEXT: ;;#ASMEND1997; GFX900-NEXT: v_mov_b32_e32 v4, v01998; GFX900-NEXT: v_mov_b32_e32 v5, v11999; GFX900-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:162000; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]2001; GFX900-NEXT: s_waitcnt vmcnt(0)2002; GFX900-NEXT: s_setpc_b64 s[30:31]2003;2004; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_3:2005; GFX90A: ; %bb.0:2006; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2007; GFX90A-NEXT: v_mov_b32_e32 v6, 02008; GFX90A-NEXT: ;;#ASMSTART2009; GFX90A-NEXT: ; def v[0:3]2010; GFX90A-NEXT: ;;#ASMEND2011; GFX90A-NEXT: v_mov_b32_e32 v4, v02012; GFX90A-NEXT: v_mov_b32_e32 v5, v12013; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17] offset:162014; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]2015; GFX90A-NEXT: s_waitcnt vmcnt(0)2016; GFX90A-NEXT: s_setpc_b64 s[30:31]2017;2018; GFX942-LABEL: v_shuffle_v3p0_v2p0__3_2_3:2019; GFX942: ; %bb.0:2020; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2021; GFX942-NEXT: v_mov_b32_e32 v6, 02022; GFX942-NEXT: ;;#ASMSTART2023; GFX942-NEXT: ; def v[0:3]2024; GFX942-NEXT: ;;#ASMEND2025; GFX942-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1] offset:162026; GFX942-NEXT: v_mov_b32_e32 v4, v02027; GFX942-NEXT: v_mov_b32_e32 v5, v12028; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]2029; GFX942-NEXT: s_waitcnt vmcnt(0)2030; GFX942-NEXT: s_setpc_b64 s[30:31]2031 %vec0 = call <2 x ptr> asm "; def $0", "=v"()2032 %vec1 = call <2 x ptr> asm "; def $0", "=v"()2033 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 3>2034 store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 322035 ret void2036}2037 2038define void @s_shuffle_v3p0_v2p0__u_u_u() {2039; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_u_u:2040; GFX9: ; %bb.0:2041; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2042; GFX9-NEXT: ;;#ASMSTART2043; GFX9-NEXT: ; use s[8:13]2044; GFX9-NEXT: ;;#ASMEND2045; GFX9-NEXT: s_setpc_b64 s[30:31]2046 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2047 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> poison2048 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2049 ret void2050}2051 2052define void @s_shuffle_v3p0_v2p0__0_u_u() {2053; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_u_u:2054; GFX900: ; %bb.0:2055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2056; GFX900-NEXT: ;;#ASMSTART2057; GFX900-NEXT: ; def s[8:11]2058; GFX900-NEXT: ;;#ASMEND2059; GFX900-NEXT: ;;#ASMSTART2060; GFX900-NEXT: ; use s[8:13]2061; GFX900-NEXT: ;;#ASMEND2062; GFX900-NEXT: s_setpc_b64 s[30:31]2063;2064; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_u_u:2065; GFX90A: ; %bb.0:2066; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX90A-NEXT: ;;#ASMSTART2068; GFX90A-NEXT: ; def s[8:11]2069; GFX90A-NEXT: ;;#ASMEND2070; GFX90A-NEXT: ;;#ASMSTART2071; GFX90A-NEXT: ; use s[8:13]2072; GFX90A-NEXT: ;;#ASMEND2073; GFX90A-NEXT: s_setpc_b64 s[30:31]2074;2075; GFX942-LABEL: s_shuffle_v3p0_v2p0__0_u_u:2076; GFX942: ; %bb.0:2077; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2078; GFX942-NEXT: ;;#ASMSTART2079; GFX942-NEXT: ; def s[8:11]2080; GFX942-NEXT: ;;#ASMEND2081; GFX942-NEXT: s_nop 02082; GFX942-NEXT: ;;#ASMSTART2083; GFX942-NEXT: ; use s[8:13]2084; GFX942-NEXT: ;;#ASMEND2085; GFX942-NEXT: s_setpc_b64 s[30:31]2086 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2087 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 poison, i32 poison>2088 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2089 ret void2090}2091 2092define void @s_shuffle_v3p0_v2p0__1_u_u() {2093; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_u_u:2094; GFX900: ; %bb.0:2095; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2096; GFX900-NEXT: ;;#ASMSTART2097; GFX900-NEXT: ; def s[4:7]2098; GFX900-NEXT: ;;#ASMEND2099; GFX900-NEXT: s_mov_b32 s8, s62100; GFX900-NEXT: s_mov_b32 s9, s72101; GFX900-NEXT: ;;#ASMSTART2102; GFX900-NEXT: ; use s[8:13]2103; GFX900-NEXT: ;;#ASMEND2104; GFX900-NEXT: s_setpc_b64 s[30:31]2105;2106; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_u_u:2107; GFX90A: ; %bb.0:2108; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2109; GFX90A-NEXT: ;;#ASMSTART2110; GFX90A-NEXT: ; def s[4:7]2111; GFX90A-NEXT: ;;#ASMEND2112; GFX90A-NEXT: s_mov_b32 s8, s62113; GFX90A-NEXT: s_mov_b32 s9, s72114; GFX90A-NEXT: ;;#ASMSTART2115; GFX90A-NEXT: ; use s[8:13]2116; GFX90A-NEXT: ;;#ASMEND2117; GFX90A-NEXT: s_setpc_b64 s[30:31]2118;2119; GFX942-LABEL: s_shuffle_v3p0_v2p0__1_u_u:2120; GFX942: ; %bb.0:2121; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2122; GFX942-NEXT: ;;#ASMSTART2123; GFX942-NEXT: ; def s[0:3]2124; GFX942-NEXT: ;;#ASMEND2125; GFX942-NEXT: s_mov_b32 s8, s22126; GFX942-NEXT: s_mov_b32 s9, s32127; GFX942-NEXT: ;;#ASMSTART2128; GFX942-NEXT: ; use s[8:13]2129; GFX942-NEXT: ;;#ASMEND2130; GFX942-NEXT: s_setpc_b64 s[30:31]2131 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2132 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 poison, i32 poison>2133 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2134 ret void2135}2136 2137define void @s_shuffle_v3p0_v2p0__2_u_u() {2138; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_u_u:2139; GFX9: ; %bb.0:2140; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2141; GFX9-NEXT: ;;#ASMSTART2142; GFX9-NEXT: ; use s[8:13]2143; GFX9-NEXT: ;;#ASMEND2144; GFX9-NEXT: s_setpc_b64 s[30:31]2145 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2146 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 poison, i32 poison>2147 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2148 ret void2149}2150 2151define void @s_shuffle_v3p0_v2p0__3_u_u() {2152; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_u:2153; GFX900: ; %bb.0:2154; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2155; GFX900-NEXT: ;;#ASMSTART2156; GFX900-NEXT: ; def s[4:7]2157; GFX900-NEXT: ;;#ASMEND2158; GFX900-NEXT: s_mov_b32 s8, s62159; GFX900-NEXT: s_mov_b32 s9, s72160; GFX900-NEXT: ;;#ASMSTART2161; GFX900-NEXT: ; use s[8:13]2162; GFX900-NEXT: ;;#ASMEND2163; GFX900-NEXT: s_setpc_b64 s[30:31]2164;2165; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_u:2166; GFX90A: ; %bb.0:2167; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2168; GFX90A-NEXT: ;;#ASMSTART2169; GFX90A-NEXT: ; def s[4:7]2170; GFX90A-NEXT: ;;#ASMEND2171; GFX90A-NEXT: s_mov_b32 s8, s62172; GFX90A-NEXT: s_mov_b32 s9, s72173; GFX90A-NEXT: ;;#ASMSTART2174; GFX90A-NEXT: ; use s[8:13]2175; GFX90A-NEXT: ;;#ASMEND2176; GFX90A-NEXT: s_setpc_b64 s[30:31]2177;2178; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_u_u:2179; GFX942: ; %bb.0:2180; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2181; GFX942-NEXT: ;;#ASMSTART2182; GFX942-NEXT: ; def s[0:3]2183; GFX942-NEXT: ;;#ASMEND2184; GFX942-NEXT: s_mov_b32 s8, s22185; GFX942-NEXT: s_mov_b32 s9, s32186; GFX942-NEXT: ;;#ASMSTART2187; GFX942-NEXT: ; use s[8:13]2188; GFX942-NEXT: ;;#ASMEND2189; GFX942-NEXT: s_setpc_b64 s[30:31]2190 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2191 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2192 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>2193 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2194 ret void2195}2196 2197define void @s_shuffle_v3p0_v2p0__3_0_u() {2198; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_u:2199; GFX900: ; %bb.0:2200; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX900-NEXT: ;;#ASMSTART2202; GFX900-NEXT: ; def s[8:11]2203; GFX900-NEXT: ;;#ASMEND2204; GFX900-NEXT: ;;#ASMSTART2205; GFX900-NEXT: ; def s[4:7]2206; GFX900-NEXT: ;;#ASMEND2207; GFX900-NEXT: s_mov_b32 s8, s102208; GFX900-NEXT: s_mov_b32 s9, s112209; GFX900-NEXT: s_mov_b32 s10, s42210; GFX900-NEXT: s_mov_b32 s11, s52211; GFX900-NEXT: ;;#ASMSTART2212; GFX900-NEXT: ; use s[8:13]2213; GFX900-NEXT: ;;#ASMEND2214; GFX900-NEXT: s_setpc_b64 s[30:31]2215;2216; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_u:2217; GFX90A: ; %bb.0:2218; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2219; GFX90A-NEXT: ;;#ASMSTART2220; GFX90A-NEXT: ; def s[8:11]2221; GFX90A-NEXT: ;;#ASMEND2222; GFX90A-NEXT: ;;#ASMSTART2223; GFX90A-NEXT: ; def s[4:7]2224; GFX90A-NEXT: ;;#ASMEND2225; GFX90A-NEXT: s_mov_b32 s8, s102226; GFX90A-NEXT: s_mov_b32 s9, s112227; GFX90A-NEXT: s_mov_b32 s10, s42228; GFX90A-NEXT: s_mov_b32 s11, s52229; GFX90A-NEXT: ;;#ASMSTART2230; GFX90A-NEXT: ; use s[8:13]2231; GFX90A-NEXT: ;;#ASMEND2232; GFX90A-NEXT: s_setpc_b64 s[30:31]2233;2234; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_0_u:2235; GFX942: ; %bb.0:2236; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2237; GFX942-NEXT: ;;#ASMSTART2238; GFX942-NEXT: ; def s[0:3]2239; GFX942-NEXT: ;;#ASMEND2240; GFX942-NEXT: ;;#ASMSTART2241; GFX942-NEXT: ; def s[4:7]2242; GFX942-NEXT: ;;#ASMEND2243; GFX942-NEXT: s_mov_b32 s8, s62244; GFX942-NEXT: s_mov_b32 s9, s72245; GFX942-NEXT: s_mov_b32 s10, s02246; GFX942-NEXT: s_mov_b32 s11, s12247; GFX942-NEXT: ;;#ASMSTART2248; GFX942-NEXT: ; use s[8:13]2249; GFX942-NEXT: ;;#ASMEND2250; GFX942-NEXT: s_setpc_b64 s[30:31]2251 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2252 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2253 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>2254 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2255 ret void2256}2257 2258define void @s_shuffle_v3p0_v2p0__3_1_u() {2259; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_u:2260; GFX900: ; %bb.0:2261; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2262; GFX900-NEXT: ;;#ASMSTART2263; GFX900-NEXT: ; def s[8:11]2264; GFX900-NEXT: ;;#ASMEND2265; GFX900-NEXT: ;;#ASMSTART2266; GFX900-NEXT: ; def s[4:7]2267; GFX900-NEXT: ;;#ASMEND2268; GFX900-NEXT: s_mov_b32 s8, s62269; GFX900-NEXT: s_mov_b32 s9, s72270; GFX900-NEXT: ;;#ASMSTART2271; GFX900-NEXT: ; use s[8:13]2272; GFX900-NEXT: ;;#ASMEND2273; GFX900-NEXT: s_setpc_b64 s[30:31]2274;2275; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_u:2276; GFX90A: ; %bb.0:2277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2278; GFX90A-NEXT: ;;#ASMSTART2279; GFX90A-NEXT: ; def s[8:11]2280; GFX90A-NEXT: ;;#ASMEND2281; GFX90A-NEXT: ;;#ASMSTART2282; GFX90A-NEXT: ; def s[4:7]2283; GFX90A-NEXT: ;;#ASMEND2284; GFX90A-NEXT: s_mov_b32 s8, s62285; GFX90A-NEXT: s_mov_b32 s9, s72286; GFX90A-NEXT: ;;#ASMSTART2287; GFX90A-NEXT: ; use s[8:13]2288; GFX90A-NEXT: ;;#ASMEND2289; GFX90A-NEXT: s_setpc_b64 s[30:31]2290;2291; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_1_u:2292; GFX942: ; %bb.0:2293; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2294; GFX942-NEXT: ;;#ASMSTART2295; GFX942-NEXT: ; def s[8:11]2296; GFX942-NEXT: ;;#ASMEND2297; GFX942-NEXT: ;;#ASMSTART2298; GFX942-NEXT: ; def s[0:3]2299; GFX942-NEXT: ;;#ASMEND2300; GFX942-NEXT: s_mov_b32 s8, s22301; GFX942-NEXT: s_mov_b32 s9, s32302; GFX942-NEXT: ;;#ASMSTART2303; GFX942-NEXT: ; use s[8:13]2304; GFX942-NEXT: ;;#ASMEND2305; GFX942-NEXT: s_setpc_b64 s[30:31]2306 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2307 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2308 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>2309 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2310 ret void2311}2312 2313define void @s_shuffle_v3p0_v2p0__3_2_u() {2314; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_u:2315; GFX900: ; %bb.0:2316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2317; GFX900-NEXT: ;;#ASMSTART2318; GFX900-NEXT: ; def s[4:7]2319; GFX900-NEXT: ;;#ASMEND2320; GFX900-NEXT: s_mov_b32 s8, s62321; GFX900-NEXT: s_mov_b32 s9, s72322; GFX900-NEXT: s_mov_b32 s10, s42323; GFX900-NEXT: s_mov_b32 s11, s52324; GFX900-NEXT: ;;#ASMSTART2325; GFX900-NEXT: ; use s[8:13]2326; GFX900-NEXT: ;;#ASMEND2327; GFX900-NEXT: s_setpc_b64 s[30:31]2328;2329; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_u:2330; GFX90A: ; %bb.0:2331; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2332; GFX90A-NEXT: ;;#ASMSTART2333; GFX90A-NEXT: ; def s[4:7]2334; GFX90A-NEXT: ;;#ASMEND2335; GFX90A-NEXT: s_mov_b32 s8, s62336; GFX90A-NEXT: s_mov_b32 s9, s72337; GFX90A-NEXT: s_mov_b32 s10, s42338; GFX90A-NEXT: s_mov_b32 s11, s52339; GFX90A-NEXT: ;;#ASMSTART2340; GFX90A-NEXT: ; use s[8:13]2341; GFX90A-NEXT: ;;#ASMEND2342; GFX90A-NEXT: s_setpc_b64 s[30:31]2343;2344; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_2_u:2345; GFX942: ; %bb.0:2346; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2347; GFX942-NEXT: ;;#ASMSTART2348; GFX942-NEXT: ; def s[0:3]2349; GFX942-NEXT: ;;#ASMEND2350; GFX942-NEXT: s_mov_b32 s8, s22351; GFX942-NEXT: s_mov_b32 s9, s32352; GFX942-NEXT: s_mov_b32 s10, s02353; GFX942-NEXT: s_mov_b32 s11, s12354; GFX942-NEXT: ;;#ASMSTART2355; GFX942-NEXT: ; use s[8:13]2356; GFX942-NEXT: ;;#ASMEND2357; GFX942-NEXT: s_setpc_b64 s[30:31]2358 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2359 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2360 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>2361 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2362 ret void2363}2364 2365define void @s_shuffle_v3p0_v2p0__3_3_u() {2366; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_u:2367; GFX9: ; %bb.0:2368; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2369; GFX9-NEXT: ;;#ASMSTART2370; GFX9-NEXT: ; def s[8:11]2371; GFX9-NEXT: ;;#ASMEND2372; GFX9-NEXT: s_mov_b32 s8, s102373; GFX9-NEXT: s_mov_b32 s9, s112374; GFX9-NEXT: ;;#ASMSTART2375; GFX9-NEXT: ; use s[8:13]2376; GFX9-NEXT: ;;#ASMEND2377; GFX9-NEXT: s_setpc_b64 s[30:31]2378 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2379 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2380 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>2381 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2382 ret void2383}2384 2385define void @s_shuffle_v3p0_v2p0__3_3_0() {2386; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_0:2387; GFX9: ; %bb.0:2388; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2389; GFX9-NEXT: ;;#ASMSTART2390; GFX9-NEXT: ; def s[8:11]2391; GFX9-NEXT: ;;#ASMEND2392; GFX9-NEXT: ;;#ASMSTART2393; GFX9-NEXT: ; def s[12:15]2394; GFX9-NEXT: ;;#ASMEND2395; GFX9-NEXT: s_mov_b32 s8, s102396; GFX9-NEXT: s_mov_b32 s9, s112397; GFX9-NEXT: ;;#ASMSTART2398; GFX9-NEXT: ; use s[8:13]2399; GFX9-NEXT: ;;#ASMEND2400; GFX9-NEXT: s_setpc_b64 s[30:31]2401 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2402 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2403 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 0>2404 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2405 ret void2406}2407 2408define void @s_shuffle_v3p0_v2p0__3_3_1() {2409; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_1:2410; GFX900: ; %bb.0:2411; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2412; GFX900-NEXT: ;;#ASMSTART2413; GFX900-NEXT: ; def s[8:11]2414; GFX900-NEXT: ;;#ASMEND2415; GFX900-NEXT: ;;#ASMSTART2416; GFX900-NEXT: ; def s[4:7]2417; GFX900-NEXT: ;;#ASMEND2418; GFX900-NEXT: s_mov_b32 s8, s102419; GFX900-NEXT: s_mov_b32 s9, s112420; GFX900-NEXT: s_mov_b32 s12, s62421; GFX900-NEXT: s_mov_b32 s13, s72422; GFX900-NEXT: ;;#ASMSTART2423; GFX900-NEXT: ; use s[8:13]2424; GFX900-NEXT: ;;#ASMEND2425; GFX900-NEXT: s_setpc_b64 s[30:31]2426;2427; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_1:2428; GFX90A: ; %bb.0:2429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2430; GFX90A-NEXT: ;;#ASMSTART2431; GFX90A-NEXT: ; def s[8:11]2432; GFX90A-NEXT: ;;#ASMEND2433; GFX90A-NEXT: ;;#ASMSTART2434; GFX90A-NEXT: ; def s[4:7]2435; GFX90A-NEXT: ;;#ASMEND2436; GFX90A-NEXT: s_mov_b32 s8, s102437; GFX90A-NEXT: s_mov_b32 s9, s112438; GFX90A-NEXT: s_mov_b32 s12, s62439; GFX90A-NEXT: s_mov_b32 s13, s72440; GFX90A-NEXT: ;;#ASMSTART2441; GFX90A-NEXT: ; use s[8:13]2442; GFX90A-NEXT: ;;#ASMEND2443; GFX90A-NEXT: s_setpc_b64 s[30:31]2444;2445; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_3_1:2446; GFX942: ; %bb.0:2447; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2448; GFX942-NEXT: ;;#ASMSTART2449; GFX942-NEXT: ; def s[8:11]2450; GFX942-NEXT: ;;#ASMEND2451; GFX942-NEXT: ;;#ASMSTART2452; GFX942-NEXT: ; def s[0:3]2453; GFX942-NEXT: ;;#ASMEND2454; GFX942-NEXT: s_mov_b32 s8, s102455; GFX942-NEXT: s_mov_b32 s9, s112456; GFX942-NEXT: s_mov_b32 s12, s22457; GFX942-NEXT: s_mov_b32 s13, s32458; GFX942-NEXT: ;;#ASMSTART2459; GFX942-NEXT: ; use s[8:13]2460; GFX942-NEXT: ;;#ASMEND2461; GFX942-NEXT: s_setpc_b64 s[30:31]2462 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2463 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2464 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 1>2465 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2466 ret void2467}2468 2469define void @s_shuffle_v3p0_v2p0__3_3_2() {2470; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_2:2471; GFX9: ; %bb.0:2472; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2473; GFX9-NEXT: ;;#ASMSTART2474; GFX9-NEXT: ; def s[12:15]2475; GFX9-NEXT: ;;#ASMEND2476; GFX9-NEXT: s_mov_b32 s8, s142477; GFX9-NEXT: s_mov_b32 s9, s152478; GFX9-NEXT: s_mov_b32 s10, s142479; GFX9-NEXT: s_mov_b32 s11, s152480; GFX9-NEXT: ;;#ASMSTART2481; GFX9-NEXT: ; use s[8:13]2482; GFX9-NEXT: ;;#ASMEND2483; GFX9-NEXT: s_setpc_b64 s[30:31]2484 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2485 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2486 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 2>2487 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2488 ret void2489}2490 2491define void @s_shuffle_v3p0_v2p0__3_3_3() {2492; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_3:2493; GFX9: ; %bb.0:2494; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2495; GFX9-NEXT: ;;#ASMSTART2496; GFX9-NEXT: ; def s[8:11]2497; GFX9-NEXT: ;;#ASMEND2498; GFX9-NEXT: s_mov_b32 s8, s102499; GFX9-NEXT: s_mov_b32 s9, s112500; GFX9-NEXT: s_mov_b32 s12, s102501; GFX9-NEXT: s_mov_b32 s13, s112502; GFX9-NEXT: ;;#ASMSTART2503; GFX9-NEXT: ; use s[8:13]2504; GFX9-NEXT: ;;#ASMEND2505; GFX9-NEXT: s_setpc_b64 s[30:31]2506 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2507 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2508 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 3>2509 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2510 ret void2511}2512 2513define void @s_shuffle_v3p0_v2p0__u_0_0() {2514; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_0_0:2515; GFX9: ; %bb.0:2516; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2517; GFX9-NEXT: ;;#ASMSTART2518; GFX9-NEXT: ; def s[12:15]2519; GFX9-NEXT: ;;#ASMEND2520; GFX9-NEXT: s_mov_b32 s10, s122521; GFX9-NEXT: s_mov_b32 s11, s132522; GFX9-NEXT: ;;#ASMSTART2523; GFX9-NEXT: ; use s[8:13]2524; GFX9-NEXT: ;;#ASMEND2525; GFX9-NEXT: s_setpc_b64 s[30:31]2526 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2527 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>2528 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2529 ret void2530}2531 2532define void @s_shuffle_v3p0_v2p0__0_0_0() {2533; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_0_0:2534; GFX9: ; %bb.0:2535; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2536; GFX9-NEXT: ;;#ASMSTART2537; GFX9-NEXT: ; def s[8:11]2538; GFX9-NEXT: ;;#ASMEND2539; GFX9-NEXT: s_mov_b32 s10, s82540; GFX9-NEXT: s_mov_b32 s11, s92541; GFX9-NEXT: s_mov_b32 s12, s82542; GFX9-NEXT: s_mov_b32 s13, s92543; GFX9-NEXT: ;;#ASMSTART2544; GFX9-NEXT: ; use s[8:13]2545; GFX9-NEXT: ;;#ASMEND2546; GFX9-NEXT: s_setpc_b64 s[30:31]2547 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2548 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> zeroinitializer2549 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2550 ret void2551}2552 2553define void @s_shuffle_v3p0_v2p0__1_0_0() {2554; GFX9-LABEL: s_shuffle_v3p0_v2p0__1_0_0:2555; GFX9: ; %bb.0:2556; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2557; GFX9-NEXT: ;;#ASMSTART2558; GFX9-NEXT: ; def s[12:15]2559; GFX9-NEXT: ;;#ASMEND2560; GFX9-NEXT: s_mov_b32 s8, s142561; GFX9-NEXT: s_mov_b32 s9, s152562; GFX9-NEXT: s_mov_b32 s10, s122563; GFX9-NEXT: s_mov_b32 s11, s132564; GFX9-NEXT: ;;#ASMSTART2565; GFX9-NEXT: ; use s[8:13]2566; GFX9-NEXT: ;;#ASMEND2567; GFX9-NEXT: s_setpc_b64 s[30:31]2568 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2569 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>2570 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2571 ret void2572}2573 2574define void @s_shuffle_v3p0_v2p0__2_0_0() {2575; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_0_0:2576; GFX9: ; %bb.0:2577; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2578; GFX9-NEXT: ;;#ASMSTART2579; GFX9-NEXT: ; def s[12:15]2580; GFX9-NEXT: ;;#ASMEND2581; GFX9-NEXT: s_mov_b32 s10, s122582; GFX9-NEXT: s_mov_b32 s11, s132583; GFX9-NEXT: ;;#ASMSTART2584; GFX9-NEXT: ; use s[8:13]2585; GFX9-NEXT: ;;#ASMEND2586; GFX9-NEXT: s_setpc_b64 s[30:31]2587 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2588 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>2589 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2590 ret void2591}2592 2593define void @s_shuffle_v3p0_v2p0__3_0_0() {2594; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_0:2595; GFX900: ; %bb.0:2596; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2597; GFX900-NEXT: ;;#ASMSTART2598; GFX900-NEXT: ; def s[12:15]2599; GFX900-NEXT: ;;#ASMEND2600; GFX900-NEXT: ;;#ASMSTART2601; GFX900-NEXT: ; def s[4:7]2602; GFX900-NEXT: ;;#ASMEND2603; GFX900-NEXT: s_mov_b32 s8, s62604; GFX900-NEXT: s_mov_b32 s9, s72605; GFX900-NEXT: s_mov_b32 s10, s122606; GFX900-NEXT: s_mov_b32 s11, s132607; GFX900-NEXT: ;;#ASMSTART2608; GFX900-NEXT: ; use s[8:13]2609; GFX900-NEXT: ;;#ASMEND2610; GFX900-NEXT: s_setpc_b64 s[30:31]2611;2612; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_0:2613; GFX90A: ; %bb.0:2614; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2615; GFX90A-NEXT: ;;#ASMSTART2616; GFX90A-NEXT: ; def s[12:15]2617; GFX90A-NEXT: ;;#ASMEND2618; GFX90A-NEXT: ;;#ASMSTART2619; GFX90A-NEXT: ; def s[4:7]2620; GFX90A-NEXT: ;;#ASMEND2621; GFX90A-NEXT: s_mov_b32 s8, s62622; GFX90A-NEXT: s_mov_b32 s9, s72623; GFX90A-NEXT: s_mov_b32 s10, s122624; GFX90A-NEXT: s_mov_b32 s11, s132625; GFX90A-NEXT: ;;#ASMSTART2626; GFX90A-NEXT: ; use s[8:13]2627; GFX90A-NEXT: ;;#ASMEND2628; GFX90A-NEXT: s_setpc_b64 s[30:31]2629;2630; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_0_0:2631; GFX942: ; %bb.0:2632; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2633; GFX942-NEXT: ;;#ASMSTART2634; GFX942-NEXT: ; def s[12:15]2635; GFX942-NEXT: ;;#ASMEND2636; GFX942-NEXT: ;;#ASMSTART2637; GFX942-NEXT: ; def s[0:3]2638; GFX942-NEXT: ;;#ASMEND2639; GFX942-NEXT: s_mov_b32 s8, s22640; GFX942-NEXT: s_mov_b32 s9, s32641; GFX942-NEXT: s_mov_b32 s10, s122642; GFX942-NEXT: s_mov_b32 s11, s132643; GFX942-NEXT: ;;#ASMSTART2644; GFX942-NEXT: ; use s[8:13]2645; GFX942-NEXT: ;;#ASMEND2646; GFX942-NEXT: s_setpc_b64 s[30:31]2647 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2648 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2649 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 0>2650 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2651 ret void2652}2653 2654define void @s_shuffle_v3p0_v2p0__3_u_0() {2655; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_0:2656; GFX900: ; %bb.0:2657; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2658; GFX900-NEXT: ;;#ASMSTART2659; GFX900-NEXT: ; def s[12:15]2660; GFX900-NEXT: ;;#ASMEND2661; GFX900-NEXT: ;;#ASMSTART2662; GFX900-NEXT: ; def s[4:7]2663; GFX900-NEXT: ;;#ASMEND2664; GFX900-NEXT: s_mov_b32 s8, s62665; GFX900-NEXT: s_mov_b32 s9, s72666; GFX900-NEXT: ;;#ASMSTART2667; GFX900-NEXT: ; use s[8:13]2668; GFX900-NEXT: ;;#ASMEND2669; GFX900-NEXT: s_setpc_b64 s[30:31]2670;2671; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_0:2672; GFX90A: ; %bb.0:2673; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2674; GFX90A-NEXT: ;;#ASMSTART2675; GFX90A-NEXT: ; def s[12:15]2676; GFX90A-NEXT: ;;#ASMEND2677; GFX90A-NEXT: ;;#ASMSTART2678; GFX90A-NEXT: ; def s[4:7]2679; GFX90A-NEXT: ;;#ASMEND2680; GFX90A-NEXT: s_mov_b32 s8, s62681; GFX90A-NEXT: s_mov_b32 s9, s72682; GFX90A-NEXT: ;;#ASMSTART2683; GFX90A-NEXT: ; use s[8:13]2684; GFX90A-NEXT: ;;#ASMEND2685; GFX90A-NEXT: s_setpc_b64 s[30:31]2686;2687; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_u_0:2688; GFX942: ; %bb.0:2689; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2690; GFX942-NEXT: ;;#ASMSTART2691; GFX942-NEXT: ; def s[12:15]2692; GFX942-NEXT: ;;#ASMEND2693; GFX942-NEXT: ;;#ASMSTART2694; GFX942-NEXT: ; def s[0:3]2695; GFX942-NEXT: ;;#ASMEND2696; GFX942-NEXT: s_mov_b32 s8, s22697; GFX942-NEXT: s_mov_b32 s9, s32698; GFX942-NEXT: ;;#ASMSTART2699; GFX942-NEXT: ; use s[8:13]2700; GFX942-NEXT: ;;#ASMEND2701; GFX942-NEXT: s_setpc_b64 s[30:31]2702 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2703 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2704 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>2705 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2706 ret void2707}2708 2709define void @s_shuffle_v3p0_v2p0__3_1_0() {2710; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_0:2711; GFX900: ; %bb.0:2712; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2713; GFX900-NEXT: ;;#ASMSTART2714; GFX900-NEXT: ; def s[12:15]2715; GFX900-NEXT: ;;#ASMEND2716; GFX900-NEXT: ;;#ASMSTART2717; GFX900-NEXT: ; def s[4:7]2718; GFX900-NEXT: ;;#ASMEND2719; GFX900-NEXT: s_mov_b32 s8, s62720; GFX900-NEXT: s_mov_b32 s9, s72721; GFX900-NEXT: s_mov_b32 s10, s142722; GFX900-NEXT: s_mov_b32 s11, s152723; GFX900-NEXT: ;;#ASMSTART2724; GFX900-NEXT: ; use s[8:13]2725; GFX900-NEXT: ;;#ASMEND2726; GFX900-NEXT: s_setpc_b64 s[30:31]2727;2728; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_0:2729; GFX90A: ; %bb.0:2730; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2731; GFX90A-NEXT: ;;#ASMSTART2732; GFX90A-NEXT: ; def s[12:15]2733; GFX90A-NEXT: ;;#ASMEND2734; GFX90A-NEXT: ;;#ASMSTART2735; GFX90A-NEXT: ; def s[4:7]2736; GFX90A-NEXT: ;;#ASMEND2737; GFX90A-NEXT: s_mov_b32 s8, s62738; GFX90A-NEXT: s_mov_b32 s9, s72739; GFX90A-NEXT: s_mov_b32 s10, s142740; GFX90A-NEXT: s_mov_b32 s11, s152741; GFX90A-NEXT: ;;#ASMSTART2742; GFX90A-NEXT: ; use s[8:13]2743; GFX90A-NEXT: ;;#ASMEND2744; GFX90A-NEXT: s_setpc_b64 s[30:31]2745;2746; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_1_0:2747; GFX942: ; %bb.0:2748; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2749; GFX942-NEXT: ;;#ASMSTART2750; GFX942-NEXT: ; def s[12:15]2751; GFX942-NEXT: ;;#ASMEND2752; GFX942-NEXT: ;;#ASMSTART2753; GFX942-NEXT: ; def s[0:3]2754; GFX942-NEXT: ;;#ASMEND2755; GFX942-NEXT: s_mov_b32 s8, s22756; GFX942-NEXT: s_mov_b32 s9, s32757; GFX942-NEXT: s_mov_b32 s10, s142758; GFX942-NEXT: s_mov_b32 s11, s152759; GFX942-NEXT: ;;#ASMSTART2760; GFX942-NEXT: ; use s[8:13]2761; GFX942-NEXT: ;;#ASMEND2762; GFX942-NEXT: s_setpc_b64 s[30:31]2763 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2764 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2765 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 0>2766 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2767 ret void2768}2769 2770define void @s_shuffle_v3p0_v2p0__3_2_0() {2771; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_0:2772; GFX900: ; %bb.0:2773; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2774; GFX900-NEXT: ;;#ASMSTART2775; GFX900-NEXT: ; def s[12:15]2776; GFX900-NEXT: ;;#ASMEND2777; GFX900-NEXT: ;;#ASMSTART2778; GFX900-NEXT: ; def s[4:7]2779; GFX900-NEXT: ;;#ASMEND2780; GFX900-NEXT: s_mov_b32 s8, s62781; GFX900-NEXT: s_mov_b32 s9, s72782; GFX900-NEXT: s_mov_b32 s10, s42783; GFX900-NEXT: s_mov_b32 s11, s52784; GFX900-NEXT: ;;#ASMSTART2785; GFX900-NEXT: ; use s[8:13]2786; GFX900-NEXT: ;;#ASMEND2787; GFX900-NEXT: s_setpc_b64 s[30:31]2788;2789; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_0:2790; GFX90A: ; %bb.0:2791; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2792; GFX90A-NEXT: ;;#ASMSTART2793; GFX90A-NEXT: ; def s[12:15]2794; GFX90A-NEXT: ;;#ASMEND2795; GFX90A-NEXT: ;;#ASMSTART2796; GFX90A-NEXT: ; def s[4:7]2797; GFX90A-NEXT: ;;#ASMEND2798; GFX90A-NEXT: s_mov_b32 s8, s62799; GFX90A-NEXT: s_mov_b32 s9, s72800; GFX90A-NEXT: s_mov_b32 s10, s42801; GFX90A-NEXT: s_mov_b32 s11, s52802; GFX90A-NEXT: ;;#ASMSTART2803; GFX90A-NEXT: ; use s[8:13]2804; GFX90A-NEXT: ;;#ASMEND2805; GFX90A-NEXT: s_setpc_b64 s[30:31]2806;2807; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_2_0:2808; GFX942: ; %bb.0:2809; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2810; GFX942-NEXT: ;;#ASMSTART2811; GFX942-NEXT: ; def s[12:15]2812; GFX942-NEXT: ;;#ASMEND2813; GFX942-NEXT: ;;#ASMSTART2814; GFX942-NEXT: ; def s[0:3]2815; GFX942-NEXT: ;;#ASMEND2816; GFX942-NEXT: s_mov_b32 s8, s22817; GFX942-NEXT: s_mov_b32 s9, s32818; GFX942-NEXT: s_mov_b32 s10, s02819; GFX942-NEXT: s_mov_b32 s11, s12820; GFX942-NEXT: ;;#ASMSTART2821; GFX942-NEXT: ; use s[8:13]2822; GFX942-NEXT: ;;#ASMEND2823; GFX942-NEXT: s_setpc_b64 s[30:31]2824 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2825 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2826 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 0>2827 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2828 ret void2829}2830 2831define void @s_shuffle_v3p0_v2p0__u_1_1() {2832; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_1_1:2833; GFX9: ; %bb.0:2834; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2835; GFX9-NEXT: ;;#ASMSTART2836; GFX9-NEXT: ; def s[8:11]2837; GFX9-NEXT: ;;#ASMEND2838; GFX9-NEXT: s_mov_b32 s12, s102839; GFX9-NEXT: s_mov_b32 s13, s112840; GFX9-NEXT: ;;#ASMSTART2841; GFX9-NEXT: ; use s[8:13]2842; GFX9-NEXT: ;;#ASMEND2843; GFX9-NEXT: s_setpc_b64 s[30:31]2844 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2845 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>2846 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2847 ret void2848}2849 2850define void @s_shuffle_v3p0_v2p0__0_1_1() {2851; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_1_1:2852; GFX9: ; %bb.0:2853; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2854; GFX9-NEXT: ;;#ASMSTART2855; GFX9-NEXT: ; def s[8:11]2856; GFX9-NEXT: ;;#ASMEND2857; GFX9-NEXT: s_mov_b32 s12, s102858; GFX9-NEXT: s_mov_b32 s13, s112859; GFX9-NEXT: ;;#ASMSTART2860; GFX9-NEXT: ; use s[8:13]2861; GFX9-NEXT: ;;#ASMEND2862; GFX9-NEXT: s_setpc_b64 s[30:31]2863 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2864 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>2865 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2866 ret void2867}2868 2869define void @s_shuffle_v3p0_v2p0__1_1_1() {2870; GFX9-LABEL: s_shuffle_v3p0_v2p0__1_1_1:2871; GFX9: ; %bb.0:2872; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2873; GFX9-NEXT: ;;#ASMSTART2874; GFX9-NEXT: ; def s[8:11]2875; GFX9-NEXT: ;;#ASMEND2876; GFX9-NEXT: s_mov_b32 s8, s102877; GFX9-NEXT: s_mov_b32 s9, s112878; GFX9-NEXT: s_mov_b32 s12, s102879; GFX9-NEXT: s_mov_b32 s13, s112880; GFX9-NEXT: ;;#ASMSTART2881; GFX9-NEXT: ; use s[8:13]2882; GFX9-NEXT: ;;#ASMEND2883; GFX9-NEXT: s_setpc_b64 s[30:31]2884 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2885 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>2886 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2887 ret void2888}2889 2890define void @s_shuffle_v3p0_v2p0__2_1_1() {2891; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_1_1:2892; GFX9: ; %bb.0:2893; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2894; GFX9-NEXT: ;;#ASMSTART2895; GFX9-NEXT: ; def s[8:11]2896; GFX9-NEXT: ;;#ASMEND2897; GFX9-NEXT: s_mov_b32 s12, s102898; GFX9-NEXT: s_mov_b32 s13, s112899; GFX9-NEXT: ;;#ASMSTART2900; GFX9-NEXT: ; use s[8:13]2901; GFX9-NEXT: ;;#ASMEND2902; GFX9-NEXT: s_setpc_b64 s[30:31]2903 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2904 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>2905 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2906 ret void2907}2908 2909define void @s_shuffle_v3p0_v2p0__3_1_1() {2910; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_1:2911; GFX900: ; %bb.0:2912; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2913; GFX900-NEXT: ;;#ASMSTART2914; GFX900-NEXT: ; def s[8:11]2915; GFX900-NEXT: ;;#ASMEND2916; GFX900-NEXT: ;;#ASMSTART2917; GFX900-NEXT: ; def s[4:7]2918; GFX900-NEXT: ;;#ASMEND2919; GFX900-NEXT: s_mov_b32 s8, s62920; GFX900-NEXT: s_mov_b32 s9, s72921; GFX900-NEXT: s_mov_b32 s12, s102922; GFX900-NEXT: s_mov_b32 s13, s112923; GFX900-NEXT: ;;#ASMSTART2924; GFX900-NEXT: ; use s[8:13]2925; GFX900-NEXT: ;;#ASMEND2926; GFX900-NEXT: s_setpc_b64 s[30:31]2927;2928; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_1:2929; GFX90A: ; %bb.0:2930; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2931; GFX90A-NEXT: ;;#ASMSTART2932; GFX90A-NEXT: ; def s[8:11]2933; GFX90A-NEXT: ;;#ASMEND2934; GFX90A-NEXT: ;;#ASMSTART2935; GFX90A-NEXT: ; def s[4:7]2936; GFX90A-NEXT: ;;#ASMEND2937; GFX90A-NEXT: s_mov_b32 s8, s62938; GFX90A-NEXT: s_mov_b32 s9, s72939; GFX90A-NEXT: s_mov_b32 s12, s102940; GFX90A-NEXT: s_mov_b32 s13, s112941; GFX90A-NEXT: ;;#ASMSTART2942; GFX90A-NEXT: ; use s[8:13]2943; GFX90A-NEXT: ;;#ASMEND2944; GFX90A-NEXT: s_setpc_b64 s[30:31]2945;2946; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_1_1:2947; GFX942: ; %bb.0:2948; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2949; GFX942-NEXT: ;;#ASMSTART2950; GFX942-NEXT: ; def s[8:11]2951; GFX942-NEXT: ;;#ASMEND2952; GFX942-NEXT: ;;#ASMSTART2953; GFX942-NEXT: ; def s[0:3]2954; GFX942-NEXT: ;;#ASMEND2955; GFX942-NEXT: s_mov_b32 s8, s22956; GFX942-NEXT: s_mov_b32 s9, s32957; GFX942-NEXT: s_mov_b32 s12, s102958; GFX942-NEXT: s_mov_b32 s13, s112959; GFX942-NEXT: ;;#ASMSTART2960; GFX942-NEXT: ; use s[8:13]2961; GFX942-NEXT: ;;#ASMEND2962; GFX942-NEXT: s_setpc_b64 s[30:31]2963 %vec0 = call <2 x ptr> asm "; def $0", "=s"()2964 %vec1 = call <2 x ptr> asm "; def $0", "=s"()2965 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 1>2966 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)2967 ret void2968}2969 2970define void @s_shuffle_v3p0_v2p0__3_u_1() {2971; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_1:2972; GFX900: ; %bb.0:2973; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2974; GFX900-NEXT: ;;#ASMSTART2975; GFX900-NEXT: ; def s[8:11]2976; GFX900-NEXT: ;;#ASMEND2977; GFX900-NEXT: ;;#ASMSTART2978; GFX900-NEXT: ; def s[4:7]2979; GFX900-NEXT: ;;#ASMEND2980; GFX900-NEXT: s_mov_b32 s8, s102981; GFX900-NEXT: s_mov_b32 s9, s112982; GFX900-NEXT: s_mov_b32 s12, s62983; GFX900-NEXT: s_mov_b32 s13, s72984; GFX900-NEXT: ;;#ASMSTART2985; GFX900-NEXT: ; use s[8:13]2986; GFX900-NEXT: ;;#ASMEND2987; GFX900-NEXT: s_setpc_b64 s[30:31]2988;2989; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_1:2990; GFX90A: ; %bb.0:2991; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2992; GFX90A-NEXT: ;;#ASMSTART2993; GFX90A-NEXT: ; def s[8:11]2994; GFX90A-NEXT: ;;#ASMEND2995; GFX90A-NEXT: ;;#ASMSTART2996; GFX90A-NEXT: ; def s[4:7]2997; GFX90A-NEXT: ;;#ASMEND2998; GFX90A-NEXT: s_mov_b32 s8, s102999; GFX90A-NEXT: s_mov_b32 s9, s113000; GFX90A-NEXT: s_mov_b32 s12, s63001; GFX90A-NEXT: s_mov_b32 s13, s73002; GFX90A-NEXT: ;;#ASMSTART3003; GFX90A-NEXT: ; use s[8:13]3004; GFX90A-NEXT: ;;#ASMEND3005; GFX90A-NEXT: s_setpc_b64 s[30:31]3006;3007; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_u_1:3008; GFX942: ; %bb.0:3009; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3010; GFX942-NEXT: ;;#ASMSTART3011; GFX942-NEXT: ; def s[0:3]3012; GFX942-NEXT: ;;#ASMEND3013; GFX942-NEXT: ;;#ASMSTART3014; GFX942-NEXT: ; def s[4:7]3015; GFX942-NEXT: ;;#ASMEND3016; GFX942-NEXT: s_mov_b32 s8, s63017; GFX942-NEXT: s_mov_b32 s9, s73018; GFX942-NEXT: s_mov_b32 s12, s23019; GFX942-NEXT: s_mov_b32 s13, s33020; GFX942-NEXT: ;;#ASMSTART3021; GFX942-NEXT: ; use s[8:13]3022; GFX942-NEXT: ;;#ASMEND3023; GFX942-NEXT: s_setpc_b64 s[30:31]3024 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3025 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3026 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>3027 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3028 ret void3029}3030 3031define void @s_shuffle_v3p0_v2p0__3_0_1() {3032; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_1:3033; GFX900: ; %bb.0:3034; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3035; GFX900-NEXT: ;;#ASMSTART3036; GFX900-NEXT: ; def s[8:11]3037; GFX900-NEXT: ;;#ASMEND3038; GFX900-NEXT: ;;#ASMSTART3039; GFX900-NEXT: ; def s[4:7]3040; GFX900-NEXT: ;;#ASMEND3041; GFX900-NEXT: s_mov_b32 s8, s103042; GFX900-NEXT: s_mov_b32 s9, s113043; GFX900-NEXT: s_mov_b32 s10, s43044; GFX900-NEXT: s_mov_b32 s11, s53045; GFX900-NEXT: s_mov_b32 s12, s63046; GFX900-NEXT: s_mov_b32 s13, s73047; GFX900-NEXT: ;;#ASMSTART3048; GFX900-NEXT: ; use s[8:13]3049; GFX900-NEXT: ;;#ASMEND3050; GFX900-NEXT: s_setpc_b64 s[30:31]3051;3052; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_1:3053; GFX90A: ; %bb.0:3054; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3055; GFX90A-NEXT: ;;#ASMSTART3056; GFX90A-NEXT: ; def s[8:11]3057; GFX90A-NEXT: ;;#ASMEND3058; GFX90A-NEXT: ;;#ASMSTART3059; GFX90A-NEXT: ; def s[4:7]3060; GFX90A-NEXT: ;;#ASMEND3061; GFX90A-NEXT: s_mov_b32 s8, s103062; GFX90A-NEXT: s_mov_b32 s9, s113063; GFX90A-NEXT: s_mov_b32 s10, s43064; GFX90A-NEXT: s_mov_b32 s11, s53065; GFX90A-NEXT: s_mov_b32 s12, s63066; GFX90A-NEXT: s_mov_b32 s13, s73067; GFX90A-NEXT: ;;#ASMSTART3068; GFX90A-NEXT: ; use s[8:13]3069; GFX90A-NEXT: ;;#ASMEND3070; GFX90A-NEXT: s_setpc_b64 s[30:31]3071;3072; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_0_1:3073; GFX942: ; %bb.0:3074; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3075; GFX942-NEXT: ;;#ASMSTART3076; GFX942-NEXT: ; def s[0:3]3077; GFX942-NEXT: ;;#ASMEND3078; GFX942-NEXT: ;;#ASMSTART3079; GFX942-NEXT: ; def s[4:7]3080; GFX942-NEXT: ;;#ASMEND3081; GFX942-NEXT: s_mov_b32 s8, s63082; GFX942-NEXT: s_mov_b32 s9, s73083; GFX942-NEXT: s_mov_b32 s10, s03084; GFX942-NEXT: s_mov_b32 s11, s13085; GFX942-NEXT: s_mov_b32 s12, s23086; GFX942-NEXT: s_mov_b32 s13, s33087; GFX942-NEXT: ;;#ASMSTART3088; GFX942-NEXT: ; use s[8:13]3089; GFX942-NEXT: ;;#ASMEND3090; GFX942-NEXT: s_setpc_b64 s[30:31]3091 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3092 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3093 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 1>3094 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3095 ret void3096}3097 3098define void @s_shuffle_v3p0_v2p0__3_2_1() {3099; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_1:3100; GFX900: ; %bb.0:3101; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3102; GFX900-NEXT: ;;#ASMSTART3103; GFX900-NEXT: ; def s[12:15]3104; GFX900-NEXT: ;;#ASMEND3105; GFX900-NEXT: ;;#ASMSTART3106; GFX900-NEXT: ; def s[4:7]3107; GFX900-NEXT: ;;#ASMEND3108; GFX900-NEXT: s_mov_b32 s8, s143109; GFX900-NEXT: s_mov_b32 s9, s153110; GFX900-NEXT: s_mov_b32 s10, s123111; GFX900-NEXT: s_mov_b32 s11, s133112; GFX900-NEXT: s_mov_b32 s12, s63113; GFX900-NEXT: s_mov_b32 s13, s73114; GFX900-NEXT: ;;#ASMSTART3115; GFX900-NEXT: ; use s[8:13]3116; GFX900-NEXT: ;;#ASMEND3117; GFX900-NEXT: s_setpc_b64 s[30:31]3118;3119; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_1:3120; GFX90A: ; %bb.0:3121; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX90A-NEXT: ;;#ASMSTART3123; GFX90A-NEXT: ; def s[12:15]3124; GFX90A-NEXT: ;;#ASMEND3125; GFX90A-NEXT: ;;#ASMSTART3126; GFX90A-NEXT: ; def s[4:7]3127; GFX90A-NEXT: ;;#ASMEND3128; GFX90A-NEXT: s_mov_b32 s8, s143129; GFX90A-NEXT: s_mov_b32 s9, s153130; GFX90A-NEXT: s_mov_b32 s10, s123131; GFX90A-NEXT: s_mov_b32 s11, s133132; GFX90A-NEXT: s_mov_b32 s12, s63133; GFX90A-NEXT: s_mov_b32 s13, s73134; GFX90A-NEXT: ;;#ASMSTART3135; GFX90A-NEXT: ; use s[8:13]3136; GFX90A-NEXT: ;;#ASMEND3137; GFX90A-NEXT: s_setpc_b64 s[30:31]3138;3139; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_2_1:3140; GFX942: ; %bb.0:3141; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3142; GFX942-NEXT: ;;#ASMSTART3143; GFX942-NEXT: ; def s[0:3]3144; GFX942-NEXT: ;;#ASMEND3145; GFX942-NEXT: ;;#ASMSTART3146; GFX942-NEXT: ; def s[4:7]3147; GFX942-NEXT: ;;#ASMEND3148; GFX942-NEXT: s_mov_b32 s8, s63149; GFX942-NEXT: s_mov_b32 s9, s73150; GFX942-NEXT: s_mov_b32 s10, s43151; GFX942-NEXT: s_mov_b32 s11, s53152; GFX942-NEXT: s_mov_b32 s12, s23153; GFX942-NEXT: s_mov_b32 s13, s33154; GFX942-NEXT: ;;#ASMSTART3155; GFX942-NEXT: ; use s[8:13]3156; GFX942-NEXT: ;;#ASMEND3157; GFX942-NEXT: s_setpc_b64 s[30:31]3158 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3159 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3160 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 1>3161 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3162 ret void3163}3164 3165define void @s_shuffle_v3p0_v2p0__u_2_2() {3166; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_2_2:3167; GFX9: ; %bb.0:3168; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3169; GFX9-NEXT: ;;#ASMSTART3170; GFX9-NEXT: ; use s[8:13]3171; GFX9-NEXT: ;;#ASMEND3172; GFX9-NEXT: s_setpc_b64 s[30:31]3173 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3174 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>3175 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3176 ret void3177}3178 3179define void @s_shuffle_v3p0_v2p0__0_2_2() {3180; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_2_2:3181; GFX900: ; %bb.0:3182; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3183; GFX900-NEXT: ;;#ASMSTART3184; GFX900-NEXT: ; def s[8:11]3185; GFX900-NEXT: ;;#ASMEND3186; GFX900-NEXT: ;;#ASMSTART3187; GFX900-NEXT: ; use s[8:13]3188; GFX900-NEXT: ;;#ASMEND3189; GFX900-NEXT: s_setpc_b64 s[30:31]3190;3191; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_2_2:3192; GFX90A: ; %bb.0:3193; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3194; GFX90A-NEXT: ;;#ASMSTART3195; GFX90A-NEXT: ; def s[8:11]3196; GFX90A-NEXT: ;;#ASMEND3197; GFX90A-NEXT: ;;#ASMSTART3198; GFX90A-NEXT: ; use s[8:13]3199; GFX90A-NEXT: ;;#ASMEND3200; GFX90A-NEXT: s_setpc_b64 s[30:31]3201;3202; GFX942-LABEL: s_shuffle_v3p0_v2p0__0_2_2:3203; GFX942: ; %bb.0:3204; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3205; GFX942-NEXT: ;;#ASMSTART3206; GFX942-NEXT: ; def s[8:11]3207; GFX942-NEXT: ;;#ASMEND3208; GFX942-NEXT: s_nop 03209; GFX942-NEXT: ;;#ASMSTART3210; GFX942-NEXT: ; use s[8:13]3211; GFX942-NEXT: ;;#ASMEND3212; GFX942-NEXT: s_setpc_b64 s[30:31]3213 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3214 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>3215 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3216 ret void3217}3218 3219define void @s_shuffle_v3p0_v2p0__1_2_2() {3220; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_2_2:3221; GFX900: ; %bb.0:3222; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3223; GFX900-NEXT: ;;#ASMSTART3224; GFX900-NEXT: ; def s[4:7]3225; GFX900-NEXT: ;;#ASMEND3226; GFX900-NEXT: s_mov_b32 s8, s63227; GFX900-NEXT: s_mov_b32 s9, s73228; GFX900-NEXT: ;;#ASMSTART3229; GFX900-NEXT: ; use s[8:13]3230; GFX900-NEXT: ;;#ASMEND3231; GFX900-NEXT: s_setpc_b64 s[30:31]3232;3233; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_2_2:3234; GFX90A: ; %bb.0:3235; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3236; GFX90A-NEXT: ;;#ASMSTART3237; GFX90A-NEXT: ; def s[4:7]3238; GFX90A-NEXT: ;;#ASMEND3239; GFX90A-NEXT: s_mov_b32 s8, s63240; GFX90A-NEXT: s_mov_b32 s9, s73241; GFX90A-NEXT: ;;#ASMSTART3242; GFX90A-NEXT: ; use s[8:13]3243; GFX90A-NEXT: ;;#ASMEND3244; GFX90A-NEXT: s_setpc_b64 s[30:31]3245;3246; GFX942-LABEL: s_shuffle_v3p0_v2p0__1_2_2:3247; GFX942: ; %bb.0:3248; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3249; GFX942-NEXT: ;;#ASMSTART3250; GFX942-NEXT: ; def s[0:3]3251; GFX942-NEXT: ;;#ASMEND3252; GFX942-NEXT: s_mov_b32 s8, s23253; GFX942-NEXT: s_mov_b32 s9, s33254; GFX942-NEXT: ;;#ASMSTART3255; GFX942-NEXT: ; use s[8:13]3256; GFX942-NEXT: ;;#ASMEND3257; GFX942-NEXT: s_setpc_b64 s[30:31]3258 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3259 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>3260 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3261 ret void3262}3263 3264define void @s_shuffle_v3p0_v2p0__2_2_2() {3265; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_2_2:3266; GFX9: ; %bb.0:3267; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3268; GFX9-NEXT: ;;#ASMSTART3269; GFX9-NEXT: ; use s[8:13]3270; GFX9-NEXT: ;;#ASMEND3271; GFX9-NEXT: s_setpc_b64 s[30:31]3272 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3273 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>3274 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3275 ret void3276}3277 3278define void @s_shuffle_v3p0_v2p0__3_2_2() {3279; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_2_2:3280; GFX9: ; %bb.0:3281; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3282; GFX9-NEXT: ;;#ASMSTART3283; GFX9-NEXT: ; def s[12:15]3284; GFX9-NEXT: ;;#ASMEND3285; GFX9-NEXT: s_mov_b32 s8, s143286; GFX9-NEXT: s_mov_b32 s9, s153287; GFX9-NEXT: s_mov_b32 s10, s123288; GFX9-NEXT: s_mov_b32 s11, s133289; GFX9-NEXT: ;;#ASMSTART3290; GFX9-NEXT: ; use s[8:13]3291; GFX9-NEXT: ;;#ASMEND3292; GFX9-NEXT: s_setpc_b64 s[30:31]3293 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3294 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3295 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 2>3296 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3297 ret void3298}3299 3300define void @s_shuffle_v3p0_v2p0__3_u_2() {3301; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_u_2:3302; GFX9: ; %bb.0:3303; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3304; GFX9-NEXT: ;;#ASMSTART3305; GFX9-NEXT: ; def s[12:15]3306; GFX9-NEXT: ;;#ASMEND3307; GFX9-NEXT: s_mov_b32 s8, s143308; GFX9-NEXT: s_mov_b32 s9, s153309; GFX9-NEXT: ;;#ASMSTART3310; GFX9-NEXT: ; use s[8:13]3311; GFX9-NEXT: ;;#ASMEND3312; GFX9-NEXT: s_setpc_b64 s[30:31]3313 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3314 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3315 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>3316 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3317 ret void3318}3319 3320define void @s_shuffle_v3p0_v2p0__3_0_2() {3321; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_2:3322; GFX900: ; %bb.0:3323; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3324; GFX900-NEXT: ;;#ASMSTART3325; GFX900-NEXT: ; def s[4:7]3326; GFX900-NEXT: ;;#ASMEND3327; GFX900-NEXT: ;;#ASMSTART3328; GFX900-NEXT: ; def s[12:15]3329; GFX900-NEXT: ;;#ASMEND3330; GFX900-NEXT: s_mov_b32 s8, s143331; GFX900-NEXT: s_mov_b32 s9, s153332; GFX900-NEXT: s_mov_b32 s10, s43333; GFX900-NEXT: s_mov_b32 s11, s53334; GFX900-NEXT: ;;#ASMSTART3335; GFX900-NEXT: ; use s[8:13]3336; GFX900-NEXT: ;;#ASMEND3337; GFX900-NEXT: s_setpc_b64 s[30:31]3338;3339; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_2:3340; GFX90A: ; %bb.0:3341; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3342; GFX90A-NEXT: ;;#ASMSTART3343; GFX90A-NEXT: ; def s[4:7]3344; GFX90A-NEXT: ;;#ASMEND3345; GFX90A-NEXT: ;;#ASMSTART3346; GFX90A-NEXT: ; def s[12:15]3347; GFX90A-NEXT: ;;#ASMEND3348; GFX90A-NEXT: s_mov_b32 s8, s143349; GFX90A-NEXT: s_mov_b32 s9, s153350; GFX90A-NEXT: s_mov_b32 s10, s43351; GFX90A-NEXT: s_mov_b32 s11, s53352; GFX90A-NEXT: ;;#ASMSTART3353; GFX90A-NEXT: ; use s[8:13]3354; GFX90A-NEXT: ;;#ASMEND3355; GFX90A-NEXT: s_setpc_b64 s[30:31]3356;3357; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_0_2:3358; GFX942: ; %bb.0:3359; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3360; GFX942-NEXT: ;;#ASMSTART3361; GFX942-NEXT: ; def s[0:3]3362; GFX942-NEXT: ;;#ASMEND3363; GFX942-NEXT: ;;#ASMSTART3364; GFX942-NEXT: ; def s[12:15]3365; GFX942-NEXT: ;;#ASMEND3366; GFX942-NEXT: s_mov_b32 s8, s143367; GFX942-NEXT: s_mov_b32 s9, s153368; GFX942-NEXT: s_mov_b32 s10, s03369; GFX942-NEXT: s_mov_b32 s11, s13370; GFX942-NEXT: ;;#ASMSTART3371; GFX942-NEXT: ; use s[8:13]3372; GFX942-NEXT: ;;#ASMEND3373; GFX942-NEXT: s_setpc_b64 s[30:31]3374 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3375 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3376 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 2>3377 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3378 ret void3379}3380 3381define void @s_shuffle_v3p0_v2p0__3_1_2() {3382; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_1_2:3383; GFX9: ; %bb.0:3384; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3385; GFX9-NEXT: ;;#ASMSTART3386; GFX9-NEXT: ; def s[8:11]3387; GFX9-NEXT: ;;#ASMEND3388; GFX9-NEXT: ;;#ASMSTART3389; GFX9-NEXT: ; def s[12:15]3390; GFX9-NEXT: ;;#ASMEND3391; GFX9-NEXT: s_mov_b32 s8, s143392; GFX9-NEXT: s_mov_b32 s9, s153393; GFX9-NEXT: ;;#ASMSTART3394; GFX9-NEXT: ; use s[8:13]3395; GFX9-NEXT: ;;#ASMEND3396; GFX9-NEXT: s_setpc_b64 s[30:31]3397 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3398 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3399 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 2>3400 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3401 ret void3402}3403 3404define void @s_shuffle_v3p0_v2p0__u_3_3() {3405; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_3_3:3406; GFX9: ; %bb.0:3407; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3408; GFX9-NEXT: ;;#ASMSTART3409; GFX9-NEXT: ; def s[8:11]3410; GFX9-NEXT: ;;#ASMEND3411; GFX9-NEXT: s_mov_b32 s12, s103412; GFX9-NEXT: s_mov_b32 s13, s113413; GFX9-NEXT: ;;#ASMSTART3414; GFX9-NEXT: ; use s[8:13]3415; GFX9-NEXT: ;;#ASMEND3416; GFX9-NEXT: s_setpc_b64 s[30:31]3417 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3418 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3419 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>3420 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3421 ret void3422}3423 3424define void @s_shuffle_v3p0_v2p0__0_3_3() {3425; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_3_3:3426; GFX900: ; %bb.0:3427; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX900-NEXT: ;;#ASMSTART3429; GFX900-NEXT: ; def s[8:11]3430; GFX900-NEXT: ;;#ASMEND3431; GFX900-NEXT: ;;#ASMSTART3432; GFX900-NEXT: ; def s[4:7]3433; GFX900-NEXT: ;;#ASMEND3434; GFX900-NEXT: s_mov_b32 s10, s63435; GFX900-NEXT: s_mov_b32 s11, s73436; GFX900-NEXT: s_mov_b32 s12, s63437; GFX900-NEXT: s_mov_b32 s13, s73438; GFX900-NEXT: ;;#ASMSTART3439; GFX900-NEXT: ; use s[8:13]3440; GFX900-NEXT: ;;#ASMEND3441; GFX900-NEXT: s_setpc_b64 s[30:31]3442;3443; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_3_3:3444; GFX90A: ; %bb.0:3445; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3446; GFX90A-NEXT: ;;#ASMSTART3447; GFX90A-NEXT: ; def s[8:11]3448; GFX90A-NEXT: ;;#ASMEND3449; GFX90A-NEXT: ;;#ASMSTART3450; GFX90A-NEXT: ; def s[4:7]3451; GFX90A-NEXT: ;;#ASMEND3452; GFX90A-NEXT: s_mov_b32 s10, s63453; GFX90A-NEXT: s_mov_b32 s11, s73454; GFX90A-NEXT: s_mov_b32 s12, s63455; GFX90A-NEXT: s_mov_b32 s13, s73456; GFX90A-NEXT: ;;#ASMSTART3457; GFX90A-NEXT: ; use s[8:13]3458; GFX90A-NEXT: ;;#ASMEND3459; GFX90A-NEXT: s_setpc_b64 s[30:31]3460;3461; GFX942-LABEL: s_shuffle_v3p0_v2p0__0_3_3:3462; GFX942: ; %bb.0:3463; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3464; GFX942-NEXT: ;;#ASMSTART3465; GFX942-NEXT: ; def s[8:11]3466; GFX942-NEXT: ;;#ASMEND3467; GFX942-NEXT: ;;#ASMSTART3468; GFX942-NEXT: ; def s[0:3]3469; GFX942-NEXT: ;;#ASMEND3470; GFX942-NEXT: s_mov_b32 s10, s23471; GFX942-NEXT: s_mov_b32 s11, s33472; GFX942-NEXT: s_mov_b32 s12, s23473; GFX942-NEXT: s_mov_b32 s13, s33474; GFX942-NEXT: ;;#ASMSTART3475; GFX942-NEXT: ; use s[8:13]3476; GFX942-NEXT: ;;#ASMEND3477; GFX942-NEXT: s_setpc_b64 s[30:31]3478 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3479 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3480 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 0, i32 3, i32 3>3481 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3482 ret void3483}3484 3485define void @s_shuffle_v3p0_v2p0__1_3_3() {3486; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_3_3:3487; GFX900: ; %bb.0:3488; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3489; GFX900-NEXT: ;;#ASMSTART3490; GFX900-NEXT: ; def s[8:11]3491; GFX900-NEXT: ;;#ASMEND3492; GFX900-NEXT: ;;#ASMSTART3493; GFX900-NEXT: ; def s[4:7]3494; GFX900-NEXT: ;;#ASMEND3495; GFX900-NEXT: s_mov_b32 s8, s63496; GFX900-NEXT: s_mov_b32 s9, s73497; GFX900-NEXT: s_mov_b32 s12, s103498; GFX900-NEXT: s_mov_b32 s13, s113499; GFX900-NEXT: ;;#ASMSTART3500; GFX900-NEXT: ; use s[8:13]3501; GFX900-NEXT: ;;#ASMEND3502; GFX900-NEXT: s_setpc_b64 s[30:31]3503;3504; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_3_3:3505; GFX90A: ; %bb.0:3506; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3507; GFX90A-NEXT: ;;#ASMSTART3508; GFX90A-NEXT: ; def s[8:11]3509; GFX90A-NEXT: ;;#ASMEND3510; GFX90A-NEXT: ;;#ASMSTART3511; GFX90A-NEXT: ; def s[4:7]3512; GFX90A-NEXT: ;;#ASMEND3513; GFX90A-NEXT: s_mov_b32 s8, s63514; GFX90A-NEXT: s_mov_b32 s9, s73515; GFX90A-NEXT: s_mov_b32 s12, s103516; GFX90A-NEXT: s_mov_b32 s13, s113517; GFX90A-NEXT: ;;#ASMSTART3518; GFX90A-NEXT: ; use s[8:13]3519; GFX90A-NEXT: ;;#ASMEND3520; GFX90A-NEXT: s_setpc_b64 s[30:31]3521;3522; GFX942-LABEL: s_shuffle_v3p0_v2p0__1_3_3:3523; GFX942: ; %bb.0:3524; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3525; GFX942-NEXT: ;;#ASMSTART3526; GFX942-NEXT: ; def s[8:11]3527; GFX942-NEXT: ;;#ASMEND3528; GFX942-NEXT: ;;#ASMSTART3529; GFX942-NEXT: ; def s[0:3]3530; GFX942-NEXT: ;;#ASMEND3531; GFX942-NEXT: s_mov_b32 s8, s23532; GFX942-NEXT: s_mov_b32 s9, s33533; GFX942-NEXT: s_mov_b32 s12, s103534; GFX942-NEXT: s_mov_b32 s13, s113535; GFX942-NEXT: ;;#ASMSTART3536; GFX942-NEXT: ; use s[8:13]3537; GFX942-NEXT: ;;#ASMEND3538; GFX942-NEXT: s_setpc_b64 s[30:31]3539 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3540 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3541 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 1, i32 3, i32 3>3542 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3543 ret void3544}3545 3546define void @s_shuffle_v3p0_v2p0__2_3_3() {3547; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_3_3:3548; GFX9: ; %bb.0:3549; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3550; GFX9-NEXT: ;;#ASMSTART3551; GFX9-NEXT: ; def s[8:11]3552; GFX9-NEXT: ;;#ASMEND3553; GFX9-NEXT: s_mov_b32 s12, s103554; GFX9-NEXT: s_mov_b32 s13, s113555; GFX9-NEXT: ;;#ASMSTART3556; GFX9-NEXT: ; use s[8:13]3557; GFX9-NEXT: ;;#ASMEND3558; GFX9-NEXT: s_setpc_b64 s[30:31]3559 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3560 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3561 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 2, i32 3, i32 3>3562 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3563 ret void3564}3565 3566define void @s_shuffle_v3p0_v2p0__3_u_3() {3567; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_3:3568; GFX900: ; %bb.0:3569; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3570; GFX900-NEXT: ;;#ASMSTART3571; GFX900-NEXT: ; def s[4:7]3572; GFX900-NEXT: ;;#ASMEND3573; GFX900-NEXT: s_mov_b32 s8, s63574; GFX900-NEXT: s_mov_b32 s9, s73575; GFX900-NEXT: s_mov_b32 s12, s63576; GFX900-NEXT: s_mov_b32 s13, s73577; GFX900-NEXT: ;;#ASMSTART3578; GFX900-NEXT: ; use s[8:13]3579; GFX900-NEXT: ;;#ASMEND3580; GFX900-NEXT: s_setpc_b64 s[30:31]3581;3582; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_3:3583; GFX90A: ; %bb.0:3584; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3585; GFX90A-NEXT: ;;#ASMSTART3586; GFX90A-NEXT: ; def s[4:7]3587; GFX90A-NEXT: ;;#ASMEND3588; GFX90A-NEXT: s_mov_b32 s8, s63589; GFX90A-NEXT: s_mov_b32 s9, s73590; GFX90A-NEXT: s_mov_b32 s12, s63591; GFX90A-NEXT: s_mov_b32 s13, s73592; GFX90A-NEXT: ;;#ASMSTART3593; GFX90A-NEXT: ; use s[8:13]3594; GFX90A-NEXT: ;;#ASMEND3595; GFX90A-NEXT: s_setpc_b64 s[30:31]3596;3597; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_u_3:3598; GFX942: ; %bb.0:3599; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3600; GFX942-NEXT: ;;#ASMSTART3601; GFX942-NEXT: ; def s[0:3]3602; GFX942-NEXT: ;;#ASMEND3603; GFX942-NEXT: s_mov_b32 s8, s23604; GFX942-NEXT: s_mov_b32 s9, s33605; GFX942-NEXT: s_mov_b32 s12, s23606; GFX942-NEXT: s_mov_b32 s13, s33607; GFX942-NEXT: ;;#ASMSTART3608; GFX942-NEXT: ; use s[8:13]3609; GFX942-NEXT: ;;#ASMEND3610; GFX942-NEXT: s_setpc_b64 s[30:31]3611 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3612 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3613 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>3614 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3615 ret void3616}3617 3618define void @s_shuffle_v3p0_v2p0__3_0_3() {3619; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_3:3620; GFX900: ; %bb.0:3621; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3622; GFX900-NEXT: ;;#ASMSTART3623; GFX900-NEXT: ; def s[12:15]3624; GFX900-NEXT: ;;#ASMEND3625; GFX900-NEXT: ;;#ASMSTART3626; GFX900-NEXT: ; def s[4:7]3627; GFX900-NEXT: ;;#ASMEND3628; GFX900-NEXT: s_mov_b32 s8, s143629; GFX900-NEXT: s_mov_b32 s9, s153630; GFX900-NEXT: s_mov_b32 s10, s43631; GFX900-NEXT: s_mov_b32 s11, s53632; GFX900-NEXT: s_mov_b32 s12, s143633; GFX900-NEXT: s_mov_b32 s13, s153634; GFX900-NEXT: ;;#ASMSTART3635; GFX900-NEXT: ; use s[8:13]3636; GFX900-NEXT: ;;#ASMEND3637; GFX900-NEXT: s_setpc_b64 s[30:31]3638;3639; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_3:3640; GFX90A: ; %bb.0:3641; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3642; GFX90A-NEXT: ;;#ASMSTART3643; GFX90A-NEXT: ; def s[12:15]3644; GFX90A-NEXT: ;;#ASMEND3645; GFX90A-NEXT: ;;#ASMSTART3646; GFX90A-NEXT: ; def s[4:7]3647; GFX90A-NEXT: ;;#ASMEND3648; GFX90A-NEXT: s_mov_b32 s8, s143649; GFX90A-NEXT: s_mov_b32 s9, s153650; GFX90A-NEXT: s_mov_b32 s10, s43651; GFX90A-NEXT: s_mov_b32 s11, s53652; GFX90A-NEXT: s_mov_b32 s12, s143653; GFX90A-NEXT: s_mov_b32 s13, s153654; GFX90A-NEXT: ;;#ASMSTART3655; GFX90A-NEXT: ; use s[8:13]3656; GFX90A-NEXT: ;;#ASMEND3657; GFX90A-NEXT: s_setpc_b64 s[30:31]3658;3659; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_0_3:3660; GFX942: ; %bb.0:3661; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3662; GFX942-NEXT: ;;#ASMSTART3663; GFX942-NEXT: ; def s[0:3]3664; GFX942-NEXT: ;;#ASMEND3665; GFX942-NEXT: ;;#ASMSTART3666; GFX942-NEXT: ; def s[4:7]3667; GFX942-NEXT: ;;#ASMEND3668; GFX942-NEXT: s_mov_b32 s8, s63669; GFX942-NEXT: s_mov_b32 s9, s73670; GFX942-NEXT: s_mov_b32 s10, s03671; GFX942-NEXT: s_mov_b32 s11, s13672; GFX942-NEXT: s_mov_b32 s12, s63673; GFX942-NEXT: s_mov_b32 s13, s73674; GFX942-NEXT: ;;#ASMSTART3675; GFX942-NEXT: ; use s[8:13]3676; GFX942-NEXT: ;;#ASMEND3677; GFX942-NEXT: s_setpc_b64 s[30:31]3678 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3679 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3680 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 3>3681 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3682 ret void3683}3684 3685define void @s_shuffle_v3p0_v2p0__3_1_3() {3686; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_3:3687; GFX900: ; %bb.0:3688; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3689; GFX900-NEXT: ;;#ASMSTART3690; GFX900-NEXT: ; def s[8:11]3691; GFX900-NEXT: ;;#ASMEND3692; GFX900-NEXT: ;;#ASMSTART3693; GFX900-NEXT: ; def s[4:7]3694; GFX900-NEXT: ;;#ASMEND3695; GFX900-NEXT: s_mov_b32 s8, s63696; GFX900-NEXT: s_mov_b32 s9, s73697; GFX900-NEXT: s_mov_b32 s12, s63698; GFX900-NEXT: s_mov_b32 s13, s73699; GFX900-NEXT: ;;#ASMSTART3700; GFX900-NEXT: ; use s[8:13]3701; GFX900-NEXT: ;;#ASMEND3702; GFX900-NEXT: s_setpc_b64 s[30:31]3703;3704; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_3:3705; GFX90A: ; %bb.0:3706; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3707; GFX90A-NEXT: ;;#ASMSTART3708; GFX90A-NEXT: ; def s[8:11]3709; GFX90A-NEXT: ;;#ASMEND3710; GFX90A-NEXT: ;;#ASMSTART3711; GFX90A-NEXT: ; def s[4:7]3712; GFX90A-NEXT: ;;#ASMEND3713; GFX90A-NEXT: s_mov_b32 s8, s63714; GFX90A-NEXT: s_mov_b32 s9, s73715; GFX90A-NEXT: s_mov_b32 s12, s63716; GFX90A-NEXT: s_mov_b32 s13, s73717; GFX90A-NEXT: ;;#ASMSTART3718; GFX90A-NEXT: ; use s[8:13]3719; GFX90A-NEXT: ;;#ASMEND3720; GFX90A-NEXT: s_setpc_b64 s[30:31]3721;3722; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_1_3:3723; GFX942: ; %bb.0:3724; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3725; GFX942-NEXT: ;;#ASMSTART3726; GFX942-NEXT: ; def s[8:11]3727; GFX942-NEXT: ;;#ASMEND3728; GFX942-NEXT: ;;#ASMSTART3729; GFX942-NEXT: ; def s[0:3]3730; GFX942-NEXT: ;;#ASMEND3731; GFX942-NEXT: s_mov_b32 s8, s23732; GFX942-NEXT: s_mov_b32 s9, s33733; GFX942-NEXT: s_mov_b32 s12, s23734; GFX942-NEXT: s_mov_b32 s13, s33735; GFX942-NEXT: ;;#ASMSTART3736; GFX942-NEXT: ; use s[8:13]3737; GFX942-NEXT: ;;#ASMEND3738; GFX942-NEXT: s_setpc_b64 s[30:31]3739 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3740 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3741 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 3>3742 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3743 ret void3744}3745 3746define void @s_shuffle_v3p0_v2p0__3_2_3() {3747; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_3:3748; GFX900: ; %bb.0:3749; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3750; GFX900-NEXT: ;;#ASMSTART3751; GFX900-NEXT: ; def s[4:7]3752; GFX900-NEXT: ;;#ASMEND3753; GFX900-NEXT: s_mov_b32 s8, s63754; GFX900-NEXT: s_mov_b32 s9, s73755; GFX900-NEXT: s_mov_b32 s10, s43756; GFX900-NEXT: s_mov_b32 s11, s53757; GFX900-NEXT: s_mov_b32 s12, s63758; GFX900-NEXT: s_mov_b32 s13, s73759; GFX900-NEXT: ;;#ASMSTART3760; GFX900-NEXT: ; use s[8:13]3761; GFX900-NEXT: ;;#ASMEND3762; GFX900-NEXT: s_setpc_b64 s[30:31]3763;3764; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_3:3765; GFX90A: ; %bb.0:3766; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3767; GFX90A-NEXT: ;;#ASMSTART3768; GFX90A-NEXT: ; def s[4:7]3769; GFX90A-NEXT: ;;#ASMEND3770; GFX90A-NEXT: s_mov_b32 s8, s63771; GFX90A-NEXT: s_mov_b32 s9, s73772; GFX90A-NEXT: s_mov_b32 s10, s43773; GFX90A-NEXT: s_mov_b32 s11, s53774; GFX90A-NEXT: s_mov_b32 s12, s63775; GFX90A-NEXT: s_mov_b32 s13, s73776; GFX90A-NEXT: ;;#ASMSTART3777; GFX90A-NEXT: ; use s[8:13]3778; GFX90A-NEXT: ;;#ASMEND3779; GFX90A-NEXT: s_setpc_b64 s[30:31]3780;3781; GFX942-LABEL: s_shuffle_v3p0_v2p0__3_2_3:3782; GFX942: ; %bb.0:3783; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3784; GFX942-NEXT: ;;#ASMSTART3785; GFX942-NEXT: ; def s[0:3]3786; GFX942-NEXT: ;;#ASMEND3787; GFX942-NEXT: s_mov_b32 s8, s23788; GFX942-NEXT: s_mov_b32 s9, s33789; GFX942-NEXT: s_mov_b32 s10, s03790; GFX942-NEXT: s_mov_b32 s11, s13791; GFX942-NEXT: s_mov_b32 s12, s23792; GFX942-NEXT: s_mov_b32 s13, s33793; GFX942-NEXT: ;;#ASMSTART3794; GFX942-NEXT: ; use s[8:13]3795; GFX942-NEXT: ;;#ASMEND3796; GFX942-NEXT: s_setpc_b64 s[30:31]3797 %vec0 = call <2 x ptr> asm "; def $0", "=s"()3798 %vec1 = call <2 x ptr> asm "; def $0", "=s"()3799 %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 3>3800 call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)3801 ret void3802}3803;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3804; GFX90APLUS: {{.*}}3805