6943 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_v2f32_v4f32__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2f32_v4f32__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 <4 x float> asm "; def $0", "=v"()13 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> poison14 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 815 ret void16}17 18define void @v_shuffle_v2f32_v4f32__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_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_dwordx2 v4, v[0:1], 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_v2f32_v4f32__0_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_dwordx2 v4, v[0:1], 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_v2f32_v4f32__0_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_dwordx2 v4, v[0:1], s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <4 x float> asm "; def $0", "=v"()52 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 poison>53 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 854 ret void55}56 57define void @v_shuffle_v2f32_v4f32__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_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_dwordx2 v4, v[1:2], 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_v2f32_v4f32__1_u:70; GFX90A: ; %bb.0:71; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX90A-NEXT: ;;#ASMSTART73; GFX90A-NEXT: ; def v[0:3]74; GFX90A-NEXT: ;;#ASMEND75; GFX90A-NEXT: v_mov_b32_e32 v4, 076; GFX90A-NEXT: v_mov_b32_e32 v0, v177; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]78; GFX90A-NEXT: s_waitcnt vmcnt(0)79; GFX90A-NEXT: s_setpc_b64 s[30:31]80;81; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_u:82; GFX942: ; %bb.0:83; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX942-NEXT: ;;#ASMSTART85; GFX942-NEXT: ; def v[0:3]86; GFX942-NEXT: ;;#ASMEND87; GFX942-NEXT: v_mov_b32_e32 v4, 088; GFX942-NEXT: v_mov_b32_e32 v0, v189; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]90; GFX942-NEXT: s_waitcnt vmcnt(0)91; GFX942-NEXT: s_setpc_b64 s[30:31]92 %vec0 = call <4 x float> asm "; def $0", "=v"()93 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 poison>94 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 895 ret void96}97 98define void @v_shuffle_v2f32_v4f32__2_u(ptr addrspace(1) inreg %ptr) {99; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_u:100; GFX900: ; %bb.0:101; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX900-NEXT: v_mov_b32_e32 v4, 0103; GFX900-NEXT: ;;#ASMSTART104; GFX900-NEXT: ; def v[0:3]105; GFX900-NEXT: ;;#ASMEND106; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]107; GFX900-NEXT: s_waitcnt vmcnt(0)108; GFX900-NEXT: s_setpc_b64 s[30:31]109;110; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_u:111; GFX90A: ; %bb.0:112; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX90A-NEXT: v_mov_b32_e32 v4, 0114; GFX90A-NEXT: ;;#ASMSTART115; GFX90A-NEXT: ; def v[0:3]116; GFX90A-NEXT: ;;#ASMEND117; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]118; GFX90A-NEXT: s_waitcnt vmcnt(0)119; GFX90A-NEXT: s_setpc_b64 s[30:31]120;121; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_u:122; GFX942: ; %bb.0:123; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; GFX942-NEXT: v_mov_b32_e32 v4, 0125; GFX942-NEXT: ;;#ASMSTART126; GFX942-NEXT: ; def v[0:3]127; GFX942-NEXT: ;;#ASMEND128; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]129; GFX942-NEXT: s_waitcnt vmcnt(0)130; GFX942-NEXT: s_setpc_b64 s[30:31]131 %vec0 = call <4 x float> asm "; def $0", "=v"()132 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 poison>133 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8134 ret void135}136 137define void @v_shuffle_v2f32_v4f32__3_u(ptr addrspace(1) inreg %ptr) {138; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_u:139; GFX900: ; %bb.0:140; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX900-NEXT: v_mov_b32_e32 v4, 0142; GFX900-NEXT: ;;#ASMSTART143; GFX900-NEXT: ; def v[0:3]144; GFX900-NEXT: ;;#ASMEND145; GFX900-NEXT: global_store_dwordx2 v4, v[3:4], s[16:17]146; GFX900-NEXT: s_waitcnt vmcnt(0)147; GFX900-NEXT: s_setpc_b64 s[30:31]148;149; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_u:150; GFX90A: ; %bb.0:151; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GFX90A-NEXT: ;;#ASMSTART153; GFX90A-NEXT: ; def v[0:3]154; GFX90A-NEXT: ;;#ASMEND155; GFX90A-NEXT: v_mov_b32_e32 v4, 0156; GFX90A-NEXT: v_mov_b32_e32 v0, v3157; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]158; GFX90A-NEXT: s_waitcnt vmcnt(0)159; GFX90A-NEXT: s_setpc_b64 s[30:31]160;161; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_u:162; GFX942: ; %bb.0:163; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GFX942-NEXT: ;;#ASMSTART165; GFX942-NEXT: ; def v[0:3]166; GFX942-NEXT: ;;#ASMEND167; GFX942-NEXT: v_mov_b32_e32 v4, 0168; GFX942-NEXT: v_mov_b32_e32 v0, v3169; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]170; GFX942-NEXT: s_waitcnt vmcnt(0)171; GFX942-NEXT: s_setpc_b64 s[30:31]172 %vec0 = call <4 x float> asm "; def $0", "=v"()173 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 poison>174 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8175 ret void176}177 178define void @v_shuffle_v2f32_v4f32__4_u(ptr addrspace(1) inreg %ptr) {179; GFX9-LABEL: v_shuffle_v2f32_v4f32__4_u:180; GFX9: ; %bb.0:181; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)182; GFX9-NEXT: s_setpc_b64 s[30:31]183 %vec0 = call <4 x float> asm "; def $0", "=v"()184 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 poison>185 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8186 ret void187}188 189define void @v_shuffle_v2f32_v4f32__5_u(ptr addrspace(1) inreg %ptr) {190; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_u:191; GFX900: ; %bb.0:192; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)193; GFX900-NEXT: v_mov_b32_e32 v4, 0194; GFX900-NEXT: ;;#ASMSTART195; GFX900-NEXT: ; def v[0:3]196; GFX900-NEXT: ;;#ASMEND197; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]198; GFX900-NEXT: s_waitcnt vmcnt(0)199; GFX900-NEXT: s_setpc_b64 s[30:31]200;201; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_u:202; GFX90A: ; %bb.0:203; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GFX90A-NEXT: ;;#ASMSTART205; GFX90A-NEXT: ; def v[0:3]206; GFX90A-NEXT: ;;#ASMEND207; GFX90A-NEXT: v_mov_b32_e32 v4, 0208; GFX90A-NEXT: v_mov_b32_e32 v0, v1209; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]210; GFX90A-NEXT: s_waitcnt vmcnt(0)211; GFX90A-NEXT: s_setpc_b64 s[30:31]212;213; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_u:214; GFX942: ; %bb.0:215; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)216; GFX942-NEXT: ;;#ASMSTART217; GFX942-NEXT: ; def v[0:3]218; GFX942-NEXT: ;;#ASMEND219; GFX942-NEXT: v_mov_b32_e32 v4, 0220; GFX942-NEXT: v_mov_b32_e32 v0, v1221; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]222; GFX942-NEXT: s_waitcnt vmcnt(0)223; GFX942-NEXT: s_setpc_b64 s[30:31]224 %vec0 = call <4 x float> asm "; def $0", "=v"()225 %vec1 = call <4 x float> asm "; def $0", "=v"()226 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 poison>227 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8228 ret void229}230 231define void @v_shuffle_v2f32_v4f32__6_u(ptr addrspace(1) inreg %ptr) {232; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_u:233; GFX900: ; %bb.0:234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX900-NEXT: v_mov_b32_e32 v4, 0236; GFX900-NEXT: ;;#ASMSTART237; GFX900-NEXT: ; def v[0:3]238; GFX900-NEXT: ;;#ASMEND239; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]240; GFX900-NEXT: s_waitcnt vmcnt(0)241; GFX900-NEXT: s_setpc_b64 s[30:31]242;243; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_u:244; GFX90A: ; %bb.0:245; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)246; GFX90A-NEXT: v_mov_b32_e32 v4, 0247; GFX90A-NEXT: ;;#ASMSTART248; GFX90A-NEXT: ; def v[0:3]249; GFX90A-NEXT: ;;#ASMEND250; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]251; GFX90A-NEXT: s_waitcnt vmcnt(0)252; GFX90A-NEXT: s_setpc_b64 s[30:31]253;254; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_u:255; GFX942: ; %bb.0:256; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)257; GFX942-NEXT: v_mov_b32_e32 v4, 0258; GFX942-NEXT: ;;#ASMSTART259; GFX942-NEXT: ; def v[0:3]260; GFX942-NEXT: ;;#ASMEND261; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]262; GFX942-NEXT: s_waitcnt vmcnt(0)263; GFX942-NEXT: s_setpc_b64 s[30:31]264 %vec0 = call <4 x float> asm "; def $0", "=v"()265 %vec1 = call <4 x float> asm "; def $0", "=v"()266 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 poison>267 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8268 ret void269}270 271define void @v_shuffle_v2f32_v4f32__7_u(ptr addrspace(1) inreg %ptr) {272; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_u:273; GFX900: ; %bb.0:274; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)275; GFX900-NEXT: v_mov_b32_e32 v4, 0276; GFX900-NEXT: ;;#ASMSTART277; GFX900-NEXT: ; def v[0:3]278; GFX900-NEXT: ;;#ASMEND279; GFX900-NEXT: global_store_dwordx2 v4, v[3:4], s[16:17]280; GFX900-NEXT: s_waitcnt vmcnt(0)281; GFX900-NEXT: s_setpc_b64 s[30:31]282;283; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_u:284; GFX90A: ; %bb.0:285; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)286; GFX90A-NEXT: ;;#ASMSTART287; GFX90A-NEXT: ; def v[0:3]288; GFX90A-NEXT: ;;#ASMEND289; GFX90A-NEXT: v_mov_b32_e32 v4, 0290; GFX90A-NEXT: v_mov_b32_e32 v0, v3291; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]292; GFX90A-NEXT: s_waitcnt vmcnt(0)293; GFX90A-NEXT: s_setpc_b64 s[30:31]294;295; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_u:296; GFX942: ; %bb.0:297; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)298; GFX942-NEXT: ;;#ASMSTART299; GFX942-NEXT: ; def v[0:3]300; GFX942-NEXT: ;;#ASMEND301; GFX942-NEXT: v_mov_b32_e32 v4, 0302; GFX942-NEXT: v_mov_b32_e32 v0, v3303; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]304; GFX942-NEXT: s_waitcnt vmcnt(0)305; GFX942-NEXT: s_setpc_b64 s[30:31]306 %vec0 = call <4 x float> asm "; def $0", "=v"()307 %vec1 = call <4 x float> asm "; def $0", "=v"()308 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 poison>309 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8310 ret void311}312 313define void @v_shuffle_v2f32_v4f32__7_0(ptr addrspace(1) inreg %ptr) {314; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_0:315; GFX900: ; %bb.0:316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX900-NEXT: v_mov_b32_e32 v8, 0318; GFX900-NEXT: ;;#ASMSTART319; GFX900-NEXT: ; def v[4:7]320; GFX900-NEXT: ;;#ASMEND321; GFX900-NEXT: ;;#ASMSTART322; GFX900-NEXT: ; def v[0:3]323; GFX900-NEXT: ;;#ASMEND324; GFX900-NEXT: global_store_dwordx2 v8, v[3:4], s[16:17]325; GFX900-NEXT: s_waitcnt vmcnt(0)326; GFX900-NEXT: s_setpc_b64 s[30:31]327;328; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_0:329; GFX90A: ; %bb.0:330; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)331; GFX90A-NEXT: ;;#ASMSTART332; GFX90A-NEXT: ; def v[0:3]333; GFX90A-NEXT: ;;#ASMEND334; GFX90A-NEXT: v_mov_b32_e32 v6, 0335; GFX90A-NEXT: ;;#ASMSTART336; GFX90A-NEXT: ; def v[2:5]337; GFX90A-NEXT: ;;#ASMEND338; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0]339; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]340; GFX90A-NEXT: s_waitcnt vmcnt(0)341; GFX90A-NEXT: s_setpc_b64 s[30:31]342;343; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_0:344; GFX942: ; %bb.0:345; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX942-NEXT: ;;#ASMSTART347; GFX942-NEXT: ; def v[0:3]348; GFX942-NEXT: ;;#ASMEND349; GFX942-NEXT: v_mov_b32_e32 v6, 0350; GFX942-NEXT: ;;#ASMSTART351; GFX942-NEXT: ; def v[2:5]352; GFX942-NEXT: ;;#ASMEND353; GFX942-NEXT: s_nop 0354; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0]355; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]356; GFX942-NEXT: s_waitcnt vmcnt(0)357; GFX942-NEXT: s_setpc_b64 s[30:31]358 %vec0 = call <4 x float> asm "; def $0", "=v"()359 %vec1 = call <4 x float> asm "; def $0", "=v"()360 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 0>361 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8362 ret void363}364 365define void @v_shuffle_v2f32_v4f32__7_1(ptr addrspace(1) inreg %ptr) {366; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_1:367; GFX900: ; %bb.0:368; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)369; GFX900-NEXT: v_mov_b32_e32 v7, 0370; GFX900-NEXT: ;;#ASMSTART371; GFX900-NEXT: ; def v[3:6]372; GFX900-NEXT: ;;#ASMEND373; GFX900-NEXT: ;;#ASMSTART374; GFX900-NEXT: ; def v[0:3]375; GFX900-NEXT: ;;#ASMEND376; GFX900-NEXT: global_store_dwordx2 v7, v[3:4], s[16:17]377; GFX900-NEXT: s_waitcnt vmcnt(0)378; GFX900-NEXT: s_setpc_b64 s[30:31]379;380; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_1:381; GFX90A: ; %bb.0:382; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)383; GFX90A-NEXT: ;;#ASMSTART384; GFX90A-NEXT: ; def v[0:3]385; GFX90A-NEXT: ;;#ASMEND386; GFX90A-NEXT: v_mov_b32_e32 v6, 0387; GFX90A-NEXT: ;;#ASMSTART388; GFX90A-NEXT: ; def v[2:5]389; GFX90A-NEXT: ;;#ASMEND390; GFX90A-NEXT: v_mov_b32_e32 v0, v5391; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]392; GFX90A-NEXT: s_waitcnt vmcnt(0)393; GFX90A-NEXT: s_setpc_b64 s[30:31]394;395; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_1:396; GFX942: ; %bb.0:397; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)398; GFX942-NEXT: ;;#ASMSTART399; GFX942-NEXT: ; def v[0:3]400; GFX942-NEXT: ;;#ASMEND401; GFX942-NEXT: v_mov_b32_e32 v6, 0402; GFX942-NEXT: ;;#ASMSTART403; GFX942-NEXT: ; def v[2:5]404; GFX942-NEXT: ;;#ASMEND405; GFX942-NEXT: s_nop 0406; GFX942-NEXT: v_mov_b32_e32 v0, v5407; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]408; GFX942-NEXT: s_waitcnt vmcnt(0)409; GFX942-NEXT: s_setpc_b64 s[30:31]410 %vec0 = call <4 x float> asm "; def $0", "=v"()411 %vec1 = call <4 x float> asm "; def $0", "=v"()412 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 1>413 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8414 ret void415}416 417define void @v_shuffle_v2f32_v4f32__7_2(ptr addrspace(1) inreg %ptr) {418; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_2:419; GFX900: ; %bb.0:420; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)421; GFX900-NEXT: v_mov_b32_e32 v6, 0422; GFX900-NEXT: ;;#ASMSTART423; GFX900-NEXT: ; def v[2:5]424; GFX900-NEXT: ;;#ASMEND425; GFX900-NEXT: ;;#ASMSTART426; GFX900-NEXT: ; def v[0:3]427; GFX900-NEXT: ;;#ASMEND428; GFX900-NEXT: global_store_dwordx2 v6, v[3:4], s[16:17]429; GFX900-NEXT: s_waitcnt vmcnt(0)430; GFX900-NEXT: s_setpc_b64 s[30:31]431;432; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_2:433; GFX90A: ; %bb.0:434; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)435; GFX90A-NEXT: ;;#ASMSTART436; GFX90A-NEXT: ; def v[0:3]437; GFX90A-NEXT: ;;#ASMEND438; GFX90A-NEXT: v_mov_b32_e32 v8, 0439; GFX90A-NEXT: ;;#ASMSTART440; GFX90A-NEXT: ; def v[4:7]441; GFX90A-NEXT: ;;#ASMEND442; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0]443; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17]444; GFX90A-NEXT: s_waitcnt vmcnt(0)445; GFX90A-NEXT: s_setpc_b64 s[30:31]446;447; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_2:448; GFX942: ; %bb.0:449; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)450; GFX942-NEXT: ;;#ASMSTART451; GFX942-NEXT: ; def v[0:3]452; GFX942-NEXT: ;;#ASMEND453; GFX942-NEXT: v_mov_b32_e32 v8, 0454; GFX942-NEXT: ;;#ASMSTART455; GFX942-NEXT: ; def v[4:7]456; GFX942-NEXT: ;;#ASMEND457; GFX942-NEXT: s_nop 0458; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0]459; GFX942-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1]460; GFX942-NEXT: s_waitcnt vmcnt(0)461; GFX942-NEXT: s_setpc_b64 s[30:31]462 %vec0 = call <4 x float> asm "; def $0", "=v"()463 %vec1 = call <4 x float> asm "; def $0", "=v"()464 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 2>465 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8466 ret void467}468 469define void @v_shuffle_v2f32_v4f32__7_3(ptr addrspace(1) inreg %ptr) {470; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_3:471; GFX900: ; %bb.0:472; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)473; GFX900-NEXT: v_mov_b32_e32 v5, 0474; GFX900-NEXT: ;;#ASMSTART475; GFX900-NEXT: ; def v[1:4]476; GFX900-NEXT: ;;#ASMEND477; GFX900-NEXT: ;;#ASMSTART478; GFX900-NEXT: ; def v[0:3]479; GFX900-NEXT: ;;#ASMEND480; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]481; GFX900-NEXT: s_waitcnt vmcnt(0)482; GFX900-NEXT: s_setpc_b64 s[30:31]483;484; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_3:485; GFX90A: ; %bb.0:486; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)487; GFX90A-NEXT: ;;#ASMSTART488; GFX90A-NEXT: ; def v[0:3]489; GFX90A-NEXT: ;;#ASMEND490; GFX90A-NEXT: v_mov_b32_e32 v8, 0491; GFX90A-NEXT: ;;#ASMSTART492; GFX90A-NEXT: ; def v[4:7]493; GFX90A-NEXT: ;;#ASMEND494; GFX90A-NEXT: v_mov_b32_e32 v2, v7495; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17]496; GFX90A-NEXT: s_waitcnt vmcnt(0)497; GFX90A-NEXT: s_setpc_b64 s[30:31]498;499; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_3:500; GFX942: ; %bb.0:501; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX942-NEXT: ;;#ASMSTART503; GFX942-NEXT: ; def v[0:3]504; GFX942-NEXT: ;;#ASMEND505; GFX942-NEXT: v_mov_b32_e32 v8, 0506; GFX942-NEXT: ;;#ASMSTART507; GFX942-NEXT: ; def v[4:7]508; GFX942-NEXT: ;;#ASMEND509; GFX942-NEXT: s_nop 0510; GFX942-NEXT: v_mov_b32_e32 v2, v7511; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1]512; GFX942-NEXT: s_waitcnt vmcnt(0)513; GFX942-NEXT: s_setpc_b64 s[30:31]514 %vec0 = call <4 x float> asm "; def $0", "=v"()515 %vec1 = call <4 x float> asm "; def $0", "=v"()516 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 3>517 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8518 ret void519}520 521define void @v_shuffle_v2f32_v4f32__7_4(ptr addrspace(1) inreg %ptr) {522; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_4:523; GFX900: ; %bb.0:524; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)525; GFX900-NEXT: v_mov_b32_e32 v5, 0526; GFX900-NEXT: ;;#ASMSTART527; GFX900-NEXT: ; def v[0:3]528; GFX900-NEXT: ;;#ASMEND529; GFX900-NEXT: v_mov_b32_e32 v4, v0530; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]531; GFX900-NEXT: s_waitcnt vmcnt(0)532; GFX900-NEXT: s_setpc_b64 s[30:31]533;534; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_4:535; GFX90A: ; %bb.0:536; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX90A-NEXT: ;;#ASMSTART538; GFX90A-NEXT: ; def v[0:3]539; GFX90A-NEXT: ;;#ASMEND540; GFX90A-NEXT: v_mov_b32_e32 v4, 0541; GFX90A-NEXT: v_mov_b32_e32 v2, v3542; GFX90A-NEXT: v_mov_b32_e32 v3, v0543; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]544; GFX90A-NEXT: s_waitcnt vmcnt(0)545; GFX90A-NEXT: s_setpc_b64 s[30:31]546;547; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_4:548; GFX942: ; %bb.0:549; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)550; GFX942-NEXT: ;;#ASMSTART551; GFX942-NEXT: ; def v[0:3]552; GFX942-NEXT: ;;#ASMEND553; GFX942-NEXT: v_mov_b32_e32 v4, 0554; GFX942-NEXT: v_mov_b32_e32 v2, v3555; GFX942-NEXT: v_mov_b32_e32 v3, v0556; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]557; GFX942-NEXT: s_waitcnt vmcnt(0)558; GFX942-NEXT: s_setpc_b64 s[30:31]559 %vec0 = call <4 x float> asm "; def $0", "=v"()560 %vec1 = call <4 x float> asm "; def $0", "=v"()561 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 4>562 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8563 ret void564}565 566define void @v_shuffle_v2f32_v4f32__7_5(ptr addrspace(1) inreg %ptr) {567; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_5:568; GFX900: ; %bb.0:569; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)570; GFX900-NEXT: v_mov_b32_e32 v5, 0571; GFX900-NEXT: ;;#ASMSTART572; GFX900-NEXT: ; def v[0:3]573; GFX900-NEXT: ;;#ASMEND574; GFX900-NEXT: v_mov_b32_e32 v4, v1575; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]576; GFX900-NEXT: s_waitcnt vmcnt(0)577; GFX900-NEXT: s_setpc_b64 s[30:31]578;579; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_5:580; GFX90A: ; %bb.0:581; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)582; GFX90A-NEXT: ;;#ASMSTART583; GFX90A-NEXT: ; def v[0:3]584; GFX90A-NEXT: ;;#ASMEND585; GFX90A-NEXT: v_mov_b32_e32 v4, 0586; GFX90A-NEXT: v_mov_b32_e32 v0, v3587; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]588; GFX90A-NEXT: s_waitcnt vmcnt(0)589; GFX90A-NEXT: s_setpc_b64 s[30:31]590;591; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_5:592; GFX942: ; %bb.0:593; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)594; GFX942-NEXT: ;;#ASMSTART595; GFX942-NEXT: ; def v[0:3]596; GFX942-NEXT: ;;#ASMEND597; GFX942-NEXT: v_mov_b32_e32 v4, 0598; GFX942-NEXT: v_mov_b32_e32 v0, v3599; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]600; GFX942-NEXT: s_waitcnt vmcnt(0)601; GFX942-NEXT: s_setpc_b64 s[30:31]602 %vec0 = call <4 x float> asm "; def $0", "=v"()603 %vec1 = call <4 x float> asm "; def $0", "=v"()604 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 5>605 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8606 ret void607}608 609define void @v_shuffle_v2f32_v4f32__7_6(ptr addrspace(1) inreg %ptr) {610; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_6:611; GFX900: ; %bb.0:612; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)613; GFX900-NEXT: v_mov_b32_e32 v5, 0614; GFX900-NEXT: ;;#ASMSTART615; GFX900-NEXT: ; def v[0:3]616; GFX900-NEXT: ;;#ASMEND617; GFX900-NEXT: v_mov_b32_e32 v4, v2618; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]619; GFX900-NEXT: s_waitcnt vmcnt(0)620; GFX900-NEXT: s_setpc_b64 s[30:31]621;622; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_6:623; GFX90A: ; %bb.0:624; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)625; GFX90A-NEXT: ;;#ASMSTART626; GFX90A-NEXT: ; def v[0:3]627; GFX90A-NEXT: ;;#ASMEND628; GFX90A-NEXT: v_mov_b32_e32 v4, 0629; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]630; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]631; GFX90A-NEXT: s_waitcnt vmcnt(0)632; GFX90A-NEXT: s_setpc_b64 s[30:31]633;634; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_6:635; GFX942: ; %bb.0:636; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX942-NEXT: ;;#ASMSTART638; GFX942-NEXT: ; def v[0:3]639; GFX942-NEXT: ;;#ASMEND640; GFX942-NEXT: v_mov_b32_e32 v4, 0641; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]642; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]643; GFX942-NEXT: s_waitcnt vmcnt(0)644; GFX942-NEXT: s_setpc_b64 s[30:31]645 %vec0 = call <4 x float> asm "; def $0", "=v"()646 %vec1 = call <4 x float> asm "; def $0", "=v"()647 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 6>648 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8649 ret void650}651 652define void @v_shuffle_v2f32_v4f32__7_7(ptr addrspace(1) inreg %ptr) {653; GFX900-LABEL: v_shuffle_v2f32_v4f32__7_7:654; GFX900: ; %bb.0:655; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)656; GFX900-NEXT: v_mov_b32_e32 v5, 0657; GFX900-NEXT: ;;#ASMSTART658; GFX900-NEXT: ; def v[0:3]659; GFX900-NEXT: ;;#ASMEND660; GFX900-NEXT: v_mov_b32_e32 v4, v3661; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]662; GFX900-NEXT: s_waitcnt vmcnt(0)663; GFX900-NEXT: s_setpc_b64 s[30:31]664;665; GFX90A-LABEL: v_shuffle_v2f32_v4f32__7_7:666; GFX90A: ; %bb.0:667; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)668; GFX90A-NEXT: ;;#ASMSTART669; GFX90A-NEXT: ; def v[0:3]670; GFX90A-NEXT: ;;#ASMEND671; GFX90A-NEXT: v_mov_b32_e32 v4, 0672; GFX90A-NEXT: v_mov_b32_e32 v2, v3673; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]674; GFX90A-NEXT: s_waitcnt vmcnt(0)675; GFX90A-NEXT: s_setpc_b64 s[30:31]676;677; GFX942-LABEL: v_shuffle_v2f32_v4f32__7_7:678; GFX942: ; %bb.0:679; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)680; GFX942-NEXT: ;;#ASMSTART681; GFX942-NEXT: ; def v[0:3]682; GFX942-NEXT: ;;#ASMEND683; GFX942-NEXT: v_mov_b32_e32 v4, 0684; GFX942-NEXT: v_mov_b32_e32 v2, v3685; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]686; GFX942-NEXT: s_waitcnt vmcnt(0)687; GFX942-NEXT: s_setpc_b64 s[30:31]688 %vec0 = call <4 x float> asm "; def $0", "=v"()689 %vec1 = call <4 x float> asm "; def $0", "=v"()690 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 7>691 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8692 ret void693}694 695define void @v_shuffle_v2f32_v4f32__u_0(ptr addrspace(1) inreg %ptr) {696; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_0:697; GFX900: ; %bb.0:698; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)699; GFX900-NEXT: v_mov_b32_e32 v0, 0700; GFX900-NEXT: ;;#ASMSTART701; GFX900-NEXT: ; def v[1:4]702; GFX900-NEXT: ;;#ASMEND703; GFX900-NEXT: global_store_dwordx2 v0, v[0:1], s[16:17]704; GFX900-NEXT: s_waitcnt vmcnt(0)705; GFX900-NEXT: s_setpc_b64 s[30:31]706;707; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_0:708; GFX90A: ; %bb.0:709; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)710; GFX90A-NEXT: ;;#ASMSTART711; GFX90A-NEXT: ; def v[0:3]712; GFX90A-NEXT: ;;#ASMEND713; GFX90A-NEXT: v_mov_b32_e32 v4, 0714; GFX90A-NEXT: v_mov_b32_e32 v1, v0715; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]716; GFX90A-NEXT: s_waitcnt vmcnt(0)717; GFX90A-NEXT: s_setpc_b64 s[30:31]718;719; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_0:720; GFX942: ; %bb.0:721; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)722; GFX942-NEXT: ;;#ASMSTART723; GFX942-NEXT: ; def v[0:3]724; GFX942-NEXT: ;;#ASMEND725; GFX942-NEXT: v_mov_b32_e32 v4, 0726; GFX942-NEXT: v_mov_b32_e32 v1, v0727; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]728; GFX942-NEXT: s_waitcnt vmcnt(0)729; GFX942-NEXT: s_setpc_b64 s[30:31]730 %vec0 = call <4 x float> asm "; def $0", "=v"()731 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 0>732 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8733 ret void734}735 736define void @v_shuffle_v2f32_v4f32__0_0(ptr addrspace(1) inreg %ptr) {737; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_0:738; GFX900: ; %bb.0:739; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)740; GFX900-NEXT: ;;#ASMSTART741; GFX900-NEXT: ; def v[0:3]742; GFX900-NEXT: ;;#ASMEND743; GFX900-NEXT: v_mov_b32_e32 v4, 0744; GFX900-NEXT: v_mov_b32_e32 v1, v0745; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]746; GFX900-NEXT: s_waitcnt vmcnt(0)747; GFX900-NEXT: s_setpc_b64 s[30:31]748;749; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_0:750; GFX90A: ; %bb.0:751; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; GFX90A-NEXT: ;;#ASMSTART753; GFX90A-NEXT: ; def v[0:3]754; GFX90A-NEXT: ;;#ASMEND755; GFX90A-NEXT: v_mov_b32_e32 v4, 0756; GFX90A-NEXT: v_mov_b32_e32 v1, v0757; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]758; GFX90A-NEXT: s_waitcnt vmcnt(0)759; GFX90A-NEXT: s_setpc_b64 s[30:31]760;761; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_0:762; GFX942: ; %bb.0:763; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)764; GFX942-NEXT: ;;#ASMSTART765; GFX942-NEXT: ; def v[0:3]766; GFX942-NEXT: ;;#ASMEND767; GFX942-NEXT: v_mov_b32_e32 v4, 0768; GFX942-NEXT: v_mov_b32_e32 v1, v0769; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]770; GFX942-NEXT: s_waitcnt vmcnt(0)771; GFX942-NEXT: s_setpc_b64 s[30:31]772 %vec0 = call <4 x float> asm "; def $0", "=v"()773 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> zeroinitializer774 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8775 ret void776}777 778define void @v_shuffle_v2f32_v4f32__1_0(ptr addrspace(1) inreg %ptr) {779; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_0:780; GFX900: ; %bb.0:781; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)782; GFX900-NEXT: ;;#ASMSTART783; GFX900-NEXT: ; def v[0:3]784; GFX900-NEXT: ;;#ASMEND785; GFX900-NEXT: v_mov_b32_e32 v4, 0786; GFX900-NEXT: v_mov_b32_e32 v2, v0787; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]788; GFX900-NEXT: s_waitcnt vmcnt(0)789; GFX900-NEXT: s_setpc_b64 s[30:31]790;791; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_0:792; GFX90A: ; %bb.0:793; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX90A-NEXT: ;;#ASMSTART795; GFX90A-NEXT: ; def v[0:3]796; GFX90A-NEXT: ;;#ASMEND797; GFX90A-NEXT: v_mov_b32_e32 v4, 0798; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]799; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]800; GFX90A-NEXT: s_waitcnt vmcnt(0)801; GFX90A-NEXT: s_setpc_b64 s[30:31]802;803; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_0:804; GFX942: ; %bb.0:805; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)806; GFX942-NEXT: ;;#ASMSTART807; GFX942-NEXT: ; def v[0:3]808; GFX942-NEXT: ;;#ASMEND809; GFX942-NEXT: v_mov_b32_e32 v4, 0810; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]811; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]812; GFX942-NEXT: s_waitcnt vmcnt(0)813; GFX942-NEXT: s_setpc_b64 s[30:31]814 %vec0 = call <4 x float> asm "; def $0", "=v"()815 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 0>816 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8817 ret void818}819 820define void @v_shuffle_v2f32_v4f32__2_0(ptr addrspace(1) inreg %ptr) {821; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_0:822; GFX900: ; %bb.0:823; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)824; GFX900-NEXT: ;;#ASMSTART825; GFX900-NEXT: ; def v[0:3]826; GFX900-NEXT: ;;#ASMEND827; GFX900-NEXT: v_mov_b32_e32 v4, 0828; GFX900-NEXT: v_mov_b32_e32 v3, v0829; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]830; GFX900-NEXT: s_waitcnt vmcnt(0)831; GFX900-NEXT: s_setpc_b64 s[30:31]832;833; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_0:834; GFX90A: ; %bb.0:835; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)836; GFX90A-NEXT: ;;#ASMSTART837; GFX90A-NEXT: ; def v[0:3]838; GFX90A-NEXT: ;;#ASMEND839; GFX90A-NEXT: v_mov_b32_e32 v4, 0840; GFX90A-NEXT: v_mov_b32_e32 v3, v0841; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]842; GFX90A-NEXT: s_waitcnt vmcnt(0)843; GFX90A-NEXT: s_setpc_b64 s[30:31]844;845; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_0:846; GFX942: ; %bb.0:847; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)848; GFX942-NEXT: ;;#ASMSTART849; GFX942-NEXT: ; def v[0:3]850; GFX942-NEXT: ;;#ASMEND851; GFX942-NEXT: v_mov_b32_e32 v4, 0852; GFX942-NEXT: v_mov_b32_e32 v3, v0853; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]854; GFX942-NEXT: s_waitcnt vmcnt(0)855; GFX942-NEXT: s_setpc_b64 s[30:31]856 %vec0 = call <4 x float> asm "; def $0", "=v"()857 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 0>858 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8859 ret void860}861 862define void @v_shuffle_v2f32_v4f32__3_0(ptr addrspace(1) inreg %ptr) {863; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_0:864; GFX900: ; %bb.0:865; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)866; GFX900-NEXT: v_mov_b32_e32 v5, 0867; GFX900-NEXT: ;;#ASMSTART868; GFX900-NEXT: ; def v[0:3]869; GFX900-NEXT: ;;#ASMEND870; GFX900-NEXT: v_mov_b32_e32 v4, v0871; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]872; GFX900-NEXT: s_waitcnt vmcnt(0)873; GFX900-NEXT: s_setpc_b64 s[30:31]874;875; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_0:876; GFX90A: ; %bb.0:877; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)878; GFX90A-NEXT: ;;#ASMSTART879; GFX90A-NEXT: ; def v[0:3]880; GFX90A-NEXT: ;;#ASMEND881; GFX90A-NEXT: v_mov_b32_e32 v4, 0882; GFX90A-NEXT: v_mov_b32_e32 v2, v3883; GFX90A-NEXT: v_mov_b32_e32 v3, v0884; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]885; GFX90A-NEXT: s_waitcnt vmcnt(0)886; GFX90A-NEXT: s_setpc_b64 s[30:31]887;888; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_0:889; GFX942: ; %bb.0:890; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX942-NEXT: ;;#ASMSTART892; GFX942-NEXT: ; def v[0:3]893; GFX942-NEXT: ;;#ASMEND894; GFX942-NEXT: v_mov_b32_e32 v4, 0895; GFX942-NEXT: v_mov_b32_e32 v2, v3896; GFX942-NEXT: v_mov_b32_e32 v3, v0897; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]898; GFX942-NEXT: s_waitcnt vmcnt(0)899; GFX942-NEXT: s_setpc_b64 s[30:31]900 %vec0 = call <4 x float> asm "; def $0", "=v"()901 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 0>902 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8903 ret void904}905 906define void @v_shuffle_v2f32_v4f32__4_0(ptr addrspace(1) inreg %ptr) {907; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_0:908; GFX900: ; %bb.0:909; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)910; GFX900-NEXT: v_mov_b32_e32 v0, 0911; GFX900-NEXT: ;;#ASMSTART912; GFX900-NEXT: ; def v[1:4]913; GFX900-NEXT: ;;#ASMEND914; GFX900-NEXT: global_store_dwordx2 v0, v[0:1], s[16:17]915; GFX900-NEXT: s_waitcnt vmcnt(0)916; GFX900-NEXT: s_setpc_b64 s[30:31]917;918; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_0:919; GFX90A: ; %bb.0:920; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)921; GFX90A-NEXT: ;;#ASMSTART922; GFX90A-NEXT: ; def v[0:3]923; GFX90A-NEXT: ;;#ASMEND924; GFX90A-NEXT: v_mov_b32_e32 v4, 0925; GFX90A-NEXT: v_mov_b32_e32 v1, v0926; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]927; GFX90A-NEXT: s_waitcnt vmcnt(0)928; GFX90A-NEXT: s_setpc_b64 s[30:31]929;930; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_0:931; GFX942: ; %bb.0:932; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GFX942-NEXT: ;;#ASMSTART934; GFX942-NEXT: ; def v[0:3]935; GFX942-NEXT: ;;#ASMEND936; GFX942-NEXT: v_mov_b32_e32 v4, 0937; GFX942-NEXT: v_mov_b32_e32 v1, v0938; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]939; GFX942-NEXT: s_waitcnt vmcnt(0)940; GFX942-NEXT: s_setpc_b64 s[30:31]941 %vec0 = call <4 x float> asm "; def $0", "=v"()942 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 0>943 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8944 ret void945}946 947define void @v_shuffle_v2f32_v4f32__5_0(ptr addrspace(1) inreg %ptr) {948; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_0:949; GFX900: ; %bb.0:950; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)951; GFX900-NEXT: ;;#ASMSTART952; GFX900-NEXT: ; def v[0:3]953; GFX900-NEXT: ;;#ASMEND954; GFX900-NEXT: ;;#ASMSTART955; GFX900-NEXT: ; def v[1:4]956; GFX900-NEXT: ;;#ASMEND957; GFX900-NEXT: v_mov_b32_e32 v5, 0958; GFX900-NEXT: v_mov_b32_e32 v3, v0959; GFX900-NEXT: global_store_dwordx2 v5, v[2:3], s[16:17]960; GFX900-NEXT: s_waitcnt vmcnt(0)961; GFX900-NEXT: s_setpc_b64 s[30:31]962;963; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_0:964; GFX90A: ; %bb.0:965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)966; GFX90A-NEXT: ;;#ASMSTART967; GFX90A-NEXT: ; def v[0:3]968; GFX90A-NEXT: ;;#ASMEND969; GFX90A-NEXT: v_mov_b32_e32 v6, 0970; GFX90A-NEXT: ;;#ASMSTART971; GFX90A-NEXT: ; def v[2:5]972; GFX90A-NEXT: ;;#ASMEND973; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]974; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]975; GFX90A-NEXT: s_waitcnt vmcnt(0)976; GFX90A-NEXT: s_setpc_b64 s[30:31]977;978; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_0:979; GFX942: ; %bb.0:980; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)981; GFX942-NEXT: ;;#ASMSTART982; GFX942-NEXT: ; def v[0:3]983; GFX942-NEXT: ;;#ASMEND984; GFX942-NEXT: v_mov_b32_e32 v6, 0985; GFX942-NEXT: ;;#ASMSTART986; GFX942-NEXT: ; def v[2:5]987; GFX942-NEXT: ;;#ASMEND988; GFX942-NEXT: s_nop 0989; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]990; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]991; GFX942-NEXT: s_waitcnt vmcnt(0)992; GFX942-NEXT: s_setpc_b64 s[30:31]993 %vec0 = call <4 x float> asm "; def $0", "=v"()994 %vec1 = call <4 x float> asm "; def $0", "=v"()995 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 0>996 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8997 ret void998}999 1000define void @v_shuffle_v2f32_v4f32__6_0(ptr addrspace(1) inreg %ptr) {1001; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_0:1002; GFX900: ; %bb.0:1003; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1004; GFX900-NEXT: ;;#ASMSTART1005; GFX900-NEXT: ; def v[0:3]1006; GFX900-NEXT: ;;#ASMEND1007; GFX900-NEXT: ;;#ASMSTART1008; GFX900-NEXT: ; def v[1:4]1009; GFX900-NEXT: ;;#ASMEND1010; GFX900-NEXT: v_mov_b32_e32 v5, 01011; GFX900-NEXT: v_mov_b32_e32 v4, v01012; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]1013; GFX900-NEXT: s_waitcnt vmcnt(0)1014; GFX900-NEXT: s_setpc_b64 s[30:31]1015;1016; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_0:1017; GFX90A: ; %bb.0:1018; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX90A-NEXT: ;;#ASMSTART1020; GFX90A-NEXT: ; def v[0:3]1021; GFX90A-NEXT: ;;#ASMEND1022; GFX90A-NEXT: ;;#ASMSTART1023; GFX90A-NEXT: ; def v[2:5]1024; GFX90A-NEXT: ;;#ASMEND1025; GFX90A-NEXT: v_mov_b32_e32 v6, 01026; GFX90A-NEXT: v_mov_b32_e32 v5, v01027; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17]1028; GFX90A-NEXT: s_waitcnt vmcnt(0)1029; GFX90A-NEXT: s_setpc_b64 s[30:31]1030;1031; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_0:1032; GFX942: ; %bb.0:1033; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1034; GFX942-NEXT: ;;#ASMSTART1035; GFX942-NEXT: ; def v[0:3]1036; GFX942-NEXT: ;;#ASMEND1037; GFX942-NEXT: v_mov_b32_e32 v6, 01038; GFX942-NEXT: ;;#ASMSTART1039; GFX942-NEXT: ; def v[2:5]1040; GFX942-NEXT: ;;#ASMEND1041; GFX942-NEXT: s_nop 01042; GFX942-NEXT: v_mov_b32_e32 v5, v01043; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1]1044; GFX942-NEXT: s_waitcnt vmcnt(0)1045; GFX942-NEXT: s_setpc_b64 s[30:31]1046 %vec0 = call <4 x float> asm "; def $0", "=v"()1047 %vec1 = call <4 x float> asm "; def $0", "=v"()1048 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 0>1049 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81050 ret void1051}1052 1053define void @v_shuffle_v2f32_v4f32__u_1(ptr addrspace(1) inreg %ptr) {1054; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_1:1055; GFX900: ; %bb.0:1056; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1057; GFX900-NEXT: v_mov_b32_e32 v4, 01058; GFX900-NEXT: ;;#ASMSTART1059; GFX900-NEXT: ; def v[0:3]1060; GFX900-NEXT: ;;#ASMEND1061; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1062; GFX900-NEXT: s_waitcnt vmcnt(0)1063; GFX900-NEXT: s_setpc_b64 s[30:31]1064;1065; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_1:1066; GFX90A: ; %bb.0:1067; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1068; GFX90A-NEXT: v_mov_b32_e32 v4, 01069; GFX90A-NEXT: ;;#ASMSTART1070; GFX90A-NEXT: ; def v[0:3]1071; GFX90A-NEXT: ;;#ASMEND1072; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1073; GFX90A-NEXT: s_waitcnt vmcnt(0)1074; GFX90A-NEXT: s_setpc_b64 s[30:31]1075;1076; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_1:1077; GFX942: ; %bb.0:1078; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX942-NEXT: v_mov_b32_e32 v4, 01080; GFX942-NEXT: ;;#ASMSTART1081; GFX942-NEXT: ; def v[0:3]1082; GFX942-NEXT: ;;#ASMEND1083; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1084; GFX942-NEXT: s_waitcnt vmcnt(0)1085; GFX942-NEXT: s_setpc_b64 s[30:31]1086 %vec0 = call <4 x float> asm "; def $0", "=v"()1087 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 1>1088 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81089 ret void1090}1091 1092define void @v_shuffle_v2f32_v4f32__0_1(ptr addrspace(1) inreg %ptr) {1093; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_1:1094; GFX900: ; %bb.0:1095; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1096; GFX900-NEXT: v_mov_b32_e32 v4, 01097; GFX900-NEXT: ;;#ASMSTART1098; GFX900-NEXT: ; def v[0:3]1099; GFX900-NEXT: ;;#ASMEND1100; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1101; GFX900-NEXT: s_waitcnt vmcnt(0)1102; GFX900-NEXT: s_setpc_b64 s[30:31]1103;1104; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_1:1105; GFX90A: ; %bb.0:1106; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1107; GFX90A-NEXT: v_mov_b32_e32 v4, 01108; GFX90A-NEXT: ;;#ASMSTART1109; GFX90A-NEXT: ; def v[0:3]1110; GFX90A-NEXT: ;;#ASMEND1111; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1112; GFX90A-NEXT: s_waitcnt vmcnt(0)1113; GFX90A-NEXT: s_setpc_b64 s[30:31]1114;1115; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_1:1116; GFX942: ; %bb.0:1117; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1118; GFX942-NEXT: v_mov_b32_e32 v4, 01119; GFX942-NEXT: ;;#ASMSTART1120; GFX942-NEXT: ; def v[0:3]1121; GFX942-NEXT: ;;#ASMEND1122; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1123; GFX942-NEXT: s_waitcnt vmcnt(0)1124; GFX942-NEXT: s_setpc_b64 s[30:31]1125 %vec0 = call <4 x float> asm "; def $0", "=v"()1126 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 1>1127 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81128 ret void1129}1130 1131define void @v_shuffle_v2f32_v4f32__1_1(ptr addrspace(1) inreg %ptr) {1132; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_1:1133; GFX900: ; %bb.0:1134; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1135; GFX900-NEXT: ;;#ASMSTART1136; GFX900-NEXT: ; def v[0:3]1137; GFX900-NEXT: ;;#ASMEND1138; GFX900-NEXT: v_mov_b32_e32 v4, 01139; GFX900-NEXT: v_mov_b32_e32 v2, v11140; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1141; GFX900-NEXT: s_waitcnt vmcnt(0)1142; GFX900-NEXT: s_setpc_b64 s[30:31]1143;1144; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_1:1145; GFX90A: ; %bb.0:1146; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1147; GFX90A-NEXT: ;;#ASMSTART1148; GFX90A-NEXT: ; def v[0:3]1149; GFX90A-NEXT: ;;#ASMEND1150; GFX90A-NEXT: v_mov_b32_e32 v4, 01151; GFX90A-NEXT: v_mov_b32_e32 v0, v11152; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1153; GFX90A-NEXT: s_waitcnt vmcnt(0)1154; GFX90A-NEXT: s_setpc_b64 s[30:31]1155;1156; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_1:1157; GFX942: ; %bb.0:1158; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1159; GFX942-NEXT: ;;#ASMSTART1160; GFX942-NEXT: ; def v[0:3]1161; GFX942-NEXT: ;;#ASMEND1162; GFX942-NEXT: v_mov_b32_e32 v4, 01163; GFX942-NEXT: v_mov_b32_e32 v0, v11164; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1165; GFX942-NEXT: s_waitcnt vmcnt(0)1166; GFX942-NEXT: s_setpc_b64 s[30:31]1167 %vec0 = call <4 x float> asm "; def $0", "=v"()1168 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 1>1169 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81170 ret void1171}1172 1173define void @v_shuffle_v2f32_v4f32__2_1(ptr addrspace(1) inreg %ptr) {1174; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_1:1175; GFX900: ; %bb.0:1176; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1177; GFX900-NEXT: ;;#ASMSTART1178; GFX900-NEXT: ; def v[0:3]1179; GFX900-NEXT: ;;#ASMEND1180; GFX900-NEXT: v_mov_b32_e32 v4, 01181; GFX900-NEXT: v_mov_b32_e32 v3, v11182; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1183; GFX900-NEXT: s_waitcnt vmcnt(0)1184; GFX900-NEXT: s_setpc_b64 s[30:31]1185;1186; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_1:1187; GFX90A: ; %bb.0:1188; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1189; GFX90A-NEXT: ;;#ASMSTART1190; GFX90A-NEXT: ; def v[0:3]1191; GFX90A-NEXT: ;;#ASMEND1192; GFX90A-NEXT: v_mov_b32_e32 v4, 01193; GFX90A-NEXT: v_mov_b32_e32 v3, v11194; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1195; GFX90A-NEXT: s_waitcnt vmcnt(0)1196; GFX90A-NEXT: s_setpc_b64 s[30:31]1197;1198; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_1:1199; GFX942: ; %bb.0:1200; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX942-NEXT: ;;#ASMSTART1202; GFX942-NEXT: ; def v[0:3]1203; GFX942-NEXT: ;;#ASMEND1204; GFX942-NEXT: v_mov_b32_e32 v4, 01205; GFX942-NEXT: v_mov_b32_e32 v3, v11206; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1207; GFX942-NEXT: s_waitcnt vmcnt(0)1208; GFX942-NEXT: s_setpc_b64 s[30:31]1209 %vec0 = call <4 x float> asm "; def $0", "=v"()1210 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 1>1211 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81212 ret void1213}1214 1215define void @v_shuffle_v2f32_v4f32__3_1(ptr addrspace(1) inreg %ptr) {1216; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_1:1217; GFX900: ; %bb.0:1218; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1219; GFX900-NEXT: v_mov_b32_e32 v5, 01220; GFX900-NEXT: ;;#ASMSTART1221; GFX900-NEXT: ; def v[0:3]1222; GFX900-NEXT: ;;#ASMEND1223; GFX900-NEXT: v_mov_b32_e32 v4, v11224; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]1225; GFX900-NEXT: s_waitcnt vmcnt(0)1226; GFX900-NEXT: s_setpc_b64 s[30:31]1227;1228; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_1:1229; GFX90A: ; %bb.0:1230; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1231; GFX90A-NEXT: ;;#ASMSTART1232; GFX90A-NEXT: ; def v[0:3]1233; GFX90A-NEXT: ;;#ASMEND1234; GFX90A-NEXT: v_mov_b32_e32 v4, 01235; GFX90A-NEXT: v_mov_b32_e32 v0, v31236; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1237; GFX90A-NEXT: s_waitcnt vmcnt(0)1238; GFX90A-NEXT: s_setpc_b64 s[30:31]1239;1240; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_1:1241; GFX942: ; %bb.0:1242; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1243; GFX942-NEXT: ;;#ASMSTART1244; GFX942-NEXT: ; def v[0:3]1245; GFX942-NEXT: ;;#ASMEND1246; GFX942-NEXT: v_mov_b32_e32 v4, 01247; GFX942-NEXT: v_mov_b32_e32 v0, v31248; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1249; GFX942-NEXT: s_waitcnt vmcnt(0)1250; GFX942-NEXT: s_setpc_b64 s[30:31]1251 %vec0 = call <4 x float> asm "; def $0", "=v"()1252 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 1>1253 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81254 ret void1255}1256 1257define void @v_shuffle_v2f32_v4f32__4_1(ptr addrspace(1) inreg %ptr) {1258; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_1:1259; GFX900: ; %bb.0:1260; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1261; GFX900-NEXT: v_mov_b32_e32 v4, 01262; GFX900-NEXT: ;;#ASMSTART1263; GFX900-NEXT: ; def v[0:3]1264; GFX900-NEXT: ;;#ASMEND1265; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1266; GFX900-NEXT: s_waitcnt vmcnt(0)1267; GFX900-NEXT: s_setpc_b64 s[30:31]1268;1269; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_1:1270; GFX90A: ; %bb.0:1271; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1272; GFX90A-NEXT: v_mov_b32_e32 v4, 01273; GFX90A-NEXT: ;;#ASMSTART1274; GFX90A-NEXT: ; def v[0:3]1275; GFX90A-NEXT: ;;#ASMEND1276; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1277; GFX90A-NEXT: s_waitcnt vmcnt(0)1278; GFX90A-NEXT: s_setpc_b64 s[30:31]1279;1280; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_1:1281; GFX942: ; %bb.0:1282; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1283; GFX942-NEXT: v_mov_b32_e32 v4, 01284; GFX942-NEXT: ;;#ASMSTART1285; GFX942-NEXT: ; def v[0:3]1286; GFX942-NEXT: ;;#ASMEND1287; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1288; GFX942-NEXT: s_waitcnt vmcnt(0)1289; GFX942-NEXT: s_setpc_b64 s[30:31]1290 %vec0 = call <4 x float> asm "; def $0", "=v"()1291 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 1>1292 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81293 ret void1294}1295 1296define void @v_shuffle_v2f32_v4f32__5_1(ptr addrspace(1) inreg %ptr) {1297; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_1:1298; GFX900: ; %bb.0:1299; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1300; GFX900-NEXT: ;;#ASMSTART1301; GFX900-NEXT: ; def v[0:3]1302; GFX900-NEXT: ;;#ASMEND1303; GFX900-NEXT: ;;#ASMSTART1304; GFX900-NEXT: ; def v[2:5]1305; GFX900-NEXT: ;;#ASMEND1306; GFX900-NEXT: v_mov_b32_e32 v6, 01307; GFX900-NEXT: v_mov_b32_e32 v4, v11308; GFX900-NEXT: global_store_dwordx2 v6, v[3:4], s[16:17]1309; GFX900-NEXT: s_waitcnt vmcnt(0)1310; GFX900-NEXT: s_setpc_b64 s[30:31]1311;1312; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_1:1313; GFX90A: ; %bb.0:1314; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1315; GFX90A-NEXT: ;;#ASMSTART1316; GFX90A-NEXT: ; def v[0:3]1317; GFX90A-NEXT: ;;#ASMEND1318; GFX90A-NEXT: v_mov_b32_e32 v6, 01319; GFX90A-NEXT: ;;#ASMSTART1320; GFX90A-NEXT: ; def v[2:5]1321; GFX90A-NEXT: ;;#ASMEND1322; GFX90A-NEXT: v_mov_b32_e32 v0, v31323; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]1324; GFX90A-NEXT: s_waitcnt vmcnt(0)1325; GFX90A-NEXT: s_setpc_b64 s[30:31]1326;1327; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_1:1328; GFX942: ; %bb.0:1329; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1330; GFX942-NEXT: ;;#ASMSTART1331; GFX942-NEXT: ; def v[0:3]1332; GFX942-NEXT: ;;#ASMEND1333; GFX942-NEXT: v_mov_b32_e32 v6, 01334; GFX942-NEXT: ;;#ASMSTART1335; GFX942-NEXT: ; def v[2:5]1336; GFX942-NEXT: ;;#ASMEND1337; GFX942-NEXT: s_nop 01338; GFX942-NEXT: v_mov_b32_e32 v0, v31339; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]1340; GFX942-NEXT: s_waitcnt vmcnt(0)1341; GFX942-NEXT: s_setpc_b64 s[30:31]1342 %vec0 = call <4 x float> asm "; def $0", "=v"()1343 %vec1 = call <4 x float> asm "; def $0", "=v"()1344 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 1>1345 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81346 ret void1347}1348 1349define void @v_shuffle_v2f32_v4f32__6_1(ptr addrspace(1) inreg %ptr) {1350; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_1:1351; GFX900: ; %bb.0:1352; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1353; GFX900-NEXT: ;;#ASMSTART1354; GFX900-NEXT: ; def v[0:3]1355; GFX900-NEXT: ;;#ASMEND1356; GFX900-NEXT: ;;#ASMSTART1357; GFX900-NEXT: ; def v[2:5]1358; GFX900-NEXT: ;;#ASMEND1359; GFX900-NEXT: v_mov_b32_e32 v6, 01360; GFX900-NEXT: v_mov_b32_e32 v5, v11361; GFX900-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17]1362; GFX900-NEXT: s_waitcnt vmcnt(0)1363; GFX900-NEXT: s_setpc_b64 s[30:31]1364;1365; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_1:1366; GFX90A: ; %bb.0:1367; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1368; GFX90A-NEXT: ;;#ASMSTART1369; GFX90A-NEXT: ; def v[0:3]1370; GFX90A-NEXT: ;;#ASMEND1371; GFX90A-NEXT: ;;#ASMSTART1372; GFX90A-NEXT: ; def v[2:5]1373; GFX90A-NEXT: ;;#ASMEND1374; GFX90A-NEXT: v_mov_b32_e32 v6, 01375; GFX90A-NEXT: v_mov_b32_e32 v5, v11376; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17]1377; GFX90A-NEXT: s_waitcnt vmcnt(0)1378; GFX90A-NEXT: s_setpc_b64 s[30:31]1379;1380; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_1:1381; GFX942: ; %bb.0:1382; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1383; GFX942-NEXT: ;;#ASMSTART1384; GFX942-NEXT: ; def v[0:3]1385; GFX942-NEXT: ;;#ASMEND1386; GFX942-NEXT: v_mov_b32_e32 v6, 01387; GFX942-NEXT: ;;#ASMSTART1388; GFX942-NEXT: ; def v[2:5]1389; GFX942-NEXT: ;;#ASMEND1390; GFX942-NEXT: s_nop 01391; GFX942-NEXT: v_mov_b32_e32 v5, v11392; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1]1393; GFX942-NEXT: s_waitcnt vmcnt(0)1394; GFX942-NEXT: s_setpc_b64 s[30:31]1395 %vec0 = call <4 x float> asm "; def $0", "=v"()1396 %vec1 = call <4 x float> asm "; def $0", "=v"()1397 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 1>1398 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81399 ret void1400}1401 1402define void @v_shuffle_v2f32_v4f32__u_2(ptr addrspace(1) inreg %ptr) {1403; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_2:1404; GFX900: ; %bb.0:1405; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1406; GFX900-NEXT: v_mov_b32_e32 v4, 01407; GFX900-NEXT: ;;#ASMSTART1408; GFX900-NEXT: ; def v[0:3]1409; GFX900-NEXT: ;;#ASMEND1410; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1411; GFX900-NEXT: s_waitcnt vmcnt(0)1412; GFX900-NEXT: s_setpc_b64 s[30:31]1413;1414; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_2:1415; GFX90A: ; %bb.0:1416; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1417; GFX90A-NEXT: ;;#ASMSTART1418; GFX90A-NEXT: ; def v[0:3]1419; GFX90A-NEXT: ;;#ASMEND1420; GFX90A-NEXT: v_mov_b32_e32 v4, 01421; GFX90A-NEXT: v_mov_b32_e32 v1, v21422; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1423; GFX90A-NEXT: s_waitcnt vmcnt(0)1424; GFX90A-NEXT: s_setpc_b64 s[30:31]1425;1426; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_2:1427; GFX942: ; %bb.0:1428; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1429; GFX942-NEXT: ;;#ASMSTART1430; GFX942-NEXT: ; def v[0:3]1431; GFX942-NEXT: ;;#ASMEND1432; GFX942-NEXT: v_mov_b32_e32 v4, 01433; GFX942-NEXT: v_mov_b32_e32 v1, v21434; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1435; GFX942-NEXT: s_waitcnt vmcnt(0)1436; GFX942-NEXT: s_setpc_b64 s[30:31]1437 %vec0 = call <4 x float> asm "; def $0", "=v"()1438 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 2>1439 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81440 ret void1441}1442 1443define void @v_shuffle_v2f32_v4f32__0_2(ptr addrspace(1) inreg %ptr) {1444; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_2:1445; GFX900: ; %bb.0:1446; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1447; GFX900-NEXT: ;;#ASMSTART1448; GFX900-NEXT: ; def v[0:3]1449; GFX900-NEXT: ;;#ASMEND1450; GFX900-NEXT: v_mov_b32_e32 v4, 01451; GFX900-NEXT: v_mov_b32_e32 v1, v21452; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1453; GFX900-NEXT: s_waitcnt vmcnt(0)1454; GFX900-NEXT: s_setpc_b64 s[30:31]1455;1456; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_2:1457; GFX90A: ; %bb.0:1458; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1459; GFX90A-NEXT: ;;#ASMSTART1460; GFX90A-NEXT: ; def v[0:3]1461; GFX90A-NEXT: ;;#ASMEND1462; GFX90A-NEXT: v_mov_b32_e32 v4, 01463; GFX90A-NEXT: v_mov_b32_e32 v1, v21464; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1465; GFX90A-NEXT: s_waitcnt vmcnt(0)1466; GFX90A-NEXT: s_setpc_b64 s[30:31]1467;1468; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_2:1469; GFX942: ; %bb.0:1470; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1471; GFX942-NEXT: ;;#ASMSTART1472; GFX942-NEXT: ; def v[0:3]1473; GFX942-NEXT: ;;#ASMEND1474; GFX942-NEXT: v_mov_b32_e32 v4, 01475; GFX942-NEXT: v_mov_b32_e32 v1, v21476; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1477; GFX942-NEXT: s_waitcnt vmcnt(0)1478; GFX942-NEXT: s_setpc_b64 s[30:31]1479 %vec0 = call <4 x float> asm "; def $0", "=v"()1480 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 2>1481 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81482 ret void1483}1484 1485define void @v_shuffle_v2f32_v4f32__1_2(ptr addrspace(1) inreg %ptr) {1486; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_2:1487; GFX900: ; %bb.0:1488; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1489; GFX900-NEXT: v_mov_b32_e32 v4, 01490; GFX900-NEXT: ;;#ASMSTART1491; GFX900-NEXT: ; def v[0:3]1492; GFX900-NEXT: ;;#ASMEND1493; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1494; GFX900-NEXT: s_waitcnt vmcnt(0)1495; GFX900-NEXT: s_setpc_b64 s[30:31]1496;1497; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_2:1498; GFX90A: ; %bb.0:1499; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1500; GFX90A-NEXT: ;;#ASMSTART1501; GFX90A-NEXT: ; def v[0:3]1502; GFX90A-NEXT: ;;#ASMEND1503; GFX90A-NEXT: v_mov_b32_e32 v4, 01504; GFX90A-NEXT: v_mov_b32_e32 v0, v11505; GFX90A-NEXT: v_mov_b32_e32 v1, v21506; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1507; GFX90A-NEXT: s_waitcnt vmcnt(0)1508; GFX90A-NEXT: s_setpc_b64 s[30:31]1509;1510; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_2:1511; GFX942: ; %bb.0:1512; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1513; GFX942-NEXT: ;;#ASMSTART1514; GFX942-NEXT: ; def v[0:3]1515; GFX942-NEXT: ;;#ASMEND1516; GFX942-NEXT: v_mov_b32_e32 v4, 01517; GFX942-NEXT: v_mov_b32_e32 v0, v11518; GFX942-NEXT: v_mov_b32_e32 v1, v21519; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1520; GFX942-NEXT: s_waitcnt vmcnt(0)1521; GFX942-NEXT: s_setpc_b64 s[30:31]1522 %vec0 = call <4 x float> asm "; def $0", "=v"()1523 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 2>1524 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81525 ret void1526}1527 1528define void @v_shuffle_v2f32_v4f32__2_2(ptr addrspace(1) inreg %ptr) {1529; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_2:1530; GFX900: ; %bb.0:1531; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX900-NEXT: ;;#ASMSTART1533; GFX900-NEXT: ; def v[0:3]1534; GFX900-NEXT: ;;#ASMEND1535; GFX900-NEXT: v_mov_b32_e32 v4, 01536; GFX900-NEXT: v_mov_b32_e32 v3, v21537; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1538; GFX900-NEXT: s_waitcnt vmcnt(0)1539; GFX900-NEXT: s_setpc_b64 s[30:31]1540;1541; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_2:1542; GFX90A: ; %bb.0:1543; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; GFX90A-NEXT: ;;#ASMSTART1545; GFX90A-NEXT: ; def v[0:3]1546; GFX90A-NEXT: ;;#ASMEND1547; GFX90A-NEXT: v_mov_b32_e32 v4, 01548; GFX90A-NEXT: v_mov_b32_e32 v3, v21549; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1550; GFX90A-NEXT: s_waitcnt vmcnt(0)1551; GFX90A-NEXT: s_setpc_b64 s[30:31]1552;1553; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_2:1554; GFX942: ; %bb.0:1555; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1556; GFX942-NEXT: ;;#ASMSTART1557; GFX942-NEXT: ; def v[0:3]1558; GFX942-NEXT: ;;#ASMEND1559; GFX942-NEXT: v_mov_b32_e32 v4, 01560; GFX942-NEXT: v_mov_b32_e32 v3, v21561; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1562; GFX942-NEXT: s_waitcnt vmcnt(0)1563; GFX942-NEXT: s_setpc_b64 s[30:31]1564 %vec0 = call <4 x float> asm "; def $0", "=v"()1565 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 2>1566 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81567 ret void1568}1569 1570define void @v_shuffle_v2f32_v4f32__3_2(ptr addrspace(1) inreg %ptr) {1571; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_2:1572; GFX900: ; %bb.0:1573; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1574; GFX900-NEXT: v_mov_b32_e32 v5, 01575; GFX900-NEXT: ;;#ASMSTART1576; GFX900-NEXT: ; def v[0:3]1577; GFX900-NEXT: ;;#ASMEND1578; GFX900-NEXT: v_mov_b32_e32 v4, v21579; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]1580; GFX900-NEXT: s_waitcnt vmcnt(0)1581; GFX900-NEXT: s_setpc_b64 s[30:31]1582;1583; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_2:1584; GFX90A: ; %bb.0:1585; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1586; GFX90A-NEXT: ;;#ASMSTART1587; GFX90A-NEXT: ; def v[0:3]1588; GFX90A-NEXT: ;;#ASMEND1589; GFX90A-NEXT: v_mov_b32_e32 v4, 01590; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]1591; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1592; GFX90A-NEXT: s_waitcnt vmcnt(0)1593; GFX90A-NEXT: s_setpc_b64 s[30:31]1594;1595; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_2:1596; GFX942: ; %bb.0:1597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1598; GFX942-NEXT: ;;#ASMSTART1599; GFX942-NEXT: ; def v[0:3]1600; GFX942-NEXT: ;;#ASMEND1601; GFX942-NEXT: v_mov_b32_e32 v4, 01602; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]1603; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1604; GFX942-NEXT: s_waitcnt vmcnt(0)1605; GFX942-NEXT: s_setpc_b64 s[30:31]1606 %vec0 = call <4 x float> asm "; def $0", "=v"()1607 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 2>1608 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81609 ret void1610}1611 1612define void @v_shuffle_v2f32_v4f32__4_2(ptr addrspace(1) inreg %ptr) {1613; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_2:1614; GFX900: ; %bb.0:1615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1616; GFX900-NEXT: v_mov_b32_e32 v4, 01617; GFX900-NEXT: ;;#ASMSTART1618; GFX900-NEXT: ; def v[0:3]1619; GFX900-NEXT: ;;#ASMEND1620; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1621; GFX900-NEXT: s_waitcnt vmcnt(0)1622; GFX900-NEXT: s_setpc_b64 s[30:31]1623;1624; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_2:1625; GFX90A: ; %bb.0:1626; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1627; GFX90A-NEXT: ;;#ASMSTART1628; GFX90A-NEXT: ; def v[0:3]1629; GFX90A-NEXT: ;;#ASMEND1630; GFX90A-NEXT: v_mov_b32_e32 v4, 01631; GFX90A-NEXT: v_mov_b32_e32 v1, v21632; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1633; GFX90A-NEXT: s_waitcnt vmcnt(0)1634; GFX90A-NEXT: s_setpc_b64 s[30:31]1635;1636; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_2:1637; GFX942: ; %bb.0:1638; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1639; GFX942-NEXT: ;;#ASMSTART1640; GFX942-NEXT: ; def v[0:3]1641; GFX942-NEXT: ;;#ASMEND1642; GFX942-NEXT: v_mov_b32_e32 v4, 01643; GFX942-NEXT: v_mov_b32_e32 v1, v21644; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1645; GFX942-NEXT: s_waitcnt vmcnt(0)1646; GFX942-NEXT: s_setpc_b64 s[30:31]1647 %vec0 = call <4 x float> asm "; def $0", "=v"()1648 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 2>1649 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81650 ret void1651}1652 1653define void @v_shuffle_v2f32_v4f32__5_2(ptr addrspace(1) inreg %ptr) {1654; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_2:1655; GFX900: ; %bb.0:1656; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1657; GFX900-NEXT: ;;#ASMSTART1658; GFX900-NEXT: ; def v[0:3]1659; GFX900-NEXT: ;;#ASMEND1660; GFX900-NEXT: ;;#ASMSTART1661; GFX900-NEXT: ; def v[3:6]1662; GFX900-NEXT: ;;#ASMEND1663; GFX900-NEXT: v_mov_b32_e32 v7, 01664; GFX900-NEXT: v_mov_b32_e32 v5, v21665; GFX900-NEXT: global_store_dwordx2 v7, v[4:5], s[16:17]1666; GFX900-NEXT: s_waitcnt vmcnt(0)1667; GFX900-NEXT: s_setpc_b64 s[30:31]1668;1669; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_2:1670; GFX90A: ; %bb.0:1671; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1672; GFX90A-NEXT: ;;#ASMSTART1673; GFX90A-NEXT: ; def v[0:3]1674; GFX90A-NEXT: ;;#ASMEND1675; GFX90A-NEXT: v_mov_b32_e32 v8, 01676; GFX90A-NEXT: ;;#ASMSTART1677; GFX90A-NEXT: ; def v[4:7]1678; GFX90A-NEXT: ;;#ASMEND1679; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0]1680; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17]1681; GFX90A-NEXT: s_waitcnt vmcnt(0)1682; GFX90A-NEXT: s_setpc_b64 s[30:31]1683;1684; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_2:1685; GFX942: ; %bb.0:1686; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1687; GFX942-NEXT: ;;#ASMSTART1688; GFX942-NEXT: ; def v[0:3]1689; GFX942-NEXT: ;;#ASMEND1690; GFX942-NEXT: v_mov_b32_e32 v8, 01691; GFX942-NEXT: ;;#ASMSTART1692; GFX942-NEXT: ; def v[4:7]1693; GFX942-NEXT: ;;#ASMEND1694; GFX942-NEXT: s_nop 01695; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0]1696; GFX942-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1]1697; GFX942-NEXT: s_waitcnt vmcnt(0)1698; GFX942-NEXT: s_setpc_b64 s[30:31]1699 %vec0 = call <4 x float> asm "; def $0", "=v"()1700 %vec1 = call <4 x float> asm "; def $0", "=v"()1701 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 2>1702 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81703 ret void1704}1705 1706define void @v_shuffle_v2f32_v4f32__6_2(ptr addrspace(1) inreg %ptr) {1707; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_2:1708; GFX900: ; %bb.0:1709; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1710; GFX900-NEXT: ;;#ASMSTART1711; GFX900-NEXT: ; def v[0:3]1712; GFX900-NEXT: ;;#ASMEND1713; GFX900-NEXT: ;;#ASMSTART1714; GFX900-NEXT: ; def v[3:6]1715; GFX900-NEXT: ;;#ASMEND1716; GFX900-NEXT: v_mov_b32_e32 v7, 01717; GFX900-NEXT: v_mov_b32_e32 v6, v21718; GFX900-NEXT: global_store_dwordx2 v7, v[5:6], s[16:17]1719; GFX900-NEXT: s_waitcnt vmcnt(0)1720; GFX900-NEXT: s_setpc_b64 s[30:31]1721;1722; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_2:1723; GFX90A: ; %bb.0:1724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1725; GFX90A-NEXT: ;;#ASMSTART1726; GFX90A-NEXT: ; def v[4:7]1727; GFX90A-NEXT: ;;#ASMEND1728; GFX90A-NEXT: v_mov_b32_e32 v8, 01729; GFX90A-NEXT: ;;#ASMSTART1730; GFX90A-NEXT: ; def v[0:3]1731; GFX90A-NEXT: ;;#ASMEND1732; GFX90A-NEXT: v_mov_b32_e32 v7, v21733; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17]1734; GFX90A-NEXT: s_waitcnt vmcnt(0)1735; GFX90A-NEXT: s_setpc_b64 s[30:31]1736;1737; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_2:1738; GFX942: ; %bb.0:1739; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1740; GFX942-NEXT: ;;#ASMSTART1741; GFX942-NEXT: ; def v[4:7]1742; GFX942-NEXT: ;;#ASMEND1743; GFX942-NEXT: v_mov_b32_e32 v8, 01744; GFX942-NEXT: ;;#ASMSTART1745; GFX942-NEXT: ; def v[0:3]1746; GFX942-NEXT: ;;#ASMEND1747; GFX942-NEXT: s_nop 01748; GFX942-NEXT: v_mov_b32_e32 v7, v21749; GFX942-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1]1750; GFX942-NEXT: s_waitcnt vmcnt(0)1751; GFX942-NEXT: s_setpc_b64 s[30:31]1752 %vec0 = call <4 x float> asm "; def $0", "=v"()1753 %vec1 = call <4 x float> asm "; def $0", "=v"()1754 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 2>1755 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81756 ret void1757}1758 1759define void @v_shuffle_v2f32_v4f32__u_3(ptr addrspace(1) inreg %ptr) {1760; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_3:1761; GFX900: ; %bb.0:1762; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1763; GFX900-NEXT: v_mov_b32_e32 v4, 01764; GFX900-NEXT: ;;#ASMSTART1765; GFX900-NEXT: ; def v[0:3]1766; GFX900-NEXT: ;;#ASMEND1767; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1768; GFX900-NEXT: s_waitcnt vmcnt(0)1769; GFX900-NEXT: s_setpc_b64 s[30:31]1770;1771; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_3:1772; GFX90A: ; %bb.0:1773; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1774; GFX90A-NEXT: v_mov_b32_e32 v4, 01775; GFX90A-NEXT: ;;#ASMSTART1776; GFX90A-NEXT: ; def v[0:3]1777; GFX90A-NEXT: ;;#ASMEND1778; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1779; GFX90A-NEXT: s_waitcnt vmcnt(0)1780; GFX90A-NEXT: s_setpc_b64 s[30:31]1781;1782; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_3:1783; GFX942: ; %bb.0:1784; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1785; GFX942-NEXT: v_mov_b32_e32 v4, 01786; GFX942-NEXT: ;;#ASMSTART1787; GFX942-NEXT: ; def v[0:3]1788; GFX942-NEXT: ;;#ASMEND1789; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1790; GFX942-NEXT: s_waitcnt vmcnt(0)1791; GFX942-NEXT: s_setpc_b64 s[30:31]1792 %vec0 = call <4 x float> asm "; def $0", "=v"()1793 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 3>1794 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81795 ret void1796}1797 1798define void @v_shuffle_v2f32_v4f32__0_3(ptr addrspace(1) inreg %ptr) {1799; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_3:1800; GFX900: ; %bb.0:1801; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1802; GFX900-NEXT: ;;#ASMSTART1803; GFX900-NEXT: ; def v[0:3]1804; GFX900-NEXT: ;;#ASMEND1805; GFX900-NEXT: v_mov_b32_e32 v4, 01806; GFX900-NEXT: v_mov_b32_e32 v1, v31807; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1808; GFX900-NEXT: s_waitcnt vmcnt(0)1809; GFX900-NEXT: s_setpc_b64 s[30:31]1810;1811; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_3:1812; GFX90A: ; %bb.0:1813; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1814; GFX90A-NEXT: ;;#ASMSTART1815; GFX90A-NEXT: ; def v[0:3]1816; GFX90A-NEXT: ;;#ASMEND1817; GFX90A-NEXT: v_mov_b32_e32 v4, 01818; GFX90A-NEXT: v_mov_b32_e32 v1, v31819; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1820; GFX90A-NEXT: s_waitcnt vmcnt(0)1821; GFX90A-NEXT: s_setpc_b64 s[30:31]1822;1823; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_3:1824; GFX942: ; %bb.0:1825; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1826; GFX942-NEXT: ;;#ASMSTART1827; GFX942-NEXT: ; def v[0:3]1828; GFX942-NEXT: ;;#ASMEND1829; GFX942-NEXT: v_mov_b32_e32 v4, 01830; GFX942-NEXT: v_mov_b32_e32 v1, v31831; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1832; GFX942-NEXT: s_waitcnt vmcnt(0)1833; GFX942-NEXT: s_setpc_b64 s[30:31]1834 %vec0 = call <4 x float> asm "; def $0", "=v"()1835 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 3>1836 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81837 ret void1838}1839 1840define void @v_shuffle_v2f32_v4f32__1_3(ptr addrspace(1) inreg %ptr) {1841; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_3:1842; GFX900: ; %bb.0:1843; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1844; GFX900-NEXT: ;;#ASMSTART1845; GFX900-NEXT: ; def v[0:3]1846; GFX900-NEXT: ;;#ASMEND1847; GFX900-NEXT: v_mov_b32_e32 v4, 01848; GFX900-NEXT: v_mov_b32_e32 v2, v31849; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1850; GFX900-NEXT: s_waitcnt vmcnt(0)1851; GFX900-NEXT: s_setpc_b64 s[30:31]1852;1853; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_3:1854; GFX90A: ; %bb.0:1855; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1856; GFX90A-NEXT: ;;#ASMSTART1857; GFX90A-NEXT: ; def v[0:3]1858; GFX90A-NEXT: ;;#ASMEND1859; GFX90A-NEXT: v_mov_b32_e32 v4, 01860; GFX90A-NEXT: v_mov_b32_e32 v2, v11861; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1862; GFX90A-NEXT: s_waitcnt vmcnt(0)1863; GFX90A-NEXT: s_setpc_b64 s[30:31]1864;1865; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_3:1866; GFX942: ; %bb.0:1867; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1868; GFX942-NEXT: ;;#ASMSTART1869; GFX942-NEXT: ; def v[0:3]1870; GFX942-NEXT: ;;#ASMEND1871; GFX942-NEXT: v_mov_b32_e32 v4, 01872; GFX942-NEXT: v_mov_b32_e32 v2, v11873; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1874; GFX942-NEXT: s_waitcnt vmcnt(0)1875; GFX942-NEXT: s_setpc_b64 s[30:31]1876 %vec0 = call <4 x float> asm "; def $0", "=v"()1877 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 3>1878 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81879 ret void1880}1881 1882define void @v_shuffle_v2f32_v4f32__2_3(ptr addrspace(1) inreg %ptr) {1883; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_3:1884; GFX900: ; %bb.0:1885; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1886; GFX900-NEXT: v_mov_b32_e32 v4, 01887; GFX900-NEXT: ;;#ASMSTART1888; GFX900-NEXT: ; def v[0:3]1889; GFX900-NEXT: ;;#ASMEND1890; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1891; GFX900-NEXT: s_waitcnt vmcnt(0)1892; GFX900-NEXT: s_setpc_b64 s[30:31]1893;1894; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_3:1895; GFX90A: ; %bb.0:1896; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1897; GFX90A-NEXT: v_mov_b32_e32 v4, 01898; GFX90A-NEXT: ;;#ASMSTART1899; GFX90A-NEXT: ; def v[0:3]1900; GFX90A-NEXT: ;;#ASMEND1901; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1902; GFX90A-NEXT: s_waitcnt vmcnt(0)1903; GFX90A-NEXT: s_setpc_b64 s[30:31]1904;1905; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_3:1906; GFX942: ; %bb.0:1907; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1908; GFX942-NEXT: v_mov_b32_e32 v4, 01909; GFX942-NEXT: ;;#ASMSTART1910; GFX942-NEXT: ; def v[0:3]1911; GFX942-NEXT: ;;#ASMEND1912; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1913; GFX942-NEXT: s_waitcnt vmcnt(0)1914; GFX942-NEXT: s_setpc_b64 s[30:31]1915 %vec0 = call <4 x float> asm "; def $0", "=v"()1916 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 3>1917 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81918 ret void1919}1920 1921define void @v_shuffle_v2f32_v4f32__3_3(ptr addrspace(1) inreg %ptr) {1922; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_3:1923; GFX900: ; %bb.0:1924; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1925; GFX900-NEXT: v_mov_b32_e32 v5, 01926; GFX900-NEXT: ;;#ASMSTART1927; GFX900-NEXT: ; def v[0:3]1928; GFX900-NEXT: ;;#ASMEND1929; GFX900-NEXT: v_mov_b32_e32 v4, v31930; GFX900-NEXT: global_store_dwordx2 v5, v[3:4], s[16:17]1931; GFX900-NEXT: s_waitcnt vmcnt(0)1932; GFX900-NEXT: s_setpc_b64 s[30:31]1933;1934; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_3:1935; GFX90A: ; %bb.0:1936; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1937; GFX90A-NEXT: ;;#ASMSTART1938; GFX90A-NEXT: ; def v[0:3]1939; GFX90A-NEXT: ;;#ASMEND1940; GFX90A-NEXT: v_mov_b32_e32 v4, 01941; GFX90A-NEXT: v_mov_b32_e32 v2, v31942; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1943; GFX90A-NEXT: s_waitcnt vmcnt(0)1944; GFX90A-NEXT: s_setpc_b64 s[30:31]1945;1946; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_3:1947; GFX942: ; %bb.0:1948; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1949; GFX942-NEXT: ;;#ASMSTART1950; GFX942-NEXT: ; def v[0:3]1951; GFX942-NEXT: ;;#ASMEND1952; GFX942-NEXT: v_mov_b32_e32 v4, 01953; GFX942-NEXT: v_mov_b32_e32 v2, v31954; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1955; GFX942-NEXT: s_waitcnt vmcnt(0)1956; GFX942-NEXT: s_setpc_b64 s[30:31]1957 %vec0 = call <4 x float> asm "; def $0", "=v"()1958 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 3>1959 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81960 ret void1961}1962 1963define void @v_shuffle_v2f32_v4f32__4_3(ptr addrspace(1) inreg %ptr) {1964; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_3:1965; GFX900: ; %bb.0:1966; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1967; GFX900-NEXT: v_mov_b32_e32 v4, 01968; GFX900-NEXT: ;;#ASMSTART1969; GFX900-NEXT: ; def v[0:3]1970; GFX900-NEXT: ;;#ASMEND1971; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1972; GFX900-NEXT: s_waitcnt vmcnt(0)1973; GFX900-NEXT: s_setpc_b64 s[30:31]1974;1975; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_3:1976; GFX90A: ; %bb.0:1977; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1978; GFX90A-NEXT: v_mov_b32_e32 v4, 01979; GFX90A-NEXT: ;;#ASMSTART1980; GFX90A-NEXT: ; def v[0:3]1981; GFX90A-NEXT: ;;#ASMEND1982; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1983; GFX90A-NEXT: s_waitcnt vmcnt(0)1984; GFX90A-NEXT: s_setpc_b64 s[30:31]1985;1986; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_3:1987; GFX942: ; %bb.0:1988; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1989; GFX942-NEXT: v_mov_b32_e32 v4, 01990; GFX942-NEXT: ;;#ASMSTART1991; GFX942-NEXT: ; def v[0:3]1992; GFX942-NEXT: ;;#ASMEND1993; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1994; GFX942-NEXT: s_waitcnt vmcnt(0)1995; GFX942-NEXT: s_setpc_b64 s[30:31]1996 %vec0 = call <4 x float> asm "; def $0", "=v"()1997 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 3>1998 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 81999 ret void2000}2001 2002define void @v_shuffle_v2f32_v4f32__5_3(ptr addrspace(1) inreg %ptr) {2003; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_3:2004; GFX900: ; %bb.0:2005; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2006; GFX900-NEXT: ;;#ASMSTART2007; GFX900-NEXT: ; def v[4:7]2008; GFX900-NEXT: ;;#ASMEND2009; GFX900-NEXT: v_mov_b32_e32 v8, 02010; GFX900-NEXT: ;;#ASMSTART2011; GFX900-NEXT: ; def v[0:3]2012; GFX900-NEXT: ;;#ASMEND2013; GFX900-NEXT: v_mov_b32_e32 v6, v32014; GFX900-NEXT: global_store_dwordx2 v8, v[5:6], s[16:17]2015; GFX900-NEXT: s_waitcnt vmcnt(0)2016; GFX900-NEXT: s_setpc_b64 s[30:31]2017;2018; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_3:2019; GFX90A: ; %bb.0:2020; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2021; GFX90A-NEXT: ;;#ASMSTART2022; GFX90A-NEXT: ; def v[0:3]2023; GFX90A-NEXT: ;;#ASMEND2024; GFX90A-NEXT: v_mov_b32_e32 v8, 02025; GFX90A-NEXT: ;;#ASMSTART2026; GFX90A-NEXT: ; def v[4:7]2027; GFX90A-NEXT: ;;#ASMEND2028; GFX90A-NEXT: v_mov_b32_e32 v2, v52029; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17]2030; GFX90A-NEXT: s_waitcnt vmcnt(0)2031; GFX90A-NEXT: s_setpc_b64 s[30:31]2032;2033; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_3:2034; GFX942: ; %bb.0:2035; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2036; GFX942-NEXT: ;;#ASMSTART2037; GFX942-NEXT: ; def v[0:3]2038; GFX942-NEXT: ;;#ASMEND2039; GFX942-NEXT: v_mov_b32_e32 v8, 02040; GFX942-NEXT: ;;#ASMSTART2041; GFX942-NEXT: ; def v[4:7]2042; GFX942-NEXT: ;;#ASMEND2043; GFX942-NEXT: s_nop 02044; GFX942-NEXT: v_mov_b32_e32 v2, v52045; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1]2046; GFX942-NEXT: s_waitcnt vmcnt(0)2047; GFX942-NEXT: s_setpc_b64 s[30:31]2048 %vec0 = call <4 x float> asm "; def $0", "=v"()2049 %vec1 = call <4 x float> asm "; def $0", "=v"()2050 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 3>2051 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82052 ret void2053}2054 2055define void @v_shuffle_v2f32_v4f32__6_3(ptr addrspace(1) inreg %ptr) {2056; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_3:2057; GFX900: ; %bb.0:2058; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2059; GFX900-NEXT: ;;#ASMSTART2060; GFX900-NEXT: ; def v[4:7]2061; GFX900-NEXT: ;;#ASMEND2062; GFX900-NEXT: v_mov_b32_e32 v8, 02063; GFX900-NEXT: ;;#ASMSTART2064; GFX900-NEXT: ; def v[0:3]2065; GFX900-NEXT: ;;#ASMEND2066; GFX900-NEXT: v_mov_b32_e32 v7, v32067; GFX900-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17]2068; GFX900-NEXT: s_waitcnt vmcnt(0)2069; GFX900-NEXT: s_setpc_b64 s[30:31]2070;2071; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_3:2072; GFX90A: ; %bb.0:2073; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2074; GFX90A-NEXT: ;;#ASMSTART2075; GFX90A-NEXT: ; def v[4:7]2076; GFX90A-NEXT: ;;#ASMEND2077; GFX90A-NEXT: v_mov_b32_e32 v8, 02078; GFX90A-NEXT: ;;#ASMSTART2079; GFX90A-NEXT: ; def v[0:3]2080; GFX90A-NEXT: ;;#ASMEND2081; GFX90A-NEXT: v_mov_b32_e32 v7, v32082; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17]2083; GFX90A-NEXT: s_waitcnt vmcnt(0)2084; GFX90A-NEXT: s_setpc_b64 s[30:31]2085;2086; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_3:2087; GFX942: ; %bb.0:2088; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2089; GFX942-NEXT: ;;#ASMSTART2090; GFX942-NEXT: ; def v[4:7]2091; GFX942-NEXT: ;;#ASMEND2092; GFX942-NEXT: v_mov_b32_e32 v8, 02093; GFX942-NEXT: ;;#ASMSTART2094; GFX942-NEXT: ; def v[0:3]2095; GFX942-NEXT: ;;#ASMEND2096; GFX942-NEXT: s_nop 02097; GFX942-NEXT: v_mov_b32_e32 v7, v32098; GFX942-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1]2099; GFX942-NEXT: s_waitcnt vmcnt(0)2100; GFX942-NEXT: s_setpc_b64 s[30:31]2101 %vec0 = call <4 x float> asm "; def $0", "=v"()2102 %vec1 = call <4 x float> asm "; def $0", "=v"()2103 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 3>2104 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82105 ret void2106}2107 2108define void @v_shuffle_v2f32_v4f32__u_4(ptr addrspace(1) inreg %ptr) {2109; GFX9-LABEL: v_shuffle_v2f32_v4f32__u_4:2110; GFX9: ; %bb.0:2111; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2112; GFX9-NEXT: s_setpc_b64 s[30:31]2113 %vec0 = call <4 x float> asm "; def $0", "=v"()2114 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 4>2115 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82116 ret void2117}2118 2119define void @v_shuffle_v2f32_v4f32__0_4(ptr addrspace(1) inreg %ptr) {2120; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_4:2121; GFX900: ; %bb.0:2122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; GFX900-NEXT: v_mov_b32_e32 v4, 02124; GFX900-NEXT: ;;#ASMSTART2125; GFX900-NEXT: ; def v[0:3]2126; GFX900-NEXT: ;;#ASMEND2127; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2128; GFX900-NEXT: s_waitcnt vmcnt(0)2129; GFX900-NEXT: s_setpc_b64 s[30:31]2130;2131; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_4:2132; GFX90A: ; %bb.0:2133; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2134; GFX90A-NEXT: v_mov_b32_e32 v4, 02135; GFX90A-NEXT: ;;#ASMSTART2136; GFX90A-NEXT: ; def v[0:3]2137; GFX90A-NEXT: ;;#ASMEND2138; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2139; GFX90A-NEXT: s_waitcnt vmcnt(0)2140; GFX90A-NEXT: s_setpc_b64 s[30:31]2141;2142; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_4:2143; GFX942: ; %bb.0:2144; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2145; GFX942-NEXT: v_mov_b32_e32 v4, 02146; GFX942-NEXT: ;;#ASMSTART2147; GFX942-NEXT: ; def v[0:3]2148; GFX942-NEXT: ;;#ASMEND2149; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2150; GFX942-NEXT: s_waitcnt vmcnt(0)2151; GFX942-NEXT: s_setpc_b64 s[30:31]2152 %vec0 = call <4 x float> asm "; def $0", "=v"()2153 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 4>2154 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82155 ret void2156}2157 2158define void @v_shuffle_v2f32_v4f32__1_4(ptr addrspace(1) inreg %ptr) {2159; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_4:2160; GFX900: ; %bb.0:2161; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2162; GFX900-NEXT: v_mov_b32_e32 v4, 02163; GFX900-NEXT: ;;#ASMSTART2164; GFX900-NEXT: ; def v[0:3]2165; GFX900-NEXT: ;;#ASMEND2166; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2167; GFX900-NEXT: s_waitcnt vmcnt(0)2168; GFX900-NEXT: s_setpc_b64 s[30:31]2169;2170; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_4:2171; GFX90A: ; %bb.0:2172; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2173; GFX90A-NEXT: ;;#ASMSTART2174; GFX90A-NEXT: ; def v[0:3]2175; GFX90A-NEXT: ;;#ASMEND2176; GFX90A-NEXT: v_mov_b32_e32 v4, 02177; GFX90A-NEXT: v_mov_b32_e32 v0, v12178; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2179; GFX90A-NEXT: s_waitcnt vmcnt(0)2180; GFX90A-NEXT: s_setpc_b64 s[30:31]2181;2182; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_4:2183; GFX942: ; %bb.0:2184; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2185; GFX942-NEXT: ;;#ASMSTART2186; GFX942-NEXT: ; def v[0:3]2187; GFX942-NEXT: ;;#ASMEND2188; GFX942-NEXT: v_mov_b32_e32 v4, 02189; GFX942-NEXT: v_mov_b32_e32 v0, v12190; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2191; GFX942-NEXT: s_waitcnt vmcnt(0)2192; GFX942-NEXT: s_setpc_b64 s[30:31]2193 %vec0 = call <4 x float> asm "; def $0", "=v"()2194 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 4>2195 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82196 ret void2197}2198 2199define void @v_shuffle_v2f32_v4f32__2_4(ptr addrspace(1) inreg %ptr) {2200; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_4:2201; GFX900: ; %bb.0:2202; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2203; GFX900-NEXT: v_mov_b32_e32 v4, 02204; GFX900-NEXT: ;;#ASMSTART2205; GFX900-NEXT: ; def v[0:3]2206; GFX900-NEXT: ;;#ASMEND2207; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2208; GFX900-NEXT: s_waitcnt vmcnt(0)2209; GFX900-NEXT: s_setpc_b64 s[30:31]2210;2211; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_4:2212; GFX90A: ; %bb.0:2213; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2214; GFX90A-NEXT: v_mov_b32_e32 v4, 02215; GFX90A-NEXT: ;;#ASMSTART2216; GFX90A-NEXT: ; def v[0:3]2217; GFX90A-NEXT: ;;#ASMEND2218; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2219; GFX90A-NEXT: s_waitcnt vmcnt(0)2220; GFX90A-NEXT: s_setpc_b64 s[30:31]2221;2222; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_4:2223; GFX942: ; %bb.0:2224; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2225; GFX942-NEXT: v_mov_b32_e32 v4, 02226; GFX942-NEXT: ;;#ASMSTART2227; GFX942-NEXT: ; def v[0:3]2228; GFX942-NEXT: ;;#ASMEND2229; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2230; GFX942-NEXT: s_waitcnt vmcnt(0)2231; GFX942-NEXT: s_setpc_b64 s[30:31]2232 %vec0 = call <4 x float> asm "; def $0", "=v"()2233 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 4>2234 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82235 ret void2236}2237 2238define void @v_shuffle_v2f32_v4f32__3_4(ptr addrspace(1) inreg %ptr) {2239; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_4:2240; GFX900: ; %bb.0:2241; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2242; GFX900-NEXT: v_mov_b32_e32 v4, 02243; GFX900-NEXT: ;;#ASMSTART2244; GFX900-NEXT: ; def v[0:3]2245; GFX900-NEXT: ;;#ASMEND2246; GFX900-NEXT: global_store_dwordx2 v4, v[3:4], s[16:17]2247; GFX900-NEXT: s_waitcnt vmcnt(0)2248; GFX900-NEXT: s_setpc_b64 s[30:31]2249;2250; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_4:2251; GFX90A: ; %bb.0:2252; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2253; GFX90A-NEXT: ;;#ASMSTART2254; GFX90A-NEXT: ; def v[0:3]2255; GFX90A-NEXT: ;;#ASMEND2256; GFX90A-NEXT: v_mov_b32_e32 v4, 02257; GFX90A-NEXT: v_mov_b32_e32 v0, v32258; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2259; GFX90A-NEXT: s_waitcnt vmcnt(0)2260; GFX90A-NEXT: s_setpc_b64 s[30:31]2261;2262; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_4:2263; GFX942: ; %bb.0:2264; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2265; GFX942-NEXT: ;;#ASMSTART2266; GFX942-NEXT: ; def v[0:3]2267; GFX942-NEXT: ;;#ASMEND2268; GFX942-NEXT: v_mov_b32_e32 v4, 02269; GFX942-NEXT: v_mov_b32_e32 v0, v32270; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2271; GFX942-NEXT: s_waitcnt vmcnt(0)2272; GFX942-NEXT: s_setpc_b64 s[30:31]2273 %vec0 = call <4 x float> asm "; def $0", "=v"()2274 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 4>2275 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82276 ret void2277}2278 2279define void @v_shuffle_v2f32_v4f32__4_4(ptr addrspace(1) inreg %ptr) {2280; GFX9-LABEL: v_shuffle_v2f32_v4f32__4_4:2281; GFX9: ; %bb.0:2282; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2283; GFX9-NEXT: s_setpc_b64 s[30:31]2284 %vec0 = call <4 x float> asm "; def $0", "=v"()2285 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 4>2286 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82287 ret void2288}2289 2290define void @v_shuffle_v2f32_v4f32__5_4(ptr addrspace(1) inreg %ptr) {2291; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_4:2292; GFX900: ; %bb.0:2293; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2294; GFX900-NEXT: ;;#ASMSTART2295; GFX900-NEXT: ; def v[0:3]2296; GFX900-NEXT: ;;#ASMEND2297; GFX900-NEXT: v_mov_b32_e32 v4, 02298; GFX900-NEXT: v_mov_b32_e32 v2, v02299; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2300; GFX900-NEXT: s_waitcnt vmcnt(0)2301; GFX900-NEXT: s_setpc_b64 s[30:31]2302;2303; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_4:2304; GFX90A: ; %bb.0:2305; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2306; GFX90A-NEXT: ;;#ASMSTART2307; GFX90A-NEXT: ; def v[0:3]2308; GFX90A-NEXT: ;;#ASMEND2309; GFX90A-NEXT: v_mov_b32_e32 v4, 02310; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]2311; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2312; GFX90A-NEXT: s_waitcnt vmcnt(0)2313; GFX90A-NEXT: s_setpc_b64 s[30:31]2314;2315; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_4:2316; GFX942: ; %bb.0:2317; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2318; GFX942-NEXT: ;;#ASMSTART2319; GFX942-NEXT: ; def v[0:3]2320; GFX942-NEXT: ;;#ASMEND2321; GFX942-NEXT: v_mov_b32_e32 v4, 02322; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]2323; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2324; GFX942-NEXT: s_waitcnt vmcnt(0)2325; GFX942-NEXT: s_setpc_b64 s[30:31]2326 %vec0 = call <4 x float> asm "; def $0", "=v"()2327 %vec1 = call <4 x float> asm "; def $0", "=v"()2328 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 4>2329 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82330 ret void2331}2332 2333define void @v_shuffle_v2f32_v4f32__6_4(ptr addrspace(1) inreg %ptr) {2334; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_4:2335; GFX900: ; %bb.0:2336; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2337; GFX900-NEXT: ;;#ASMSTART2338; GFX900-NEXT: ; def v[0:3]2339; GFX900-NEXT: ;;#ASMEND2340; GFX900-NEXT: v_mov_b32_e32 v4, 02341; GFX900-NEXT: v_mov_b32_e32 v3, v02342; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2343; GFX900-NEXT: s_waitcnt vmcnt(0)2344; GFX900-NEXT: s_setpc_b64 s[30:31]2345;2346; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_4:2347; GFX90A: ; %bb.0:2348; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX90A-NEXT: ;;#ASMSTART2350; GFX90A-NEXT: ; def v[0:3]2351; GFX90A-NEXT: ;;#ASMEND2352; GFX90A-NEXT: v_mov_b32_e32 v4, 02353; GFX90A-NEXT: v_mov_b32_e32 v3, v02354; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2355; GFX90A-NEXT: s_waitcnt vmcnt(0)2356; GFX90A-NEXT: s_setpc_b64 s[30:31]2357;2358; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_4:2359; GFX942: ; %bb.0:2360; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX942-NEXT: ;;#ASMSTART2362; GFX942-NEXT: ; def v[0:3]2363; GFX942-NEXT: ;;#ASMEND2364; GFX942-NEXT: v_mov_b32_e32 v4, 02365; GFX942-NEXT: v_mov_b32_e32 v3, v02366; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2367; GFX942-NEXT: s_waitcnt vmcnt(0)2368; GFX942-NEXT: s_setpc_b64 s[30:31]2369 %vec0 = call <4 x float> asm "; def $0", "=v"()2370 %vec1 = call <4 x float> asm "; def $0", "=v"()2371 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 4>2372 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82373 ret void2374}2375 2376define void @v_shuffle_v2f32_v4f32__u_5(ptr addrspace(1) inreg %ptr) {2377; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_5:2378; GFX900: ; %bb.0:2379; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2380; GFX900-NEXT: v_mov_b32_e32 v4, 02381; GFX900-NEXT: ;;#ASMSTART2382; GFX900-NEXT: ; def v[0:3]2383; GFX900-NEXT: ;;#ASMEND2384; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2385; GFX900-NEXT: s_waitcnt vmcnt(0)2386; GFX900-NEXT: s_setpc_b64 s[30:31]2387;2388; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_5:2389; GFX90A: ; %bb.0:2390; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2391; GFX90A-NEXT: v_mov_b32_e32 v4, 02392; GFX90A-NEXT: ;;#ASMSTART2393; GFX90A-NEXT: ; def v[0:3]2394; GFX90A-NEXT: ;;#ASMEND2395; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2396; GFX90A-NEXT: s_waitcnt vmcnt(0)2397; GFX90A-NEXT: s_setpc_b64 s[30:31]2398;2399; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_5:2400; GFX942: ; %bb.0:2401; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2402; GFX942-NEXT: v_mov_b32_e32 v4, 02403; GFX942-NEXT: ;;#ASMSTART2404; GFX942-NEXT: ; def v[0:3]2405; GFX942-NEXT: ;;#ASMEND2406; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2407; GFX942-NEXT: s_waitcnt vmcnt(0)2408; GFX942-NEXT: s_setpc_b64 s[30:31]2409 %vec0 = call <4 x float> asm "; def $0", "=v"()2410 %vec1 = call <4 x float> asm "; def $0", "=v"()2411 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 5>2412 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82413 ret void2414}2415 2416define void @v_shuffle_v2f32_v4f32__0_5(ptr addrspace(1) inreg %ptr) {2417; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_5:2418; GFX900: ; %bb.0:2419; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2420; GFX900-NEXT: ;;#ASMSTART2421; GFX900-NEXT: ; def v[0:3]2422; GFX900-NEXT: ;;#ASMEND2423; GFX900-NEXT: ;;#ASMSTART2424; GFX900-NEXT: ; def v[1:4]2425; GFX900-NEXT: ;;#ASMEND2426; GFX900-NEXT: v_mov_b32_e32 v5, 02427; GFX900-NEXT: v_mov_b32_e32 v1, v22428; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17]2429; GFX900-NEXT: s_waitcnt vmcnt(0)2430; GFX900-NEXT: s_setpc_b64 s[30:31]2431;2432; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_5:2433; GFX90A: ; %bb.0:2434; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2435; GFX90A-NEXT: ;;#ASMSTART2436; GFX90A-NEXT: ; def v[0:3]2437; GFX90A-NEXT: ;;#ASMEND2438; GFX90A-NEXT: v_mov_b32_e32 v6, 02439; GFX90A-NEXT: ;;#ASMSTART2440; GFX90A-NEXT: ; def v[2:5]2441; GFX90A-NEXT: ;;#ASMEND2442; GFX90A-NEXT: v_mov_b32_e32 v1, v32443; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]2444; GFX90A-NEXT: s_waitcnt vmcnt(0)2445; GFX90A-NEXT: s_setpc_b64 s[30:31]2446;2447; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_5:2448; GFX942: ; %bb.0:2449; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2450; GFX942-NEXT: ;;#ASMSTART2451; GFX942-NEXT: ; def v[0:3]2452; GFX942-NEXT: ;;#ASMEND2453; GFX942-NEXT: v_mov_b32_e32 v6, 02454; GFX942-NEXT: ;;#ASMSTART2455; GFX942-NEXT: ; def v[2:5]2456; GFX942-NEXT: ;;#ASMEND2457; GFX942-NEXT: s_nop 02458; GFX942-NEXT: v_mov_b32_e32 v1, v32459; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]2460; GFX942-NEXT: s_waitcnt vmcnt(0)2461; GFX942-NEXT: s_setpc_b64 s[30:31]2462 %vec0 = call <4 x float> asm "; def $0", "=v"()2463 %vec1 = call <4 x float> asm "; def $0", "=v"()2464 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 5>2465 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82466 ret void2467}2468 2469define void @v_shuffle_v2f32_v4f32__1_5(ptr addrspace(1) inreg %ptr) {2470; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_5:2471; GFX900: ; %bb.0:2472; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2473; GFX900-NEXT: ;;#ASMSTART2474; GFX900-NEXT: ; def v[0:3]2475; GFX900-NEXT: ;;#ASMEND2476; GFX900-NEXT: ;;#ASMSTART2477; GFX900-NEXT: ; def v[2:5]2478; GFX900-NEXT: ;;#ASMEND2479; GFX900-NEXT: v_mov_b32_e32 v6, 02480; GFX900-NEXT: v_mov_b32_e32 v2, v32481; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17]2482; GFX900-NEXT: s_waitcnt vmcnt(0)2483; GFX900-NEXT: s_setpc_b64 s[30:31]2484;2485; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_5:2486; GFX90A: ; %bb.0:2487; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2488; GFX90A-NEXT: ;;#ASMSTART2489; GFX90A-NEXT: ; def v[0:3]2490; GFX90A-NEXT: ;;#ASMEND2491; GFX90A-NEXT: ;;#ASMSTART2492; GFX90A-NEXT: ; def v[2:5]2493; GFX90A-NEXT: ;;#ASMEND2494; GFX90A-NEXT: v_mov_b32_e32 v6, 02495; GFX90A-NEXT: v_mov_b32_e32 v2, v12496; GFX90A-NEXT: global_store_dwordx2 v6, v[2:3], s[16:17]2497; GFX90A-NEXT: s_waitcnt vmcnt(0)2498; GFX90A-NEXT: s_setpc_b64 s[30:31]2499;2500; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_5:2501; GFX942: ; %bb.0:2502; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2503; GFX942-NEXT: ;;#ASMSTART2504; GFX942-NEXT: ; def v[0:3]2505; GFX942-NEXT: ;;#ASMEND2506; GFX942-NEXT: v_mov_b32_e32 v6, 02507; GFX942-NEXT: ;;#ASMSTART2508; GFX942-NEXT: ; def v[2:5]2509; GFX942-NEXT: ;;#ASMEND2510; GFX942-NEXT: s_nop 02511; GFX942-NEXT: v_mov_b32_e32 v2, v12512; GFX942-NEXT: global_store_dwordx2 v6, v[2:3], s[0:1]2513; GFX942-NEXT: s_waitcnt vmcnt(0)2514; GFX942-NEXT: s_setpc_b64 s[30:31]2515 %vec0 = call <4 x float> asm "; def $0", "=v"()2516 %vec1 = call <4 x float> asm "; def $0", "=v"()2517 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 5>2518 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82519 ret void2520}2521 2522define void @v_shuffle_v2f32_v4f32__2_5(ptr addrspace(1) inreg %ptr) {2523; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_5:2524; GFX900: ; %bb.0:2525; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2526; GFX900-NEXT: ;;#ASMSTART2527; GFX900-NEXT: ; def v[0:3]2528; GFX900-NEXT: ;;#ASMEND2529; GFX900-NEXT: ;;#ASMSTART2530; GFX900-NEXT: ; def v[3:6]2531; GFX900-NEXT: ;;#ASMEND2532; GFX900-NEXT: v_mov_b32_e32 v7, 02533; GFX900-NEXT: v_mov_b32_e32 v3, v42534; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17]2535; GFX900-NEXT: s_waitcnt vmcnt(0)2536; GFX900-NEXT: s_setpc_b64 s[30:31]2537;2538; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_5:2539; GFX90A: ; %bb.0:2540; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2541; GFX90A-NEXT: ;;#ASMSTART2542; GFX90A-NEXT: ; def v[0:3]2543; GFX90A-NEXT: ;;#ASMEND2544; GFX90A-NEXT: v_mov_b32_e32 v8, 02545; GFX90A-NEXT: ;;#ASMSTART2546; GFX90A-NEXT: ; def v[4:7]2547; GFX90A-NEXT: ;;#ASMEND2548; GFX90A-NEXT: v_mov_b32_e32 v3, v52549; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17]2550; GFX90A-NEXT: s_waitcnt vmcnt(0)2551; GFX90A-NEXT: s_setpc_b64 s[30:31]2552;2553; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_5:2554; GFX942: ; %bb.0:2555; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2556; GFX942-NEXT: ;;#ASMSTART2557; GFX942-NEXT: ; def v[0:3]2558; GFX942-NEXT: ;;#ASMEND2559; GFX942-NEXT: v_mov_b32_e32 v8, 02560; GFX942-NEXT: ;;#ASMSTART2561; GFX942-NEXT: ; def v[4:7]2562; GFX942-NEXT: ;;#ASMEND2563; GFX942-NEXT: s_nop 02564; GFX942-NEXT: v_mov_b32_e32 v3, v52565; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1]2566; GFX942-NEXT: s_waitcnt vmcnt(0)2567; GFX942-NEXT: s_setpc_b64 s[30:31]2568 %vec0 = call <4 x float> asm "; def $0", "=v"()2569 %vec1 = call <4 x float> asm "; def $0", "=v"()2570 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 5>2571 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82572 ret void2573}2574 2575define void @v_shuffle_v2f32_v4f32__3_5(ptr addrspace(1) inreg %ptr) {2576; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_5:2577; GFX900: ; %bb.0:2578; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2579; GFX900-NEXT: ;;#ASMSTART2580; GFX900-NEXT: ; def v[4:7]2581; GFX900-NEXT: ;;#ASMEND2582; GFX900-NEXT: v_mov_b32_e32 v8, 02583; GFX900-NEXT: v_mov_b32_e32 v4, v52584; GFX900-NEXT: ;;#ASMSTART2585; GFX900-NEXT: ; def v[0:3]2586; GFX900-NEXT: ;;#ASMEND2587; GFX900-NEXT: global_store_dwordx2 v8, v[3:4], s[16:17]2588; GFX900-NEXT: s_waitcnt vmcnt(0)2589; GFX900-NEXT: s_setpc_b64 s[30:31]2590;2591; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_5:2592; GFX90A: ; %bb.0:2593; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2594; GFX90A-NEXT: ;;#ASMSTART2595; GFX90A-NEXT: ; def v[4:7]2596; GFX90A-NEXT: ;;#ASMEND2597; GFX90A-NEXT: v_mov_b32_e32 v8, 02598; GFX90A-NEXT: ;;#ASMSTART2599; GFX90A-NEXT: ; def v[0:3]2600; GFX90A-NEXT: ;;#ASMEND2601; GFX90A-NEXT: v_mov_b32_e32 v4, v32602; GFX90A-NEXT: global_store_dwordx2 v8, v[4:5], s[16:17]2603; GFX90A-NEXT: s_waitcnt vmcnt(0)2604; GFX90A-NEXT: s_setpc_b64 s[30:31]2605;2606; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_5:2607; GFX942: ; %bb.0:2608; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2609; GFX942-NEXT: ;;#ASMSTART2610; GFX942-NEXT: ; def v[4:7]2611; GFX942-NEXT: ;;#ASMEND2612; GFX942-NEXT: v_mov_b32_e32 v8, 02613; GFX942-NEXT: ;;#ASMSTART2614; GFX942-NEXT: ; def v[0:3]2615; GFX942-NEXT: ;;#ASMEND2616; GFX942-NEXT: s_nop 02617; GFX942-NEXT: v_mov_b32_e32 v4, v32618; GFX942-NEXT: global_store_dwordx2 v8, v[4:5], s[0:1]2619; GFX942-NEXT: s_waitcnt vmcnt(0)2620; GFX942-NEXT: s_setpc_b64 s[30:31]2621 %vec0 = call <4 x float> asm "; def $0", "=v"()2622 %vec1 = call <4 x float> asm "; def $0", "=v"()2623 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 5>2624 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82625 ret void2626}2627 2628define void @v_shuffle_v2f32_v4f32__4_5(ptr addrspace(1) inreg %ptr) {2629; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_5:2630; GFX900: ; %bb.0:2631; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2632; GFX900-NEXT: v_mov_b32_e32 v4, 02633; GFX900-NEXT: ;;#ASMSTART2634; GFX900-NEXT: ; def v[0:3]2635; GFX900-NEXT: ;;#ASMEND2636; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2637; GFX900-NEXT: s_waitcnt vmcnt(0)2638; GFX900-NEXT: s_setpc_b64 s[30:31]2639;2640; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_5:2641; GFX90A: ; %bb.0:2642; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2643; GFX90A-NEXT: v_mov_b32_e32 v4, 02644; GFX90A-NEXT: ;;#ASMSTART2645; GFX90A-NEXT: ; def v[0:3]2646; GFX90A-NEXT: ;;#ASMEND2647; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2648; GFX90A-NEXT: s_waitcnt vmcnt(0)2649; GFX90A-NEXT: s_setpc_b64 s[30:31]2650;2651; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_5:2652; GFX942: ; %bb.0:2653; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2654; GFX942-NEXT: v_mov_b32_e32 v4, 02655; GFX942-NEXT: ;;#ASMSTART2656; GFX942-NEXT: ; def v[0:3]2657; GFX942-NEXT: ;;#ASMEND2658; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2659; GFX942-NEXT: s_waitcnt vmcnt(0)2660; GFX942-NEXT: s_setpc_b64 s[30:31]2661 %vec0 = call <4 x float> asm "; def $0", "=v"()2662 %vec1 = call <4 x float> asm "; def $0", "=v"()2663 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 5>2664 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82665 ret void2666}2667 2668define void @v_shuffle_v2f32_v4f32__5_5(ptr addrspace(1) inreg %ptr) {2669; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_5:2670; GFX900: ; %bb.0:2671; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2672; GFX900-NEXT: ;;#ASMSTART2673; GFX900-NEXT: ; def v[0:3]2674; GFX900-NEXT: ;;#ASMEND2675; GFX900-NEXT: v_mov_b32_e32 v4, 02676; GFX900-NEXT: v_mov_b32_e32 v2, v12677; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2678; GFX900-NEXT: s_waitcnt vmcnt(0)2679; GFX900-NEXT: s_setpc_b64 s[30:31]2680;2681; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_5:2682; GFX90A: ; %bb.0:2683; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2684; GFX90A-NEXT: ;;#ASMSTART2685; GFX90A-NEXT: ; def v[0:3]2686; GFX90A-NEXT: ;;#ASMEND2687; GFX90A-NEXT: v_mov_b32_e32 v4, 02688; GFX90A-NEXT: v_mov_b32_e32 v0, v12689; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2690; GFX90A-NEXT: s_waitcnt vmcnt(0)2691; GFX90A-NEXT: s_setpc_b64 s[30:31]2692;2693; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_5:2694; GFX942: ; %bb.0:2695; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2696; GFX942-NEXT: ;;#ASMSTART2697; GFX942-NEXT: ; def v[0:3]2698; GFX942-NEXT: ;;#ASMEND2699; GFX942-NEXT: v_mov_b32_e32 v4, 02700; GFX942-NEXT: v_mov_b32_e32 v0, v12701; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2702; GFX942-NEXT: s_waitcnt vmcnt(0)2703; GFX942-NEXT: s_setpc_b64 s[30:31]2704 %vec0 = call <4 x float> asm "; def $0", "=v"()2705 %vec1 = call <4 x float> asm "; def $0", "=v"()2706 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 5>2707 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82708 ret void2709}2710 2711define void @v_shuffle_v2f32_v4f32__6_5(ptr addrspace(1) inreg %ptr) {2712; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_5:2713; GFX900: ; %bb.0:2714; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2715; GFX900-NEXT: ;;#ASMSTART2716; GFX900-NEXT: ; def v[0:3]2717; GFX900-NEXT: ;;#ASMEND2718; GFX900-NEXT: v_mov_b32_e32 v4, 02719; GFX900-NEXT: v_mov_b32_e32 v3, v12720; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2721; GFX900-NEXT: s_waitcnt vmcnt(0)2722; GFX900-NEXT: s_setpc_b64 s[30:31]2723;2724; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_5:2725; GFX90A: ; %bb.0:2726; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX90A-NEXT: ;;#ASMSTART2728; GFX90A-NEXT: ; def v[0:3]2729; GFX90A-NEXT: ;;#ASMEND2730; GFX90A-NEXT: v_mov_b32_e32 v4, 02731; GFX90A-NEXT: v_mov_b32_e32 v3, v12732; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2733; GFX90A-NEXT: s_waitcnt vmcnt(0)2734; GFX90A-NEXT: s_setpc_b64 s[30:31]2735;2736; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_5:2737; GFX942: ; %bb.0:2738; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2739; GFX942-NEXT: ;;#ASMSTART2740; GFX942-NEXT: ; def v[0:3]2741; GFX942-NEXT: ;;#ASMEND2742; GFX942-NEXT: v_mov_b32_e32 v4, 02743; GFX942-NEXT: v_mov_b32_e32 v3, v12744; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2745; GFX942-NEXT: s_waitcnt vmcnt(0)2746; GFX942-NEXT: s_setpc_b64 s[30:31]2747 %vec0 = call <4 x float> asm "; def $0", "=v"()2748 %vec1 = call <4 x float> asm "; def $0", "=v"()2749 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 5>2750 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82751 ret void2752}2753 2754define void @v_shuffle_v2f32_v4f32__u_6(ptr addrspace(1) inreg %ptr) {2755; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_6:2756; GFX900: ; %bb.0:2757; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2758; GFX900-NEXT: v_mov_b32_e32 v4, 02759; GFX900-NEXT: ;;#ASMSTART2760; GFX900-NEXT: ; def v[0:3]2761; GFX900-NEXT: ;;#ASMEND2762; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2763; GFX900-NEXT: s_waitcnt vmcnt(0)2764; GFX900-NEXT: s_setpc_b64 s[30:31]2765;2766; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_6:2767; GFX90A: ; %bb.0:2768; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX90A-NEXT: ;;#ASMSTART2770; GFX90A-NEXT: ; def v[0:3]2771; GFX90A-NEXT: ;;#ASMEND2772; GFX90A-NEXT: v_mov_b32_e32 v4, 02773; GFX90A-NEXT: v_mov_b32_e32 v1, v22774; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2775; GFX90A-NEXT: s_waitcnt vmcnt(0)2776; GFX90A-NEXT: s_setpc_b64 s[30:31]2777;2778; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_6:2779; GFX942: ; %bb.0:2780; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2781; GFX942-NEXT: ;;#ASMSTART2782; GFX942-NEXT: ; def v[0:3]2783; GFX942-NEXT: ;;#ASMEND2784; GFX942-NEXT: v_mov_b32_e32 v4, 02785; GFX942-NEXT: v_mov_b32_e32 v1, v22786; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2787; GFX942-NEXT: s_waitcnt vmcnt(0)2788; GFX942-NEXT: s_setpc_b64 s[30:31]2789 %vec0 = call <4 x float> asm "; def $0", "=v"()2790 %vec1 = call <4 x float> asm "; def $0", "=v"()2791 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 6>2792 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82793 ret void2794}2795 2796define void @v_shuffle_v2f32_v4f32__0_6(ptr addrspace(1) inreg %ptr) {2797; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_6:2798; GFX900: ; %bb.0:2799; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2800; GFX900-NEXT: ;;#ASMSTART2801; GFX900-NEXT: ; def v[0:3]2802; GFX900-NEXT: ;;#ASMEND2803; GFX900-NEXT: ;;#ASMSTART2804; GFX900-NEXT: ; def v[1:4]2805; GFX900-NEXT: ;;#ASMEND2806; GFX900-NEXT: v_mov_b32_e32 v5, 02807; GFX900-NEXT: v_mov_b32_e32 v1, v32808; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17]2809; GFX900-NEXT: s_waitcnt vmcnt(0)2810; GFX900-NEXT: s_setpc_b64 s[30:31]2811;2812; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_6:2813; GFX90A: ; %bb.0:2814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2815; GFX90A-NEXT: ;;#ASMSTART2816; GFX90A-NEXT: ; def v[0:3]2817; GFX90A-NEXT: ;;#ASMEND2818; GFX90A-NEXT: v_mov_b32_e32 v6, 02819; GFX90A-NEXT: ;;#ASMSTART2820; GFX90A-NEXT: ; def v[2:5]2821; GFX90A-NEXT: ;;#ASMEND2822; GFX90A-NEXT: v_mov_b32_e32 v1, v42823; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]2824; GFX90A-NEXT: s_waitcnt vmcnt(0)2825; GFX90A-NEXT: s_setpc_b64 s[30:31]2826;2827; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_6:2828; GFX942: ; %bb.0:2829; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2830; GFX942-NEXT: ;;#ASMSTART2831; GFX942-NEXT: ; def v[0:3]2832; GFX942-NEXT: ;;#ASMEND2833; GFX942-NEXT: v_mov_b32_e32 v6, 02834; GFX942-NEXT: ;;#ASMSTART2835; GFX942-NEXT: ; def v[2:5]2836; GFX942-NEXT: ;;#ASMEND2837; GFX942-NEXT: s_nop 02838; GFX942-NEXT: v_mov_b32_e32 v1, v42839; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]2840; GFX942-NEXT: s_waitcnt vmcnt(0)2841; GFX942-NEXT: s_setpc_b64 s[30:31]2842 %vec0 = call <4 x float> asm "; def $0", "=v"()2843 %vec1 = call <4 x float> asm "; def $0", "=v"()2844 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 6>2845 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82846 ret void2847}2848 2849define void @v_shuffle_v2f32_v4f32__1_6(ptr addrspace(1) inreg %ptr) {2850; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_6:2851; GFX900: ; %bb.0:2852; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2853; GFX900-NEXT: ;;#ASMSTART2854; GFX900-NEXT: ; def v[0:3]2855; GFX900-NEXT: ;;#ASMEND2856; GFX900-NEXT: ;;#ASMSTART2857; GFX900-NEXT: ; def v[2:5]2858; GFX900-NEXT: ;;#ASMEND2859; GFX900-NEXT: v_mov_b32_e32 v6, 02860; GFX900-NEXT: v_mov_b32_e32 v2, v42861; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17]2862; GFX900-NEXT: s_waitcnt vmcnt(0)2863; GFX900-NEXT: s_setpc_b64 s[30:31]2864;2865; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_6:2866; GFX90A: ; %bb.0:2867; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2868; GFX90A-NEXT: ;;#ASMSTART2869; GFX90A-NEXT: ; def v[0:3]2870; GFX90A-NEXT: ;;#ASMEND2871; GFX90A-NEXT: v_mov_b32_e32 v6, 02872; GFX90A-NEXT: ;;#ASMSTART2873; GFX90A-NEXT: ; def v[2:5]2874; GFX90A-NEXT: ;;#ASMEND2875; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0]2876; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]2877; GFX90A-NEXT: s_waitcnt vmcnt(0)2878; GFX90A-NEXT: s_setpc_b64 s[30:31]2879;2880; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_6:2881; GFX942: ; %bb.0:2882; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2883; GFX942-NEXT: ;;#ASMSTART2884; GFX942-NEXT: ; def v[0:3]2885; GFX942-NEXT: ;;#ASMEND2886; GFX942-NEXT: v_mov_b32_e32 v6, 02887; GFX942-NEXT: ;;#ASMSTART2888; GFX942-NEXT: ; def v[2:5]2889; GFX942-NEXT: ;;#ASMEND2890; GFX942-NEXT: s_nop 02891; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0]2892; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]2893; GFX942-NEXT: s_waitcnt vmcnt(0)2894; GFX942-NEXT: s_setpc_b64 s[30:31]2895 %vec0 = call <4 x float> asm "; def $0", "=v"()2896 %vec1 = call <4 x float> asm "; def $0", "=v"()2897 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 6>2898 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82899 ret void2900}2901 2902define void @v_shuffle_v2f32_v4f32__2_6(ptr addrspace(1) inreg %ptr) {2903; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_6:2904; GFX900: ; %bb.0:2905; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2906; GFX900-NEXT: ;;#ASMSTART2907; GFX900-NEXT: ; def v[0:3]2908; GFX900-NEXT: ;;#ASMEND2909; GFX900-NEXT: ;;#ASMSTART2910; GFX900-NEXT: ; def v[3:6]2911; GFX900-NEXT: ;;#ASMEND2912; GFX900-NEXT: v_mov_b32_e32 v7, 02913; GFX900-NEXT: v_mov_b32_e32 v3, v52914; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17]2915; GFX900-NEXT: s_waitcnt vmcnt(0)2916; GFX900-NEXT: s_setpc_b64 s[30:31]2917;2918; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_6:2919; GFX90A: ; %bb.0:2920; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2921; GFX90A-NEXT: ;;#ASMSTART2922; GFX90A-NEXT: ; def v[0:3]2923; GFX90A-NEXT: ;;#ASMEND2924; GFX90A-NEXT: v_mov_b32_e32 v8, 02925; GFX90A-NEXT: ;;#ASMSTART2926; GFX90A-NEXT: ; def v[4:7]2927; GFX90A-NEXT: ;;#ASMEND2928; GFX90A-NEXT: v_mov_b32_e32 v3, v62929; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17]2930; GFX90A-NEXT: s_waitcnt vmcnt(0)2931; GFX90A-NEXT: s_setpc_b64 s[30:31]2932;2933; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_6:2934; GFX942: ; %bb.0:2935; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2936; GFX942-NEXT: ;;#ASMSTART2937; GFX942-NEXT: ; def v[0:3]2938; GFX942-NEXT: ;;#ASMEND2939; GFX942-NEXT: v_mov_b32_e32 v8, 02940; GFX942-NEXT: ;;#ASMSTART2941; GFX942-NEXT: ; def v[4:7]2942; GFX942-NEXT: ;;#ASMEND2943; GFX942-NEXT: s_nop 02944; GFX942-NEXT: v_mov_b32_e32 v3, v62945; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1]2946; GFX942-NEXT: s_waitcnt vmcnt(0)2947; GFX942-NEXT: s_setpc_b64 s[30:31]2948 %vec0 = call <4 x float> asm "; def $0", "=v"()2949 %vec1 = call <4 x float> asm "; def $0", "=v"()2950 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 6>2951 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 82952 ret void2953}2954 2955define void @v_shuffle_v2f32_v4f32__3_6(ptr addrspace(1) inreg %ptr) {2956; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_6:2957; GFX900: ; %bb.0:2958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2959; GFX900-NEXT: ;;#ASMSTART2960; GFX900-NEXT: ; def v[4:7]2961; GFX900-NEXT: ;;#ASMEND2962; GFX900-NEXT: v_mov_b32_e32 v8, 02963; GFX900-NEXT: v_mov_b32_e32 v4, v62964; GFX900-NEXT: ;;#ASMSTART2965; GFX900-NEXT: ; def v[0:3]2966; GFX900-NEXT: ;;#ASMEND2967; GFX900-NEXT: global_store_dwordx2 v8, v[3:4], s[16:17]2968; GFX900-NEXT: s_waitcnt vmcnt(0)2969; GFX900-NEXT: s_setpc_b64 s[30:31]2970;2971; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_6:2972; GFX90A: ; %bb.0:2973; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2974; GFX90A-NEXT: ;;#ASMSTART2975; GFX90A-NEXT: ; def v[0:3]2976; GFX90A-NEXT: ;;#ASMEND2977; GFX90A-NEXT: v_mov_b32_e32 v8, 02978; GFX90A-NEXT: ;;#ASMSTART2979; GFX90A-NEXT: ; def v[4:7]2980; GFX90A-NEXT: ;;#ASMEND2981; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0]2982; GFX90A-NEXT: global_store_dwordx2 v8, v[0:1], s[16:17]2983; GFX90A-NEXT: s_waitcnt vmcnt(0)2984; GFX90A-NEXT: s_setpc_b64 s[30:31]2985;2986; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_6:2987; GFX942: ; %bb.0:2988; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2989; GFX942-NEXT: ;;#ASMSTART2990; GFX942-NEXT: ; def v[0:3]2991; GFX942-NEXT: ;;#ASMEND2992; GFX942-NEXT: v_mov_b32_e32 v8, 02993; GFX942-NEXT: ;;#ASMSTART2994; GFX942-NEXT: ; def v[4:7]2995; GFX942-NEXT: ;;#ASMEND2996; GFX942-NEXT: s_nop 02997; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0]2998; GFX942-NEXT: global_store_dwordx2 v8, v[0:1], s[0:1]2999; GFX942-NEXT: s_waitcnt vmcnt(0)3000; GFX942-NEXT: s_setpc_b64 s[30:31]3001 %vec0 = call <4 x float> asm "; def $0", "=v"()3002 %vec1 = call <4 x float> asm "; def $0", "=v"()3003 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 6>3004 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83005 ret void3006}3007 3008define void @v_shuffle_v2f32_v4f32__4_6(ptr addrspace(1) inreg %ptr) {3009; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_6:3010; GFX900: ; %bb.0:3011; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3012; GFX900-NEXT: ;;#ASMSTART3013; GFX900-NEXT: ; def v[0:3]3014; GFX900-NEXT: ;;#ASMEND3015; GFX900-NEXT: v_mov_b32_e32 v4, 03016; GFX900-NEXT: v_mov_b32_e32 v1, v23017; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3018; GFX900-NEXT: s_waitcnt vmcnt(0)3019; GFX900-NEXT: s_setpc_b64 s[30:31]3020;3021; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_6:3022; GFX90A: ; %bb.0:3023; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3024; GFX90A-NEXT: ;;#ASMSTART3025; GFX90A-NEXT: ; def v[0:3]3026; GFX90A-NEXT: ;;#ASMEND3027; GFX90A-NEXT: v_mov_b32_e32 v4, 03028; GFX90A-NEXT: v_mov_b32_e32 v1, v23029; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3030; GFX90A-NEXT: s_waitcnt vmcnt(0)3031; GFX90A-NEXT: s_setpc_b64 s[30:31]3032;3033; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_6:3034; GFX942: ; %bb.0:3035; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3036; GFX942-NEXT: ;;#ASMSTART3037; GFX942-NEXT: ; def v[0:3]3038; GFX942-NEXT: ;;#ASMEND3039; GFX942-NEXT: v_mov_b32_e32 v4, 03040; GFX942-NEXT: v_mov_b32_e32 v1, v23041; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3042; GFX942-NEXT: s_waitcnt vmcnt(0)3043; GFX942-NEXT: s_setpc_b64 s[30:31]3044 %vec0 = call <4 x float> asm "; def $0", "=v"()3045 %vec1 = call <4 x float> asm "; def $0", "=v"()3046 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 6>3047 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83048 ret void3049}3050 3051define void @v_shuffle_v2f32_v4f32__5_6(ptr addrspace(1) inreg %ptr) {3052; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_6:3053; GFX900: ; %bb.0:3054; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3055; GFX900-NEXT: v_mov_b32_e32 v4, 03056; GFX900-NEXT: ;;#ASMSTART3057; GFX900-NEXT: ; def v[0:3]3058; GFX900-NEXT: ;;#ASMEND3059; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]3060; GFX900-NEXT: s_waitcnt vmcnt(0)3061; GFX900-NEXT: s_setpc_b64 s[30:31]3062;3063; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_6:3064; GFX90A: ; %bb.0:3065; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3066; GFX90A-NEXT: ;;#ASMSTART3067; GFX90A-NEXT: ; def v[0:3]3068; GFX90A-NEXT: ;;#ASMEND3069; GFX90A-NEXT: v_mov_b32_e32 v4, 03070; GFX90A-NEXT: v_mov_b32_e32 v0, v13071; GFX90A-NEXT: v_mov_b32_e32 v1, v23072; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3073; GFX90A-NEXT: s_waitcnt vmcnt(0)3074; GFX90A-NEXT: s_setpc_b64 s[30:31]3075;3076; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_6:3077; GFX942: ; %bb.0:3078; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3079; GFX942-NEXT: ;;#ASMSTART3080; GFX942-NEXT: ; def v[0:3]3081; GFX942-NEXT: ;;#ASMEND3082; GFX942-NEXT: v_mov_b32_e32 v4, 03083; GFX942-NEXT: v_mov_b32_e32 v0, v13084; GFX942-NEXT: v_mov_b32_e32 v1, v23085; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3086; GFX942-NEXT: s_waitcnt vmcnt(0)3087; GFX942-NEXT: s_setpc_b64 s[30:31]3088 %vec0 = call <4 x float> asm "; def $0", "=v"()3089 %vec1 = call <4 x float> asm "; def $0", "=v"()3090 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 6>3091 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83092 ret void3093}3094 3095define void @v_shuffle_v2f32_v4f32__6_6(ptr addrspace(1) inreg %ptr) {3096; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_6:3097; GFX900: ; %bb.0:3098; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3099; GFX900-NEXT: ;;#ASMSTART3100; GFX900-NEXT: ; def v[0:3]3101; GFX900-NEXT: ;;#ASMEND3102; GFX900-NEXT: v_mov_b32_e32 v4, 03103; GFX900-NEXT: v_mov_b32_e32 v3, v23104; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3105; GFX900-NEXT: s_waitcnt vmcnt(0)3106; GFX900-NEXT: s_setpc_b64 s[30:31]3107;3108; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_6:3109; GFX90A: ; %bb.0:3110; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3111; GFX90A-NEXT: ;;#ASMSTART3112; GFX90A-NEXT: ; def v[0:3]3113; GFX90A-NEXT: ;;#ASMEND3114; GFX90A-NEXT: v_mov_b32_e32 v4, 03115; GFX90A-NEXT: v_mov_b32_e32 v3, v23116; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3117; GFX90A-NEXT: s_waitcnt vmcnt(0)3118; GFX90A-NEXT: s_setpc_b64 s[30:31]3119;3120; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_6:3121; GFX942: ; %bb.0:3122; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3123; GFX942-NEXT: ;;#ASMSTART3124; GFX942-NEXT: ; def v[0:3]3125; GFX942-NEXT: ;;#ASMEND3126; GFX942-NEXT: v_mov_b32_e32 v4, 03127; GFX942-NEXT: v_mov_b32_e32 v3, v23128; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3129; GFX942-NEXT: s_waitcnt vmcnt(0)3130; GFX942-NEXT: s_setpc_b64 s[30:31]3131 %vec0 = call <4 x float> asm "; def $0", "=v"()3132 %vec1 = call <4 x float> asm "; def $0", "=v"()3133 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 6>3134 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83135 ret void3136}3137 3138define void @v_shuffle_v2f32_v4f32__u_7(ptr addrspace(1) inreg %ptr) {3139; GFX900-LABEL: v_shuffle_v2f32_v4f32__u_7:3140; GFX900: ; %bb.0:3141; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3142; GFX900-NEXT: v_mov_b32_e32 v4, 03143; GFX900-NEXT: ;;#ASMSTART3144; GFX900-NEXT: ; def v[0:3]3145; GFX900-NEXT: ;;#ASMEND3146; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3147; GFX900-NEXT: s_waitcnt vmcnt(0)3148; GFX900-NEXT: s_setpc_b64 s[30:31]3149;3150; GFX90A-LABEL: v_shuffle_v2f32_v4f32__u_7:3151; GFX90A: ; %bb.0:3152; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3153; GFX90A-NEXT: v_mov_b32_e32 v4, 03154; GFX90A-NEXT: ;;#ASMSTART3155; GFX90A-NEXT: ; def v[0:3]3156; GFX90A-NEXT: ;;#ASMEND3157; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3158; GFX90A-NEXT: s_waitcnt vmcnt(0)3159; GFX90A-NEXT: s_setpc_b64 s[30:31]3160;3161; GFX942-LABEL: v_shuffle_v2f32_v4f32__u_7:3162; GFX942: ; %bb.0:3163; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3164; GFX942-NEXT: v_mov_b32_e32 v4, 03165; GFX942-NEXT: ;;#ASMSTART3166; GFX942-NEXT: ; def v[0:3]3167; GFX942-NEXT: ;;#ASMEND3168; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3169; GFX942-NEXT: s_waitcnt vmcnt(0)3170; GFX942-NEXT: s_setpc_b64 s[30:31]3171 %vec0 = call <4 x float> asm "; def $0", "=v"()3172 %vec1 = call <4 x float> asm "; def $0", "=v"()3173 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 7>3174 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83175 ret void3176}3177 3178define void @v_shuffle_v2f32_v4f32__0_7(ptr addrspace(1) inreg %ptr) {3179; GFX900-LABEL: v_shuffle_v2f32_v4f32__0_7:3180; GFX900: ; %bb.0:3181; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3182; GFX900-NEXT: ;;#ASMSTART3183; GFX900-NEXT: ; def v[0:3]3184; GFX900-NEXT: ;;#ASMEND3185; GFX900-NEXT: ;;#ASMSTART3186; GFX900-NEXT: ; def v[1:4]3187; GFX900-NEXT: ;;#ASMEND3188; GFX900-NEXT: v_mov_b32_e32 v5, 03189; GFX900-NEXT: v_mov_b32_e32 v1, v43190; GFX900-NEXT: global_store_dwordx2 v5, v[0:1], s[16:17]3191; GFX900-NEXT: s_waitcnt vmcnt(0)3192; GFX900-NEXT: s_setpc_b64 s[30:31]3193;3194; GFX90A-LABEL: v_shuffle_v2f32_v4f32__0_7:3195; GFX90A: ; %bb.0:3196; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3197; GFX90A-NEXT: ;;#ASMSTART3198; GFX90A-NEXT: ; def v[0:3]3199; GFX90A-NEXT: ;;#ASMEND3200; GFX90A-NEXT: v_mov_b32_e32 v6, 03201; GFX90A-NEXT: ;;#ASMSTART3202; GFX90A-NEXT: ; def v[2:5]3203; GFX90A-NEXT: ;;#ASMEND3204; GFX90A-NEXT: v_mov_b32_e32 v1, v53205; GFX90A-NEXT: global_store_dwordx2 v6, v[0:1], s[16:17]3206; GFX90A-NEXT: s_waitcnt vmcnt(0)3207; GFX90A-NEXT: s_setpc_b64 s[30:31]3208;3209; GFX942-LABEL: v_shuffle_v2f32_v4f32__0_7:3210; GFX942: ; %bb.0:3211; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3212; GFX942-NEXT: ;;#ASMSTART3213; GFX942-NEXT: ; def v[0:3]3214; GFX942-NEXT: ;;#ASMEND3215; GFX942-NEXT: v_mov_b32_e32 v6, 03216; GFX942-NEXT: ;;#ASMSTART3217; GFX942-NEXT: ; def v[2:5]3218; GFX942-NEXT: ;;#ASMEND3219; GFX942-NEXT: s_nop 03220; GFX942-NEXT: v_mov_b32_e32 v1, v53221; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]3222; GFX942-NEXT: s_waitcnt vmcnt(0)3223; GFX942-NEXT: s_setpc_b64 s[30:31]3224 %vec0 = call <4 x float> asm "; def $0", "=v"()3225 %vec1 = call <4 x float> asm "; def $0", "=v"()3226 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 7>3227 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83228 ret void3229}3230 3231define void @v_shuffle_v2f32_v4f32__1_7(ptr addrspace(1) inreg %ptr) {3232; GFX900-LABEL: v_shuffle_v2f32_v4f32__1_7:3233; GFX900: ; %bb.0:3234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3235; GFX900-NEXT: ;;#ASMSTART3236; GFX900-NEXT: ; def v[0:3]3237; GFX900-NEXT: ;;#ASMEND3238; GFX900-NEXT: ;;#ASMSTART3239; GFX900-NEXT: ; def v[2:5]3240; GFX900-NEXT: ;;#ASMEND3241; GFX900-NEXT: v_mov_b32_e32 v6, 03242; GFX900-NEXT: v_mov_b32_e32 v2, v53243; GFX900-NEXT: global_store_dwordx2 v6, v[1:2], s[16:17]3244; GFX900-NEXT: s_waitcnt vmcnt(0)3245; GFX900-NEXT: s_setpc_b64 s[30:31]3246;3247; GFX90A-LABEL: v_shuffle_v2f32_v4f32__1_7:3248; GFX90A: ; %bb.0:3249; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3250; GFX90A-NEXT: ;;#ASMSTART3251; GFX90A-NEXT: ; def v[0:3]3252; GFX90A-NEXT: ;;#ASMEND3253; GFX90A-NEXT: ;;#ASMSTART3254; GFX90A-NEXT: ; def v[2:5]3255; GFX90A-NEXT: ;;#ASMEND3256; GFX90A-NEXT: v_mov_b32_e32 v6, 03257; GFX90A-NEXT: v_mov_b32_e32 v4, v13258; GFX90A-NEXT: global_store_dwordx2 v6, v[4:5], s[16:17]3259; GFX90A-NEXT: s_waitcnt vmcnt(0)3260; GFX90A-NEXT: s_setpc_b64 s[30:31]3261;3262; GFX942-LABEL: v_shuffle_v2f32_v4f32__1_7:3263; GFX942: ; %bb.0:3264; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3265; GFX942-NEXT: ;;#ASMSTART3266; GFX942-NEXT: ; def v[0:3]3267; GFX942-NEXT: ;;#ASMEND3268; GFX942-NEXT: v_mov_b32_e32 v6, 03269; GFX942-NEXT: ;;#ASMSTART3270; GFX942-NEXT: ; def v[2:5]3271; GFX942-NEXT: ;;#ASMEND3272; GFX942-NEXT: s_nop 03273; GFX942-NEXT: v_mov_b32_e32 v4, v13274; GFX942-NEXT: global_store_dwordx2 v6, v[4:5], s[0:1]3275; GFX942-NEXT: s_waitcnt vmcnt(0)3276; GFX942-NEXT: s_setpc_b64 s[30:31]3277 %vec0 = call <4 x float> asm "; def $0", "=v"()3278 %vec1 = call <4 x float> asm "; def $0", "=v"()3279 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 7>3280 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83281 ret void3282}3283 3284define void @v_shuffle_v2f32_v4f32__2_7(ptr addrspace(1) inreg %ptr) {3285; GFX900-LABEL: v_shuffle_v2f32_v4f32__2_7:3286; GFX900: ; %bb.0:3287; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3288; GFX900-NEXT: ;;#ASMSTART3289; GFX900-NEXT: ; def v[0:3]3290; GFX900-NEXT: ;;#ASMEND3291; GFX900-NEXT: ;;#ASMSTART3292; GFX900-NEXT: ; def v[3:6]3293; GFX900-NEXT: ;;#ASMEND3294; GFX900-NEXT: v_mov_b32_e32 v7, 03295; GFX900-NEXT: v_mov_b32_e32 v3, v63296; GFX900-NEXT: global_store_dwordx2 v7, v[2:3], s[16:17]3297; GFX900-NEXT: s_waitcnt vmcnt(0)3298; GFX900-NEXT: s_setpc_b64 s[30:31]3299;3300; GFX90A-LABEL: v_shuffle_v2f32_v4f32__2_7:3301; GFX90A: ; %bb.0:3302; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3303; GFX90A-NEXT: ;;#ASMSTART3304; GFX90A-NEXT: ; def v[0:3]3305; GFX90A-NEXT: ;;#ASMEND3306; GFX90A-NEXT: v_mov_b32_e32 v8, 03307; GFX90A-NEXT: ;;#ASMSTART3308; GFX90A-NEXT: ; def v[4:7]3309; GFX90A-NEXT: ;;#ASMEND3310; GFX90A-NEXT: v_mov_b32_e32 v3, v73311; GFX90A-NEXT: global_store_dwordx2 v8, v[2:3], s[16:17]3312; GFX90A-NEXT: s_waitcnt vmcnt(0)3313; GFX90A-NEXT: s_setpc_b64 s[30:31]3314;3315; GFX942-LABEL: v_shuffle_v2f32_v4f32__2_7:3316; GFX942: ; %bb.0:3317; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3318; GFX942-NEXT: ;;#ASMSTART3319; GFX942-NEXT: ; def v[0:3]3320; GFX942-NEXT: ;;#ASMEND3321; GFX942-NEXT: v_mov_b32_e32 v8, 03322; GFX942-NEXT: ;;#ASMSTART3323; GFX942-NEXT: ; def v[4:7]3324; GFX942-NEXT: ;;#ASMEND3325; GFX942-NEXT: s_nop 03326; GFX942-NEXT: v_mov_b32_e32 v3, v73327; GFX942-NEXT: global_store_dwordx2 v8, v[2:3], s[0:1]3328; GFX942-NEXT: s_waitcnt vmcnt(0)3329; GFX942-NEXT: s_setpc_b64 s[30:31]3330 %vec0 = call <4 x float> asm "; def $0", "=v"()3331 %vec1 = call <4 x float> asm "; def $0", "=v"()3332 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 7>3333 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83334 ret void3335}3336 3337define void @v_shuffle_v2f32_v4f32__3_7(ptr addrspace(1) inreg %ptr) {3338; GFX900-LABEL: v_shuffle_v2f32_v4f32__3_7:3339; GFX900: ; %bb.0:3340; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3341; GFX900-NEXT: ;;#ASMSTART3342; GFX900-NEXT: ; def v[4:7]3343; GFX900-NEXT: ;;#ASMEND3344; GFX900-NEXT: v_mov_b32_e32 v8, 03345; GFX900-NEXT: v_mov_b32_e32 v4, v73346; GFX900-NEXT: ;;#ASMSTART3347; GFX900-NEXT: ; def v[0:3]3348; GFX900-NEXT: ;;#ASMEND3349; GFX900-NEXT: global_store_dwordx2 v8, v[3:4], s[16:17]3350; GFX900-NEXT: s_waitcnt vmcnt(0)3351; GFX900-NEXT: s_setpc_b64 s[30:31]3352;3353; GFX90A-LABEL: v_shuffle_v2f32_v4f32__3_7:3354; GFX90A: ; %bb.0:3355; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3356; GFX90A-NEXT: ;;#ASMSTART3357; GFX90A-NEXT: ; def v[4:7]3358; GFX90A-NEXT: ;;#ASMEND3359; GFX90A-NEXT: v_mov_b32_e32 v8, 03360; GFX90A-NEXT: ;;#ASMSTART3361; GFX90A-NEXT: ; def v[0:3]3362; GFX90A-NEXT: ;;#ASMEND3363; GFX90A-NEXT: v_mov_b32_e32 v6, v33364; GFX90A-NEXT: global_store_dwordx2 v8, v[6:7], s[16:17]3365; GFX90A-NEXT: s_waitcnt vmcnt(0)3366; GFX90A-NEXT: s_setpc_b64 s[30:31]3367;3368; GFX942-LABEL: v_shuffle_v2f32_v4f32__3_7:3369; GFX942: ; %bb.0:3370; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3371; GFX942-NEXT: ;;#ASMSTART3372; GFX942-NEXT: ; def v[4:7]3373; GFX942-NEXT: ;;#ASMEND3374; GFX942-NEXT: v_mov_b32_e32 v8, 03375; GFX942-NEXT: ;;#ASMSTART3376; GFX942-NEXT: ; def v[0:3]3377; GFX942-NEXT: ;;#ASMEND3378; GFX942-NEXT: s_nop 03379; GFX942-NEXT: v_mov_b32_e32 v6, v33380; GFX942-NEXT: global_store_dwordx2 v8, v[6:7], s[0:1]3381; GFX942-NEXT: s_waitcnt vmcnt(0)3382; GFX942-NEXT: s_setpc_b64 s[30:31]3383 %vec0 = call <4 x float> asm "; def $0", "=v"()3384 %vec1 = call <4 x float> asm "; def $0", "=v"()3385 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 7>3386 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83387 ret void3388}3389 3390define void @v_shuffle_v2f32_v4f32__4_7(ptr addrspace(1) inreg %ptr) {3391; GFX900-LABEL: v_shuffle_v2f32_v4f32__4_7:3392; GFX900: ; %bb.0:3393; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3394; GFX900-NEXT: ;;#ASMSTART3395; GFX900-NEXT: ; def v[0:3]3396; GFX900-NEXT: ;;#ASMEND3397; GFX900-NEXT: v_mov_b32_e32 v4, 03398; GFX900-NEXT: v_mov_b32_e32 v1, v33399; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3400; GFX900-NEXT: s_waitcnt vmcnt(0)3401; GFX900-NEXT: s_setpc_b64 s[30:31]3402;3403; GFX90A-LABEL: v_shuffle_v2f32_v4f32__4_7:3404; GFX90A: ; %bb.0:3405; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3406; GFX90A-NEXT: ;;#ASMSTART3407; GFX90A-NEXT: ; def v[0:3]3408; GFX90A-NEXT: ;;#ASMEND3409; GFX90A-NEXT: v_mov_b32_e32 v4, 03410; GFX90A-NEXT: v_mov_b32_e32 v1, v33411; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3412; GFX90A-NEXT: s_waitcnt vmcnt(0)3413; GFX90A-NEXT: s_setpc_b64 s[30:31]3414;3415; GFX942-LABEL: v_shuffle_v2f32_v4f32__4_7:3416; GFX942: ; %bb.0:3417; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3418; GFX942-NEXT: ;;#ASMSTART3419; GFX942-NEXT: ; def v[0:3]3420; GFX942-NEXT: ;;#ASMEND3421; GFX942-NEXT: v_mov_b32_e32 v4, 03422; GFX942-NEXT: v_mov_b32_e32 v1, v33423; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3424; GFX942-NEXT: s_waitcnt vmcnt(0)3425; GFX942-NEXT: s_setpc_b64 s[30:31]3426 %vec0 = call <4 x float> asm "; def $0", "=v"()3427 %vec1 = call <4 x float> asm "; def $0", "=v"()3428 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 7>3429 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83430 ret void3431}3432 3433define void @v_shuffle_v2f32_v4f32__5_7(ptr addrspace(1) inreg %ptr) {3434; GFX900-LABEL: v_shuffle_v2f32_v4f32__5_7:3435; GFX900: ; %bb.0:3436; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3437; GFX900-NEXT: ;;#ASMSTART3438; GFX900-NEXT: ; def v[0:3]3439; GFX900-NEXT: ;;#ASMEND3440; GFX900-NEXT: v_mov_b32_e32 v4, 03441; GFX900-NEXT: v_mov_b32_e32 v2, v33442; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]3443; GFX900-NEXT: s_waitcnt vmcnt(0)3444; GFX900-NEXT: s_setpc_b64 s[30:31]3445;3446; GFX90A-LABEL: v_shuffle_v2f32_v4f32__5_7:3447; GFX90A: ; %bb.0:3448; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3449; GFX90A-NEXT: ;;#ASMSTART3450; GFX90A-NEXT: ; def v[0:3]3451; GFX90A-NEXT: ;;#ASMEND3452; GFX90A-NEXT: v_mov_b32_e32 v4, 03453; GFX90A-NEXT: v_mov_b32_e32 v2, v13454; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3455; GFX90A-NEXT: s_waitcnt vmcnt(0)3456; GFX90A-NEXT: s_setpc_b64 s[30:31]3457;3458; GFX942-LABEL: v_shuffle_v2f32_v4f32__5_7:3459; GFX942: ; %bb.0:3460; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3461; GFX942-NEXT: ;;#ASMSTART3462; GFX942-NEXT: ; def v[0:3]3463; GFX942-NEXT: ;;#ASMEND3464; GFX942-NEXT: v_mov_b32_e32 v4, 03465; GFX942-NEXT: v_mov_b32_e32 v2, v13466; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3467; GFX942-NEXT: s_waitcnt vmcnt(0)3468; GFX942-NEXT: s_setpc_b64 s[30:31]3469 %vec0 = call <4 x float> asm "; def $0", "=v"()3470 %vec1 = call <4 x float> asm "; def $0", "=v"()3471 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 7>3472 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83473 ret void3474}3475 3476define void @v_shuffle_v2f32_v4f32__6_7(ptr addrspace(1) inreg %ptr) {3477; GFX900-LABEL: v_shuffle_v2f32_v4f32__6_7:3478; GFX900: ; %bb.0:3479; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3480; GFX900-NEXT: v_mov_b32_e32 v4, 03481; GFX900-NEXT: ;;#ASMSTART3482; GFX900-NEXT: ; def v[0:3]3483; GFX900-NEXT: ;;#ASMEND3484; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3485; GFX900-NEXT: s_waitcnt vmcnt(0)3486; GFX900-NEXT: s_setpc_b64 s[30:31]3487;3488; GFX90A-LABEL: v_shuffle_v2f32_v4f32__6_7:3489; GFX90A: ; %bb.0:3490; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3491; GFX90A-NEXT: v_mov_b32_e32 v4, 03492; GFX90A-NEXT: ;;#ASMSTART3493; GFX90A-NEXT: ; def v[0:3]3494; GFX90A-NEXT: ;;#ASMEND3495; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3496; GFX90A-NEXT: s_waitcnt vmcnt(0)3497; GFX90A-NEXT: s_setpc_b64 s[30:31]3498;3499; GFX942-LABEL: v_shuffle_v2f32_v4f32__6_7:3500; GFX942: ; %bb.0:3501; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3502; GFX942-NEXT: v_mov_b32_e32 v4, 03503; GFX942-NEXT: ;;#ASMSTART3504; GFX942-NEXT: ; def v[0:3]3505; GFX942-NEXT: ;;#ASMEND3506; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3507; GFX942-NEXT: s_waitcnt vmcnt(0)3508; GFX942-NEXT: s_setpc_b64 s[30:31]3509 %vec0 = call <4 x float> asm "; def $0", "=v"()3510 %vec1 = call <4 x float> asm "; def $0", "=v"()3511 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 7>3512 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 83513 ret void3514}3515 3516define void @s_shuffle_v2f32_v4f32__u_u() {3517; GFX9-LABEL: s_shuffle_v2f32_v4f32__u_u:3518; GFX9: ; %bb.0:3519; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3520; GFX9-NEXT: ;;#ASMSTART3521; GFX9-NEXT: ; use s[8:9]3522; GFX9-NEXT: ;;#ASMEND3523; GFX9-NEXT: s_setpc_b64 s[30:31]3524 %vec0 = call <4 x float> asm "; def $0", "=s"()3525 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> poison3526 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3527 ret void3528}3529 3530define void @s_shuffle_v2f32_v4f32__0_u() {3531; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_u:3532; GFX900: ; %bb.0:3533; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3534; GFX900-NEXT: ;;#ASMSTART3535; GFX900-NEXT: ; def s[8:11]3536; GFX900-NEXT: ;;#ASMEND3537; GFX900-NEXT: ;;#ASMSTART3538; GFX900-NEXT: ; use s[8:9]3539; GFX900-NEXT: ;;#ASMEND3540; GFX900-NEXT: s_setpc_b64 s[30:31]3541;3542; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_u:3543; GFX90A: ; %bb.0:3544; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3545; GFX90A-NEXT: ;;#ASMSTART3546; GFX90A-NEXT: ; def s[8:11]3547; GFX90A-NEXT: ;;#ASMEND3548; GFX90A-NEXT: ;;#ASMSTART3549; GFX90A-NEXT: ; use s[8:9]3550; GFX90A-NEXT: ;;#ASMEND3551; GFX90A-NEXT: s_setpc_b64 s[30:31]3552;3553; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_u:3554; GFX942: ; %bb.0:3555; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3556; GFX942-NEXT: ;;#ASMSTART3557; GFX942-NEXT: ; def s[8:11]3558; GFX942-NEXT: ;;#ASMEND3559; GFX942-NEXT: s_nop 03560; GFX942-NEXT: ;;#ASMSTART3561; GFX942-NEXT: ; use s[8:9]3562; GFX942-NEXT: ;;#ASMEND3563; GFX942-NEXT: s_setpc_b64 s[30:31]3564 %vec0 = call <4 x float> asm "; def $0", "=s"()3565 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 poison>3566 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3567 ret void3568}3569 3570define void @s_shuffle_v2f32_v4f32__1_u() {3571; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_u:3572; GFX900: ; %bb.0:3573; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3574; GFX900-NEXT: ;;#ASMSTART3575; GFX900-NEXT: ; def s[4:7]3576; GFX900-NEXT: ;;#ASMEND3577; GFX900-NEXT: s_mov_b32 s8, s53578; GFX900-NEXT: ;;#ASMSTART3579; GFX900-NEXT: ; use s[8:9]3580; GFX900-NEXT: ;;#ASMEND3581; GFX900-NEXT: s_setpc_b64 s[30:31]3582;3583; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_u:3584; GFX90A: ; %bb.0:3585; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3586; GFX90A-NEXT: ;;#ASMSTART3587; GFX90A-NEXT: ; def s[4:7]3588; GFX90A-NEXT: ;;#ASMEND3589; GFX90A-NEXT: s_mov_b32 s8, s53590; GFX90A-NEXT: ;;#ASMSTART3591; GFX90A-NEXT: ; use s[8:9]3592; GFX90A-NEXT: ;;#ASMEND3593; GFX90A-NEXT: s_setpc_b64 s[30:31]3594;3595; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_u:3596; GFX942: ; %bb.0:3597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3598; GFX942-NEXT: ;;#ASMSTART3599; GFX942-NEXT: ; def s[0:3]3600; GFX942-NEXT: ;;#ASMEND3601; GFX942-NEXT: s_mov_b32 s8, s13602; GFX942-NEXT: ;;#ASMSTART3603; GFX942-NEXT: ; use s[8:9]3604; GFX942-NEXT: ;;#ASMEND3605; GFX942-NEXT: s_setpc_b64 s[30:31]3606 %vec0 = call <4 x float> asm "; def $0", "=s"()3607 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 poison>3608 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3609 ret void3610}3611 3612define void @s_shuffle_v2f32_v4f32__2_u() {3613; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_u:3614; GFX900: ; %bb.0:3615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3616; GFX900-NEXT: ;;#ASMSTART3617; GFX900-NEXT: ; def s[4:7]3618; GFX900-NEXT: ;;#ASMEND3619; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]3620; GFX900-NEXT: ;;#ASMSTART3621; GFX900-NEXT: ; use s[8:9]3622; GFX900-NEXT: ;;#ASMEND3623; GFX900-NEXT: s_setpc_b64 s[30:31]3624;3625; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_u:3626; GFX90A: ; %bb.0:3627; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3628; GFX90A-NEXT: ;;#ASMSTART3629; GFX90A-NEXT: ; def s[4:7]3630; GFX90A-NEXT: ;;#ASMEND3631; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]3632; GFX90A-NEXT: ;;#ASMSTART3633; GFX90A-NEXT: ; use s[8:9]3634; GFX90A-NEXT: ;;#ASMEND3635; GFX90A-NEXT: s_setpc_b64 s[30:31]3636;3637; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_u:3638; GFX942: ; %bb.0:3639; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3640; GFX942-NEXT: ;;#ASMSTART3641; GFX942-NEXT: ; def s[0:3]3642; GFX942-NEXT: ;;#ASMEND3643; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]3644; GFX942-NEXT: ;;#ASMSTART3645; GFX942-NEXT: ; use s[8:9]3646; GFX942-NEXT: ;;#ASMEND3647; GFX942-NEXT: s_setpc_b64 s[30:31]3648 %vec0 = call <4 x float> asm "; def $0", "=s"()3649 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 poison>3650 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3651 ret void3652}3653 3654define void @s_shuffle_v2f32_v4f32__3_u() {3655; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_u:3656; GFX900: ; %bb.0:3657; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3658; GFX900-NEXT: ;;#ASMSTART3659; GFX900-NEXT: ; def s[4:7]3660; GFX900-NEXT: ;;#ASMEND3661; GFX900-NEXT: s_mov_b32 s8, s73662; GFX900-NEXT: ;;#ASMSTART3663; GFX900-NEXT: ; use s[8:9]3664; GFX900-NEXT: ;;#ASMEND3665; GFX900-NEXT: s_setpc_b64 s[30:31]3666;3667; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_u:3668; GFX90A: ; %bb.0:3669; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3670; GFX90A-NEXT: ;;#ASMSTART3671; GFX90A-NEXT: ; def s[4:7]3672; GFX90A-NEXT: ;;#ASMEND3673; GFX90A-NEXT: s_mov_b32 s8, s73674; GFX90A-NEXT: ;;#ASMSTART3675; GFX90A-NEXT: ; use s[8:9]3676; GFX90A-NEXT: ;;#ASMEND3677; GFX90A-NEXT: s_setpc_b64 s[30:31]3678;3679; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_u:3680; GFX942: ; %bb.0:3681; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3682; GFX942-NEXT: ;;#ASMSTART3683; GFX942-NEXT: ; def s[0:3]3684; GFX942-NEXT: ;;#ASMEND3685; GFX942-NEXT: s_mov_b32 s8, s33686; GFX942-NEXT: ;;#ASMSTART3687; GFX942-NEXT: ; use s[8:9]3688; GFX942-NEXT: ;;#ASMEND3689; GFX942-NEXT: s_setpc_b64 s[30:31]3690 %vec0 = call <4 x float> asm "; def $0", "=s"()3691 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 poison>3692 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3693 ret void3694}3695 3696define void @s_shuffle_v2f32_v4f32__4_u() {3697; GFX9-LABEL: s_shuffle_v2f32_v4f32__4_u:3698; GFX9: ; %bb.0:3699; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3700; GFX9-NEXT: ;;#ASMSTART3701; GFX9-NEXT: ; use s[8:9]3702; GFX9-NEXT: ;;#ASMEND3703; GFX9-NEXT: s_setpc_b64 s[30:31]3704 %vec0 = call <4 x float> asm "; def $0", "=s"()3705 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 poison>3706 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3707 ret void3708}3709 3710define void @s_shuffle_v2f32_v4f32__5_u() {3711; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_u:3712; GFX900: ; %bb.0:3713; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3714; GFX900-NEXT: ;;#ASMSTART3715; GFX900-NEXT: ; def s[4:7]3716; GFX900-NEXT: ;;#ASMEND3717; GFX900-NEXT: s_mov_b32 s8, s53718; GFX900-NEXT: ;;#ASMSTART3719; GFX900-NEXT: ; use s[8:9]3720; GFX900-NEXT: ;;#ASMEND3721; GFX900-NEXT: s_setpc_b64 s[30:31]3722;3723; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_u:3724; GFX90A: ; %bb.0:3725; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3726; GFX90A-NEXT: ;;#ASMSTART3727; GFX90A-NEXT: ; def s[4:7]3728; GFX90A-NEXT: ;;#ASMEND3729; GFX90A-NEXT: s_mov_b32 s8, s53730; GFX90A-NEXT: ;;#ASMSTART3731; GFX90A-NEXT: ; use s[8:9]3732; GFX90A-NEXT: ;;#ASMEND3733; GFX90A-NEXT: s_setpc_b64 s[30:31]3734;3735; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_u:3736; GFX942: ; %bb.0:3737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3738; GFX942-NEXT: ;;#ASMSTART3739; GFX942-NEXT: ; def s[0:3]3740; GFX942-NEXT: ;;#ASMEND3741; GFX942-NEXT: s_mov_b32 s8, s13742; GFX942-NEXT: ;;#ASMSTART3743; GFX942-NEXT: ; use s[8:9]3744; GFX942-NEXT: ;;#ASMEND3745; GFX942-NEXT: s_setpc_b64 s[30:31]3746 %vec0 = call <4 x float> asm "; def $0", "=s"()3747 %vec1 = call <4 x float> asm "; def $0", "=s"()3748 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 poison>3749 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3750 ret void3751}3752 3753define void @s_shuffle_v2f32_v4f32__6_u() {3754; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_u:3755; GFX900: ; %bb.0:3756; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3757; GFX900-NEXT: ;;#ASMSTART3758; GFX900-NEXT: ; def s[4:7]3759; GFX900-NEXT: ;;#ASMEND3760; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]3761; GFX900-NEXT: ;;#ASMSTART3762; GFX900-NEXT: ; use s[8:9]3763; GFX900-NEXT: ;;#ASMEND3764; GFX900-NEXT: s_setpc_b64 s[30:31]3765;3766; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_u:3767; GFX90A: ; %bb.0:3768; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3769; GFX90A-NEXT: ;;#ASMSTART3770; GFX90A-NEXT: ; def s[4:7]3771; GFX90A-NEXT: ;;#ASMEND3772; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]3773; GFX90A-NEXT: ;;#ASMSTART3774; GFX90A-NEXT: ; use s[8:9]3775; GFX90A-NEXT: ;;#ASMEND3776; GFX90A-NEXT: s_setpc_b64 s[30:31]3777;3778; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_u:3779; GFX942: ; %bb.0:3780; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3781; GFX942-NEXT: ;;#ASMSTART3782; GFX942-NEXT: ; def s[0:3]3783; GFX942-NEXT: ;;#ASMEND3784; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]3785; GFX942-NEXT: ;;#ASMSTART3786; GFX942-NEXT: ; use s[8:9]3787; GFX942-NEXT: ;;#ASMEND3788; GFX942-NEXT: s_setpc_b64 s[30:31]3789 %vec0 = call <4 x float> asm "; def $0", "=s"()3790 %vec1 = call <4 x float> asm "; def $0", "=s"()3791 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 poison>3792 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3793 ret void3794}3795 3796define void @s_shuffle_v2f32_v4f32__7_u() {3797; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_u:3798; GFX900: ; %bb.0:3799; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3800; GFX900-NEXT: ;;#ASMSTART3801; GFX900-NEXT: ; def s[4:7]3802; GFX900-NEXT: ;;#ASMEND3803; GFX900-NEXT: s_mov_b32 s8, s73804; GFX900-NEXT: ;;#ASMSTART3805; GFX900-NEXT: ; use s[8:9]3806; GFX900-NEXT: ;;#ASMEND3807; GFX900-NEXT: s_setpc_b64 s[30:31]3808;3809; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_u:3810; GFX90A: ; %bb.0:3811; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3812; GFX90A-NEXT: ;;#ASMSTART3813; GFX90A-NEXT: ; def s[4:7]3814; GFX90A-NEXT: ;;#ASMEND3815; GFX90A-NEXT: s_mov_b32 s8, s73816; GFX90A-NEXT: ;;#ASMSTART3817; GFX90A-NEXT: ; use s[8:9]3818; GFX90A-NEXT: ;;#ASMEND3819; GFX90A-NEXT: s_setpc_b64 s[30:31]3820;3821; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_u:3822; GFX942: ; %bb.0:3823; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3824; GFX942-NEXT: ;;#ASMSTART3825; GFX942-NEXT: ; def s[0:3]3826; GFX942-NEXT: ;;#ASMEND3827; GFX942-NEXT: s_mov_b32 s8, s33828; GFX942-NEXT: ;;#ASMSTART3829; GFX942-NEXT: ; use s[8:9]3830; GFX942-NEXT: ;;#ASMEND3831; GFX942-NEXT: s_setpc_b64 s[30:31]3832 %vec0 = call <4 x float> asm "; def $0", "=s"()3833 %vec1 = call <4 x float> asm "; def $0", "=s"()3834 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 poison>3835 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3836 ret void3837}3838 3839define void @s_shuffle_v2f32_v4f32__7_0() {3840; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_0:3841; GFX900: ; %bb.0:3842; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3843; GFX900-NEXT: ;;#ASMSTART3844; GFX900-NEXT: ; def s[8:11]3845; GFX900-NEXT: ;;#ASMEND3846; GFX900-NEXT: ;;#ASMSTART3847; GFX900-NEXT: ; def s[4:7]3848; GFX900-NEXT: ;;#ASMEND3849; GFX900-NEXT: s_mov_b32 s8, s113850; GFX900-NEXT: s_mov_b32 s9, s43851; GFX900-NEXT: ;;#ASMSTART3852; GFX900-NEXT: ; use s[8:9]3853; GFX900-NEXT: ;;#ASMEND3854; GFX900-NEXT: s_setpc_b64 s[30:31]3855;3856; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_0:3857; GFX90A: ; %bb.0:3858; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3859; GFX90A-NEXT: ;;#ASMSTART3860; GFX90A-NEXT: ; def s[8:11]3861; GFX90A-NEXT: ;;#ASMEND3862; GFX90A-NEXT: ;;#ASMSTART3863; GFX90A-NEXT: ; def s[4:7]3864; GFX90A-NEXT: ;;#ASMEND3865; GFX90A-NEXT: s_mov_b32 s8, s113866; GFX90A-NEXT: s_mov_b32 s9, s43867; GFX90A-NEXT: ;;#ASMSTART3868; GFX90A-NEXT: ; use s[8:9]3869; GFX90A-NEXT: ;;#ASMEND3870; GFX90A-NEXT: s_setpc_b64 s[30:31]3871;3872; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_0:3873; GFX942: ; %bb.0:3874; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3875; GFX942-NEXT: ;;#ASMSTART3876; GFX942-NEXT: ; def s[0:3]3877; GFX942-NEXT: ;;#ASMEND3878; GFX942-NEXT: ;;#ASMSTART3879; GFX942-NEXT: ; def s[4:7]3880; GFX942-NEXT: ;;#ASMEND3881; GFX942-NEXT: s_mov_b32 s8, s73882; GFX942-NEXT: s_mov_b32 s9, s03883; GFX942-NEXT: ;;#ASMSTART3884; GFX942-NEXT: ; use s[8:9]3885; GFX942-NEXT: ;;#ASMEND3886; GFX942-NEXT: s_setpc_b64 s[30:31]3887 %vec0 = call <4 x float> asm "; def $0", "=s"()3888 %vec1 = call <4 x float> asm "; def $0", "=s"()3889 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 0>3890 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3891 ret void3892}3893 3894define void @s_shuffle_v2f32_v4f32__7_1() {3895; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_1:3896; GFX900: ; %bb.0:3897; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3898; GFX900-NEXT: ;;#ASMSTART3899; GFX900-NEXT: ; def s[8:11]3900; GFX900-NEXT: ;;#ASMEND3901; GFX900-NEXT: ;;#ASMSTART3902; GFX900-NEXT: ; def s[4:7]3903; GFX900-NEXT: ;;#ASMEND3904; GFX900-NEXT: s_mov_b32 s8, s73905; GFX900-NEXT: ;;#ASMSTART3906; GFX900-NEXT: ; use s[8:9]3907; GFX900-NEXT: ;;#ASMEND3908; GFX900-NEXT: s_setpc_b64 s[30:31]3909;3910; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_1:3911; GFX90A: ; %bb.0:3912; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3913; GFX90A-NEXT: ;;#ASMSTART3914; GFX90A-NEXT: ; def s[8:11]3915; GFX90A-NEXT: ;;#ASMEND3916; GFX90A-NEXT: ;;#ASMSTART3917; GFX90A-NEXT: ; def s[4:7]3918; GFX90A-NEXT: ;;#ASMEND3919; GFX90A-NEXT: s_mov_b32 s8, s73920; GFX90A-NEXT: ;;#ASMSTART3921; GFX90A-NEXT: ; use s[8:9]3922; GFX90A-NEXT: ;;#ASMEND3923; GFX90A-NEXT: s_setpc_b64 s[30:31]3924;3925; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_1:3926; GFX942: ; %bb.0:3927; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3928; GFX942-NEXT: ;;#ASMSTART3929; GFX942-NEXT: ; def s[8:11]3930; GFX942-NEXT: ;;#ASMEND3931; GFX942-NEXT: ;;#ASMSTART3932; GFX942-NEXT: ; def s[0:3]3933; GFX942-NEXT: ;;#ASMEND3934; GFX942-NEXT: s_mov_b32 s8, s33935; GFX942-NEXT: ;;#ASMSTART3936; GFX942-NEXT: ; use s[8:9]3937; GFX942-NEXT: ;;#ASMEND3938; GFX942-NEXT: s_setpc_b64 s[30:31]3939 %vec0 = call <4 x float> asm "; def $0", "=s"()3940 %vec1 = call <4 x float> asm "; def $0", "=s"()3941 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 1>3942 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3943 ret void3944}3945 3946define void @s_shuffle_v2f32_v4f32__7_2() {3947; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_2:3948; GFX900: ; %bb.0:3949; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3950; GFX900-NEXT: ;;#ASMSTART3951; GFX900-NEXT: ; def s[8:11]3952; GFX900-NEXT: ;;#ASMEND3953; GFX900-NEXT: ;;#ASMSTART3954; GFX900-NEXT: ; def s[4:7]3955; GFX900-NEXT: ;;#ASMEND3956; GFX900-NEXT: s_mov_b32 s8, s113957; GFX900-NEXT: s_mov_b32 s9, s63958; GFX900-NEXT: ;;#ASMSTART3959; GFX900-NEXT: ; use s[8:9]3960; GFX900-NEXT: ;;#ASMEND3961; GFX900-NEXT: s_setpc_b64 s[30:31]3962;3963; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_2:3964; GFX90A: ; %bb.0:3965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3966; GFX90A-NEXT: ;;#ASMSTART3967; GFX90A-NEXT: ; def s[8:11]3968; GFX90A-NEXT: ;;#ASMEND3969; GFX90A-NEXT: ;;#ASMSTART3970; GFX90A-NEXT: ; def s[4:7]3971; GFX90A-NEXT: ;;#ASMEND3972; GFX90A-NEXT: s_mov_b32 s8, s113973; GFX90A-NEXT: s_mov_b32 s9, s63974; GFX90A-NEXT: ;;#ASMSTART3975; GFX90A-NEXT: ; use s[8:9]3976; GFX90A-NEXT: ;;#ASMEND3977; GFX90A-NEXT: s_setpc_b64 s[30:31]3978;3979; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_2:3980; GFX942: ; %bb.0:3981; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3982; GFX942-NEXT: ;;#ASMSTART3983; GFX942-NEXT: ; def s[0:3]3984; GFX942-NEXT: ;;#ASMEND3985; GFX942-NEXT: ;;#ASMSTART3986; GFX942-NEXT: ; def s[4:7]3987; GFX942-NEXT: ;;#ASMEND3988; GFX942-NEXT: s_mov_b32 s8, s73989; GFX942-NEXT: s_mov_b32 s9, s23990; GFX942-NEXT: ;;#ASMSTART3991; GFX942-NEXT: ; use s[8:9]3992; GFX942-NEXT: ;;#ASMEND3993; GFX942-NEXT: s_setpc_b64 s[30:31]3994 %vec0 = call <4 x float> asm "; def $0", "=s"()3995 %vec1 = call <4 x float> asm "; def $0", "=s"()3996 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 2>3997 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)3998 ret void3999}4000 4001define void @s_shuffle_v2f32_v4f32__7_3() {4002; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_3:4003; GFX900: ; %bb.0:4004; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4005; GFX900-NEXT: ;;#ASMSTART4006; GFX900-NEXT: ; def s[4:7]4007; GFX900-NEXT: ;;#ASMEND4008; GFX900-NEXT: ;;#ASMSTART4009; GFX900-NEXT: ; def s[8:11]4010; GFX900-NEXT: ;;#ASMEND4011; GFX900-NEXT: s_mov_b32 s6, s114012; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]4013; GFX900-NEXT: ;;#ASMSTART4014; GFX900-NEXT: ; use s[8:9]4015; GFX900-NEXT: ;;#ASMEND4016; GFX900-NEXT: s_setpc_b64 s[30:31]4017;4018; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_3:4019; GFX90A: ; %bb.0:4020; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4021; GFX90A-NEXT: ;;#ASMSTART4022; GFX90A-NEXT: ; def s[4:7]4023; GFX90A-NEXT: ;;#ASMEND4024; GFX90A-NEXT: ;;#ASMSTART4025; GFX90A-NEXT: ; def s[8:11]4026; GFX90A-NEXT: ;;#ASMEND4027; GFX90A-NEXT: s_mov_b32 s6, s114028; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]4029; GFX90A-NEXT: ;;#ASMSTART4030; GFX90A-NEXT: ; use s[8:9]4031; GFX90A-NEXT: ;;#ASMEND4032; GFX90A-NEXT: s_setpc_b64 s[30:31]4033;4034; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_3:4035; GFX942: ; %bb.0:4036; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4037; GFX942-NEXT: ;;#ASMSTART4038; GFX942-NEXT: ; def s[0:3]4039; GFX942-NEXT: ;;#ASMEND4040; GFX942-NEXT: ;;#ASMSTART4041; GFX942-NEXT: ; def s[4:7]4042; GFX942-NEXT: ;;#ASMEND4043; GFX942-NEXT: s_mov_b32 s2, s74044; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]4045; GFX942-NEXT: ;;#ASMSTART4046; GFX942-NEXT: ; use s[8:9]4047; GFX942-NEXT: ;;#ASMEND4048; GFX942-NEXT: s_setpc_b64 s[30:31]4049 %vec0 = call <4 x float> asm "; def $0", "=s"()4050 %vec1 = call <4 x float> asm "; def $0", "=s"()4051 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 3>4052 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4053 ret void4054}4055 4056define void @s_shuffle_v2f32_v4f32__7_4() {4057; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_4:4058; GFX900: ; %bb.0:4059; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4060; GFX900-NEXT: ;;#ASMSTART4061; GFX900-NEXT: ; def s[4:7]4062; GFX900-NEXT: ;;#ASMEND4063; GFX900-NEXT: s_mov_b32 s8, s74064; GFX900-NEXT: s_mov_b32 s9, s44065; GFX900-NEXT: ;;#ASMSTART4066; GFX900-NEXT: ; use s[8:9]4067; GFX900-NEXT: ;;#ASMEND4068; GFX900-NEXT: s_setpc_b64 s[30:31]4069;4070; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_4:4071; GFX90A: ; %bb.0:4072; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4073; GFX90A-NEXT: ;;#ASMSTART4074; GFX90A-NEXT: ; def s[4:7]4075; GFX90A-NEXT: ;;#ASMEND4076; GFX90A-NEXT: s_mov_b32 s8, s74077; GFX90A-NEXT: s_mov_b32 s9, s44078; GFX90A-NEXT: ;;#ASMSTART4079; GFX90A-NEXT: ; use s[8:9]4080; GFX90A-NEXT: ;;#ASMEND4081; GFX90A-NEXT: s_setpc_b64 s[30:31]4082;4083; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_4:4084; GFX942: ; %bb.0:4085; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4086; GFX942-NEXT: ;;#ASMSTART4087; GFX942-NEXT: ; def s[0:3]4088; GFX942-NEXT: ;;#ASMEND4089; GFX942-NEXT: s_mov_b32 s8, s34090; GFX942-NEXT: s_mov_b32 s9, s04091; GFX942-NEXT: ;;#ASMSTART4092; GFX942-NEXT: ; use s[8:9]4093; GFX942-NEXT: ;;#ASMEND4094; GFX942-NEXT: s_setpc_b64 s[30:31]4095 %vec0 = call <4 x float> asm "; def $0", "=s"()4096 %vec1 = call <4 x float> asm "; def $0", "=s"()4097 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 4>4098 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4099 ret void4100}4101 4102define void @s_shuffle_v2f32_v4f32__7_5() {4103; GFX9-LABEL: s_shuffle_v2f32_v4f32__7_5:4104; GFX9: ; %bb.0:4105; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4106; GFX9-NEXT: ;;#ASMSTART4107; GFX9-NEXT: ; def s[8:11]4108; GFX9-NEXT: ;;#ASMEND4109; GFX9-NEXT: s_mov_b32 s8, s114110; GFX9-NEXT: ;;#ASMSTART4111; GFX9-NEXT: ; use s[8:9]4112; GFX9-NEXT: ;;#ASMEND4113; GFX9-NEXT: s_setpc_b64 s[30:31]4114 %vec0 = call <4 x float> asm "; def $0", "=s"()4115 %vec1 = call <4 x float> asm "; def $0", "=s"()4116 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 5>4117 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4118 ret void4119}4120 4121define void @s_shuffle_v2f32_v4f32__7_6() {4122; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_6:4123; GFX900: ; %bb.0:4124; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4125; GFX900-NEXT: ;;#ASMSTART4126; GFX900-NEXT: ; def s[4:7]4127; GFX900-NEXT: ;;#ASMEND4128; GFX900-NEXT: s_mov_b32 s8, s74129; GFX900-NEXT: s_mov_b32 s9, s64130; GFX900-NEXT: ;;#ASMSTART4131; GFX900-NEXT: ; use s[8:9]4132; GFX900-NEXT: ;;#ASMEND4133; GFX900-NEXT: s_setpc_b64 s[30:31]4134;4135; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_6:4136; GFX90A: ; %bb.0:4137; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4138; GFX90A-NEXT: ;;#ASMSTART4139; GFX90A-NEXT: ; def s[4:7]4140; GFX90A-NEXT: ;;#ASMEND4141; GFX90A-NEXT: s_mov_b32 s8, s74142; GFX90A-NEXT: s_mov_b32 s9, s64143; GFX90A-NEXT: ;;#ASMSTART4144; GFX90A-NEXT: ; use s[8:9]4145; GFX90A-NEXT: ;;#ASMEND4146; GFX90A-NEXT: s_setpc_b64 s[30:31]4147;4148; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_6:4149; GFX942: ; %bb.0:4150; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4151; GFX942-NEXT: ;;#ASMSTART4152; GFX942-NEXT: ; def s[0:3]4153; GFX942-NEXT: ;;#ASMEND4154; GFX942-NEXT: s_mov_b32 s8, s34155; GFX942-NEXT: s_mov_b32 s9, s24156; GFX942-NEXT: ;;#ASMSTART4157; GFX942-NEXT: ; use s[8:9]4158; GFX942-NEXT: ;;#ASMEND4159; GFX942-NEXT: s_setpc_b64 s[30:31]4160 %vec0 = call <4 x float> asm "; def $0", "=s"()4161 %vec1 = call <4 x float> asm "; def $0", "=s"()4162 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 6>4163 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4164 ret void4165}4166 4167define void @s_shuffle_v2f32_v4f32__7_7() {4168; GFX900-LABEL: s_shuffle_v2f32_v4f32__7_7:4169; GFX900: ; %bb.0:4170; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4171; GFX900-NEXT: ;;#ASMSTART4172; GFX900-NEXT: ; def s[4:7]4173; GFX900-NEXT: ;;#ASMEND4174; GFX900-NEXT: s_mov_b32 s6, s74175; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]4176; GFX900-NEXT: ;;#ASMSTART4177; GFX900-NEXT: ; use s[8:9]4178; GFX900-NEXT: ;;#ASMEND4179; GFX900-NEXT: s_setpc_b64 s[30:31]4180;4181; GFX90A-LABEL: s_shuffle_v2f32_v4f32__7_7:4182; GFX90A: ; %bb.0:4183; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4184; GFX90A-NEXT: ;;#ASMSTART4185; GFX90A-NEXT: ; def s[4:7]4186; GFX90A-NEXT: ;;#ASMEND4187; GFX90A-NEXT: s_mov_b32 s6, s74188; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]4189; GFX90A-NEXT: ;;#ASMSTART4190; GFX90A-NEXT: ; use s[8:9]4191; GFX90A-NEXT: ;;#ASMEND4192; GFX90A-NEXT: s_setpc_b64 s[30:31]4193;4194; GFX942-LABEL: s_shuffle_v2f32_v4f32__7_7:4195; GFX942: ; %bb.0:4196; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4197; GFX942-NEXT: ;;#ASMSTART4198; GFX942-NEXT: ; def s[0:3]4199; GFX942-NEXT: ;;#ASMEND4200; GFX942-NEXT: s_mov_b32 s2, s34201; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]4202; GFX942-NEXT: ;;#ASMSTART4203; GFX942-NEXT: ; use s[8:9]4204; GFX942-NEXT: ;;#ASMEND4205; GFX942-NEXT: s_setpc_b64 s[30:31]4206 %vec0 = call <4 x float> asm "; def $0", "=s"()4207 %vec1 = call <4 x float> asm "; def $0", "=s"()4208 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 7, i32 7>4209 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4210 ret void4211}4212 4213define void @s_shuffle_v2f32_v4f32__u_0() {4214; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_0:4215; GFX900: ; %bb.0:4216; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4217; GFX900-NEXT: ;;#ASMSTART4218; GFX900-NEXT: ; def s[4:7]4219; GFX900-NEXT: ;;#ASMEND4220; GFX900-NEXT: s_mov_b32 s9, s44221; GFX900-NEXT: ;;#ASMSTART4222; GFX900-NEXT: ; use s[8:9]4223; GFX900-NEXT: ;;#ASMEND4224; GFX900-NEXT: s_setpc_b64 s[30:31]4225;4226; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_0:4227; GFX90A: ; %bb.0:4228; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4229; GFX90A-NEXT: ;;#ASMSTART4230; GFX90A-NEXT: ; def s[4:7]4231; GFX90A-NEXT: ;;#ASMEND4232; GFX90A-NEXT: s_mov_b32 s9, s44233; GFX90A-NEXT: ;;#ASMSTART4234; GFX90A-NEXT: ; use s[8:9]4235; GFX90A-NEXT: ;;#ASMEND4236; GFX90A-NEXT: s_setpc_b64 s[30:31]4237;4238; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_0:4239; GFX942: ; %bb.0:4240; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4241; GFX942-NEXT: ;;#ASMSTART4242; GFX942-NEXT: ; def s[0:3]4243; GFX942-NEXT: ;;#ASMEND4244; GFX942-NEXT: s_mov_b32 s9, s04245; GFX942-NEXT: ;;#ASMSTART4246; GFX942-NEXT: ; use s[8:9]4247; GFX942-NEXT: ;;#ASMEND4248; GFX942-NEXT: s_setpc_b64 s[30:31]4249 %vec0 = call <4 x float> asm "; def $0", "=s"()4250 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 0>4251 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4252 ret void4253}4254 4255define void @s_shuffle_v2f32_v4f32__0_0() {4256; GFX9-LABEL: s_shuffle_v2f32_v4f32__0_0:4257; GFX9: ; %bb.0:4258; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4259; GFX9-NEXT: ;;#ASMSTART4260; GFX9-NEXT: ; def s[8:11]4261; GFX9-NEXT: ;;#ASMEND4262; GFX9-NEXT: s_mov_b32 s9, s84263; GFX9-NEXT: ;;#ASMSTART4264; GFX9-NEXT: ; use s[8:9]4265; GFX9-NEXT: ;;#ASMEND4266; GFX9-NEXT: s_setpc_b64 s[30:31]4267 %vec0 = call <4 x float> asm "; def $0", "=s"()4268 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> zeroinitializer4269 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4270 ret void4271}4272 4273define void @s_shuffle_v2f32_v4f32__1_0() {4274; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_0:4275; GFX900: ; %bb.0:4276; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4277; GFX900-NEXT: ;;#ASMSTART4278; GFX900-NEXT: ; def s[4:7]4279; GFX900-NEXT: ;;#ASMEND4280; GFX900-NEXT: s_mov_b32 s8, s54281; GFX900-NEXT: s_mov_b32 s9, s44282; GFX900-NEXT: ;;#ASMSTART4283; GFX900-NEXT: ; use s[8:9]4284; GFX900-NEXT: ;;#ASMEND4285; GFX900-NEXT: s_setpc_b64 s[30:31]4286;4287; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_0:4288; GFX90A: ; %bb.0:4289; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4290; GFX90A-NEXT: ;;#ASMSTART4291; GFX90A-NEXT: ; def s[4:7]4292; GFX90A-NEXT: ;;#ASMEND4293; GFX90A-NEXT: s_mov_b32 s8, s54294; GFX90A-NEXT: s_mov_b32 s9, s44295; GFX90A-NEXT: ;;#ASMSTART4296; GFX90A-NEXT: ; use s[8:9]4297; GFX90A-NEXT: ;;#ASMEND4298; GFX90A-NEXT: s_setpc_b64 s[30:31]4299;4300; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_0:4301; GFX942: ; %bb.0:4302; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4303; GFX942-NEXT: ;;#ASMSTART4304; GFX942-NEXT: ; def s[0:3]4305; GFX942-NEXT: ;;#ASMEND4306; GFX942-NEXT: s_mov_b32 s8, s14307; GFX942-NEXT: s_mov_b32 s9, s04308; GFX942-NEXT: ;;#ASMSTART4309; GFX942-NEXT: ; use s[8:9]4310; GFX942-NEXT: ;;#ASMEND4311; GFX942-NEXT: s_setpc_b64 s[30:31]4312 %vec0 = call <4 x float> asm "; def $0", "=s"()4313 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 0>4314 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4315 ret void4316}4317 4318define void @s_shuffle_v2f32_v4f32__2_0() {4319; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_0:4320; GFX900: ; %bb.0:4321; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4322; GFX900-NEXT: ;;#ASMSTART4323; GFX900-NEXT: ; def s[4:7]4324; GFX900-NEXT: ;;#ASMEND4325; GFX900-NEXT: s_mov_b32 s7, s44326; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]4327; GFX900-NEXT: ;;#ASMSTART4328; GFX900-NEXT: ; use s[8:9]4329; GFX900-NEXT: ;;#ASMEND4330; GFX900-NEXT: s_setpc_b64 s[30:31]4331;4332; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_0:4333; GFX90A: ; %bb.0:4334; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4335; GFX90A-NEXT: ;;#ASMSTART4336; GFX90A-NEXT: ; def s[4:7]4337; GFX90A-NEXT: ;;#ASMEND4338; GFX90A-NEXT: s_mov_b32 s7, s44339; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]4340; GFX90A-NEXT: ;;#ASMSTART4341; GFX90A-NEXT: ; use s[8:9]4342; GFX90A-NEXT: ;;#ASMEND4343; GFX90A-NEXT: s_setpc_b64 s[30:31]4344;4345; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_0:4346; GFX942: ; %bb.0:4347; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4348; GFX942-NEXT: ;;#ASMSTART4349; GFX942-NEXT: ; def s[0:3]4350; GFX942-NEXT: ;;#ASMEND4351; GFX942-NEXT: s_mov_b32 s3, s04352; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]4353; GFX942-NEXT: ;;#ASMSTART4354; GFX942-NEXT: ; use s[8:9]4355; GFX942-NEXT: ;;#ASMEND4356; GFX942-NEXT: s_setpc_b64 s[30:31]4357 %vec0 = call <4 x float> asm "; def $0", "=s"()4358 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 0>4359 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4360 ret void4361}4362 4363define void @s_shuffle_v2f32_v4f32__3_0() {4364; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_0:4365; GFX900: ; %bb.0:4366; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4367; GFX900-NEXT: ;;#ASMSTART4368; GFX900-NEXT: ; def s[4:7]4369; GFX900-NEXT: ;;#ASMEND4370; GFX900-NEXT: s_mov_b32 s8, s74371; GFX900-NEXT: s_mov_b32 s9, s44372; GFX900-NEXT: ;;#ASMSTART4373; GFX900-NEXT: ; use s[8:9]4374; GFX900-NEXT: ;;#ASMEND4375; GFX900-NEXT: s_setpc_b64 s[30:31]4376;4377; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_0:4378; GFX90A: ; %bb.0:4379; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4380; GFX90A-NEXT: ;;#ASMSTART4381; GFX90A-NEXT: ; def s[4:7]4382; GFX90A-NEXT: ;;#ASMEND4383; GFX90A-NEXT: s_mov_b32 s8, s74384; GFX90A-NEXT: s_mov_b32 s9, s44385; GFX90A-NEXT: ;;#ASMSTART4386; GFX90A-NEXT: ; use s[8:9]4387; GFX90A-NEXT: ;;#ASMEND4388; GFX90A-NEXT: s_setpc_b64 s[30:31]4389;4390; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_0:4391; GFX942: ; %bb.0:4392; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4393; GFX942-NEXT: ;;#ASMSTART4394; GFX942-NEXT: ; def s[0:3]4395; GFX942-NEXT: ;;#ASMEND4396; GFX942-NEXT: s_mov_b32 s8, s34397; GFX942-NEXT: s_mov_b32 s9, s04398; GFX942-NEXT: ;;#ASMSTART4399; GFX942-NEXT: ; use s[8:9]4400; GFX942-NEXT: ;;#ASMEND4401; GFX942-NEXT: s_setpc_b64 s[30:31]4402 %vec0 = call <4 x float> asm "; def $0", "=s"()4403 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 0>4404 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4405 ret void4406}4407 4408define void @s_shuffle_v2f32_v4f32__4_0() {4409; GFX900-LABEL: s_shuffle_v2f32_v4f32__4_0:4410; GFX900: ; %bb.0:4411; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4412; GFX900-NEXT: ;;#ASMSTART4413; GFX900-NEXT: ; def s[4:7]4414; GFX900-NEXT: ;;#ASMEND4415; GFX900-NEXT: s_mov_b32 s9, s44416; GFX900-NEXT: ;;#ASMSTART4417; GFX900-NEXT: ; use s[8:9]4418; GFX900-NEXT: ;;#ASMEND4419; GFX900-NEXT: s_setpc_b64 s[30:31]4420;4421; GFX90A-LABEL: s_shuffle_v2f32_v4f32__4_0:4422; GFX90A: ; %bb.0:4423; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4424; GFX90A-NEXT: ;;#ASMSTART4425; GFX90A-NEXT: ; def s[4:7]4426; GFX90A-NEXT: ;;#ASMEND4427; GFX90A-NEXT: s_mov_b32 s9, s44428; GFX90A-NEXT: ;;#ASMSTART4429; GFX90A-NEXT: ; use s[8:9]4430; GFX90A-NEXT: ;;#ASMEND4431; GFX90A-NEXT: s_setpc_b64 s[30:31]4432;4433; GFX942-LABEL: s_shuffle_v2f32_v4f32__4_0:4434; GFX942: ; %bb.0:4435; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4436; GFX942-NEXT: ;;#ASMSTART4437; GFX942-NEXT: ; def s[0:3]4438; GFX942-NEXT: ;;#ASMEND4439; GFX942-NEXT: s_mov_b32 s9, s04440; GFX942-NEXT: ;;#ASMSTART4441; GFX942-NEXT: ; use s[8:9]4442; GFX942-NEXT: ;;#ASMEND4443; GFX942-NEXT: s_setpc_b64 s[30:31]4444 %vec0 = call <4 x float> asm "; def $0", "=s"()4445 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 0>4446 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4447 ret void4448}4449 4450define void @s_shuffle_v2f32_v4f32__5_0() {4451; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_0:4452; GFX900: ; %bb.0:4453; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4454; GFX900-NEXT: ;;#ASMSTART4455; GFX900-NEXT: ; def s[8:11]4456; GFX900-NEXT: ;;#ASMEND4457; GFX900-NEXT: ;;#ASMSTART4458; GFX900-NEXT: ; def s[4:7]4459; GFX900-NEXT: ;;#ASMEND4460; GFX900-NEXT: s_mov_b32 s8, s94461; GFX900-NEXT: s_mov_b32 s9, s44462; GFX900-NEXT: ;;#ASMSTART4463; GFX900-NEXT: ; use s[8:9]4464; GFX900-NEXT: ;;#ASMEND4465; GFX900-NEXT: s_setpc_b64 s[30:31]4466;4467; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_0:4468; GFX90A: ; %bb.0:4469; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4470; GFX90A-NEXT: ;;#ASMSTART4471; GFX90A-NEXT: ; def s[8:11]4472; GFX90A-NEXT: ;;#ASMEND4473; GFX90A-NEXT: ;;#ASMSTART4474; GFX90A-NEXT: ; def s[4:7]4475; GFX90A-NEXT: ;;#ASMEND4476; GFX90A-NEXT: s_mov_b32 s8, s94477; GFX90A-NEXT: s_mov_b32 s9, s44478; GFX90A-NEXT: ;;#ASMSTART4479; GFX90A-NEXT: ; use s[8:9]4480; GFX90A-NEXT: ;;#ASMEND4481; GFX90A-NEXT: s_setpc_b64 s[30:31]4482;4483; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_0:4484; GFX942: ; %bb.0:4485; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4486; GFX942-NEXT: ;;#ASMSTART4487; GFX942-NEXT: ; def s[0:3]4488; GFX942-NEXT: ;;#ASMEND4489; GFX942-NEXT: ;;#ASMSTART4490; GFX942-NEXT: ; def s[4:7]4491; GFX942-NEXT: ;;#ASMEND4492; GFX942-NEXT: s_mov_b32 s8, s54493; GFX942-NEXT: s_mov_b32 s9, s04494; GFX942-NEXT: ;;#ASMSTART4495; GFX942-NEXT: ; use s[8:9]4496; GFX942-NEXT: ;;#ASMEND4497; GFX942-NEXT: s_setpc_b64 s[30:31]4498 %vec0 = call <4 x float> asm "; def $0", "=s"()4499 %vec1 = call <4 x float> asm "; def $0", "=s"()4500 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 0>4501 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4502 ret void4503}4504 4505define void @s_shuffle_v2f32_v4f32__6_0() {4506; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_0:4507; GFX900: ; %bb.0:4508; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4509; GFX900-NEXT: ;;#ASMSTART4510; GFX900-NEXT: ; def s[8:11]4511; GFX900-NEXT: ;;#ASMEND4512; GFX900-NEXT: ;;#ASMSTART4513; GFX900-NEXT: ; def s[4:7]4514; GFX900-NEXT: ;;#ASMEND4515; GFX900-NEXT: s_mov_b32 s11, s44516; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]4517; GFX900-NEXT: ;;#ASMSTART4518; GFX900-NEXT: ; use s[8:9]4519; GFX900-NEXT: ;;#ASMEND4520; GFX900-NEXT: s_setpc_b64 s[30:31]4521;4522; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_0:4523; GFX90A: ; %bb.0:4524; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4525; GFX90A-NEXT: ;;#ASMSTART4526; GFX90A-NEXT: ; def s[8:11]4527; GFX90A-NEXT: ;;#ASMEND4528; GFX90A-NEXT: ;;#ASMSTART4529; GFX90A-NEXT: ; def s[4:7]4530; GFX90A-NEXT: ;;#ASMEND4531; GFX90A-NEXT: s_mov_b32 s11, s44532; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]4533; GFX90A-NEXT: ;;#ASMSTART4534; GFX90A-NEXT: ; use s[8:9]4535; GFX90A-NEXT: ;;#ASMEND4536; GFX90A-NEXT: s_setpc_b64 s[30:31]4537;4538; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_0:4539; GFX942: ; %bb.0:4540; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4541; GFX942-NEXT: ;;#ASMSTART4542; GFX942-NEXT: ; def s[4:7]4543; GFX942-NEXT: ;;#ASMEND4544; GFX942-NEXT: ;;#ASMSTART4545; GFX942-NEXT: ; def s[0:3]4546; GFX942-NEXT: ;;#ASMEND4547; GFX942-NEXT: s_mov_b32 s7, s04548; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]4549; GFX942-NEXT: ;;#ASMSTART4550; GFX942-NEXT: ; use s[8:9]4551; GFX942-NEXT: ;;#ASMEND4552; GFX942-NEXT: s_setpc_b64 s[30:31]4553 %vec0 = call <4 x float> asm "; def $0", "=s"()4554 %vec1 = call <4 x float> asm "; def $0", "=s"()4555 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 0>4556 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4557 ret void4558}4559 4560define void @s_shuffle_v2f32_v4f32__u_1() {4561; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_1:4562; GFX900: ; %bb.0:4563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4564; GFX900-NEXT: ;;#ASMSTART4565; GFX900-NEXT: ; def s[8:11]4566; GFX900-NEXT: ;;#ASMEND4567; GFX900-NEXT: ;;#ASMSTART4568; GFX900-NEXT: ; use s[8:9]4569; GFX900-NEXT: ;;#ASMEND4570; GFX900-NEXT: s_setpc_b64 s[30:31]4571;4572; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_1:4573; GFX90A: ; %bb.0:4574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4575; GFX90A-NEXT: ;;#ASMSTART4576; GFX90A-NEXT: ; def s[8:11]4577; GFX90A-NEXT: ;;#ASMEND4578; GFX90A-NEXT: ;;#ASMSTART4579; GFX90A-NEXT: ; use s[8:9]4580; GFX90A-NEXT: ;;#ASMEND4581; GFX90A-NEXT: s_setpc_b64 s[30:31]4582;4583; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_1:4584; GFX942: ; %bb.0:4585; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4586; GFX942-NEXT: ;;#ASMSTART4587; GFX942-NEXT: ; def s[8:11]4588; GFX942-NEXT: ;;#ASMEND4589; GFX942-NEXT: s_nop 04590; GFX942-NEXT: ;;#ASMSTART4591; GFX942-NEXT: ; use s[8:9]4592; GFX942-NEXT: ;;#ASMEND4593; GFX942-NEXT: s_setpc_b64 s[30:31]4594 %vec0 = call <4 x float> asm "; def $0", "=s"()4595 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 1>4596 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4597 ret void4598}4599 4600define void @s_shuffle_v2f32_v4f32__0_1() {4601; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_1:4602; GFX900: ; %bb.0:4603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4604; GFX900-NEXT: ;;#ASMSTART4605; GFX900-NEXT: ; def s[8:11]4606; GFX900-NEXT: ;;#ASMEND4607; GFX900-NEXT: ;;#ASMSTART4608; GFX900-NEXT: ; use s[8:9]4609; GFX900-NEXT: ;;#ASMEND4610; GFX900-NEXT: s_setpc_b64 s[30:31]4611;4612; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_1:4613; GFX90A: ; %bb.0:4614; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4615; GFX90A-NEXT: ;;#ASMSTART4616; GFX90A-NEXT: ; def s[8:11]4617; GFX90A-NEXT: ;;#ASMEND4618; GFX90A-NEXT: ;;#ASMSTART4619; GFX90A-NEXT: ; use s[8:9]4620; GFX90A-NEXT: ;;#ASMEND4621; GFX90A-NEXT: s_setpc_b64 s[30:31]4622;4623; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_1:4624; GFX942: ; %bb.0:4625; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4626; GFX942-NEXT: ;;#ASMSTART4627; GFX942-NEXT: ; def s[8:11]4628; GFX942-NEXT: ;;#ASMEND4629; GFX942-NEXT: s_nop 04630; GFX942-NEXT: ;;#ASMSTART4631; GFX942-NEXT: ; use s[8:9]4632; GFX942-NEXT: ;;#ASMEND4633; GFX942-NEXT: s_setpc_b64 s[30:31]4634 %vec0 = call <4 x float> asm "; def $0", "=s"()4635 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 1>4636 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4637 ret void4638}4639 4640define void @s_shuffle_v2f32_v4f32__1_1() {4641; GFX9-LABEL: s_shuffle_v2f32_v4f32__1_1:4642; GFX9: ; %bb.0:4643; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4644; GFX9-NEXT: ;;#ASMSTART4645; GFX9-NEXT: ; def s[8:11]4646; GFX9-NEXT: ;;#ASMEND4647; GFX9-NEXT: s_mov_b32 s8, s94648; GFX9-NEXT: ;;#ASMSTART4649; GFX9-NEXT: ; use s[8:9]4650; GFX9-NEXT: ;;#ASMEND4651; GFX9-NEXT: s_setpc_b64 s[30:31]4652 %vec0 = call <4 x float> asm "; def $0", "=s"()4653 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 1>4654 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4655 ret void4656}4657 4658define void @s_shuffle_v2f32_v4f32__2_1() {4659; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_1:4660; GFX900: ; %bb.0:4661; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4662; GFX900-NEXT: ;;#ASMSTART4663; GFX900-NEXT: ; def s[4:7]4664; GFX900-NEXT: ;;#ASMEND4665; GFX900-NEXT: s_mov_b32 s7, s54666; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]4667; GFX900-NEXT: ;;#ASMSTART4668; GFX900-NEXT: ; use s[8:9]4669; GFX900-NEXT: ;;#ASMEND4670; GFX900-NEXT: s_setpc_b64 s[30:31]4671;4672; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_1:4673; GFX90A: ; %bb.0:4674; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4675; GFX90A-NEXT: ;;#ASMSTART4676; GFX90A-NEXT: ; def s[4:7]4677; GFX90A-NEXT: ;;#ASMEND4678; GFX90A-NEXT: s_mov_b32 s7, s54679; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]4680; GFX90A-NEXT: ;;#ASMSTART4681; GFX90A-NEXT: ; use s[8:9]4682; GFX90A-NEXT: ;;#ASMEND4683; GFX90A-NEXT: s_setpc_b64 s[30:31]4684;4685; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_1:4686; GFX942: ; %bb.0:4687; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4688; GFX942-NEXT: ;;#ASMSTART4689; GFX942-NEXT: ; def s[0:3]4690; GFX942-NEXT: ;;#ASMEND4691; GFX942-NEXT: s_mov_b32 s3, s14692; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]4693; GFX942-NEXT: ;;#ASMSTART4694; GFX942-NEXT: ; use s[8:9]4695; GFX942-NEXT: ;;#ASMEND4696; GFX942-NEXT: s_setpc_b64 s[30:31]4697 %vec0 = call <4 x float> asm "; def $0", "=s"()4698 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 1>4699 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4700 ret void4701}4702 4703define void @s_shuffle_v2f32_v4f32__3_1() {4704; GFX9-LABEL: s_shuffle_v2f32_v4f32__3_1:4705; GFX9: ; %bb.0:4706; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4707; GFX9-NEXT: ;;#ASMSTART4708; GFX9-NEXT: ; def s[8:11]4709; GFX9-NEXT: ;;#ASMEND4710; GFX9-NEXT: s_mov_b32 s8, s114711; GFX9-NEXT: ;;#ASMSTART4712; GFX9-NEXT: ; use s[8:9]4713; GFX9-NEXT: ;;#ASMEND4714; GFX9-NEXT: s_setpc_b64 s[30:31]4715 %vec0 = call <4 x float> asm "; def $0", "=s"()4716 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 1>4717 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4718 ret void4719}4720 4721define void @s_shuffle_v2f32_v4f32__4_1() {4722; GFX900-LABEL: s_shuffle_v2f32_v4f32__4_1:4723; GFX900: ; %bb.0:4724; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4725; GFX900-NEXT: ;;#ASMSTART4726; GFX900-NEXT: ; def s[8:11]4727; GFX900-NEXT: ;;#ASMEND4728; GFX900-NEXT: ;;#ASMSTART4729; GFX900-NEXT: ; use s[8:9]4730; GFX900-NEXT: ;;#ASMEND4731; GFX900-NEXT: s_setpc_b64 s[30:31]4732;4733; GFX90A-LABEL: s_shuffle_v2f32_v4f32__4_1:4734; GFX90A: ; %bb.0:4735; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4736; GFX90A-NEXT: ;;#ASMSTART4737; GFX90A-NEXT: ; def s[8:11]4738; GFX90A-NEXT: ;;#ASMEND4739; GFX90A-NEXT: ;;#ASMSTART4740; GFX90A-NEXT: ; use s[8:9]4741; GFX90A-NEXT: ;;#ASMEND4742; GFX90A-NEXT: s_setpc_b64 s[30:31]4743;4744; GFX942-LABEL: s_shuffle_v2f32_v4f32__4_1:4745; GFX942: ; %bb.0:4746; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4747; GFX942-NEXT: ;;#ASMSTART4748; GFX942-NEXT: ; def s[8:11]4749; GFX942-NEXT: ;;#ASMEND4750; GFX942-NEXT: s_nop 04751; GFX942-NEXT: ;;#ASMSTART4752; GFX942-NEXT: ; use s[8:9]4753; GFX942-NEXT: ;;#ASMEND4754; GFX942-NEXT: s_setpc_b64 s[30:31]4755 %vec0 = call <4 x float> asm "; def $0", "=s"()4756 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 1>4757 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4758 ret void4759}4760 4761define void @s_shuffle_v2f32_v4f32__5_1() {4762; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_1:4763; GFX900: ; %bb.0:4764; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4765; GFX900-NEXT: ;;#ASMSTART4766; GFX900-NEXT: ; def s[8:11]4767; GFX900-NEXT: ;;#ASMEND4768; GFX900-NEXT: ;;#ASMSTART4769; GFX900-NEXT: ; def s[4:7]4770; GFX900-NEXT: ;;#ASMEND4771; GFX900-NEXT: s_mov_b32 s8, s54772; GFX900-NEXT: ;;#ASMSTART4773; GFX900-NEXT: ; use s[8:9]4774; GFX900-NEXT: ;;#ASMEND4775; GFX900-NEXT: s_setpc_b64 s[30:31]4776;4777; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_1:4778; GFX90A: ; %bb.0:4779; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4780; GFX90A-NEXT: ;;#ASMSTART4781; GFX90A-NEXT: ; def s[8:11]4782; GFX90A-NEXT: ;;#ASMEND4783; GFX90A-NEXT: ;;#ASMSTART4784; GFX90A-NEXT: ; def s[4:7]4785; GFX90A-NEXT: ;;#ASMEND4786; GFX90A-NEXT: s_mov_b32 s8, s54787; GFX90A-NEXT: ;;#ASMSTART4788; GFX90A-NEXT: ; use s[8:9]4789; GFX90A-NEXT: ;;#ASMEND4790; GFX90A-NEXT: s_setpc_b64 s[30:31]4791;4792; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_1:4793; GFX942: ; %bb.0:4794; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4795; GFX942-NEXT: ;;#ASMSTART4796; GFX942-NEXT: ; def s[8:11]4797; GFX942-NEXT: ;;#ASMEND4798; GFX942-NEXT: ;;#ASMSTART4799; GFX942-NEXT: ; def s[0:3]4800; GFX942-NEXT: ;;#ASMEND4801; GFX942-NEXT: s_mov_b32 s8, s14802; GFX942-NEXT: ;;#ASMSTART4803; GFX942-NEXT: ; use s[8:9]4804; GFX942-NEXT: ;;#ASMEND4805; GFX942-NEXT: s_setpc_b64 s[30:31]4806 %vec0 = call <4 x float> asm "; def $0", "=s"()4807 %vec1 = call <4 x float> asm "; def $0", "=s"()4808 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 1>4809 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4810 ret void4811}4812 4813define void @s_shuffle_v2f32_v4f32__6_1() {4814; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_1:4815; GFX900: ; %bb.0:4816; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4817; GFX900-NEXT: ;;#ASMSTART4818; GFX900-NEXT: ; def s[8:11]4819; GFX900-NEXT: ;;#ASMEND4820; GFX900-NEXT: ;;#ASMSTART4821; GFX900-NEXT: ; def s[4:7]4822; GFX900-NEXT: ;;#ASMEND4823; GFX900-NEXT: s_mov_b32 s11, s54824; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]4825; GFX900-NEXT: ;;#ASMSTART4826; GFX900-NEXT: ; use s[8:9]4827; GFX900-NEXT: ;;#ASMEND4828; GFX900-NEXT: s_setpc_b64 s[30:31]4829;4830; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_1:4831; GFX90A: ; %bb.0:4832; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4833; GFX90A-NEXT: ;;#ASMSTART4834; GFX90A-NEXT: ; def s[8:11]4835; GFX90A-NEXT: ;;#ASMEND4836; GFX90A-NEXT: ;;#ASMSTART4837; GFX90A-NEXT: ; def s[4:7]4838; GFX90A-NEXT: ;;#ASMEND4839; GFX90A-NEXT: s_mov_b32 s11, s54840; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]4841; GFX90A-NEXT: ;;#ASMSTART4842; GFX90A-NEXT: ; use s[8:9]4843; GFX90A-NEXT: ;;#ASMEND4844; GFX90A-NEXT: s_setpc_b64 s[30:31]4845;4846; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_1:4847; GFX942: ; %bb.0:4848; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4849; GFX942-NEXT: ;;#ASMSTART4850; GFX942-NEXT: ; def s[4:7]4851; GFX942-NEXT: ;;#ASMEND4852; GFX942-NEXT: ;;#ASMSTART4853; GFX942-NEXT: ; def s[0:3]4854; GFX942-NEXT: ;;#ASMEND4855; GFX942-NEXT: s_mov_b32 s7, s14856; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]4857; GFX942-NEXT: ;;#ASMSTART4858; GFX942-NEXT: ; use s[8:9]4859; GFX942-NEXT: ;;#ASMEND4860; GFX942-NEXT: s_setpc_b64 s[30:31]4861 %vec0 = call <4 x float> asm "; def $0", "=s"()4862 %vec1 = call <4 x float> asm "; def $0", "=s"()4863 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 1>4864 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4865 ret void4866}4867 4868define void @s_shuffle_v2f32_v4f32__u_2() {4869; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_2:4870; GFX900: ; %bb.0:4871; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4872; GFX900-NEXT: ;;#ASMSTART4873; GFX900-NEXT: ; def s[4:7]4874; GFX900-NEXT: ;;#ASMEND4875; GFX900-NEXT: s_mov_b32 s9, s64876; GFX900-NEXT: ;;#ASMSTART4877; GFX900-NEXT: ; use s[8:9]4878; GFX900-NEXT: ;;#ASMEND4879; GFX900-NEXT: s_setpc_b64 s[30:31]4880;4881; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_2:4882; GFX90A: ; %bb.0:4883; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4884; GFX90A-NEXT: ;;#ASMSTART4885; GFX90A-NEXT: ; def s[4:7]4886; GFX90A-NEXT: ;;#ASMEND4887; GFX90A-NEXT: s_mov_b32 s9, s64888; GFX90A-NEXT: ;;#ASMSTART4889; GFX90A-NEXT: ; use s[8:9]4890; GFX90A-NEXT: ;;#ASMEND4891; GFX90A-NEXT: s_setpc_b64 s[30:31]4892;4893; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_2:4894; GFX942: ; %bb.0:4895; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4896; GFX942-NEXT: ;;#ASMSTART4897; GFX942-NEXT: ; def s[0:3]4898; GFX942-NEXT: ;;#ASMEND4899; GFX942-NEXT: s_mov_b32 s9, s24900; GFX942-NEXT: ;;#ASMSTART4901; GFX942-NEXT: ; use s[8:9]4902; GFX942-NEXT: ;;#ASMEND4903; GFX942-NEXT: s_setpc_b64 s[30:31]4904 %vec0 = call <4 x float> asm "; def $0", "=s"()4905 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 2>4906 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4907 ret void4908}4909 4910define void @s_shuffle_v2f32_v4f32__0_2() {4911; GFX9-LABEL: s_shuffle_v2f32_v4f32__0_2:4912; GFX9: ; %bb.0:4913; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4914; GFX9-NEXT: ;;#ASMSTART4915; GFX9-NEXT: ; def s[8:11]4916; GFX9-NEXT: ;;#ASMEND4917; GFX9-NEXT: s_mov_b32 s9, s104918; GFX9-NEXT: ;;#ASMSTART4919; GFX9-NEXT: ; use s[8:9]4920; GFX9-NEXT: ;;#ASMEND4921; GFX9-NEXT: s_setpc_b64 s[30:31]4922 %vec0 = call <4 x float> asm "; def $0", "=s"()4923 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 2>4924 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4925 ret void4926}4927 4928define void @s_shuffle_v2f32_v4f32__1_2() {4929; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_2:4930; GFX900: ; %bb.0:4931; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4932; GFX900-NEXT: ;;#ASMSTART4933; GFX900-NEXT: ; def s[4:7]4934; GFX900-NEXT: ;;#ASMEND4935; GFX900-NEXT: s_mov_b32 s8, s54936; GFX900-NEXT: s_mov_b32 s9, s64937; GFX900-NEXT: ;;#ASMSTART4938; GFX900-NEXT: ; use s[8:9]4939; GFX900-NEXT: ;;#ASMEND4940; GFX900-NEXT: s_setpc_b64 s[30:31]4941;4942; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_2:4943; GFX90A: ; %bb.0:4944; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4945; GFX90A-NEXT: ;;#ASMSTART4946; GFX90A-NEXT: ; def s[4:7]4947; GFX90A-NEXT: ;;#ASMEND4948; GFX90A-NEXT: s_mov_b32 s8, s54949; GFX90A-NEXT: s_mov_b32 s9, s64950; GFX90A-NEXT: ;;#ASMSTART4951; GFX90A-NEXT: ; use s[8:9]4952; GFX90A-NEXT: ;;#ASMEND4953; GFX90A-NEXT: s_setpc_b64 s[30:31]4954;4955; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_2:4956; GFX942: ; %bb.0:4957; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4958; GFX942-NEXT: ;;#ASMSTART4959; GFX942-NEXT: ; def s[0:3]4960; GFX942-NEXT: ;;#ASMEND4961; GFX942-NEXT: s_mov_b32 s8, s14962; GFX942-NEXT: s_mov_b32 s9, s24963; GFX942-NEXT: ;;#ASMSTART4964; GFX942-NEXT: ; use s[8:9]4965; GFX942-NEXT: ;;#ASMEND4966; GFX942-NEXT: s_setpc_b64 s[30:31]4967 %vec0 = call <4 x float> asm "; def $0", "=s"()4968 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 2>4969 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)4970 ret void4971}4972 4973define void @s_shuffle_v2f32_v4f32__2_2() {4974; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_2:4975; GFX900: ; %bb.0:4976; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4977; GFX900-NEXT: ;;#ASMSTART4978; GFX900-NEXT: ; def s[4:7]4979; GFX900-NEXT: ;;#ASMEND4980; GFX900-NEXT: s_mov_b32 s7, s64981; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]4982; GFX900-NEXT: ;;#ASMSTART4983; GFX900-NEXT: ; use s[8:9]4984; GFX900-NEXT: ;;#ASMEND4985; GFX900-NEXT: s_setpc_b64 s[30:31]4986;4987; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_2:4988; GFX90A: ; %bb.0:4989; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4990; GFX90A-NEXT: ;;#ASMSTART4991; GFX90A-NEXT: ; def s[4:7]4992; GFX90A-NEXT: ;;#ASMEND4993; GFX90A-NEXT: s_mov_b32 s7, s64994; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]4995; GFX90A-NEXT: ;;#ASMSTART4996; GFX90A-NEXT: ; use s[8:9]4997; GFX90A-NEXT: ;;#ASMEND4998; GFX90A-NEXT: s_setpc_b64 s[30:31]4999;5000; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_2:5001; GFX942: ; %bb.0:5002; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5003; GFX942-NEXT: ;;#ASMSTART5004; GFX942-NEXT: ; def s[0:3]5005; GFX942-NEXT: ;;#ASMEND5006; GFX942-NEXT: s_mov_b32 s3, s25007; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5008; GFX942-NEXT: ;;#ASMSTART5009; GFX942-NEXT: ; use s[8:9]5010; GFX942-NEXT: ;;#ASMEND5011; GFX942-NEXT: s_setpc_b64 s[30:31]5012 %vec0 = call <4 x float> asm "; def $0", "=s"()5013 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 2>5014 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5015 ret void5016}5017 5018define void @s_shuffle_v2f32_v4f32__3_2() {5019; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_2:5020; GFX900: ; %bb.0:5021; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5022; GFX900-NEXT: ;;#ASMSTART5023; GFX900-NEXT: ; def s[4:7]5024; GFX900-NEXT: ;;#ASMEND5025; GFX900-NEXT: s_mov_b32 s8, s75026; GFX900-NEXT: s_mov_b32 s9, s65027; GFX900-NEXT: ;;#ASMSTART5028; GFX900-NEXT: ; use s[8:9]5029; GFX900-NEXT: ;;#ASMEND5030; GFX900-NEXT: s_setpc_b64 s[30:31]5031;5032; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_2:5033; GFX90A: ; %bb.0:5034; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5035; GFX90A-NEXT: ;;#ASMSTART5036; GFX90A-NEXT: ; def s[4:7]5037; GFX90A-NEXT: ;;#ASMEND5038; GFX90A-NEXT: s_mov_b32 s8, s75039; GFX90A-NEXT: s_mov_b32 s9, s65040; GFX90A-NEXT: ;;#ASMSTART5041; GFX90A-NEXT: ; use s[8:9]5042; GFX90A-NEXT: ;;#ASMEND5043; GFX90A-NEXT: s_setpc_b64 s[30:31]5044;5045; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_2:5046; GFX942: ; %bb.0:5047; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5048; GFX942-NEXT: ;;#ASMSTART5049; GFX942-NEXT: ; def s[0:3]5050; GFX942-NEXT: ;;#ASMEND5051; GFX942-NEXT: s_mov_b32 s8, s35052; GFX942-NEXT: s_mov_b32 s9, s25053; GFX942-NEXT: ;;#ASMSTART5054; GFX942-NEXT: ; use s[8:9]5055; GFX942-NEXT: ;;#ASMEND5056; GFX942-NEXT: s_setpc_b64 s[30:31]5057 %vec0 = call <4 x float> asm "; def $0", "=s"()5058 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 2>5059 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5060 ret void5061}5062 5063define void @s_shuffle_v2f32_v4f32__4_2() {5064; GFX900-LABEL: s_shuffle_v2f32_v4f32__4_2:5065; GFX900: ; %bb.0:5066; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5067; GFX900-NEXT: ;;#ASMSTART5068; GFX900-NEXT: ; def s[4:7]5069; GFX900-NEXT: ;;#ASMEND5070; GFX900-NEXT: s_mov_b32 s9, s65071; GFX900-NEXT: ;;#ASMSTART5072; GFX900-NEXT: ; use s[8:9]5073; GFX900-NEXT: ;;#ASMEND5074; GFX900-NEXT: s_setpc_b64 s[30:31]5075;5076; GFX90A-LABEL: s_shuffle_v2f32_v4f32__4_2:5077; GFX90A: ; %bb.0:5078; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5079; GFX90A-NEXT: ;;#ASMSTART5080; GFX90A-NEXT: ; def s[4:7]5081; GFX90A-NEXT: ;;#ASMEND5082; GFX90A-NEXT: s_mov_b32 s9, s65083; GFX90A-NEXT: ;;#ASMSTART5084; GFX90A-NEXT: ; use s[8:9]5085; GFX90A-NEXT: ;;#ASMEND5086; GFX90A-NEXT: s_setpc_b64 s[30:31]5087;5088; GFX942-LABEL: s_shuffle_v2f32_v4f32__4_2:5089; GFX942: ; %bb.0:5090; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5091; GFX942-NEXT: ;;#ASMSTART5092; GFX942-NEXT: ; def s[0:3]5093; GFX942-NEXT: ;;#ASMEND5094; GFX942-NEXT: s_mov_b32 s9, s25095; GFX942-NEXT: ;;#ASMSTART5096; GFX942-NEXT: ; use s[8:9]5097; GFX942-NEXT: ;;#ASMEND5098; GFX942-NEXT: s_setpc_b64 s[30:31]5099 %vec0 = call <4 x float> asm "; def $0", "=s"()5100 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 2>5101 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5102 ret void5103}5104 5105define void @s_shuffle_v2f32_v4f32__5_2() {5106; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_2:5107; GFX900: ; %bb.0:5108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5109; GFX900-NEXT: ;;#ASMSTART5110; GFX900-NEXT: ; def s[8:11]5111; GFX900-NEXT: ;;#ASMEND5112; GFX900-NEXT: ;;#ASMSTART5113; GFX900-NEXT: ; def s[4:7]5114; GFX900-NEXT: ;;#ASMEND5115; GFX900-NEXT: s_mov_b32 s8, s95116; GFX900-NEXT: s_mov_b32 s9, s65117; GFX900-NEXT: ;;#ASMSTART5118; GFX900-NEXT: ; use s[8:9]5119; GFX900-NEXT: ;;#ASMEND5120; GFX900-NEXT: s_setpc_b64 s[30:31]5121;5122; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_2:5123; GFX90A: ; %bb.0:5124; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5125; GFX90A-NEXT: ;;#ASMSTART5126; GFX90A-NEXT: ; def s[8:11]5127; GFX90A-NEXT: ;;#ASMEND5128; GFX90A-NEXT: ;;#ASMSTART5129; GFX90A-NEXT: ; def s[4:7]5130; GFX90A-NEXT: ;;#ASMEND5131; GFX90A-NEXT: s_mov_b32 s8, s95132; GFX90A-NEXT: s_mov_b32 s9, s65133; GFX90A-NEXT: ;;#ASMSTART5134; GFX90A-NEXT: ; use s[8:9]5135; GFX90A-NEXT: ;;#ASMEND5136; GFX90A-NEXT: s_setpc_b64 s[30:31]5137;5138; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_2:5139; GFX942: ; %bb.0:5140; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5141; GFX942-NEXT: ;;#ASMSTART5142; GFX942-NEXT: ; def s[0:3]5143; GFX942-NEXT: ;;#ASMEND5144; GFX942-NEXT: ;;#ASMSTART5145; GFX942-NEXT: ; def s[4:7]5146; GFX942-NEXT: ;;#ASMEND5147; GFX942-NEXT: s_mov_b32 s8, s55148; GFX942-NEXT: s_mov_b32 s9, s25149; GFX942-NEXT: ;;#ASMSTART5150; GFX942-NEXT: ; use s[8:9]5151; GFX942-NEXT: ;;#ASMEND5152; GFX942-NEXT: s_setpc_b64 s[30:31]5153 %vec0 = call <4 x float> asm "; def $0", "=s"()5154 %vec1 = call <4 x float> asm "; def $0", "=s"()5155 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 2>5156 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5157 ret void5158}5159 5160define void @s_shuffle_v2f32_v4f32__6_2() {5161; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_2:5162; GFX900: ; %bb.0:5163; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5164; GFX900-NEXT: ;;#ASMSTART5165; GFX900-NEXT: ; def s[8:11]5166; GFX900-NEXT: ;;#ASMEND5167; GFX900-NEXT: ;;#ASMSTART5168; GFX900-NEXT: ; def s[4:7]5169; GFX900-NEXT: ;;#ASMEND5170; GFX900-NEXT: s_mov_b32 s11, s65171; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]5172; GFX900-NEXT: ;;#ASMSTART5173; GFX900-NEXT: ; use s[8:9]5174; GFX900-NEXT: ;;#ASMEND5175; GFX900-NEXT: s_setpc_b64 s[30:31]5176;5177; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_2:5178; GFX90A: ; %bb.0:5179; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5180; GFX90A-NEXT: ;;#ASMSTART5181; GFX90A-NEXT: ; def s[8:11]5182; GFX90A-NEXT: ;;#ASMEND5183; GFX90A-NEXT: ;;#ASMSTART5184; GFX90A-NEXT: ; def s[4:7]5185; GFX90A-NEXT: ;;#ASMEND5186; GFX90A-NEXT: s_mov_b32 s11, s65187; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]5188; GFX90A-NEXT: ;;#ASMSTART5189; GFX90A-NEXT: ; use s[8:9]5190; GFX90A-NEXT: ;;#ASMEND5191; GFX90A-NEXT: s_setpc_b64 s[30:31]5192;5193; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_2:5194; GFX942: ; %bb.0:5195; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5196; GFX942-NEXT: ;;#ASMSTART5197; GFX942-NEXT: ; def s[4:7]5198; GFX942-NEXT: ;;#ASMEND5199; GFX942-NEXT: ;;#ASMSTART5200; GFX942-NEXT: ; def s[0:3]5201; GFX942-NEXT: ;;#ASMEND5202; GFX942-NEXT: s_mov_b32 s7, s25203; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]5204; GFX942-NEXT: ;;#ASMSTART5205; GFX942-NEXT: ; use s[8:9]5206; GFX942-NEXT: ;;#ASMEND5207; GFX942-NEXT: s_setpc_b64 s[30:31]5208 %vec0 = call <4 x float> asm "; def $0", "=s"()5209 %vec1 = call <4 x float> asm "; def $0", "=s"()5210 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 2>5211 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5212 ret void5213}5214 5215define void @s_shuffle_v2f32_v4f32__u_3() {5216; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_3:5217; GFX900: ; %bb.0:5218; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5219; GFX900-NEXT: ;;#ASMSTART5220; GFX900-NEXT: ; def s[4:7]5221; GFX900-NEXT: ;;#ASMEND5222; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5223; GFX900-NEXT: ;;#ASMSTART5224; GFX900-NEXT: ; use s[8:9]5225; GFX900-NEXT: ;;#ASMEND5226; GFX900-NEXT: s_setpc_b64 s[30:31]5227;5228; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_3:5229; GFX90A: ; %bb.0:5230; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5231; GFX90A-NEXT: ;;#ASMSTART5232; GFX90A-NEXT: ; def s[4:7]5233; GFX90A-NEXT: ;;#ASMEND5234; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5235; GFX90A-NEXT: ;;#ASMSTART5236; GFX90A-NEXT: ; use s[8:9]5237; GFX90A-NEXT: ;;#ASMEND5238; GFX90A-NEXT: s_setpc_b64 s[30:31]5239;5240; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_3:5241; GFX942: ; %bb.0:5242; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5243; GFX942-NEXT: ;;#ASMSTART5244; GFX942-NEXT: ; def s[0:3]5245; GFX942-NEXT: ;;#ASMEND5246; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5247; GFX942-NEXT: ;;#ASMSTART5248; GFX942-NEXT: ; use s[8:9]5249; GFX942-NEXT: ;;#ASMEND5250; GFX942-NEXT: s_setpc_b64 s[30:31]5251 %vec0 = call <4 x float> asm "; def $0", "=s"()5252 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 3>5253 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5254 ret void5255}5256 5257define void @s_shuffle_v2f32_v4f32__0_3() {5258; GFX9-LABEL: s_shuffle_v2f32_v4f32__0_3:5259; GFX9: ; %bb.0:5260; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5261; GFX9-NEXT: ;;#ASMSTART5262; GFX9-NEXT: ; def s[8:11]5263; GFX9-NEXT: ;;#ASMEND5264; GFX9-NEXT: s_mov_b32 s9, s115265; GFX9-NEXT: ;;#ASMSTART5266; GFX9-NEXT: ; use s[8:9]5267; GFX9-NEXT: ;;#ASMEND5268; GFX9-NEXT: s_setpc_b64 s[30:31]5269 %vec0 = call <4 x float> asm "; def $0", "=s"()5270 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 3>5271 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5272 ret void5273}5274 5275define void @s_shuffle_v2f32_v4f32__1_3() {5276; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_3:5277; GFX900: ; %bb.0:5278; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5279; GFX900-NEXT: ;;#ASMSTART5280; GFX900-NEXT: ; def s[4:7]5281; GFX900-NEXT: ;;#ASMEND5282; GFX900-NEXT: s_mov_b32 s6, s55283; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5284; GFX900-NEXT: ;;#ASMSTART5285; GFX900-NEXT: ; use s[8:9]5286; GFX900-NEXT: ;;#ASMEND5287; GFX900-NEXT: s_setpc_b64 s[30:31]5288;5289; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_3:5290; GFX90A: ; %bb.0:5291; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5292; GFX90A-NEXT: ;;#ASMSTART5293; GFX90A-NEXT: ; def s[4:7]5294; GFX90A-NEXT: ;;#ASMEND5295; GFX90A-NEXT: s_mov_b32 s6, s55296; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5297; GFX90A-NEXT: ;;#ASMSTART5298; GFX90A-NEXT: ; use s[8:9]5299; GFX90A-NEXT: ;;#ASMEND5300; GFX90A-NEXT: s_setpc_b64 s[30:31]5301;5302; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_3:5303; GFX942: ; %bb.0:5304; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5305; GFX942-NEXT: ;;#ASMSTART5306; GFX942-NEXT: ; def s[0:3]5307; GFX942-NEXT: ;;#ASMEND5308; GFX942-NEXT: s_mov_b32 s2, s15309; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5310; GFX942-NEXT: ;;#ASMSTART5311; GFX942-NEXT: ; use s[8:9]5312; GFX942-NEXT: ;;#ASMEND5313; GFX942-NEXT: s_setpc_b64 s[30:31]5314 %vec0 = call <4 x float> asm "; def $0", "=s"()5315 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 3>5316 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5317 ret void5318}5319 5320define void @s_shuffle_v2f32_v4f32__2_3() {5321; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_3:5322; GFX900: ; %bb.0:5323; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5324; GFX900-NEXT: ;;#ASMSTART5325; GFX900-NEXT: ; def s[4:7]5326; GFX900-NEXT: ;;#ASMEND5327; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5328; GFX900-NEXT: ;;#ASMSTART5329; GFX900-NEXT: ; use s[8:9]5330; GFX900-NEXT: ;;#ASMEND5331; GFX900-NEXT: s_setpc_b64 s[30:31]5332;5333; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_3:5334; GFX90A: ; %bb.0:5335; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5336; GFX90A-NEXT: ;;#ASMSTART5337; GFX90A-NEXT: ; def s[4:7]5338; GFX90A-NEXT: ;;#ASMEND5339; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5340; GFX90A-NEXT: ;;#ASMSTART5341; GFX90A-NEXT: ; use s[8:9]5342; GFX90A-NEXT: ;;#ASMEND5343; GFX90A-NEXT: s_setpc_b64 s[30:31]5344;5345; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_3:5346; GFX942: ; %bb.0:5347; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5348; GFX942-NEXT: ;;#ASMSTART5349; GFX942-NEXT: ; def s[0:3]5350; GFX942-NEXT: ;;#ASMEND5351; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5352; GFX942-NEXT: ;;#ASMSTART5353; GFX942-NEXT: ; use s[8:9]5354; GFX942-NEXT: ;;#ASMEND5355; GFX942-NEXT: s_setpc_b64 s[30:31]5356 %vec0 = call <4 x float> asm "; def $0", "=s"()5357 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 3>5358 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5359 ret void5360}5361 5362define void @s_shuffle_v2f32_v4f32__3_3() {5363; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_3:5364; GFX900: ; %bb.0:5365; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5366; GFX900-NEXT: ;;#ASMSTART5367; GFX900-NEXT: ; def s[4:7]5368; GFX900-NEXT: ;;#ASMEND5369; GFX900-NEXT: s_mov_b32 s6, s75370; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5371; GFX900-NEXT: ;;#ASMSTART5372; GFX900-NEXT: ; use s[8:9]5373; GFX900-NEXT: ;;#ASMEND5374; GFX900-NEXT: s_setpc_b64 s[30:31]5375;5376; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_3:5377; GFX90A: ; %bb.0:5378; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5379; GFX90A-NEXT: ;;#ASMSTART5380; GFX90A-NEXT: ; def s[4:7]5381; GFX90A-NEXT: ;;#ASMEND5382; GFX90A-NEXT: s_mov_b32 s6, s75383; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5384; GFX90A-NEXT: ;;#ASMSTART5385; GFX90A-NEXT: ; use s[8:9]5386; GFX90A-NEXT: ;;#ASMEND5387; GFX90A-NEXT: s_setpc_b64 s[30:31]5388;5389; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_3:5390; GFX942: ; %bb.0:5391; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5392; GFX942-NEXT: ;;#ASMSTART5393; GFX942-NEXT: ; def s[0:3]5394; GFX942-NEXT: ;;#ASMEND5395; GFX942-NEXT: s_mov_b32 s2, s35396; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5397; GFX942-NEXT: ;;#ASMSTART5398; GFX942-NEXT: ; use s[8:9]5399; GFX942-NEXT: ;;#ASMEND5400; GFX942-NEXT: s_setpc_b64 s[30:31]5401 %vec0 = call <4 x float> asm "; def $0", "=s"()5402 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 3>5403 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5404 ret void5405}5406 5407define void @s_shuffle_v2f32_v4f32__4_3() {5408; GFX900-LABEL: s_shuffle_v2f32_v4f32__4_3:5409; GFX900: ; %bb.0:5410; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5411; GFX900-NEXT: ;;#ASMSTART5412; GFX900-NEXT: ; def s[4:7]5413; GFX900-NEXT: ;;#ASMEND5414; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5415; GFX900-NEXT: ;;#ASMSTART5416; GFX900-NEXT: ; use s[8:9]5417; GFX900-NEXT: ;;#ASMEND5418; GFX900-NEXT: s_setpc_b64 s[30:31]5419;5420; GFX90A-LABEL: s_shuffle_v2f32_v4f32__4_3:5421; GFX90A: ; %bb.0:5422; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5423; GFX90A-NEXT: ;;#ASMSTART5424; GFX90A-NEXT: ; def s[4:7]5425; GFX90A-NEXT: ;;#ASMEND5426; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5427; GFX90A-NEXT: ;;#ASMSTART5428; GFX90A-NEXT: ; use s[8:9]5429; GFX90A-NEXT: ;;#ASMEND5430; GFX90A-NEXT: s_setpc_b64 s[30:31]5431;5432; GFX942-LABEL: s_shuffle_v2f32_v4f32__4_3:5433; GFX942: ; %bb.0:5434; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5435; GFX942-NEXT: ;;#ASMSTART5436; GFX942-NEXT: ; def s[0:3]5437; GFX942-NEXT: ;;#ASMEND5438; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5439; GFX942-NEXT: ;;#ASMSTART5440; GFX942-NEXT: ; use s[8:9]5441; GFX942-NEXT: ;;#ASMEND5442; GFX942-NEXT: s_setpc_b64 s[30:31]5443 %vec0 = call <4 x float> asm "; def $0", "=s"()5444 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 3>5445 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5446 ret void5447}5448 5449define void @s_shuffle_v2f32_v4f32__5_3() {5450; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_3:5451; GFX900: ; %bb.0:5452; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5453; GFX900-NEXT: ;;#ASMSTART5454; GFX900-NEXT: ; def s[4:7]5455; GFX900-NEXT: ;;#ASMEND5456; GFX900-NEXT: ;;#ASMSTART5457; GFX900-NEXT: ; def s[8:11]5458; GFX900-NEXT: ;;#ASMEND5459; GFX900-NEXT: s_mov_b32 s6, s95460; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5461; GFX900-NEXT: ;;#ASMSTART5462; GFX900-NEXT: ; use s[8:9]5463; GFX900-NEXT: ;;#ASMEND5464; GFX900-NEXT: s_setpc_b64 s[30:31]5465;5466; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_3:5467; GFX90A: ; %bb.0:5468; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5469; GFX90A-NEXT: ;;#ASMSTART5470; GFX90A-NEXT: ; def s[4:7]5471; GFX90A-NEXT: ;;#ASMEND5472; GFX90A-NEXT: ;;#ASMSTART5473; GFX90A-NEXT: ; def s[8:11]5474; GFX90A-NEXT: ;;#ASMEND5475; GFX90A-NEXT: s_mov_b32 s6, s95476; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5477; GFX90A-NEXT: ;;#ASMSTART5478; GFX90A-NEXT: ; use s[8:9]5479; GFX90A-NEXT: ;;#ASMEND5480; GFX90A-NEXT: s_setpc_b64 s[30:31]5481;5482; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_3:5483; GFX942: ; %bb.0:5484; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5485; GFX942-NEXT: ;;#ASMSTART5486; GFX942-NEXT: ; def s[0:3]5487; GFX942-NEXT: ;;#ASMEND5488; GFX942-NEXT: ;;#ASMSTART5489; GFX942-NEXT: ; def s[4:7]5490; GFX942-NEXT: ;;#ASMEND5491; GFX942-NEXT: s_mov_b32 s2, s55492; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5493; GFX942-NEXT: ;;#ASMSTART5494; GFX942-NEXT: ; use s[8:9]5495; GFX942-NEXT: ;;#ASMEND5496; GFX942-NEXT: s_setpc_b64 s[30:31]5497 %vec0 = call <4 x float> asm "; def $0", "=s"()5498 %vec1 = call <4 x float> asm "; def $0", "=s"()5499 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 3>5500 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5501 ret void5502}5503 5504define void @s_shuffle_v2f32_v4f32__6_3() {5505; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_3:5506; GFX900: ; %bb.0:5507; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5508; GFX900-NEXT: ;;#ASMSTART5509; GFX900-NEXT: ; def s[8:11]5510; GFX900-NEXT: ;;#ASMEND5511; GFX900-NEXT: ;;#ASMSTART5512; GFX900-NEXT: ; def s[4:7]5513; GFX900-NEXT: ;;#ASMEND5514; GFX900-NEXT: s_mov_b32 s11, s75515; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]5516; GFX900-NEXT: ;;#ASMSTART5517; GFX900-NEXT: ; use s[8:9]5518; GFX900-NEXT: ;;#ASMEND5519; GFX900-NEXT: s_setpc_b64 s[30:31]5520;5521; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_3:5522; GFX90A: ; %bb.0:5523; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5524; GFX90A-NEXT: ;;#ASMSTART5525; GFX90A-NEXT: ; def s[8:11]5526; GFX90A-NEXT: ;;#ASMEND5527; GFX90A-NEXT: ;;#ASMSTART5528; GFX90A-NEXT: ; def s[4:7]5529; GFX90A-NEXT: ;;#ASMEND5530; GFX90A-NEXT: s_mov_b32 s11, s75531; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]5532; GFX90A-NEXT: ;;#ASMSTART5533; GFX90A-NEXT: ; use s[8:9]5534; GFX90A-NEXT: ;;#ASMEND5535; GFX90A-NEXT: s_setpc_b64 s[30:31]5536;5537; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_3:5538; GFX942: ; %bb.0:5539; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5540; GFX942-NEXT: ;;#ASMSTART5541; GFX942-NEXT: ; def s[4:7]5542; GFX942-NEXT: ;;#ASMEND5543; GFX942-NEXT: ;;#ASMSTART5544; GFX942-NEXT: ; def s[0:3]5545; GFX942-NEXT: ;;#ASMEND5546; GFX942-NEXT: s_mov_b32 s7, s35547; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]5548; GFX942-NEXT: ;;#ASMSTART5549; GFX942-NEXT: ; use s[8:9]5550; GFX942-NEXT: ;;#ASMEND5551; GFX942-NEXT: s_setpc_b64 s[30:31]5552 %vec0 = call <4 x float> asm "; def $0", "=s"()5553 %vec1 = call <4 x float> asm "; def $0", "=s"()5554 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 3>5555 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5556 ret void5557}5558 5559define void @s_shuffle_v2f32_v4f32__u_4() {5560; GFX9-LABEL: s_shuffle_v2f32_v4f32__u_4:5561; GFX9: ; %bb.0:5562; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5563; GFX9-NEXT: ;;#ASMSTART5564; GFX9-NEXT: ; use s[8:9]5565; GFX9-NEXT: ;;#ASMEND5566; GFX9-NEXT: s_setpc_b64 s[30:31]5567 %vec0 = call <4 x float> asm "; def $0", "=s"()5568 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 poison, i32 4>5569 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5570 ret void5571}5572 5573define void @s_shuffle_v2f32_v4f32__0_4() {5574; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_4:5575; GFX900: ; %bb.0:5576; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5577; GFX900-NEXT: ;;#ASMSTART5578; GFX900-NEXT: ; def s[8:11]5579; GFX900-NEXT: ;;#ASMEND5580; GFX900-NEXT: ;;#ASMSTART5581; GFX900-NEXT: ; use s[8:9]5582; GFX900-NEXT: ;;#ASMEND5583; GFX900-NEXT: s_setpc_b64 s[30:31]5584;5585; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_4:5586; GFX90A: ; %bb.0:5587; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5588; GFX90A-NEXT: ;;#ASMSTART5589; GFX90A-NEXT: ; def s[8:11]5590; GFX90A-NEXT: ;;#ASMEND5591; GFX90A-NEXT: ;;#ASMSTART5592; GFX90A-NEXT: ; use s[8:9]5593; GFX90A-NEXT: ;;#ASMEND5594; GFX90A-NEXT: s_setpc_b64 s[30:31]5595;5596; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_4:5597; GFX942: ; %bb.0:5598; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5599; GFX942-NEXT: ;;#ASMSTART5600; GFX942-NEXT: ; def s[8:11]5601; GFX942-NEXT: ;;#ASMEND5602; GFX942-NEXT: s_nop 05603; GFX942-NEXT: ;;#ASMSTART5604; GFX942-NEXT: ; use s[8:9]5605; GFX942-NEXT: ;;#ASMEND5606; GFX942-NEXT: s_setpc_b64 s[30:31]5607 %vec0 = call <4 x float> asm "; def $0", "=s"()5608 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 0, i32 4>5609 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5610 ret void5611}5612 5613define void @s_shuffle_v2f32_v4f32__1_4() {5614; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_4:5615; GFX900: ; %bb.0:5616; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5617; GFX900-NEXT: ;;#ASMSTART5618; GFX900-NEXT: ; def s[4:7]5619; GFX900-NEXT: ;;#ASMEND5620; GFX900-NEXT: s_mov_b32 s8, s55621; GFX900-NEXT: ;;#ASMSTART5622; GFX900-NEXT: ; use s[8:9]5623; GFX900-NEXT: ;;#ASMEND5624; GFX900-NEXT: s_setpc_b64 s[30:31]5625;5626; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_4:5627; GFX90A: ; %bb.0:5628; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5629; GFX90A-NEXT: ;;#ASMSTART5630; GFX90A-NEXT: ; def s[4:7]5631; GFX90A-NEXT: ;;#ASMEND5632; GFX90A-NEXT: s_mov_b32 s8, s55633; GFX90A-NEXT: ;;#ASMSTART5634; GFX90A-NEXT: ; use s[8:9]5635; GFX90A-NEXT: ;;#ASMEND5636; GFX90A-NEXT: s_setpc_b64 s[30:31]5637;5638; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_4:5639; GFX942: ; %bb.0:5640; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5641; GFX942-NEXT: ;;#ASMSTART5642; GFX942-NEXT: ; def s[0:3]5643; GFX942-NEXT: ;;#ASMEND5644; GFX942-NEXT: s_mov_b32 s8, s15645; GFX942-NEXT: ;;#ASMSTART5646; GFX942-NEXT: ; use s[8:9]5647; GFX942-NEXT: ;;#ASMEND5648; GFX942-NEXT: s_setpc_b64 s[30:31]5649 %vec0 = call <4 x float> asm "; def $0", "=s"()5650 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 1, i32 4>5651 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5652 ret void5653}5654 5655define void @s_shuffle_v2f32_v4f32__2_4() {5656; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_4:5657; GFX900: ; %bb.0:5658; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5659; GFX900-NEXT: ;;#ASMSTART5660; GFX900-NEXT: ; def s[4:7]5661; GFX900-NEXT: ;;#ASMEND5662; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5663; GFX900-NEXT: ;;#ASMSTART5664; GFX900-NEXT: ; use s[8:9]5665; GFX900-NEXT: ;;#ASMEND5666; GFX900-NEXT: s_setpc_b64 s[30:31]5667;5668; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_4:5669; GFX90A: ; %bb.0:5670; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5671; GFX90A-NEXT: ;;#ASMSTART5672; GFX90A-NEXT: ; def s[4:7]5673; GFX90A-NEXT: ;;#ASMEND5674; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5675; GFX90A-NEXT: ;;#ASMSTART5676; GFX90A-NEXT: ; use s[8:9]5677; GFX90A-NEXT: ;;#ASMEND5678; GFX90A-NEXT: s_setpc_b64 s[30:31]5679;5680; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_4:5681; GFX942: ; %bb.0:5682; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5683; GFX942-NEXT: ;;#ASMSTART5684; GFX942-NEXT: ; def s[0:3]5685; GFX942-NEXT: ;;#ASMEND5686; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5687; GFX942-NEXT: ;;#ASMSTART5688; GFX942-NEXT: ; use s[8:9]5689; GFX942-NEXT: ;;#ASMEND5690; GFX942-NEXT: s_setpc_b64 s[30:31]5691 %vec0 = call <4 x float> asm "; def $0", "=s"()5692 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 2, i32 4>5693 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5694 ret void5695}5696 5697define void @s_shuffle_v2f32_v4f32__3_4() {5698; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_4:5699; GFX900: ; %bb.0:5700; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5701; GFX900-NEXT: ;;#ASMSTART5702; GFX900-NEXT: ; def s[4:7]5703; GFX900-NEXT: ;;#ASMEND5704; GFX900-NEXT: s_mov_b32 s8, s75705; GFX900-NEXT: ;;#ASMSTART5706; GFX900-NEXT: ; use s[8:9]5707; GFX900-NEXT: ;;#ASMEND5708; GFX900-NEXT: s_setpc_b64 s[30:31]5709;5710; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_4:5711; GFX90A: ; %bb.0:5712; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5713; GFX90A-NEXT: ;;#ASMSTART5714; GFX90A-NEXT: ; def s[4:7]5715; GFX90A-NEXT: ;;#ASMEND5716; GFX90A-NEXT: s_mov_b32 s8, s75717; GFX90A-NEXT: ;;#ASMSTART5718; GFX90A-NEXT: ; use s[8:9]5719; GFX90A-NEXT: ;;#ASMEND5720; GFX90A-NEXT: s_setpc_b64 s[30:31]5721;5722; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_4:5723; GFX942: ; %bb.0:5724; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5725; GFX942-NEXT: ;;#ASMSTART5726; GFX942-NEXT: ; def s[0:3]5727; GFX942-NEXT: ;;#ASMEND5728; GFX942-NEXT: s_mov_b32 s8, s35729; GFX942-NEXT: ;;#ASMSTART5730; GFX942-NEXT: ; use s[8:9]5731; GFX942-NEXT: ;;#ASMEND5732; GFX942-NEXT: s_setpc_b64 s[30:31]5733 %vec0 = call <4 x float> asm "; def $0", "=s"()5734 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 3, i32 4>5735 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5736 ret void5737}5738 5739define void @s_shuffle_v2f32_v4f32__4_4() {5740; GFX9-LABEL: s_shuffle_v2f32_v4f32__4_4:5741; GFX9: ; %bb.0:5742; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5743; GFX9-NEXT: ;;#ASMSTART5744; GFX9-NEXT: ; use s[8:9]5745; GFX9-NEXT: ;;#ASMEND5746; GFX9-NEXT: s_setpc_b64 s[30:31]5747 %vec0 = call <4 x float> asm "; def $0", "=s"()5748 %shuf = shufflevector <4 x float> %vec0, <4 x float> poison, <2 x i32> <i32 4, i32 4>5749 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5750 ret void5751}5752 5753define void @s_shuffle_v2f32_v4f32__5_4() {5754; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_4:5755; GFX900: ; %bb.0:5756; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5757; GFX900-NEXT: ;;#ASMSTART5758; GFX900-NEXT: ; def s[4:7]5759; GFX900-NEXT: ;;#ASMEND5760; GFX900-NEXT: s_mov_b32 s8, s55761; GFX900-NEXT: s_mov_b32 s9, s45762; GFX900-NEXT: ;;#ASMSTART5763; GFX900-NEXT: ; use s[8:9]5764; GFX900-NEXT: ;;#ASMEND5765; GFX900-NEXT: s_setpc_b64 s[30:31]5766;5767; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_4:5768; GFX90A: ; %bb.0:5769; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5770; GFX90A-NEXT: ;;#ASMSTART5771; GFX90A-NEXT: ; def s[4:7]5772; GFX90A-NEXT: ;;#ASMEND5773; GFX90A-NEXT: s_mov_b32 s8, s55774; GFX90A-NEXT: s_mov_b32 s9, s45775; GFX90A-NEXT: ;;#ASMSTART5776; GFX90A-NEXT: ; use s[8:9]5777; GFX90A-NEXT: ;;#ASMEND5778; GFX90A-NEXT: s_setpc_b64 s[30:31]5779;5780; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_4:5781; GFX942: ; %bb.0:5782; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5783; GFX942-NEXT: ;;#ASMSTART5784; GFX942-NEXT: ; def s[0:3]5785; GFX942-NEXT: ;;#ASMEND5786; GFX942-NEXT: s_mov_b32 s8, s15787; GFX942-NEXT: s_mov_b32 s9, s05788; GFX942-NEXT: ;;#ASMSTART5789; GFX942-NEXT: ; use s[8:9]5790; GFX942-NEXT: ;;#ASMEND5791; GFX942-NEXT: s_setpc_b64 s[30:31]5792 %vec0 = call <4 x float> asm "; def $0", "=s"()5793 %vec1 = call <4 x float> asm "; def $0", "=s"()5794 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 4>5795 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5796 ret void5797}5798 5799define void @s_shuffle_v2f32_v4f32__6_4() {5800; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_4:5801; GFX900: ; %bb.0:5802; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5803; GFX900-NEXT: ;;#ASMSTART5804; GFX900-NEXT: ; def s[4:7]5805; GFX900-NEXT: ;;#ASMEND5806; GFX900-NEXT: s_mov_b32 s7, s45807; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]5808; GFX900-NEXT: ;;#ASMSTART5809; GFX900-NEXT: ; use s[8:9]5810; GFX900-NEXT: ;;#ASMEND5811; GFX900-NEXT: s_setpc_b64 s[30:31]5812;5813; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_4:5814; GFX90A: ; %bb.0:5815; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5816; GFX90A-NEXT: ;;#ASMSTART5817; GFX90A-NEXT: ; def s[4:7]5818; GFX90A-NEXT: ;;#ASMEND5819; GFX90A-NEXT: s_mov_b32 s7, s45820; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]5821; GFX90A-NEXT: ;;#ASMSTART5822; GFX90A-NEXT: ; use s[8:9]5823; GFX90A-NEXT: ;;#ASMEND5824; GFX90A-NEXT: s_setpc_b64 s[30:31]5825;5826; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_4:5827; GFX942: ; %bb.0:5828; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5829; GFX942-NEXT: ;;#ASMSTART5830; GFX942-NEXT: ; def s[0:3]5831; GFX942-NEXT: ;;#ASMEND5832; GFX942-NEXT: s_mov_b32 s3, s05833; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]5834; GFX942-NEXT: ;;#ASMSTART5835; GFX942-NEXT: ; use s[8:9]5836; GFX942-NEXT: ;;#ASMEND5837; GFX942-NEXT: s_setpc_b64 s[30:31]5838 %vec0 = call <4 x float> asm "; def $0", "=s"()5839 %vec1 = call <4 x float> asm "; def $0", "=s"()5840 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 4>5841 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5842 ret void5843}5844 5845define void @s_shuffle_v2f32_v4f32__u_5() {5846; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_5:5847; GFX900: ; %bb.0:5848; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5849; GFX900-NEXT: ;;#ASMSTART5850; GFX900-NEXT: ; def s[8:11]5851; GFX900-NEXT: ;;#ASMEND5852; GFX900-NEXT: ;;#ASMSTART5853; GFX900-NEXT: ; use s[8:9]5854; GFX900-NEXT: ;;#ASMEND5855; GFX900-NEXT: s_setpc_b64 s[30:31]5856;5857; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_5:5858; GFX90A: ; %bb.0:5859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5860; GFX90A-NEXT: ;;#ASMSTART5861; GFX90A-NEXT: ; def s[8:11]5862; GFX90A-NEXT: ;;#ASMEND5863; GFX90A-NEXT: ;;#ASMSTART5864; GFX90A-NEXT: ; use s[8:9]5865; GFX90A-NEXT: ;;#ASMEND5866; GFX90A-NEXT: s_setpc_b64 s[30:31]5867;5868; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_5:5869; GFX942: ; %bb.0:5870; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5871; GFX942-NEXT: ;;#ASMSTART5872; GFX942-NEXT: ; def s[8:11]5873; GFX942-NEXT: ;;#ASMEND5874; GFX942-NEXT: s_nop 05875; GFX942-NEXT: ;;#ASMSTART5876; GFX942-NEXT: ; use s[8:9]5877; GFX942-NEXT: ;;#ASMEND5878; GFX942-NEXT: s_setpc_b64 s[30:31]5879 %vec0 = call <4 x float> asm "; def $0", "=s"()5880 %vec1 = call <4 x float> asm "; def $0", "=s"()5881 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 5>5882 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5883 ret void5884}5885 5886define void @s_shuffle_v2f32_v4f32__0_5() {5887; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_5:5888; GFX900: ; %bb.0:5889; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5890; GFX900-NEXT: ;;#ASMSTART5891; GFX900-NEXT: ; def s[8:11]5892; GFX900-NEXT: ;;#ASMEND5893; GFX900-NEXT: ;;#ASMSTART5894; GFX900-NEXT: ; def s[4:7]5895; GFX900-NEXT: ;;#ASMEND5896; GFX900-NEXT: s_mov_b32 s9, s55897; GFX900-NEXT: ;;#ASMSTART5898; GFX900-NEXT: ; use s[8:9]5899; GFX900-NEXT: ;;#ASMEND5900; GFX900-NEXT: s_setpc_b64 s[30:31]5901;5902; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_5:5903; GFX90A: ; %bb.0:5904; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5905; GFX90A-NEXT: ;;#ASMSTART5906; GFX90A-NEXT: ; def s[8:11]5907; GFX90A-NEXT: ;;#ASMEND5908; GFX90A-NEXT: ;;#ASMSTART5909; GFX90A-NEXT: ; def s[4:7]5910; GFX90A-NEXT: ;;#ASMEND5911; GFX90A-NEXT: s_mov_b32 s9, s55912; GFX90A-NEXT: ;;#ASMSTART5913; GFX90A-NEXT: ; use s[8:9]5914; GFX90A-NEXT: ;;#ASMEND5915; GFX90A-NEXT: s_setpc_b64 s[30:31]5916;5917; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_5:5918; GFX942: ; %bb.0:5919; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5920; GFX942-NEXT: ;;#ASMSTART5921; GFX942-NEXT: ; def s[8:11]5922; GFX942-NEXT: ;;#ASMEND5923; GFX942-NEXT: ;;#ASMSTART5924; GFX942-NEXT: ; def s[0:3]5925; GFX942-NEXT: ;;#ASMEND5926; GFX942-NEXT: s_mov_b32 s9, s15927; GFX942-NEXT: ;;#ASMSTART5928; GFX942-NEXT: ; use s[8:9]5929; GFX942-NEXT: ;;#ASMEND5930; GFX942-NEXT: s_setpc_b64 s[30:31]5931 %vec0 = call <4 x float> asm "; def $0", "=s"()5932 %vec1 = call <4 x float> asm "; def $0", "=s"()5933 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 5>5934 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5935 ret void5936}5937 5938define void @s_shuffle_v2f32_v4f32__1_5() {5939; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_5:5940; GFX900: ; %bb.0:5941; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5942; GFX900-NEXT: ;;#ASMSTART5943; GFX900-NEXT: ; def s[8:11]5944; GFX900-NEXT: ;;#ASMEND5945; GFX900-NEXT: ;;#ASMSTART5946; GFX900-NEXT: ; def s[4:7]5947; GFX900-NEXT: ;;#ASMEND5948; GFX900-NEXT: s_mov_b32 s8, s55949; GFX900-NEXT: ;;#ASMSTART5950; GFX900-NEXT: ; use s[8:9]5951; GFX900-NEXT: ;;#ASMEND5952; GFX900-NEXT: s_setpc_b64 s[30:31]5953;5954; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_5:5955; GFX90A: ; %bb.0:5956; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5957; GFX90A-NEXT: ;;#ASMSTART5958; GFX90A-NEXT: ; def s[8:11]5959; GFX90A-NEXT: ;;#ASMEND5960; GFX90A-NEXT: ;;#ASMSTART5961; GFX90A-NEXT: ; def s[4:7]5962; GFX90A-NEXT: ;;#ASMEND5963; GFX90A-NEXT: s_mov_b32 s8, s55964; GFX90A-NEXT: ;;#ASMSTART5965; GFX90A-NEXT: ; use s[8:9]5966; GFX90A-NEXT: ;;#ASMEND5967; GFX90A-NEXT: s_setpc_b64 s[30:31]5968;5969; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_5:5970; GFX942: ; %bb.0:5971; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5972; GFX942-NEXT: ;;#ASMSTART5973; GFX942-NEXT: ; def s[8:11]5974; GFX942-NEXT: ;;#ASMEND5975; GFX942-NEXT: ;;#ASMSTART5976; GFX942-NEXT: ; def s[0:3]5977; GFX942-NEXT: ;;#ASMEND5978; GFX942-NEXT: s_mov_b32 s8, s15979; GFX942-NEXT: ;;#ASMSTART5980; GFX942-NEXT: ; use s[8:9]5981; GFX942-NEXT: ;;#ASMEND5982; GFX942-NEXT: s_setpc_b64 s[30:31]5983 %vec0 = call <4 x float> asm "; def $0", "=s"()5984 %vec1 = call <4 x float> asm "; def $0", "=s"()5985 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 5>5986 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)5987 ret void5988}5989 5990define void @s_shuffle_v2f32_v4f32__2_5() {5991; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_5:5992; GFX900: ; %bb.0:5993; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5994; GFX900-NEXT: ;;#ASMSTART5995; GFX900-NEXT: ; def s[4:7]5996; GFX900-NEXT: ;;#ASMEND5997; GFX900-NEXT: ;;#ASMSTART5998; GFX900-NEXT: ; def s[8:11]5999; GFX900-NEXT: ;;#ASMEND6000; GFX900-NEXT: s_mov_b32 s7, s96001; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6002; GFX900-NEXT: ;;#ASMSTART6003; GFX900-NEXT: ; use s[8:9]6004; GFX900-NEXT: ;;#ASMEND6005; GFX900-NEXT: s_setpc_b64 s[30:31]6006;6007; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_5:6008; GFX90A: ; %bb.0:6009; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6010; GFX90A-NEXT: ;;#ASMSTART6011; GFX90A-NEXT: ; def s[4:7]6012; GFX90A-NEXT: ;;#ASMEND6013; GFX90A-NEXT: ;;#ASMSTART6014; GFX90A-NEXT: ; def s[8:11]6015; GFX90A-NEXT: ;;#ASMEND6016; GFX90A-NEXT: s_mov_b32 s7, s96017; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6018; GFX90A-NEXT: ;;#ASMSTART6019; GFX90A-NEXT: ; use s[8:9]6020; GFX90A-NEXT: ;;#ASMEND6021; GFX90A-NEXT: s_setpc_b64 s[30:31]6022;6023; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_5:6024; GFX942: ; %bb.0:6025; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6026; GFX942-NEXT: ;;#ASMSTART6027; GFX942-NEXT: ; def s[0:3]6028; GFX942-NEXT: ;;#ASMEND6029; GFX942-NEXT: ;;#ASMSTART6030; GFX942-NEXT: ; def s[4:7]6031; GFX942-NEXT: ;;#ASMEND6032; GFX942-NEXT: s_mov_b32 s3, s56033; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6034; GFX942-NEXT: ;;#ASMSTART6035; GFX942-NEXT: ; use s[8:9]6036; GFX942-NEXT: ;;#ASMEND6037; GFX942-NEXT: s_setpc_b64 s[30:31]6038 %vec0 = call <4 x float> asm "; def $0", "=s"()6039 %vec1 = call <4 x float> asm "; def $0", "=s"()6040 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 5>6041 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6042 ret void6043}6044 6045define void @s_shuffle_v2f32_v4f32__3_5() {6046; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_5:6047; GFX900: ; %bb.0:6048; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6049; GFX900-NEXT: ;;#ASMSTART6050; GFX900-NEXT: ; def s[8:11]6051; GFX900-NEXT: ;;#ASMEND6052; GFX900-NEXT: ;;#ASMSTART6053; GFX900-NEXT: ; def s[4:7]6054; GFX900-NEXT: ;;#ASMEND6055; GFX900-NEXT: s_mov_b32 s8, s76056; GFX900-NEXT: ;;#ASMSTART6057; GFX900-NEXT: ; use s[8:9]6058; GFX900-NEXT: ;;#ASMEND6059; GFX900-NEXT: s_setpc_b64 s[30:31]6060;6061; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_5:6062; GFX90A: ; %bb.0:6063; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6064; GFX90A-NEXT: ;;#ASMSTART6065; GFX90A-NEXT: ; def s[8:11]6066; GFX90A-NEXT: ;;#ASMEND6067; GFX90A-NEXT: ;;#ASMSTART6068; GFX90A-NEXT: ; def s[4:7]6069; GFX90A-NEXT: ;;#ASMEND6070; GFX90A-NEXT: s_mov_b32 s8, s76071; GFX90A-NEXT: ;;#ASMSTART6072; GFX90A-NEXT: ; use s[8:9]6073; GFX90A-NEXT: ;;#ASMEND6074; GFX90A-NEXT: s_setpc_b64 s[30:31]6075;6076; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_5:6077; GFX942: ; %bb.0:6078; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6079; GFX942-NEXT: ;;#ASMSTART6080; GFX942-NEXT: ; def s[8:11]6081; GFX942-NEXT: ;;#ASMEND6082; GFX942-NEXT: ;;#ASMSTART6083; GFX942-NEXT: ; def s[0:3]6084; GFX942-NEXT: ;;#ASMEND6085; GFX942-NEXT: s_mov_b32 s8, s36086; GFX942-NEXT: ;;#ASMSTART6087; GFX942-NEXT: ; use s[8:9]6088; GFX942-NEXT: ;;#ASMEND6089; GFX942-NEXT: s_setpc_b64 s[30:31]6090 %vec0 = call <4 x float> asm "; def $0", "=s"()6091 %vec1 = call <4 x float> asm "; def $0", "=s"()6092 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 5>6093 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6094 ret void6095}6096 6097define void @s_shuffle_v2f32_v4f32__4_5() {6098; GFX900-LABEL: s_shuffle_v2f32_v4f32__4_5:6099; GFX900: ; %bb.0:6100; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6101; GFX900-NEXT: ;;#ASMSTART6102; GFX900-NEXT: ; def s[8:11]6103; GFX900-NEXT: ;;#ASMEND6104; GFX900-NEXT: ;;#ASMSTART6105; GFX900-NEXT: ; use s[8:9]6106; GFX900-NEXT: ;;#ASMEND6107; GFX900-NEXT: s_setpc_b64 s[30:31]6108;6109; GFX90A-LABEL: s_shuffle_v2f32_v4f32__4_5:6110; GFX90A: ; %bb.0:6111; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6112; GFX90A-NEXT: ;;#ASMSTART6113; GFX90A-NEXT: ; def s[8:11]6114; GFX90A-NEXT: ;;#ASMEND6115; GFX90A-NEXT: ;;#ASMSTART6116; GFX90A-NEXT: ; use s[8:9]6117; GFX90A-NEXT: ;;#ASMEND6118; GFX90A-NEXT: s_setpc_b64 s[30:31]6119;6120; GFX942-LABEL: s_shuffle_v2f32_v4f32__4_5:6121; GFX942: ; %bb.0:6122; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6123; GFX942-NEXT: ;;#ASMSTART6124; GFX942-NEXT: ; def s[8:11]6125; GFX942-NEXT: ;;#ASMEND6126; GFX942-NEXT: s_nop 06127; GFX942-NEXT: ;;#ASMSTART6128; GFX942-NEXT: ; use s[8:9]6129; GFX942-NEXT: ;;#ASMEND6130; GFX942-NEXT: s_setpc_b64 s[30:31]6131 %vec0 = call <4 x float> asm "; def $0", "=s"()6132 %vec1 = call <4 x float> asm "; def $0", "=s"()6133 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 5>6134 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6135 ret void6136}6137 6138define void @s_shuffle_v2f32_v4f32__5_5() {6139; GFX9-LABEL: s_shuffle_v2f32_v4f32__5_5:6140; GFX9: ; %bb.0:6141; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6142; GFX9-NEXT: ;;#ASMSTART6143; GFX9-NEXT: ; def s[8:11]6144; GFX9-NEXT: ;;#ASMEND6145; GFX9-NEXT: s_mov_b32 s8, s96146; GFX9-NEXT: ;;#ASMSTART6147; GFX9-NEXT: ; use s[8:9]6148; GFX9-NEXT: ;;#ASMEND6149; GFX9-NEXT: s_setpc_b64 s[30:31]6150 %vec0 = call <4 x float> asm "; def $0", "=s"()6151 %vec1 = call <4 x float> asm "; def $0", "=s"()6152 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 5>6153 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6154 ret void6155}6156 6157define void @s_shuffle_v2f32_v4f32__6_5() {6158; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_5:6159; GFX900: ; %bb.0:6160; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6161; GFX900-NEXT: ;;#ASMSTART6162; GFX900-NEXT: ; def s[4:7]6163; GFX900-NEXT: ;;#ASMEND6164; GFX900-NEXT: s_mov_b32 s7, s56165; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6166; GFX900-NEXT: ;;#ASMSTART6167; GFX900-NEXT: ; use s[8:9]6168; GFX900-NEXT: ;;#ASMEND6169; GFX900-NEXT: s_setpc_b64 s[30:31]6170;6171; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_5:6172; GFX90A: ; %bb.0:6173; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6174; GFX90A-NEXT: ;;#ASMSTART6175; GFX90A-NEXT: ; def s[4:7]6176; GFX90A-NEXT: ;;#ASMEND6177; GFX90A-NEXT: s_mov_b32 s7, s56178; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6179; GFX90A-NEXT: ;;#ASMSTART6180; GFX90A-NEXT: ; use s[8:9]6181; GFX90A-NEXT: ;;#ASMEND6182; GFX90A-NEXT: s_setpc_b64 s[30:31]6183;6184; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_5:6185; GFX942: ; %bb.0:6186; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6187; GFX942-NEXT: ;;#ASMSTART6188; GFX942-NEXT: ; def s[0:3]6189; GFX942-NEXT: ;;#ASMEND6190; GFX942-NEXT: s_mov_b32 s3, s16191; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6192; GFX942-NEXT: ;;#ASMSTART6193; GFX942-NEXT: ; use s[8:9]6194; GFX942-NEXT: ;;#ASMEND6195; GFX942-NEXT: s_setpc_b64 s[30:31]6196 %vec0 = call <4 x float> asm "; def $0", "=s"()6197 %vec1 = call <4 x float> asm "; def $0", "=s"()6198 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 5>6199 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6200 ret void6201}6202 6203define void @s_shuffle_v2f32_v4f32__u_6() {6204; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_6:6205; GFX900: ; %bb.0:6206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6207; GFX900-NEXT: ;;#ASMSTART6208; GFX900-NEXT: ; def s[4:7]6209; GFX900-NEXT: ;;#ASMEND6210; GFX900-NEXT: s_mov_b32 s9, s66211; GFX900-NEXT: ;;#ASMSTART6212; GFX900-NEXT: ; use s[8:9]6213; GFX900-NEXT: ;;#ASMEND6214; GFX900-NEXT: s_setpc_b64 s[30:31]6215;6216; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_6:6217; GFX90A: ; %bb.0:6218; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6219; GFX90A-NEXT: ;;#ASMSTART6220; GFX90A-NEXT: ; def s[4:7]6221; GFX90A-NEXT: ;;#ASMEND6222; GFX90A-NEXT: s_mov_b32 s9, s66223; GFX90A-NEXT: ;;#ASMSTART6224; GFX90A-NEXT: ; use s[8:9]6225; GFX90A-NEXT: ;;#ASMEND6226; GFX90A-NEXT: s_setpc_b64 s[30:31]6227;6228; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_6:6229; GFX942: ; %bb.0:6230; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6231; GFX942-NEXT: ;;#ASMSTART6232; GFX942-NEXT: ; def s[0:3]6233; GFX942-NEXT: ;;#ASMEND6234; GFX942-NEXT: s_mov_b32 s9, s26235; GFX942-NEXT: ;;#ASMSTART6236; GFX942-NEXT: ; use s[8:9]6237; GFX942-NEXT: ;;#ASMEND6238; GFX942-NEXT: s_setpc_b64 s[30:31]6239 %vec0 = call <4 x float> asm "; def $0", "=s"()6240 %vec1 = call <4 x float> asm "; def $0", "=s"()6241 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 6>6242 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6243 ret void6244}6245 6246define void @s_shuffle_v2f32_v4f32__0_6() {6247; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_6:6248; GFX900: ; %bb.0:6249; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6250; GFX900-NEXT: ;;#ASMSTART6251; GFX900-NEXT: ; def s[8:11]6252; GFX900-NEXT: ;;#ASMEND6253; GFX900-NEXT: ;;#ASMSTART6254; GFX900-NEXT: ; def s[4:7]6255; GFX900-NEXT: ;;#ASMEND6256; GFX900-NEXT: s_mov_b32 s9, s66257; GFX900-NEXT: ;;#ASMSTART6258; GFX900-NEXT: ; use s[8:9]6259; GFX900-NEXT: ;;#ASMEND6260; GFX900-NEXT: s_setpc_b64 s[30:31]6261;6262; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_6:6263; GFX90A: ; %bb.0:6264; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6265; GFX90A-NEXT: ;;#ASMSTART6266; GFX90A-NEXT: ; def s[8:11]6267; GFX90A-NEXT: ;;#ASMEND6268; GFX90A-NEXT: ;;#ASMSTART6269; GFX90A-NEXT: ; def s[4:7]6270; GFX90A-NEXT: ;;#ASMEND6271; GFX90A-NEXT: s_mov_b32 s9, s66272; GFX90A-NEXT: ;;#ASMSTART6273; GFX90A-NEXT: ; use s[8:9]6274; GFX90A-NEXT: ;;#ASMEND6275; GFX90A-NEXT: s_setpc_b64 s[30:31]6276;6277; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_6:6278; GFX942: ; %bb.0:6279; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6280; GFX942-NEXT: ;;#ASMSTART6281; GFX942-NEXT: ; def s[8:11]6282; GFX942-NEXT: ;;#ASMEND6283; GFX942-NEXT: ;;#ASMSTART6284; GFX942-NEXT: ; def s[0:3]6285; GFX942-NEXT: ;;#ASMEND6286; GFX942-NEXT: s_mov_b32 s9, s26287; GFX942-NEXT: ;;#ASMSTART6288; GFX942-NEXT: ; use s[8:9]6289; GFX942-NEXT: ;;#ASMEND6290; GFX942-NEXT: s_setpc_b64 s[30:31]6291 %vec0 = call <4 x float> asm "; def $0", "=s"()6292 %vec1 = call <4 x float> asm "; def $0", "=s"()6293 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 6>6294 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6295 ret void6296}6297 6298define void @s_shuffle_v2f32_v4f32__1_6() {6299; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_6:6300; GFX900: ; %bb.0:6301; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6302; GFX900-NEXT: ;;#ASMSTART6303; GFX900-NEXT: ; def s[8:11]6304; GFX900-NEXT: ;;#ASMEND6305; GFX900-NEXT: ;;#ASMSTART6306; GFX900-NEXT: ; def s[4:7]6307; GFX900-NEXT: ;;#ASMEND6308; GFX900-NEXT: s_mov_b32 s8, s56309; GFX900-NEXT: s_mov_b32 s9, s106310; GFX900-NEXT: ;;#ASMSTART6311; GFX900-NEXT: ; use s[8:9]6312; GFX900-NEXT: ;;#ASMEND6313; GFX900-NEXT: s_setpc_b64 s[30:31]6314;6315; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_6:6316; GFX90A: ; %bb.0:6317; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6318; GFX90A-NEXT: ;;#ASMSTART6319; GFX90A-NEXT: ; def s[8:11]6320; GFX90A-NEXT: ;;#ASMEND6321; GFX90A-NEXT: ;;#ASMSTART6322; GFX90A-NEXT: ; def s[4:7]6323; GFX90A-NEXT: ;;#ASMEND6324; GFX90A-NEXT: s_mov_b32 s8, s56325; GFX90A-NEXT: s_mov_b32 s9, s106326; GFX90A-NEXT: ;;#ASMSTART6327; GFX90A-NEXT: ; use s[8:9]6328; GFX90A-NEXT: ;;#ASMEND6329; GFX90A-NEXT: s_setpc_b64 s[30:31]6330;6331; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_6:6332; GFX942: ; %bb.0:6333; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6334; GFX942-NEXT: ;;#ASMSTART6335; GFX942-NEXT: ; def s[0:3]6336; GFX942-NEXT: ;;#ASMEND6337; GFX942-NEXT: ;;#ASMSTART6338; GFX942-NEXT: ; def s[4:7]6339; GFX942-NEXT: ;;#ASMEND6340; GFX942-NEXT: s_mov_b32 s8, s16341; GFX942-NEXT: s_mov_b32 s9, s66342; GFX942-NEXT: ;;#ASMSTART6343; GFX942-NEXT: ; use s[8:9]6344; GFX942-NEXT: ;;#ASMEND6345; GFX942-NEXT: s_setpc_b64 s[30:31]6346 %vec0 = call <4 x float> asm "; def $0", "=s"()6347 %vec1 = call <4 x float> asm "; def $0", "=s"()6348 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 6>6349 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6350 ret void6351}6352 6353define void @s_shuffle_v2f32_v4f32__2_6() {6354; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_6:6355; GFX900: ; %bb.0:6356; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6357; GFX900-NEXT: ;;#ASMSTART6358; GFX900-NEXT: ; def s[4:7]6359; GFX900-NEXT: ;;#ASMEND6360; GFX900-NEXT: ;;#ASMSTART6361; GFX900-NEXT: ; def s[8:11]6362; GFX900-NEXT: ;;#ASMEND6363; GFX900-NEXT: s_mov_b32 s7, s106364; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6365; GFX900-NEXT: ;;#ASMSTART6366; GFX900-NEXT: ; use s[8:9]6367; GFX900-NEXT: ;;#ASMEND6368; GFX900-NEXT: s_setpc_b64 s[30:31]6369;6370; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_6:6371; GFX90A: ; %bb.0:6372; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6373; GFX90A-NEXT: ;;#ASMSTART6374; GFX90A-NEXT: ; def s[4:7]6375; GFX90A-NEXT: ;;#ASMEND6376; GFX90A-NEXT: ;;#ASMSTART6377; GFX90A-NEXT: ; def s[8:11]6378; GFX90A-NEXT: ;;#ASMEND6379; GFX90A-NEXT: s_mov_b32 s7, s106380; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6381; GFX90A-NEXT: ;;#ASMSTART6382; GFX90A-NEXT: ; use s[8:9]6383; GFX90A-NEXT: ;;#ASMEND6384; GFX90A-NEXT: s_setpc_b64 s[30:31]6385;6386; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_6:6387; GFX942: ; %bb.0:6388; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6389; GFX942-NEXT: ;;#ASMSTART6390; GFX942-NEXT: ; def s[0:3]6391; GFX942-NEXT: ;;#ASMEND6392; GFX942-NEXT: ;;#ASMSTART6393; GFX942-NEXT: ; def s[4:7]6394; GFX942-NEXT: ;;#ASMEND6395; GFX942-NEXT: s_mov_b32 s3, s66396; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6397; GFX942-NEXT: ;;#ASMSTART6398; GFX942-NEXT: ; use s[8:9]6399; GFX942-NEXT: ;;#ASMEND6400; GFX942-NEXT: s_setpc_b64 s[30:31]6401 %vec0 = call <4 x float> asm "; def $0", "=s"()6402 %vec1 = call <4 x float> asm "; def $0", "=s"()6403 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 6>6404 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6405 ret void6406}6407 6408define void @s_shuffle_v2f32_v4f32__3_6() {6409; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_6:6410; GFX900: ; %bb.0:6411; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6412; GFX900-NEXT: ;;#ASMSTART6413; GFX900-NEXT: ; def s[8:11]6414; GFX900-NEXT: ;;#ASMEND6415; GFX900-NEXT: ;;#ASMSTART6416; GFX900-NEXT: ; def s[4:7]6417; GFX900-NEXT: ;;#ASMEND6418; GFX900-NEXT: s_mov_b32 s8, s76419; GFX900-NEXT: s_mov_b32 s9, s106420; GFX900-NEXT: ;;#ASMSTART6421; GFX900-NEXT: ; use s[8:9]6422; GFX900-NEXT: ;;#ASMEND6423; GFX900-NEXT: s_setpc_b64 s[30:31]6424;6425; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_6:6426; GFX90A: ; %bb.0:6427; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6428; GFX90A-NEXT: ;;#ASMSTART6429; GFX90A-NEXT: ; def s[8:11]6430; GFX90A-NEXT: ;;#ASMEND6431; GFX90A-NEXT: ;;#ASMSTART6432; GFX90A-NEXT: ; def s[4:7]6433; GFX90A-NEXT: ;;#ASMEND6434; GFX90A-NEXT: s_mov_b32 s8, s76435; GFX90A-NEXT: s_mov_b32 s9, s106436; GFX90A-NEXT: ;;#ASMSTART6437; GFX90A-NEXT: ; use s[8:9]6438; GFX90A-NEXT: ;;#ASMEND6439; GFX90A-NEXT: s_setpc_b64 s[30:31]6440;6441; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_6:6442; GFX942: ; %bb.0:6443; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6444; GFX942-NEXT: ;;#ASMSTART6445; GFX942-NEXT: ; def s[0:3]6446; GFX942-NEXT: ;;#ASMEND6447; GFX942-NEXT: ;;#ASMSTART6448; GFX942-NEXT: ; def s[4:7]6449; GFX942-NEXT: ;;#ASMEND6450; GFX942-NEXT: s_mov_b32 s8, s36451; GFX942-NEXT: s_mov_b32 s9, s66452; GFX942-NEXT: ;;#ASMSTART6453; GFX942-NEXT: ; use s[8:9]6454; GFX942-NEXT: ;;#ASMEND6455; GFX942-NEXT: s_setpc_b64 s[30:31]6456 %vec0 = call <4 x float> asm "; def $0", "=s"()6457 %vec1 = call <4 x float> asm "; def $0", "=s"()6458 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 6>6459 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6460 ret void6461}6462 6463define void @s_shuffle_v2f32_v4f32__4_6() {6464; GFX9-LABEL: s_shuffle_v2f32_v4f32__4_6:6465; GFX9: ; %bb.0:6466; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6467; GFX9-NEXT: ;;#ASMSTART6468; GFX9-NEXT: ; def s[8:11]6469; GFX9-NEXT: ;;#ASMEND6470; GFX9-NEXT: s_mov_b32 s9, s106471; GFX9-NEXT: ;;#ASMSTART6472; GFX9-NEXT: ; use s[8:9]6473; GFX9-NEXT: ;;#ASMEND6474; GFX9-NEXT: s_setpc_b64 s[30:31]6475 %vec0 = call <4 x float> asm "; def $0", "=s"()6476 %vec1 = call <4 x float> asm "; def $0", "=s"()6477 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 6>6478 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6479 ret void6480}6481 6482define void @s_shuffle_v2f32_v4f32__5_6() {6483; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_6:6484; GFX900: ; %bb.0:6485; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6486; GFX900-NEXT: ;;#ASMSTART6487; GFX900-NEXT: ; def s[4:7]6488; GFX900-NEXT: ;;#ASMEND6489; GFX900-NEXT: s_mov_b32 s8, s56490; GFX900-NEXT: s_mov_b32 s9, s66491; GFX900-NEXT: ;;#ASMSTART6492; GFX900-NEXT: ; use s[8:9]6493; GFX900-NEXT: ;;#ASMEND6494; GFX900-NEXT: s_setpc_b64 s[30:31]6495;6496; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_6:6497; GFX90A: ; %bb.0:6498; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6499; GFX90A-NEXT: ;;#ASMSTART6500; GFX90A-NEXT: ; def s[4:7]6501; GFX90A-NEXT: ;;#ASMEND6502; GFX90A-NEXT: s_mov_b32 s8, s56503; GFX90A-NEXT: s_mov_b32 s9, s66504; GFX90A-NEXT: ;;#ASMSTART6505; GFX90A-NEXT: ; use s[8:9]6506; GFX90A-NEXT: ;;#ASMEND6507; GFX90A-NEXT: s_setpc_b64 s[30:31]6508;6509; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_6:6510; GFX942: ; %bb.0:6511; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6512; GFX942-NEXT: ;;#ASMSTART6513; GFX942-NEXT: ; def s[0:3]6514; GFX942-NEXT: ;;#ASMEND6515; GFX942-NEXT: s_mov_b32 s8, s16516; GFX942-NEXT: s_mov_b32 s9, s26517; GFX942-NEXT: ;;#ASMSTART6518; GFX942-NEXT: ; use s[8:9]6519; GFX942-NEXT: ;;#ASMEND6520; GFX942-NEXT: s_setpc_b64 s[30:31]6521 %vec0 = call <4 x float> asm "; def $0", "=s"()6522 %vec1 = call <4 x float> asm "; def $0", "=s"()6523 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 6>6524 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6525 ret void6526}6527 6528define void @s_shuffle_v2f32_v4f32__6_6() {6529; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_6:6530; GFX900: ; %bb.0:6531; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6532; GFX900-NEXT: ;;#ASMSTART6533; GFX900-NEXT: ; def s[4:7]6534; GFX900-NEXT: ;;#ASMEND6535; GFX900-NEXT: s_mov_b32 s7, s66536; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6537; GFX900-NEXT: ;;#ASMSTART6538; GFX900-NEXT: ; use s[8:9]6539; GFX900-NEXT: ;;#ASMEND6540; GFX900-NEXT: s_setpc_b64 s[30:31]6541;6542; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_6:6543; GFX90A: ; %bb.0:6544; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6545; GFX90A-NEXT: ;;#ASMSTART6546; GFX90A-NEXT: ; def s[4:7]6547; GFX90A-NEXT: ;;#ASMEND6548; GFX90A-NEXT: s_mov_b32 s7, s66549; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6550; GFX90A-NEXT: ;;#ASMSTART6551; GFX90A-NEXT: ; use s[8:9]6552; GFX90A-NEXT: ;;#ASMEND6553; GFX90A-NEXT: s_setpc_b64 s[30:31]6554;6555; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_6:6556; GFX942: ; %bb.0:6557; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6558; GFX942-NEXT: ;;#ASMSTART6559; GFX942-NEXT: ; def s[0:3]6560; GFX942-NEXT: ;;#ASMEND6561; GFX942-NEXT: s_mov_b32 s3, s26562; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6563; GFX942-NEXT: ;;#ASMSTART6564; GFX942-NEXT: ; use s[8:9]6565; GFX942-NEXT: ;;#ASMEND6566; GFX942-NEXT: s_setpc_b64 s[30:31]6567 %vec0 = call <4 x float> asm "; def $0", "=s"()6568 %vec1 = call <4 x float> asm "; def $0", "=s"()6569 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 6>6570 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6571 ret void6572}6573 6574define void @s_shuffle_v2f32_v4f32__u_7() {6575; GFX900-LABEL: s_shuffle_v2f32_v4f32__u_7:6576; GFX900: ; %bb.0:6577; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6578; GFX900-NEXT: ;;#ASMSTART6579; GFX900-NEXT: ; def s[4:7]6580; GFX900-NEXT: ;;#ASMEND6581; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6582; GFX900-NEXT: ;;#ASMSTART6583; GFX900-NEXT: ; use s[8:9]6584; GFX900-NEXT: ;;#ASMEND6585; GFX900-NEXT: s_setpc_b64 s[30:31]6586;6587; GFX90A-LABEL: s_shuffle_v2f32_v4f32__u_7:6588; GFX90A: ; %bb.0:6589; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6590; GFX90A-NEXT: ;;#ASMSTART6591; GFX90A-NEXT: ; def s[4:7]6592; GFX90A-NEXT: ;;#ASMEND6593; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6594; GFX90A-NEXT: ;;#ASMSTART6595; GFX90A-NEXT: ; use s[8:9]6596; GFX90A-NEXT: ;;#ASMEND6597; GFX90A-NEXT: s_setpc_b64 s[30:31]6598;6599; GFX942-LABEL: s_shuffle_v2f32_v4f32__u_7:6600; GFX942: ; %bb.0:6601; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6602; GFX942-NEXT: ;;#ASMSTART6603; GFX942-NEXT: ; def s[0:3]6604; GFX942-NEXT: ;;#ASMEND6605; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6606; GFX942-NEXT: ;;#ASMSTART6607; GFX942-NEXT: ; use s[8:9]6608; GFX942-NEXT: ;;#ASMEND6609; GFX942-NEXT: s_setpc_b64 s[30:31]6610 %vec0 = call <4 x float> asm "; def $0", "=s"()6611 %vec1 = call <4 x float> asm "; def $0", "=s"()6612 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 poison, i32 7>6613 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6614 ret void6615}6616 6617define void @s_shuffle_v2f32_v4f32__0_7() {6618; GFX900-LABEL: s_shuffle_v2f32_v4f32__0_7:6619; GFX900: ; %bb.0:6620; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6621; GFX900-NEXT: ;;#ASMSTART6622; GFX900-NEXT: ; def s[8:11]6623; GFX900-NEXT: ;;#ASMEND6624; GFX900-NEXT: ;;#ASMSTART6625; GFX900-NEXT: ; def s[4:7]6626; GFX900-NEXT: ;;#ASMEND6627; GFX900-NEXT: s_mov_b32 s9, s76628; GFX900-NEXT: ;;#ASMSTART6629; GFX900-NEXT: ; use s[8:9]6630; GFX900-NEXT: ;;#ASMEND6631; GFX900-NEXT: s_setpc_b64 s[30:31]6632;6633; GFX90A-LABEL: s_shuffle_v2f32_v4f32__0_7:6634; GFX90A: ; %bb.0:6635; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6636; GFX90A-NEXT: ;;#ASMSTART6637; GFX90A-NEXT: ; def s[8:11]6638; GFX90A-NEXT: ;;#ASMEND6639; GFX90A-NEXT: ;;#ASMSTART6640; GFX90A-NEXT: ; def s[4:7]6641; GFX90A-NEXT: ;;#ASMEND6642; GFX90A-NEXT: s_mov_b32 s9, s76643; GFX90A-NEXT: ;;#ASMSTART6644; GFX90A-NEXT: ; use s[8:9]6645; GFX90A-NEXT: ;;#ASMEND6646; GFX90A-NEXT: s_setpc_b64 s[30:31]6647;6648; GFX942-LABEL: s_shuffle_v2f32_v4f32__0_7:6649; GFX942: ; %bb.0:6650; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6651; GFX942-NEXT: ;;#ASMSTART6652; GFX942-NEXT: ; def s[8:11]6653; GFX942-NEXT: ;;#ASMEND6654; GFX942-NEXT: ;;#ASMSTART6655; GFX942-NEXT: ; def s[0:3]6656; GFX942-NEXT: ;;#ASMEND6657; GFX942-NEXT: s_mov_b32 s9, s36658; GFX942-NEXT: ;;#ASMSTART6659; GFX942-NEXT: ; use s[8:9]6660; GFX942-NEXT: ;;#ASMEND6661; GFX942-NEXT: s_setpc_b64 s[30:31]6662 %vec0 = call <4 x float> asm "; def $0", "=s"()6663 %vec1 = call <4 x float> asm "; def $0", "=s"()6664 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 0, i32 7>6665 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6666 ret void6667}6668 6669define void @s_shuffle_v2f32_v4f32__1_7() {6670; GFX900-LABEL: s_shuffle_v2f32_v4f32__1_7:6671; GFX900: ; %bb.0:6672; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6673; GFX900-NEXT: ;;#ASMSTART6674; GFX900-NEXT: ; def s[8:11]6675; GFX900-NEXT: ;;#ASMEND6676; GFX900-NEXT: ;;#ASMSTART6677; GFX900-NEXT: ; def s[4:7]6678; GFX900-NEXT: ;;#ASMEND6679; GFX900-NEXT: s_mov_b32 s10, s56680; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]6681; GFX900-NEXT: ;;#ASMSTART6682; GFX900-NEXT: ; use s[8:9]6683; GFX900-NEXT: ;;#ASMEND6684; GFX900-NEXT: s_setpc_b64 s[30:31]6685;6686; GFX90A-LABEL: s_shuffle_v2f32_v4f32__1_7:6687; GFX90A: ; %bb.0:6688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6689; GFX90A-NEXT: ;;#ASMSTART6690; GFX90A-NEXT: ; def s[8:11]6691; GFX90A-NEXT: ;;#ASMEND6692; GFX90A-NEXT: ;;#ASMSTART6693; GFX90A-NEXT: ; def s[4:7]6694; GFX90A-NEXT: ;;#ASMEND6695; GFX90A-NEXT: s_mov_b32 s10, s56696; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]6697; GFX90A-NEXT: ;;#ASMSTART6698; GFX90A-NEXT: ; use s[8:9]6699; GFX90A-NEXT: ;;#ASMEND6700; GFX90A-NEXT: s_setpc_b64 s[30:31]6701;6702; GFX942-LABEL: s_shuffle_v2f32_v4f32__1_7:6703; GFX942: ; %bb.0:6704; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6705; GFX942-NEXT: ;;#ASMSTART6706; GFX942-NEXT: ; def s[4:7]6707; GFX942-NEXT: ;;#ASMEND6708; GFX942-NEXT: ;;#ASMSTART6709; GFX942-NEXT: ; def s[0:3]6710; GFX942-NEXT: ;;#ASMEND6711; GFX942-NEXT: s_mov_b32 s6, s16712; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]6713; GFX942-NEXT: ;;#ASMSTART6714; GFX942-NEXT: ; use s[8:9]6715; GFX942-NEXT: ;;#ASMEND6716; GFX942-NEXT: s_setpc_b64 s[30:31]6717 %vec0 = call <4 x float> asm "; def $0", "=s"()6718 %vec1 = call <4 x float> asm "; def $0", "=s"()6719 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 1, i32 7>6720 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6721 ret void6722}6723 6724define void @s_shuffle_v2f32_v4f32__2_7() {6725; GFX900-LABEL: s_shuffle_v2f32_v4f32__2_7:6726; GFX900: ; %bb.0:6727; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6728; GFX900-NEXT: ;;#ASMSTART6729; GFX900-NEXT: ; def s[4:7]6730; GFX900-NEXT: ;;#ASMEND6731; GFX900-NEXT: ;;#ASMSTART6732; GFX900-NEXT: ; def s[8:11]6733; GFX900-NEXT: ;;#ASMEND6734; GFX900-NEXT: s_mov_b32 s7, s116735; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6736; GFX900-NEXT: ;;#ASMSTART6737; GFX900-NEXT: ; use s[8:9]6738; GFX900-NEXT: ;;#ASMEND6739; GFX900-NEXT: s_setpc_b64 s[30:31]6740;6741; GFX90A-LABEL: s_shuffle_v2f32_v4f32__2_7:6742; GFX90A: ; %bb.0:6743; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6744; GFX90A-NEXT: ;;#ASMSTART6745; GFX90A-NEXT: ; def s[4:7]6746; GFX90A-NEXT: ;;#ASMEND6747; GFX90A-NEXT: ;;#ASMSTART6748; GFX90A-NEXT: ; def s[8:11]6749; GFX90A-NEXT: ;;#ASMEND6750; GFX90A-NEXT: s_mov_b32 s7, s116751; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6752; GFX90A-NEXT: ;;#ASMSTART6753; GFX90A-NEXT: ; use s[8:9]6754; GFX90A-NEXT: ;;#ASMEND6755; GFX90A-NEXT: s_setpc_b64 s[30:31]6756;6757; GFX942-LABEL: s_shuffle_v2f32_v4f32__2_7:6758; GFX942: ; %bb.0:6759; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6760; GFX942-NEXT: ;;#ASMSTART6761; GFX942-NEXT: ; def s[0:3]6762; GFX942-NEXT: ;;#ASMEND6763; GFX942-NEXT: ;;#ASMSTART6764; GFX942-NEXT: ; def s[4:7]6765; GFX942-NEXT: ;;#ASMEND6766; GFX942-NEXT: s_mov_b32 s3, s76767; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6768; GFX942-NEXT: ;;#ASMSTART6769; GFX942-NEXT: ; use s[8:9]6770; GFX942-NEXT: ;;#ASMEND6771; GFX942-NEXT: s_setpc_b64 s[30:31]6772 %vec0 = call <4 x float> asm "; def $0", "=s"()6773 %vec1 = call <4 x float> asm "; def $0", "=s"()6774 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 2, i32 7>6775 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6776 ret void6777}6778 6779define void @s_shuffle_v2f32_v4f32__3_7() {6780; GFX900-LABEL: s_shuffle_v2f32_v4f32__3_7:6781; GFX900: ; %bb.0:6782; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6783; GFX900-NEXT: ;;#ASMSTART6784; GFX900-NEXT: ; def s[8:11]6785; GFX900-NEXT: ;;#ASMEND6786; GFX900-NEXT: ;;#ASMSTART6787; GFX900-NEXT: ; def s[4:7]6788; GFX900-NEXT: ;;#ASMEND6789; GFX900-NEXT: s_mov_b32 s10, s76790; GFX900-NEXT: s_mov_b64 s[8:9], s[10:11]6791; GFX900-NEXT: ;;#ASMSTART6792; GFX900-NEXT: ; use s[8:9]6793; GFX900-NEXT: ;;#ASMEND6794; GFX900-NEXT: s_setpc_b64 s[30:31]6795;6796; GFX90A-LABEL: s_shuffle_v2f32_v4f32__3_7:6797; GFX90A: ; %bb.0:6798; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6799; GFX90A-NEXT: ;;#ASMSTART6800; GFX90A-NEXT: ; def s[8:11]6801; GFX90A-NEXT: ;;#ASMEND6802; GFX90A-NEXT: ;;#ASMSTART6803; GFX90A-NEXT: ; def s[4:7]6804; GFX90A-NEXT: ;;#ASMEND6805; GFX90A-NEXT: s_mov_b32 s10, s76806; GFX90A-NEXT: s_mov_b64 s[8:9], s[10:11]6807; GFX90A-NEXT: ;;#ASMSTART6808; GFX90A-NEXT: ; use s[8:9]6809; GFX90A-NEXT: ;;#ASMEND6810; GFX90A-NEXT: s_setpc_b64 s[30:31]6811;6812; GFX942-LABEL: s_shuffle_v2f32_v4f32__3_7:6813; GFX942: ; %bb.0:6814; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6815; GFX942-NEXT: ;;#ASMSTART6816; GFX942-NEXT: ; def s[4:7]6817; GFX942-NEXT: ;;#ASMEND6818; GFX942-NEXT: ;;#ASMSTART6819; GFX942-NEXT: ; def s[0:3]6820; GFX942-NEXT: ;;#ASMEND6821; GFX942-NEXT: s_mov_b32 s6, s36822; GFX942-NEXT: s_mov_b64 s[8:9], s[6:7]6823; GFX942-NEXT: ;;#ASMSTART6824; GFX942-NEXT: ; use s[8:9]6825; GFX942-NEXT: ;;#ASMEND6826; GFX942-NEXT: s_setpc_b64 s[30:31]6827 %vec0 = call <4 x float> asm "; def $0", "=s"()6828 %vec1 = call <4 x float> asm "; def $0", "=s"()6829 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 3, i32 7>6830 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6831 ret void6832}6833 6834define void @s_shuffle_v2f32_v4f32__4_7() {6835; GFX9-LABEL: s_shuffle_v2f32_v4f32__4_7:6836; GFX9: ; %bb.0:6837; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6838; GFX9-NEXT: ;;#ASMSTART6839; GFX9-NEXT: ; def s[8:11]6840; GFX9-NEXT: ;;#ASMEND6841; GFX9-NEXT: s_mov_b32 s9, s116842; GFX9-NEXT: ;;#ASMSTART6843; GFX9-NEXT: ; use s[8:9]6844; GFX9-NEXT: ;;#ASMEND6845; GFX9-NEXT: s_setpc_b64 s[30:31]6846 %vec0 = call <4 x float> asm "; def $0", "=s"()6847 %vec1 = call <4 x float> asm "; def $0", "=s"()6848 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 4, i32 7>6849 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6850 ret void6851}6852 6853define void @s_shuffle_v2f32_v4f32__5_7() {6854; GFX900-LABEL: s_shuffle_v2f32_v4f32__5_7:6855; GFX900: ; %bb.0:6856; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6857; GFX900-NEXT: ;;#ASMSTART6858; GFX900-NEXT: ; def s[4:7]6859; GFX900-NEXT: ;;#ASMEND6860; GFX900-NEXT: s_mov_b32 s6, s56861; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6862; GFX900-NEXT: ;;#ASMSTART6863; GFX900-NEXT: ; use s[8:9]6864; GFX900-NEXT: ;;#ASMEND6865; GFX900-NEXT: s_setpc_b64 s[30:31]6866;6867; GFX90A-LABEL: s_shuffle_v2f32_v4f32__5_7:6868; GFX90A: ; %bb.0:6869; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6870; GFX90A-NEXT: ;;#ASMSTART6871; GFX90A-NEXT: ; def s[4:7]6872; GFX90A-NEXT: ;;#ASMEND6873; GFX90A-NEXT: s_mov_b32 s6, s56874; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6875; GFX90A-NEXT: ;;#ASMSTART6876; GFX90A-NEXT: ; use s[8:9]6877; GFX90A-NEXT: ;;#ASMEND6878; GFX90A-NEXT: s_setpc_b64 s[30:31]6879;6880; GFX942-LABEL: s_shuffle_v2f32_v4f32__5_7:6881; GFX942: ; %bb.0:6882; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6883; GFX942-NEXT: ;;#ASMSTART6884; GFX942-NEXT: ; def s[0:3]6885; GFX942-NEXT: ;;#ASMEND6886; GFX942-NEXT: s_mov_b32 s2, s16887; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6888; GFX942-NEXT: ;;#ASMSTART6889; GFX942-NEXT: ; use s[8:9]6890; GFX942-NEXT: ;;#ASMEND6891; GFX942-NEXT: s_setpc_b64 s[30:31]6892 %vec0 = call <4 x float> asm "; def $0", "=s"()6893 %vec1 = call <4 x float> asm "; def $0", "=s"()6894 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 5, i32 7>6895 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6896 ret void6897}6898 6899define void @s_shuffle_v2f32_v4f32__6_7() {6900; GFX900-LABEL: s_shuffle_v2f32_v4f32__6_7:6901; GFX900: ; %bb.0:6902; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6903; GFX900-NEXT: ;;#ASMSTART6904; GFX900-NEXT: ; def s[4:7]6905; GFX900-NEXT: ;;#ASMEND6906; GFX900-NEXT: s_mov_b64 s[8:9], s[6:7]6907; GFX900-NEXT: ;;#ASMSTART6908; GFX900-NEXT: ; use s[8:9]6909; GFX900-NEXT: ;;#ASMEND6910; GFX900-NEXT: s_setpc_b64 s[30:31]6911;6912; GFX90A-LABEL: s_shuffle_v2f32_v4f32__6_7:6913; GFX90A: ; %bb.0:6914; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6915; GFX90A-NEXT: ;;#ASMSTART6916; GFX90A-NEXT: ; def s[4:7]6917; GFX90A-NEXT: ;;#ASMEND6918; GFX90A-NEXT: s_mov_b64 s[8:9], s[6:7]6919; GFX90A-NEXT: ;;#ASMSTART6920; GFX90A-NEXT: ; use s[8:9]6921; GFX90A-NEXT: ;;#ASMEND6922; GFX90A-NEXT: s_setpc_b64 s[30:31]6923;6924; GFX942-LABEL: s_shuffle_v2f32_v4f32__6_7:6925; GFX942: ; %bb.0:6926; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6927; GFX942-NEXT: ;;#ASMSTART6928; GFX942-NEXT: ; def s[0:3]6929; GFX942-NEXT: ;;#ASMEND6930; GFX942-NEXT: s_mov_b64 s[8:9], s[2:3]6931; GFX942-NEXT: ;;#ASMSTART6932; GFX942-NEXT: ; use s[8:9]6933; GFX942-NEXT: ;;#ASMEND6934; GFX942-NEXT: s_setpc_b64 s[30:31]6935 %vec0 = call <4 x float> asm "; def $0", "=s"()6936 %vec1 = call <4 x float> asm "; def $0", "=s"()6937 %shuf = shufflevector <4 x float> %vec0, <4 x float> %vec1, <2 x i32> <i32 6, i32 7>6938 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)6939 ret void6940}6941;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:6942; GFX90APLUS: {{.*}}6943