5442 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_v4f32_v2f32__u_u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v4f32_v2f32__u_u_u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <2 x float> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> poison14 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 1615 ret void16}17 18define void @v_shuffle_v4f32_v2f32__0_u_u_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v2, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v[0:1]25; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v2, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v[0:1]36; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v2, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v[0:1]47; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x float> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>53 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 1654 ret void55}56 57define void @v_shuffle_v4f32_v2f32__1_u_u_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_u_u_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: v_mov_b32_e32 v2, 062; GFX900-NEXT: ;;#ASMSTART63; GFX900-NEXT: ; def v[0:1]64; GFX900-NEXT: ;;#ASMEND65; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], 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_v4f32_v2f32__1_u_u_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:1]74; GFX90A-NEXT: ;;#ASMEND75; GFX90A-NEXT: v_mov_b32_e32 v2, 076; GFX90A-NEXT: v_mov_b32_e32 v0, v177; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], 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_v4f32_v2f32__1_u_u_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:1]86; GFX942-NEXT: ;;#ASMEND87; GFX942-NEXT: v_mov_b32_e32 v2, 088; GFX942-NEXT: v_mov_b32_e32 v0, v189; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]90; GFX942-NEXT: s_waitcnt vmcnt(0)91; GFX942-NEXT: s_setpc_b64 s[30:31]92 %vec0 = call <2 x float> asm "; def $0", "=v"()93 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>94 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 1695 ret void96}97 98define void @v_shuffle_v4f32_v2f32__2_u_u_u(ptr addrspace(1) inreg %ptr) {99; GFX9-LABEL: v_shuffle_v4f32_v2f32__2_u_u_u:100; GFX9: ; %bb.0:101; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX9-NEXT: s_setpc_b64 s[30:31]103 %vec0 = call <2 x float> asm "; def $0", "=v"()104 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>105 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16106 ret void107}108 109define void @v_shuffle_v4f32_v2f32__3_u_u_u(ptr addrspace(1) inreg %ptr) {110; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:111; GFX900: ; %bb.0:112; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX900-NEXT: v_mov_b32_e32 v2, 0114; GFX900-NEXT: ;;#ASMSTART115; GFX900-NEXT: ; def v[0:1]116; GFX900-NEXT: ;;#ASMEND117; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], s[16:17]118; GFX900-NEXT: s_waitcnt vmcnt(0)119; GFX900-NEXT: s_setpc_b64 s[30:31]120;121; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:122; GFX90A: ; %bb.0:123; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; GFX90A-NEXT: ;;#ASMSTART125; GFX90A-NEXT: ; def v[0:1]126; GFX90A-NEXT: ;;#ASMEND127; GFX90A-NEXT: v_mov_b32_e32 v2, 0128; GFX90A-NEXT: v_mov_b32_e32 v0, v1129; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]130; GFX90A-NEXT: s_waitcnt vmcnt(0)131; GFX90A-NEXT: s_setpc_b64 s[30:31]132;133; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:134; GFX942: ; %bb.0:135; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GFX942-NEXT: ;;#ASMSTART137; GFX942-NEXT: ; def v[0:1]138; GFX942-NEXT: ;;#ASMEND139; GFX942-NEXT: v_mov_b32_e32 v2, 0140; GFX942-NEXT: v_mov_b32_e32 v0, v1141; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]142; GFX942-NEXT: s_waitcnt vmcnt(0)143; GFX942-NEXT: s_setpc_b64 s[30:31]144 %vec0 = call <2 x float> asm "; def $0", "=v"()145 %vec1 = call <2 x float> asm "; def $0", "=v"()146 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>147 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16148 ret void149}150 151define void @v_shuffle_v4f32_v2f32__3_0_u_u(ptr addrspace(1) inreg %ptr) {152; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:153; GFX900: ; %bb.0:154; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)155; GFX900-NEXT: v_mov_b32_e32 v4, 0156; GFX900-NEXT: ;;#ASMSTART157; GFX900-NEXT: ; def v[2:3]158; GFX900-NEXT: ;;#ASMEND159; GFX900-NEXT: ;;#ASMSTART160; GFX900-NEXT: ; def v[0:1]161; GFX900-NEXT: ;;#ASMEND162; GFX900-NEXT: global_store_dwordx4 v4, v[1:4], s[16:17]163; GFX900-NEXT: s_waitcnt vmcnt(0)164; GFX900-NEXT: s_setpc_b64 s[30:31]165;166; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:167; GFX90A: ; %bb.0:168; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GFX90A-NEXT: ;;#ASMSTART170; GFX90A-NEXT: ; def v[0:1]171; GFX90A-NEXT: ;;#ASMEND172; GFX90A-NEXT: v_mov_b32_e32 v4, 0173; GFX90A-NEXT: ;;#ASMSTART174; GFX90A-NEXT: ; def v[2:3]175; GFX90A-NEXT: ;;#ASMEND176; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]177; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]178; GFX90A-NEXT: s_waitcnt vmcnt(0)179; GFX90A-NEXT: s_setpc_b64 s[30:31]180;181; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:182; GFX942: ; %bb.0:183; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX942-NEXT: ;;#ASMSTART185; GFX942-NEXT: ; def v[0:1]186; GFX942-NEXT: ;;#ASMEND187; GFX942-NEXT: v_mov_b32_e32 v4, 0188; GFX942-NEXT: ;;#ASMSTART189; GFX942-NEXT: ; def v[2:3]190; GFX942-NEXT: ;;#ASMEND191; GFX942-NEXT: s_nop 0192; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]193; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]194; GFX942-NEXT: s_waitcnt vmcnt(0)195; GFX942-NEXT: s_setpc_b64 s[30:31]196 %vec0 = call <2 x float> asm "; def $0", "=v"()197 %vec1 = call <2 x float> asm "; def $0", "=v"()198 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>199 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16200 ret void201}202 203define void @v_shuffle_v4f32_v2f32__3_1_u_u(ptr addrspace(1) inreg %ptr) {204; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:205; GFX900: ; %bb.0:206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX900-NEXT: v_mov_b32_e32 v3, 0208; GFX900-NEXT: ;;#ASMSTART209; GFX900-NEXT: ; def v[1:2]210; GFX900-NEXT: ;;#ASMEND211; GFX900-NEXT: ;;#ASMSTART212; GFX900-NEXT: ; def v[0:1]213; GFX900-NEXT: ;;#ASMEND214; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]215; GFX900-NEXT: s_waitcnt vmcnt(0)216; GFX900-NEXT: s_setpc_b64 s[30:31]217;218; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:219; GFX90A: ; %bb.0:220; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)221; GFX90A-NEXT: ;;#ASMSTART222; GFX90A-NEXT: ; def v[0:1]223; GFX90A-NEXT: ;;#ASMEND224; GFX90A-NEXT: v_mov_b32_e32 v4, 0225; GFX90A-NEXT: ;;#ASMSTART226; GFX90A-NEXT: ; def v[2:3]227; GFX90A-NEXT: ;;#ASMEND228; GFX90A-NEXT: v_mov_b32_e32 v0, v3229; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]230; GFX90A-NEXT: s_waitcnt vmcnt(0)231; GFX90A-NEXT: s_setpc_b64 s[30:31]232;233; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:234; GFX942: ; %bb.0:235; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)236; GFX942-NEXT: ;;#ASMSTART237; GFX942-NEXT: ; def v[0:1]238; GFX942-NEXT: ;;#ASMEND239; GFX942-NEXT: v_mov_b32_e32 v4, 0240; GFX942-NEXT: ;;#ASMSTART241; GFX942-NEXT: ; def v[2:3]242; GFX942-NEXT: ;;#ASMEND243; GFX942-NEXT: s_nop 0244; GFX942-NEXT: v_mov_b32_e32 v0, v3245; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]246; GFX942-NEXT: s_waitcnt vmcnt(0)247; GFX942-NEXT: s_setpc_b64 s[30:31]248 %vec0 = call <2 x float> asm "; def $0", "=v"()249 %vec1 = call <2 x float> asm "; def $0", "=v"()250 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>251 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16252 ret void253}254 255define void @v_shuffle_v4f32_v2f32__3_2_u_u(ptr addrspace(1) inreg %ptr) {256; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:257; GFX900: ; %bb.0:258; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)259; GFX900-NEXT: v_mov_b32_e32 v3, 0260; GFX900-NEXT: ;;#ASMSTART261; GFX900-NEXT: ; def v[0:1]262; GFX900-NEXT: ;;#ASMEND263; GFX900-NEXT: v_mov_b32_e32 v2, v0264; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]265; GFX900-NEXT: s_waitcnt vmcnt(0)266; GFX900-NEXT: s_setpc_b64 s[30:31]267;268; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:269; GFX90A: ; %bb.0:270; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)271; GFX90A-NEXT: v_mov_b32_e32 v2, 0272; GFX90A-NEXT: ;;#ASMSTART273; GFX90A-NEXT: ; def v[0:1]274; GFX90A-NEXT: ;;#ASMEND275; GFX90A-NEXT: v_mov_b32_e32 v4, v1276; GFX90A-NEXT: v_mov_b32_e32 v5, v0277; GFX90A-NEXT: global_store_dwordx4 v2, v[4:7], s[16:17]278; GFX90A-NEXT: s_waitcnt vmcnt(0)279; GFX90A-NEXT: s_setpc_b64 s[30:31]280;281; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:282; GFX942: ; %bb.0:283; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)284; GFX942-NEXT: v_mov_b32_e32 v2, 0285; GFX942-NEXT: ;;#ASMSTART286; GFX942-NEXT: ; def v[0:1]287; GFX942-NEXT: ;;#ASMEND288; GFX942-NEXT: s_nop 0289; GFX942-NEXT: v_mov_b32_e32 v4, v1290; GFX942-NEXT: v_mov_b32_e32 v5, v0291; GFX942-NEXT: global_store_dwordx4 v2, v[4:7], s[0:1]292; GFX942-NEXT: s_waitcnt vmcnt(0)293; GFX942-NEXT: s_setpc_b64 s[30:31]294 %vec0 = call <2 x float> asm "; def $0", "=v"()295 %vec1 = call <2 x float> asm "; def $0", "=v"()296 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>297 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16298 ret void299}300 301define void @v_shuffle_v4f32_v2f32__3_3_u_u(ptr addrspace(1) inreg %ptr) {302; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:303; GFX900: ; %bb.0:304; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)305; GFX900-NEXT: v_mov_b32_e32 v3, 0306; GFX900-NEXT: ;;#ASMSTART307; GFX900-NEXT: ; def v[0:1]308; GFX900-NEXT: ;;#ASMEND309; GFX900-NEXT: v_mov_b32_e32 v2, v1310; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]311; GFX900-NEXT: s_waitcnt vmcnt(0)312; GFX900-NEXT: s_setpc_b64 s[30:31]313;314; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:315; GFX90A: ; %bb.0:316; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX90A-NEXT: ;;#ASMSTART318; GFX90A-NEXT: ; def v[0:1]319; GFX90A-NEXT: ;;#ASMEND320; GFX90A-NEXT: v_mov_b32_e32 v2, 0321; GFX90A-NEXT: v_mov_b32_e32 v0, v1322; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]323; GFX90A-NEXT: s_waitcnt vmcnt(0)324; GFX90A-NEXT: s_setpc_b64 s[30:31]325;326; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:327; GFX942: ; %bb.0:328; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)329; GFX942-NEXT: ;;#ASMSTART330; GFX942-NEXT: ; def v[0:1]331; GFX942-NEXT: ;;#ASMEND332; GFX942-NEXT: v_mov_b32_e32 v2, 0333; GFX942-NEXT: v_mov_b32_e32 v0, v1334; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]335; GFX942-NEXT: s_waitcnt vmcnt(0)336; GFX942-NEXT: s_setpc_b64 s[30:31]337 %vec0 = call <2 x float> asm "; def $0", "=v"()338 %vec1 = call <2 x float> asm "; def $0", "=v"()339 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>340 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16341 ret void342}343 344define void @v_shuffle_v4f32_v2f32__3_3_0_u(ptr addrspace(1) inreg %ptr) {345; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:346; GFX900: ; %bb.0:347; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)348; GFX900-NEXT: v_mov_b32_e32 v5, 0349; GFX900-NEXT: ;;#ASMSTART350; GFX900-NEXT: ; def v[0:1]351; GFX900-NEXT: ;;#ASMEND352; GFX900-NEXT: v_mov_b32_e32 v2, v1353; GFX900-NEXT: ;;#ASMSTART354; GFX900-NEXT: ; def v[3:4]355; GFX900-NEXT: ;;#ASMEND356; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]357; GFX900-NEXT: s_waitcnt vmcnt(0)358; GFX900-NEXT: s_setpc_b64 s[30:31]359;360; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:361; GFX90A: ; %bb.0:362; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)363; GFX90A-NEXT: ;;#ASMSTART364; GFX90A-NEXT: ; def v[0:1]365; GFX90A-NEXT: ;;#ASMEND366; GFX90A-NEXT: v_mov_b32_e32 v4, 0367; GFX90A-NEXT: v_mov_b32_e32 v0, v1368; GFX90A-NEXT: ;;#ASMSTART369; GFX90A-NEXT: ; def v[2:3]370; GFX90A-NEXT: ;;#ASMEND371; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]372; GFX90A-NEXT: s_waitcnt vmcnt(0)373; GFX90A-NEXT: s_setpc_b64 s[30:31]374;375; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:376; GFX942: ; %bb.0:377; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)378; GFX942-NEXT: ;;#ASMSTART379; GFX942-NEXT: ; def v[0:1]380; GFX942-NEXT: ;;#ASMEND381; GFX942-NEXT: v_mov_b32_e32 v4, 0382; GFX942-NEXT: v_mov_b32_e32 v0, v1383; GFX942-NEXT: ;;#ASMSTART384; GFX942-NEXT: ; def v[2:3]385; GFX942-NEXT: ;;#ASMEND386; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]387; GFX942-NEXT: s_waitcnt vmcnt(0)388; GFX942-NEXT: s_setpc_b64 s[30:31]389 %vec0 = call <2 x float> asm "; def $0", "=v"()390 %vec1 = call <2 x float> asm "; def $0", "=v"()391 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>392 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16393 ret void394}395 396define void @v_shuffle_v4f32_v2f32__3_3_1_u(ptr addrspace(1) inreg %ptr) {397; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:398; GFX900: ; %bb.0:399; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)400; GFX900-NEXT: ;;#ASMSTART401; GFX900-NEXT: ; def v[2:3]402; GFX900-NEXT: ;;#ASMEND403; GFX900-NEXT: v_mov_b32_e32 v4, 0404; GFX900-NEXT: ;;#ASMSTART405; GFX900-NEXT: ; def v[0:1]406; GFX900-NEXT: ;;#ASMEND407; GFX900-NEXT: v_mov_b32_e32 v2, v1408; GFX900-NEXT: global_store_dwordx4 v4, v[1:4], s[16:17]409; GFX900-NEXT: s_waitcnt vmcnt(0)410; GFX900-NEXT: s_setpc_b64 s[30:31]411;412; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:413; GFX90A: ; %bb.0:414; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)415; GFX90A-NEXT: ;;#ASMSTART416; GFX90A-NEXT: ; def v[2:3]417; GFX90A-NEXT: ;;#ASMEND418; GFX90A-NEXT: ;;#ASMSTART419; GFX90A-NEXT: ; def v[0:1]420; GFX90A-NEXT: ;;#ASMEND421; GFX90A-NEXT: v_mov_b32_e32 v4, 0422; GFX90A-NEXT: v_mov_b32_e32 v0, v1423; GFX90A-NEXT: v_mov_b32_e32 v2, v3424; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]425; GFX90A-NEXT: s_waitcnt vmcnt(0)426; GFX90A-NEXT: s_setpc_b64 s[30:31]427;428; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:429; GFX942: ; %bb.0:430; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)431; GFX942-NEXT: ;;#ASMSTART432; GFX942-NEXT: ; def v[2:3]433; GFX942-NEXT: ;;#ASMEND434; GFX942-NEXT: ;;#ASMSTART435; GFX942-NEXT: ; def v[0:1]436; GFX942-NEXT: ;;#ASMEND437; GFX942-NEXT: v_mov_b32_e32 v4, 0438; GFX942-NEXT: v_mov_b32_e32 v0, v1439; GFX942-NEXT: v_mov_b32_e32 v2, v3440; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]441; GFX942-NEXT: s_waitcnt vmcnt(0)442; GFX942-NEXT: s_setpc_b64 s[30:31]443 %vec0 = call <2 x float> asm "; def $0", "=v"()444 %vec1 = call <2 x float> asm "; def $0", "=v"()445 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>446 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16447 ret void448}449 450define void @v_shuffle_v4f32_v2f32__3_3_2_u(ptr addrspace(1) inreg %ptr) {451; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:452; GFX900: ; %bb.0:453; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX900-NEXT: v_mov_b32_e32 v4, 0455; GFX900-NEXT: ;;#ASMSTART456; GFX900-NEXT: ; def v[0:1]457; GFX900-NEXT: ;;#ASMEND458; GFX900-NEXT: v_mov_b32_e32 v2, v1459; GFX900-NEXT: v_mov_b32_e32 v3, v0460; GFX900-NEXT: global_store_dwordx4 v4, v[1:4], s[16:17]461; GFX900-NEXT: s_waitcnt vmcnt(0)462; GFX900-NEXT: s_setpc_b64 s[30:31]463;464; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:465; GFX90A: ; %bb.0:466; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; GFX90A-NEXT: v_mov_b32_e32 v4, 0468; GFX90A-NEXT: ;;#ASMSTART469; GFX90A-NEXT: ; def v[2:3]470; GFX90A-NEXT: ;;#ASMEND471; GFX90A-NEXT: v_mov_b32_e32 v0, v3472; GFX90A-NEXT: v_mov_b32_e32 v1, v3473; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]474; GFX90A-NEXT: s_waitcnt vmcnt(0)475; GFX90A-NEXT: s_setpc_b64 s[30:31]476;477; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:478; GFX942: ; %bb.0:479; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)480; GFX942-NEXT: v_mov_b32_e32 v4, 0481; GFX942-NEXT: ;;#ASMSTART482; GFX942-NEXT: ; def v[2:3]483; GFX942-NEXT: ;;#ASMEND484; GFX942-NEXT: s_nop 0485; GFX942-NEXT: v_mov_b32_e32 v0, v3486; GFX942-NEXT: v_mov_b32_e32 v1, v3487; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]488; GFX942-NEXT: s_waitcnt vmcnt(0)489; GFX942-NEXT: s_setpc_b64 s[30:31]490 %vec0 = call <2 x float> asm "; def $0", "=v"()491 %vec1 = call <2 x float> asm "; def $0", "=v"()492 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>493 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16494 ret void495}496 497define void @v_shuffle_v4f32_v2f32__3_3_3_u(ptr addrspace(1) inreg %ptr) {498; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:499; GFX900: ; %bb.0:500; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)501; GFX900-NEXT: v_mov_b32_e32 v4, 0502; GFX900-NEXT: ;;#ASMSTART503; GFX900-NEXT: ; def v[0:1]504; GFX900-NEXT: ;;#ASMEND505; GFX900-NEXT: v_mov_b32_e32 v2, v1506; GFX900-NEXT: v_mov_b32_e32 v3, v1507; GFX900-NEXT: global_store_dwordx4 v4, v[1:4], s[16:17]508; GFX900-NEXT: s_waitcnt vmcnt(0)509; GFX900-NEXT: s_setpc_b64 s[30:31]510;511; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:512; GFX90A: ; %bb.0:513; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)514; GFX90A-NEXT: ;;#ASMSTART515; GFX90A-NEXT: ; def v[0:1]516; GFX90A-NEXT: ;;#ASMEND517; GFX90A-NEXT: v_mov_b32_e32 v3, 0518; GFX90A-NEXT: v_mov_b32_e32 v0, v1519; GFX90A-NEXT: v_mov_b32_e32 v2, v1520; GFX90A-NEXT: global_store_dwordx4 v3, v[0:3], s[16:17]521; GFX90A-NEXT: s_waitcnt vmcnt(0)522; GFX90A-NEXT: s_setpc_b64 s[30:31]523;524; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:525; GFX942: ; %bb.0:526; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)527; GFX942-NEXT: ;;#ASMSTART528; GFX942-NEXT: ; def v[0:1]529; GFX942-NEXT: ;;#ASMEND530; GFX942-NEXT: v_mov_b32_e32 v3, 0531; GFX942-NEXT: v_mov_b32_e32 v0, v1532; GFX942-NEXT: v_mov_b32_e32 v2, v1533; GFX942-NEXT: global_store_dwordx4 v3, v[0:3], s[0:1]534; GFX942-NEXT: s_waitcnt vmcnt(0)535; GFX942-NEXT: s_setpc_b64 s[30:31]536 %vec0 = call <2 x float> asm "; def $0", "=v"()537 %vec1 = call <2 x float> asm "; def $0", "=v"()538 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>539 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16540 ret void541}542 543define void @v_shuffle_v4f32_v2f32__3_3_3_0(ptr addrspace(1) inreg %ptr) {544; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:545; GFX900: ; %bb.0:546; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX900-NEXT: v_mov_b32_e32 v6, 0548; GFX900-NEXT: ;;#ASMSTART549; GFX900-NEXT: ; def v[0:1]550; GFX900-NEXT: ;;#ASMEND551; GFX900-NEXT: v_mov_b32_e32 v2, v1552; GFX900-NEXT: v_mov_b32_e32 v3, v1553; GFX900-NEXT: ;;#ASMSTART554; GFX900-NEXT: ; def v[4:5]555; GFX900-NEXT: ;;#ASMEND556; GFX900-NEXT: global_store_dwordx4 v6, v[1:4], s[16:17]557; GFX900-NEXT: s_waitcnt vmcnt(0)558; GFX900-NEXT: s_setpc_b64 s[30:31]559;560; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:561; GFX90A: ; %bb.0:562; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX90A-NEXT: ;;#ASMSTART564; GFX90A-NEXT: ; def v[2:3]565; GFX90A-NEXT: ;;#ASMEND566; GFX90A-NEXT: ;;#ASMSTART567; GFX90A-NEXT: ; def v[0:1]568; GFX90A-NEXT: ;;#ASMEND569; GFX90A-NEXT: v_mov_b32_e32 v4, 0570; GFX90A-NEXT: v_pk_mov_b32 v[2:3], v[0:1], v[2:3] op_sel:[1,0]571; GFX90A-NEXT: v_mov_b32_e32 v0, v1572; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]573; GFX90A-NEXT: s_waitcnt vmcnt(0)574; GFX90A-NEXT: s_setpc_b64 s[30:31]575;576; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:577; GFX942: ; %bb.0:578; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; GFX942-NEXT: ;;#ASMSTART580; GFX942-NEXT: ; def v[2:3]581; GFX942-NEXT: ;;#ASMEND582; GFX942-NEXT: ;;#ASMSTART583; GFX942-NEXT: ; def v[0:1]584; GFX942-NEXT: ;;#ASMEND585; GFX942-NEXT: v_mov_b32_e32 v4, 0586; GFX942-NEXT: v_pk_mov_b32 v[2:3], v[0:1], v[2:3] op_sel:[1,0]587; GFX942-NEXT: v_mov_b32_e32 v0, v1588; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]589; GFX942-NEXT: s_waitcnt vmcnt(0)590; GFX942-NEXT: s_setpc_b64 s[30:31]591 %vec0 = call <2 x float> asm "; def $0", "=v"()592 %vec1 = call <2 x float> asm "; def $0", "=v"()593 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>594 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16595 ret void596}597 598define void @v_shuffle_v4f32_v2f32__3_3_3_1(ptr addrspace(1) inreg %ptr) {599; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:600; GFX900: ; %bb.0:601; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)602; GFX900-NEXT: ;;#ASMSTART603; GFX900-NEXT: ; def v[3:4]604; GFX900-NEXT: ;;#ASMEND605; GFX900-NEXT: v_mov_b32_e32 v5, 0606; GFX900-NEXT: ;;#ASMSTART607; GFX900-NEXT: ; def v[0:1]608; GFX900-NEXT: ;;#ASMEND609; GFX900-NEXT: v_mov_b32_e32 v2, v1610; GFX900-NEXT: v_mov_b32_e32 v3, v1611; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]612; GFX900-NEXT: s_waitcnt vmcnt(0)613; GFX900-NEXT: s_setpc_b64 s[30:31]614;615; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:616; GFX90A: ; %bb.0:617; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)618; GFX90A-NEXT: ;;#ASMSTART619; GFX90A-NEXT: ; def v[2:3]620; GFX90A-NEXT: ;;#ASMEND621; GFX90A-NEXT: ;;#ASMSTART622; GFX90A-NEXT: ; def v[0:1]623; GFX90A-NEXT: ;;#ASMEND624; GFX90A-NEXT: v_mov_b32_e32 v4, 0625; GFX90A-NEXT: v_mov_b32_e32 v0, v1626; GFX90A-NEXT: v_mov_b32_e32 v2, v1627; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]628; GFX90A-NEXT: s_waitcnt vmcnt(0)629; GFX90A-NEXT: s_setpc_b64 s[30:31]630;631; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:632; GFX942: ; %bb.0:633; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)634; GFX942-NEXT: ;;#ASMSTART635; GFX942-NEXT: ; def v[2:3]636; GFX942-NEXT: ;;#ASMEND637; GFX942-NEXT: ;;#ASMSTART638; GFX942-NEXT: ; def v[0:1]639; GFX942-NEXT: ;;#ASMEND640; GFX942-NEXT: v_mov_b32_e32 v4, 0641; GFX942-NEXT: v_mov_b32_e32 v0, v1642; GFX942-NEXT: v_mov_b32_e32 v2, v1643; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]644; GFX942-NEXT: s_waitcnt vmcnt(0)645; GFX942-NEXT: s_setpc_b64 s[30:31]646 %vec0 = call <2 x float> asm "; def $0", "=v"()647 %vec1 = call <2 x float> asm "; def $0", "=v"()648 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>649 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16650 ret void651}652 653define void @v_shuffle_v4f32_v2f32__3_3_3_2(ptr addrspace(1) inreg %ptr) {654; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:655; GFX900: ; %bb.0:656; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)657; GFX900-NEXT: v_mov_b32_e32 v5, 0658; GFX900-NEXT: ;;#ASMSTART659; GFX900-NEXT: ; def v[0:1]660; GFX900-NEXT: ;;#ASMEND661; GFX900-NEXT: v_mov_b32_e32 v2, v1662; GFX900-NEXT: v_mov_b32_e32 v3, v1663; GFX900-NEXT: v_mov_b32_e32 v4, v0664; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]665; GFX900-NEXT: s_waitcnt vmcnt(0)666; GFX900-NEXT: s_setpc_b64 s[30:31]667;668; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:669; GFX90A: ; %bb.0:670; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX90A-NEXT: ;;#ASMSTART672; GFX90A-NEXT: ; def v[0:1]673; GFX90A-NEXT: ;;#ASMEND674; GFX90A-NEXT: v_mov_b32_e32 v4, 0675; GFX90A-NEXT: v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[1,0]676; GFX90A-NEXT: v_mov_b32_e32 v0, v1677; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]678; GFX90A-NEXT: s_waitcnt vmcnt(0)679; GFX90A-NEXT: s_setpc_b64 s[30:31]680;681; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:682; GFX942: ; %bb.0:683; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)684; GFX942-NEXT: ;;#ASMSTART685; GFX942-NEXT: ; def v[0:1]686; GFX942-NEXT: ;;#ASMEND687; GFX942-NEXT: v_mov_b32_e32 v4, 0688; GFX942-NEXT: v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[1,0]689; GFX942-NEXT: v_mov_b32_e32 v0, v1690; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]691; GFX942-NEXT: s_waitcnt vmcnt(0)692; GFX942-NEXT: s_setpc_b64 s[30:31]693 %vec0 = call <2 x float> asm "; def $0", "=v"()694 %vec1 = call <2 x float> asm "; def $0", "=v"()695 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>696 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16697 ret void698}699 700define void @v_shuffle_v4f32_v2f32__3_3_3_3(ptr addrspace(1) inreg %ptr) {701; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:702; GFX900: ; %bb.0:703; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)704; GFX900-NEXT: v_mov_b32_e32 v5, 0705; GFX900-NEXT: ;;#ASMSTART706; GFX900-NEXT: ; def v[0:1]707; GFX900-NEXT: ;;#ASMEND708; GFX900-NEXT: v_mov_b32_e32 v2, v1709; GFX900-NEXT: v_mov_b32_e32 v3, v1710; GFX900-NEXT: v_mov_b32_e32 v4, v1711; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]712; GFX900-NEXT: s_waitcnt vmcnt(0)713; GFX900-NEXT: s_setpc_b64 s[30:31]714;715; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:716; GFX90A: ; %bb.0:717; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)718; GFX90A-NEXT: ;;#ASMSTART719; GFX90A-NEXT: ; def v[0:1]720; GFX90A-NEXT: ;;#ASMEND721; GFX90A-NEXT: v_mov_b32_e32 v4, 0722; GFX90A-NEXT: v_mov_b32_e32 v0, v1723; GFX90A-NEXT: v_mov_b32_e32 v2, v1724; GFX90A-NEXT: v_mov_b32_e32 v3, v1725; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]726; GFX90A-NEXT: s_waitcnt vmcnt(0)727; GFX90A-NEXT: s_setpc_b64 s[30:31]728;729; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:730; GFX942: ; %bb.0:731; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)732; GFX942-NEXT: ;;#ASMSTART733; GFX942-NEXT: ; def v[0:1]734; GFX942-NEXT: ;;#ASMEND735; GFX942-NEXT: v_mov_b32_e32 v4, 0736; GFX942-NEXT: v_mov_b32_e32 v0, v1737; GFX942-NEXT: v_mov_b32_e32 v2, v1738; GFX942-NEXT: v_mov_b32_e32 v3, v1739; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]740; GFX942-NEXT: s_waitcnt vmcnt(0)741; GFX942-NEXT: s_setpc_b64 s[30:31]742 %vec0 = call <2 x float> asm "; def $0", "=v"()743 %vec1 = call <2 x float> asm "; def $0", "=v"()744 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>745 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16746 ret void747}748 749define void @v_shuffle_v4f32_v2f32__u_0_0_0(ptr addrspace(1) inreg %ptr) {750; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:751; GFX900: ; %bb.0:752; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)753; GFX900-NEXT: ;;#ASMSTART754; GFX900-NEXT: ; def v[1:2]755; GFX900-NEXT: ;;#ASMEND756; GFX900-NEXT: v_mov_b32_e32 v0, 0757; GFX900-NEXT: v_mov_b32_e32 v2, v1758; GFX900-NEXT: v_mov_b32_e32 v3, v1759; GFX900-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]760; GFX900-NEXT: s_waitcnt vmcnt(0)761; GFX900-NEXT: s_setpc_b64 s[30:31]762;763; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:764; GFX90A: ; %bb.0:765; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)766; GFX90A-NEXT: ;;#ASMSTART767; GFX90A-NEXT: ; def v[2:3]768; GFX90A-NEXT: ;;#ASMEND769; GFX90A-NEXT: v_mov_b32_e32 v0, 0770; GFX90A-NEXT: v_mov_b32_e32 v1, v2771; GFX90A-NEXT: v_mov_b32_e32 v3, v2772; GFX90A-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]773; GFX90A-NEXT: s_waitcnt vmcnt(0)774; GFX90A-NEXT: s_setpc_b64 s[30:31]775;776; GFX942-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:777; GFX942: ; %bb.0:778; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)779; GFX942-NEXT: ;;#ASMSTART780; GFX942-NEXT: ; def v[2:3]781; GFX942-NEXT: ;;#ASMEND782; GFX942-NEXT: v_mov_b32_e32 v0, 0783; GFX942-NEXT: v_mov_b32_e32 v1, v2784; GFX942-NEXT: v_mov_b32_e32 v3, v2785; GFX942-NEXT: global_store_dwordx4 v0, v[0:3], s[0:1]786; GFX942-NEXT: s_waitcnt vmcnt(0)787; GFX942-NEXT: s_setpc_b64 s[30:31]788 %vec0 = call <2 x float> asm "; def $0", "=v"()789 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>790 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16791 ret void792}793 794define void @v_shuffle_v4f32_v2f32__0_0_0_0(ptr addrspace(1) inreg %ptr) {795; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:796; GFX900: ; %bb.0:797; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)798; GFX900-NEXT: ;;#ASMSTART799; GFX900-NEXT: ; def v[0:1]800; GFX900-NEXT: ;;#ASMEND801; GFX900-NEXT: v_mov_b32_e32 v4, 0802; GFX900-NEXT: v_mov_b32_e32 v1, v0803; GFX900-NEXT: v_mov_b32_e32 v2, v0804; GFX900-NEXT: v_mov_b32_e32 v3, v0805; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]806; GFX900-NEXT: s_waitcnt vmcnt(0)807; GFX900-NEXT: s_setpc_b64 s[30:31]808;809; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:810; GFX90A: ; %bb.0:811; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)812; GFX90A-NEXT: ;;#ASMSTART813; GFX90A-NEXT: ; def v[0:1]814; GFX90A-NEXT: ;;#ASMEND815; GFX90A-NEXT: v_mov_b32_e32 v4, 0816; GFX90A-NEXT: v_mov_b32_e32 v1, v0817; GFX90A-NEXT: v_mov_b32_e32 v2, v0818; GFX90A-NEXT: v_mov_b32_e32 v3, v0819; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]820; GFX90A-NEXT: s_waitcnt vmcnt(0)821; GFX90A-NEXT: s_setpc_b64 s[30:31]822;823; GFX942-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:824; GFX942: ; %bb.0:825; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)826; GFX942-NEXT: ;;#ASMSTART827; GFX942-NEXT: ; def v[0:1]828; GFX942-NEXT: ;;#ASMEND829; GFX942-NEXT: v_mov_b32_e32 v4, 0830; GFX942-NEXT: v_mov_b32_e32 v1, v0831; GFX942-NEXT: v_mov_b32_e32 v2, v0832; GFX942-NEXT: v_mov_b32_e32 v3, v0833; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]834; GFX942-NEXT: s_waitcnt vmcnt(0)835; GFX942-NEXT: s_setpc_b64 s[30:31]836 %vec0 = call <2 x float> asm "; def $0", "=v"()837 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> zeroinitializer838 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16839 ret void840}841 842define void @v_shuffle_v4f32_v2f32__1_0_0_0(ptr addrspace(1) inreg %ptr) {843; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:844; GFX900: ; %bb.0:845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX900-NEXT: v_mov_b32_e32 v5, 0847; GFX900-NEXT: ;;#ASMSTART848; GFX900-NEXT: ; def v[0:1]849; GFX900-NEXT: ;;#ASMEND850; GFX900-NEXT: v_mov_b32_e32 v2, v0851; GFX900-NEXT: v_mov_b32_e32 v3, v0852; GFX900-NEXT: v_mov_b32_e32 v4, v0853; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]854; GFX900-NEXT: s_waitcnt vmcnt(0)855; GFX900-NEXT: s_setpc_b64 s[30:31]856;857; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:858; GFX90A: ; %bb.0:859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GFX90A-NEXT: ;;#ASMSTART861; GFX90A-NEXT: ; def v[2:3]862; GFX90A-NEXT: ;;#ASMEND863; GFX90A-NEXT: v_mov_b32_e32 v4, 0864; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]865; GFX90A-NEXT: v_mov_b32_e32 v3, v2866; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]867; GFX90A-NEXT: s_waitcnt vmcnt(0)868; GFX90A-NEXT: s_setpc_b64 s[30:31]869;870; GFX942-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:871; GFX942: ; %bb.0:872; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX942-NEXT: ;;#ASMSTART874; GFX942-NEXT: ; def v[2:3]875; GFX942-NEXT: ;;#ASMEND876; GFX942-NEXT: v_mov_b32_e32 v4, 0877; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]878; GFX942-NEXT: v_mov_b32_e32 v3, v2879; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]880; GFX942-NEXT: s_waitcnt vmcnt(0)881; GFX942-NEXT: s_setpc_b64 s[30:31]882 %vec0 = call <2 x float> asm "; def $0", "=v"()883 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>884 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16885 ret void886}887 888define void @v_shuffle_v4f32_v2f32__2_0_0_0(ptr addrspace(1) inreg %ptr) {889; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:890; GFX900: ; %bb.0:891; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)892; GFX900-NEXT: ;;#ASMSTART893; GFX900-NEXT: ; def v[1:2]894; GFX900-NEXT: ;;#ASMEND895; GFX900-NEXT: v_mov_b32_e32 v0, 0896; GFX900-NEXT: v_mov_b32_e32 v2, v1897; GFX900-NEXT: v_mov_b32_e32 v3, v1898; GFX900-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]899; GFX900-NEXT: s_waitcnt vmcnt(0)900; GFX900-NEXT: s_setpc_b64 s[30:31]901;902; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:903; GFX90A: ; %bb.0:904; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)905; GFX90A-NEXT: ;;#ASMSTART906; GFX90A-NEXT: ; def v[2:3]907; GFX90A-NEXT: ;;#ASMEND908; GFX90A-NEXT: v_mov_b32_e32 v0, 0909; GFX90A-NEXT: v_mov_b32_e32 v1, v2910; GFX90A-NEXT: v_mov_b32_e32 v3, v2911; GFX90A-NEXT: global_store_dwordx4 v0, v[0:3], s[16:17]912; GFX90A-NEXT: s_waitcnt vmcnt(0)913; GFX90A-NEXT: s_setpc_b64 s[30:31]914;915; GFX942-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:916; GFX942: ; %bb.0:917; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)918; GFX942-NEXT: ;;#ASMSTART919; GFX942-NEXT: ; def v[2:3]920; GFX942-NEXT: ;;#ASMEND921; GFX942-NEXT: v_mov_b32_e32 v0, 0922; GFX942-NEXT: v_mov_b32_e32 v1, v2923; GFX942-NEXT: v_mov_b32_e32 v3, v2924; GFX942-NEXT: global_store_dwordx4 v0, v[0:3], s[0:1]925; GFX942-NEXT: s_waitcnt vmcnt(0)926; GFX942-NEXT: s_setpc_b64 s[30:31]927 %vec0 = call <2 x float> asm "; def $0", "=v"()928 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>929 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16930 ret void931}932 933define void @v_shuffle_v4f32_v2f32__3_0_0_0(ptr addrspace(1) inreg %ptr) {934; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:935; GFX900: ; %bb.0:936; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)937; GFX900-NEXT: ;;#ASMSTART938; GFX900-NEXT: ; def v[2:3]939; GFX900-NEXT: ;;#ASMEND940; GFX900-NEXT: v_mov_b32_e32 v5, 0941; GFX900-NEXT: v_mov_b32_e32 v3, v2942; GFX900-NEXT: v_mov_b32_e32 v4, v2943; GFX900-NEXT: ;;#ASMSTART944; GFX900-NEXT: ; def v[0:1]945; GFX900-NEXT: ;;#ASMEND946; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]947; GFX900-NEXT: s_waitcnt vmcnt(0)948; GFX900-NEXT: s_setpc_b64 s[30:31]949;950; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:951; GFX90A: ; %bb.0:952; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)953; GFX90A-NEXT: ;;#ASMSTART954; GFX90A-NEXT: ; def v[2:3]955; GFX90A-NEXT: ;;#ASMEND956; GFX90A-NEXT: ;;#ASMSTART957; GFX90A-NEXT: ; def v[0:1]958; GFX90A-NEXT: ;;#ASMEND959; GFX90A-NEXT: v_mov_b32_e32 v4, 0960; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]961; GFX90A-NEXT: v_mov_b32_e32 v3, v2962; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]963; GFX90A-NEXT: s_waitcnt vmcnt(0)964; GFX90A-NEXT: s_setpc_b64 s[30:31]965;966; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:967; GFX942: ; %bb.0:968; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)969; GFX942-NEXT: ;;#ASMSTART970; GFX942-NEXT: ; def v[2:3]971; GFX942-NEXT: ;;#ASMEND972; GFX942-NEXT: ;;#ASMSTART973; GFX942-NEXT: ; def v[0:1]974; GFX942-NEXT: ;;#ASMEND975; GFX942-NEXT: v_mov_b32_e32 v4, 0976; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]977; GFX942-NEXT: v_mov_b32_e32 v3, v2978; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]979; GFX942-NEXT: s_waitcnt vmcnt(0)980; GFX942-NEXT: s_setpc_b64 s[30:31]981 %vec0 = call <2 x float> asm "; def $0", "=v"()982 %vec1 = call <2 x float> asm "; def $0", "=v"()983 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>984 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16985 ret void986}987 988define void @v_shuffle_v4f32_v2f32__3_u_0_0(ptr addrspace(1) inreg %ptr) {989; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:990; GFX900: ; %bb.0:991; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)992; GFX900-NEXT: ;;#ASMSTART993; GFX900-NEXT: ; def v[3:4]994; GFX900-NEXT: ;;#ASMEND995; GFX900-NEXT: v_mov_b32_e32 v2, 0996; GFX900-NEXT: v_mov_b32_e32 v4, v3997; GFX900-NEXT: ;;#ASMSTART998; GFX900-NEXT: ; def v[0:1]999; GFX900-NEXT: ;;#ASMEND1000; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], s[16:17]1001; GFX900-NEXT: s_waitcnt vmcnt(0)1002; GFX900-NEXT: s_setpc_b64 s[30:31]1003;1004; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:1005; GFX90A: ; %bb.0:1006; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1007; GFX90A-NEXT: ;;#ASMSTART1008; GFX90A-NEXT: ; def v[2:3]1009; GFX90A-NEXT: ;;#ASMEND1010; GFX90A-NEXT: ;;#ASMSTART1011; GFX90A-NEXT: ; def v[0:1]1012; GFX90A-NEXT: ;;#ASMEND1013; GFX90A-NEXT: v_mov_b32_e32 v4, 01014; GFX90A-NEXT: v_mov_b32_e32 v0, v11015; GFX90A-NEXT: v_mov_b32_e32 v3, v21016; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1017; GFX90A-NEXT: s_waitcnt vmcnt(0)1018; GFX90A-NEXT: s_setpc_b64 s[30:31]1019;1020; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:1021; GFX942: ; %bb.0:1022; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX942-NEXT: ;;#ASMSTART1024; GFX942-NEXT: ; def v[2:3]1025; GFX942-NEXT: ;;#ASMEND1026; GFX942-NEXT: ;;#ASMSTART1027; GFX942-NEXT: ; def v[0:1]1028; GFX942-NEXT: ;;#ASMEND1029; GFX942-NEXT: v_mov_b32_e32 v4, 01030; GFX942-NEXT: v_mov_b32_e32 v0, v11031; GFX942-NEXT: v_mov_b32_e32 v3, v21032; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1033; GFX942-NEXT: s_waitcnt vmcnt(0)1034; GFX942-NEXT: s_setpc_b64 s[30:31]1035 %vec0 = call <2 x float> asm "; def $0", "=v"()1036 %vec1 = call <2 x float> asm "; def $0", "=v"()1037 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>1038 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161039 ret void1040}1041 1042define void @v_shuffle_v4f32_v2f32__3_1_0_0(ptr addrspace(1) inreg %ptr) {1043; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_0_0:1044; GFX900: ; %bb.0:1045; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1046; GFX900-NEXT: ;;#ASMSTART1047; GFX900-NEXT: ; def v[3:4]1048; GFX900-NEXT: ;;#ASMEND1049; GFX900-NEXT: v_mov_b32_e32 v5, 01050; GFX900-NEXT: v_mov_b32_e32 v2, v41051; GFX900-NEXT: v_mov_b32_e32 v4, v31052; GFX900-NEXT: ;;#ASMSTART1053; GFX900-NEXT: ; def v[0:1]1054; GFX900-NEXT: ;;#ASMEND1055; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1056; GFX900-NEXT: s_waitcnt vmcnt(0)1057; GFX900-NEXT: s_setpc_b64 s[30:31]1058;1059; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_0_0:1060; GFX90A: ; %bb.0:1061; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1062; GFX90A-NEXT: ;;#ASMSTART1063; GFX90A-NEXT: ; def v[2:3]1064; GFX90A-NEXT: ;;#ASMEND1065; GFX90A-NEXT: ;;#ASMSTART1066; GFX90A-NEXT: ; def v[0:1]1067; GFX90A-NEXT: ;;#ASMEND1068; GFX90A-NEXT: v_mov_b32_e32 v4, 01069; GFX90A-NEXT: v_mov_b32_e32 v0, v11070; GFX90A-NEXT: v_mov_b32_e32 v1, v31071; GFX90A-NEXT: v_mov_b32_e32 v3, v21072; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], 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_v4f32_v2f32__3_1_0_0:1077; GFX942: ; %bb.0:1078; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX942-NEXT: ;;#ASMSTART1080; GFX942-NEXT: ; def v[2:3]1081; GFX942-NEXT: ;;#ASMEND1082; GFX942-NEXT: ;;#ASMSTART1083; GFX942-NEXT: ; def v[0:1]1084; GFX942-NEXT: ;;#ASMEND1085; GFX942-NEXT: v_mov_b32_e32 v4, 01086; GFX942-NEXT: v_mov_b32_e32 v0, v11087; GFX942-NEXT: v_mov_b32_e32 v1, v31088; GFX942-NEXT: v_mov_b32_e32 v3, v21089; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1090; GFX942-NEXT: s_waitcnt vmcnt(0)1091; GFX942-NEXT: s_setpc_b64 s[30:31]1092 %vec0 = call <2 x float> asm "; def $0", "=v"()1093 %vec1 = call <2 x float> asm "; def $0", "=v"()1094 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>1095 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161096 ret void1097}1098 1099define void @v_shuffle_v4f32_v2f32__3_2_0_0(ptr addrspace(1) inreg %ptr) {1100; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:1101; GFX900: ; %bb.0:1102; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1103; GFX900-NEXT: ;;#ASMSTART1104; GFX900-NEXT: ; def v[3:4]1105; GFX900-NEXT: ;;#ASMEND1106; GFX900-NEXT: v_mov_b32_e32 v5, 01107; GFX900-NEXT: ;;#ASMSTART1108; GFX900-NEXT: ; def v[0:1]1109; GFX900-NEXT: ;;#ASMEND1110; GFX900-NEXT: v_mov_b32_e32 v2, v01111; GFX900-NEXT: v_mov_b32_e32 v4, v31112; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1113; GFX900-NEXT: s_waitcnt vmcnt(0)1114; GFX900-NEXT: s_setpc_b64 s[30:31]1115;1116; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:1117; GFX90A: ; %bb.0:1118; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1119; GFX90A-NEXT: ;;#ASMSTART1120; GFX90A-NEXT: ; def v[2:3]1121; GFX90A-NEXT: ;;#ASMEND1122; GFX90A-NEXT: ;;#ASMSTART1123; GFX90A-NEXT: ; def v[0:1]1124; GFX90A-NEXT: ;;#ASMEND1125; GFX90A-NEXT: v_mov_b32_e32 v4, 01126; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]1127; GFX90A-NEXT: v_mov_b32_e32 v3, v21128; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1129; GFX90A-NEXT: s_waitcnt vmcnt(0)1130; GFX90A-NEXT: s_setpc_b64 s[30:31]1131;1132; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:1133; GFX942: ; %bb.0:1134; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1135; GFX942-NEXT: ;;#ASMSTART1136; GFX942-NEXT: ; def v[2:3]1137; GFX942-NEXT: ;;#ASMEND1138; GFX942-NEXT: ;;#ASMSTART1139; GFX942-NEXT: ; def v[0:1]1140; GFX942-NEXT: ;;#ASMEND1141; GFX942-NEXT: v_mov_b32_e32 v4, 01142; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]1143; GFX942-NEXT: v_mov_b32_e32 v3, v21144; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1145; GFX942-NEXT: s_waitcnt vmcnt(0)1146; GFX942-NEXT: s_setpc_b64 s[30:31]1147 %vec0 = call <2 x float> asm "; def $0", "=v"()1148 %vec1 = call <2 x float> asm "; def $0", "=v"()1149 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>1150 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161151 ret void1152}1153 1154define void @v_shuffle_v4f32_v2f32__3_3_0_0(ptr addrspace(1) inreg %ptr) {1155; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:1156; GFX900: ; %bb.0:1157; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1158; GFX900-NEXT: ;;#ASMSTART1159; GFX900-NEXT: ; def v[3:4]1160; GFX900-NEXT: ;;#ASMEND1161; GFX900-NEXT: v_mov_b32_e32 v5, 01162; GFX900-NEXT: ;;#ASMSTART1163; GFX900-NEXT: ; def v[0:1]1164; GFX900-NEXT: ;;#ASMEND1165; GFX900-NEXT: v_mov_b32_e32 v2, v11166; GFX900-NEXT: v_mov_b32_e32 v4, v31167; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1168; GFX900-NEXT: s_waitcnt vmcnt(0)1169; GFX900-NEXT: s_setpc_b64 s[30:31]1170;1171; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:1172; GFX90A: ; %bb.0:1173; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1174; GFX90A-NEXT: ;;#ASMSTART1175; GFX90A-NEXT: ; def v[2:3]1176; GFX90A-NEXT: ;;#ASMEND1177; GFX90A-NEXT: ;;#ASMSTART1178; GFX90A-NEXT: ; def v[0:1]1179; GFX90A-NEXT: ;;#ASMEND1180; GFX90A-NEXT: v_mov_b32_e32 v4, 01181; GFX90A-NEXT: v_mov_b32_e32 v0, v11182; GFX90A-NEXT: v_mov_b32_e32 v3, v21183; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1184; GFX90A-NEXT: s_waitcnt vmcnt(0)1185; GFX90A-NEXT: s_setpc_b64 s[30:31]1186;1187; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:1188; GFX942: ; %bb.0:1189; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1190; GFX942-NEXT: ;;#ASMSTART1191; GFX942-NEXT: ; def v[2:3]1192; GFX942-NEXT: ;;#ASMEND1193; GFX942-NEXT: ;;#ASMSTART1194; GFX942-NEXT: ; def v[0:1]1195; GFX942-NEXT: ;;#ASMEND1196; GFX942-NEXT: v_mov_b32_e32 v4, 01197; GFX942-NEXT: v_mov_b32_e32 v0, v11198; GFX942-NEXT: v_mov_b32_e32 v3, v21199; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1200; GFX942-NEXT: s_waitcnt vmcnt(0)1201; GFX942-NEXT: s_setpc_b64 s[30:31]1202 %vec0 = call <2 x float> asm "; def $0", "=v"()1203 %vec1 = call <2 x float> asm "; def $0", "=v"()1204 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>1205 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161206 ret void1207}1208 1209define void @v_shuffle_v4f32_v2f32__3_3_u_0(ptr addrspace(1) inreg %ptr) {1210; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:1211; GFX900: ; %bb.0:1212; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1213; GFX900-NEXT: v_mov_b32_e32 v3, 01214; GFX900-NEXT: ;;#ASMSTART1215; GFX900-NEXT: ; def v[0:1]1216; GFX900-NEXT: ;;#ASMEND1217; GFX900-NEXT: v_mov_b32_e32 v2, v11218; GFX900-NEXT: ;;#ASMSTART1219; GFX900-NEXT: ; def v[4:5]1220; GFX900-NEXT: ;;#ASMEND1221; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]1222; GFX900-NEXT: s_waitcnt vmcnt(0)1223; GFX900-NEXT: s_setpc_b64 s[30:31]1224;1225; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:1226; GFX90A: ; %bb.0:1227; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1228; GFX90A-NEXT: ;;#ASMSTART1229; GFX90A-NEXT: ; def v[2:3]1230; GFX90A-NEXT: ;;#ASMEND1231; GFX90A-NEXT: ;;#ASMSTART1232; GFX90A-NEXT: ; def v[0:1]1233; GFX90A-NEXT: ;;#ASMEND1234; GFX90A-NEXT: v_mov_b32_e32 v4, 01235; GFX90A-NEXT: v_mov_b32_e32 v0, v11236; GFX90A-NEXT: v_mov_b32_e32 v3, v21237; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1238; GFX90A-NEXT: s_waitcnt vmcnt(0)1239; GFX90A-NEXT: s_setpc_b64 s[30:31]1240;1241; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:1242; GFX942: ; %bb.0:1243; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1244; GFX942-NEXT: ;;#ASMSTART1245; GFX942-NEXT: ; def v[2:3]1246; GFX942-NEXT: ;;#ASMEND1247; GFX942-NEXT: ;;#ASMSTART1248; GFX942-NEXT: ; def v[0:1]1249; GFX942-NEXT: ;;#ASMEND1250; GFX942-NEXT: v_mov_b32_e32 v4, 01251; GFX942-NEXT: v_mov_b32_e32 v0, v11252; GFX942-NEXT: v_mov_b32_e32 v3, v21253; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1254; GFX942-NEXT: s_waitcnt vmcnt(0)1255; GFX942-NEXT: s_setpc_b64 s[30:31]1256 %vec0 = call <2 x float> asm "; def $0", "=v"()1257 %vec1 = call <2 x float> asm "; def $0", "=v"()1258 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>1259 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161260 ret void1261}1262 1263define void @v_shuffle_v4f32_v2f32__3_3_1_0(ptr addrspace(1) inreg %ptr) {1264; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:1265; GFX900: ; %bb.0:1266; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1267; GFX900-NEXT: v_mov_b32_e32 v6, 01268; GFX900-NEXT: ;;#ASMSTART1269; GFX900-NEXT: ; def v[4:5]1270; GFX900-NEXT: ;;#ASMEND1271; GFX900-NEXT: ;;#ASMSTART1272; GFX900-NEXT: ; def v[0:1]1273; GFX900-NEXT: ;;#ASMEND1274; GFX900-NEXT: v_mov_b32_e32 v2, v11275; GFX900-NEXT: v_mov_b32_e32 v3, v51276; GFX900-NEXT: global_store_dwordx4 v6, v[1:4], s[16:17]1277; GFX900-NEXT: s_waitcnt vmcnt(0)1278; GFX900-NEXT: s_setpc_b64 s[30:31]1279;1280; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:1281; GFX90A: ; %bb.0:1282; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1283; GFX90A-NEXT: ;;#ASMSTART1284; GFX90A-NEXT: ; def v[2:3]1285; GFX90A-NEXT: ;;#ASMEND1286; GFX90A-NEXT: ;;#ASMSTART1287; GFX90A-NEXT: ; def v[0:1]1288; GFX90A-NEXT: ;;#ASMEND1289; GFX90A-NEXT: v_mov_b32_e32 v4, 01290; GFX90A-NEXT: v_pk_mov_b32 v[2:3], v[2:3], v[2:3] op_sel:[1,0]1291; GFX90A-NEXT: v_mov_b32_e32 v0, v11292; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1293; GFX90A-NEXT: s_waitcnt vmcnt(0)1294; GFX90A-NEXT: s_setpc_b64 s[30:31]1295;1296; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:1297; GFX942: ; %bb.0:1298; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1299; GFX942-NEXT: ;;#ASMSTART1300; GFX942-NEXT: ; def v[2:3]1301; GFX942-NEXT: ;;#ASMEND1302; GFX942-NEXT: ;;#ASMSTART1303; GFX942-NEXT: ; def v[0:1]1304; GFX942-NEXT: ;;#ASMEND1305; GFX942-NEXT: v_mov_b32_e32 v4, 01306; GFX942-NEXT: v_pk_mov_b32 v[2:3], v[2:3], v[2:3] op_sel:[1,0]1307; GFX942-NEXT: v_mov_b32_e32 v0, v11308; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1309; GFX942-NEXT: s_waitcnt vmcnt(0)1310; GFX942-NEXT: s_setpc_b64 s[30:31]1311 %vec0 = call <2 x float> asm "; def $0", "=v"()1312 %vec1 = call <2 x float> asm "; def $0", "=v"()1313 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>1314 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161315 ret void1316}1317 1318define void @v_shuffle_v4f32_v2f32__3_3_2_0(ptr addrspace(1) inreg %ptr) {1319; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:1320; GFX900: ; %bb.0:1321; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1322; GFX900-NEXT: v_mov_b32_e32 v6, 01323; GFX900-NEXT: ;;#ASMSTART1324; GFX900-NEXT: ; def v[0:1]1325; GFX900-NEXT: ;;#ASMEND1326; GFX900-NEXT: v_mov_b32_e32 v2, v11327; GFX900-NEXT: v_mov_b32_e32 v3, v01328; GFX900-NEXT: ;;#ASMSTART1329; GFX900-NEXT: ; def v[4:5]1330; GFX900-NEXT: ;;#ASMEND1331; GFX900-NEXT: global_store_dwordx4 v6, v[1:4], s[16:17]1332; GFX900-NEXT: s_waitcnt vmcnt(0)1333; GFX900-NEXT: s_setpc_b64 s[30:31]1334;1335; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:1336; GFX90A: ; %bb.0:1337; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1338; GFX90A-NEXT: ;;#ASMSTART1339; GFX90A-NEXT: ; def v[2:3]1340; GFX90A-NEXT: ;;#ASMEND1341; GFX90A-NEXT: v_mov_b32_e32 v6, 01342; GFX90A-NEXT: ;;#ASMSTART1343; GFX90A-NEXT: ; def v[4:5]1344; GFX90A-NEXT: ;;#ASMEND1345; GFX90A-NEXT: v_mov_b32_e32 v0, v31346; GFX90A-NEXT: v_mov_b32_e32 v1, v31347; GFX90A-NEXT: v_mov_b32_e32 v3, v41348; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]1349; GFX90A-NEXT: s_waitcnt vmcnt(0)1350; GFX90A-NEXT: s_setpc_b64 s[30:31]1351;1352; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:1353; GFX942: ; %bb.0:1354; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1355; GFX942-NEXT: ;;#ASMSTART1356; GFX942-NEXT: ; def v[2:3]1357; GFX942-NEXT: ;;#ASMEND1358; GFX942-NEXT: v_mov_b32_e32 v6, 01359; GFX942-NEXT: ;;#ASMSTART1360; GFX942-NEXT: ; def v[4:5]1361; GFX942-NEXT: ;;#ASMEND1362; GFX942-NEXT: v_mov_b32_e32 v0, v31363; GFX942-NEXT: v_mov_b32_e32 v1, v31364; GFX942-NEXT: v_mov_b32_e32 v3, v41365; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]1366; GFX942-NEXT: s_waitcnt vmcnt(0)1367; GFX942-NEXT: s_setpc_b64 s[30:31]1368 %vec0 = call <2 x float> asm "; def $0", "=v"()1369 %vec1 = call <2 x float> asm "; def $0", "=v"()1370 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>1371 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161372 ret void1373}1374 1375define void @v_shuffle_v4f32_v2f32__u_1_1_1(ptr addrspace(1) inreg %ptr) {1376; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:1377; GFX900: ; %bb.0:1378; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1379; GFX900-NEXT: v_mov_b32_e32 v4, 01380; GFX900-NEXT: ;;#ASMSTART1381; GFX900-NEXT: ; def v[0:1]1382; GFX900-NEXT: ;;#ASMEND1383; GFX900-NEXT: v_mov_b32_e32 v2, v11384; GFX900-NEXT: v_mov_b32_e32 v3, v11385; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1386; GFX900-NEXT: s_waitcnt vmcnt(0)1387; GFX900-NEXT: s_setpc_b64 s[30:31]1388;1389; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:1390; GFX90A: ; %bb.0:1391; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX90A-NEXT: v_mov_b32_e32 v4, 01393; GFX90A-NEXT: ;;#ASMSTART1394; GFX90A-NEXT: ; def v[0:1]1395; GFX90A-NEXT: ;;#ASMEND1396; GFX90A-NEXT: v_mov_b32_e32 v2, v11397; GFX90A-NEXT: v_mov_b32_e32 v3, v11398; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1399; GFX90A-NEXT: s_waitcnt vmcnt(0)1400; GFX90A-NEXT: s_setpc_b64 s[30:31]1401;1402; GFX942-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:1403; GFX942: ; %bb.0:1404; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1405; GFX942-NEXT: v_mov_b32_e32 v4, 01406; GFX942-NEXT: ;;#ASMSTART1407; GFX942-NEXT: ; def v[0:1]1408; GFX942-NEXT: ;;#ASMEND1409; GFX942-NEXT: s_nop 01410; GFX942-NEXT: v_mov_b32_e32 v2, v11411; GFX942-NEXT: v_mov_b32_e32 v3, v11412; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1413; GFX942-NEXT: s_waitcnt vmcnt(0)1414; GFX942-NEXT: s_setpc_b64 s[30:31]1415 %vec0 = call <2 x float> asm "; def $0", "=v"()1416 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>1417 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161418 ret void1419}1420 1421define void @v_shuffle_v4f32_v2f32__0_1_1_1(ptr addrspace(1) inreg %ptr) {1422; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:1423; GFX900: ; %bb.0:1424; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1425; GFX900-NEXT: v_mov_b32_e32 v4, 01426; GFX900-NEXT: ;;#ASMSTART1427; GFX900-NEXT: ; def v[0:1]1428; GFX900-NEXT: ;;#ASMEND1429; GFX900-NEXT: v_mov_b32_e32 v2, v11430; GFX900-NEXT: v_mov_b32_e32 v3, v11431; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1432; GFX900-NEXT: s_waitcnt vmcnt(0)1433; GFX900-NEXT: s_setpc_b64 s[30:31]1434;1435; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:1436; GFX90A: ; %bb.0:1437; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1438; GFX90A-NEXT: v_mov_b32_e32 v4, 01439; GFX90A-NEXT: ;;#ASMSTART1440; GFX90A-NEXT: ; def v[0:1]1441; GFX90A-NEXT: ;;#ASMEND1442; GFX90A-NEXT: v_mov_b32_e32 v2, v11443; GFX90A-NEXT: v_mov_b32_e32 v3, v11444; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1445; GFX90A-NEXT: s_waitcnt vmcnt(0)1446; GFX90A-NEXT: s_setpc_b64 s[30:31]1447;1448; GFX942-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:1449; GFX942: ; %bb.0:1450; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1451; GFX942-NEXT: v_mov_b32_e32 v4, 01452; GFX942-NEXT: ;;#ASMSTART1453; GFX942-NEXT: ; def v[0:1]1454; GFX942-NEXT: ;;#ASMEND1455; GFX942-NEXT: s_nop 01456; GFX942-NEXT: v_mov_b32_e32 v2, v11457; GFX942-NEXT: v_mov_b32_e32 v3, v11458; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1459; GFX942-NEXT: s_waitcnt vmcnt(0)1460; GFX942-NEXT: s_setpc_b64 s[30:31]1461 %vec0 = call <2 x float> asm "; def $0", "=v"()1462 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>1463 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161464 ret void1465}1466 1467define void @v_shuffle_v4f32_v2f32__1_1_1_1(ptr addrspace(1) inreg %ptr) {1468; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:1469; GFX900: ; %bb.0:1470; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1471; GFX900-NEXT: v_mov_b32_e32 v5, 01472; GFX900-NEXT: ;;#ASMSTART1473; GFX900-NEXT: ; def v[0:1]1474; GFX900-NEXT: ;;#ASMEND1475; GFX900-NEXT: v_mov_b32_e32 v2, v11476; GFX900-NEXT: v_mov_b32_e32 v3, v11477; GFX900-NEXT: v_mov_b32_e32 v4, v11478; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1479; GFX900-NEXT: s_waitcnt vmcnt(0)1480; GFX900-NEXT: s_setpc_b64 s[30:31]1481;1482; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:1483; GFX90A: ; %bb.0:1484; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1485; GFX90A-NEXT: ;;#ASMSTART1486; GFX90A-NEXT: ; def v[0:1]1487; GFX90A-NEXT: ;;#ASMEND1488; GFX90A-NEXT: v_mov_b32_e32 v4, 01489; GFX90A-NEXT: v_mov_b32_e32 v0, v11490; GFX90A-NEXT: v_mov_b32_e32 v2, v11491; GFX90A-NEXT: v_mov_b32_e32 v3, v11492; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1493; GFX90A-NEXT: s_waitcnt vmcnt(0)1494; GFX90A-NEXT: s_setpc_b64 s[30:31]1495;1496; GFX942-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:1497; GFX942: ; %bb.0:1498; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1499; GFX942-NEXT: ;;#ASMSTART1500; GFX942-NEXT: ; def v[0:1]1501; GFX942-NEXT: ;;#ASMEND1502; GFX942-NEXT: v_mov_b32_e32 v4, 01503; GFX942-NEXT: v_mov_b32_e32 v0, v11504; GFX942-NEXT: v_mov_b32_e32 v2, v11505; GFX942-NEXT: v_mov_b32_e32 v3, v11506; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1507; GFX942-NEXT: s_waitcnt vmcnt(0)1508; GFX942-NEXT: s_setpc_b64 s[30:31]1509 %vec0 = call <2 x float> asm "; def $0", "=v"()1510 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>1511 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161512 ret void1513}1514 1515define void @v_shuffle_v4f32_v2f32__2_1_1_1(ptr addrspace(1) inreg %ptr) {1516; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:1517; GFX900: ; %bb.0:1518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1519; GFX900-NEXT: v_mov_b32_e32 v4, 01520; GFX900-NEXT: ;;#ASMSTART1521; GFX900-NEXT: ; def v[0:1]1522; GFX900-NEXT: ;;#ASMEND1523; GFX900-NEXT: v_mov_b32_e32 v2, v11524; GFX900-NEXT: v_mov_b32_e32 v3, v11525; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1526; GFX900-NEXT: s_waitcnt vmcnt(0)1527; GFX900-NEXT: s_setpc_b64 s[30:31]1528;1529; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:1530; GFX90A: ; %bb.0:1531; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX90A-NEXT: v_mov_b32_e32 v4, 01533; GFX90A-NEXT: ;;#ASMSTART1534; GFX90A-NEXT: ; def v[0:1]1535; GFX90A-NEXT: ;;#ASMEND1536; GFX90A-NEXT: v_mov_b32_e32 v2, v11537; GFX90A-NEXT: v_mov_b32_e32 v3, v11538; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1539; GFX90A-NEXT: s_waitcnt vmcnt(0)1540; GFX90A-NEXT: s_setpc_b64 s[30:31]1541;1542; GFX942-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:1543; GFX942: ; %bb.0:1544; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1545; GFX942-NEXT: v_mov_b32_e32 v4, 01546; GFX942-NEXT: ;;#ASMSTART1547; GFX942-NEXT: ; def v[0:1]1548; GFX942-NEXT: ;;#ASMEND1549; GFX942-NEXT: s_nop 01550; GFX942-NEXT: v_mov_b32_e32 v2, v11551; GFX942-NEXT: v_mov_b32_e32 v3, v11552; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1553; GFX942-NEXT: s_waitcnt vmcnt(0)1554; GFX942-NEXT: s_setpc_b64 s[30:31]1555 %vec0 = call <2 x float> asm "; def $0", "=v"()1556 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>1557 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161558 ret void1559}1560 1561define void @v_shuffle_v4f32_v2f32__3_1_1_1(ptr addrspace(1) inreg %ptr) {1562; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_1_1:1563; GFX900: ; %bb.0:1564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1565; GFX900-NEXT: v_mov_b32_e32 v5, 01566; GFX900-NEXT: ;;#ASMSTART1567; GFX900-NEXT: ; def v[1:2]1568; GFX900-NEXT: ;;#ASMEND1569; GFX900-NEXT: v_mov_b32_e32 v3, v21570; GFX900-NEXT: v_mov_b32_e32 v4, v21571; GFX900-NEXT: ;;#ASMSTART1572; GFX900-NEXT: ; def v[0:1]1573; GFX900-NEXT: ;;#ASMEND1574; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1575; GFX900-NEXT: s_waitcnt vmcnt(0)1576; GFX900-NEXT: s_setpc_b64 s[30:31]1577;1578; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_1_1:1579; GFX90A: ; %bb.0:1580; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1581; GFX90A-NEXT: ;;#ASMSTART1582; GFX90A-NEXT: ; def v[0:1]1583; GFX90A-NEXT: ;;#ASMEND1584; GFX90A-NEXT: ;;#ASMSTART1585; GFX90A-NEXT: ; def v[2:3]1586; GFX90A-NEXT: ;;#ASMEND1587; GFX90A-NEXT: v_mov_b32_e32 v4, 01588; GFX90A-NEXT: v_mov_b32_e32 v0, v31589; GFX90A-NEXT: v_mov_b32_e32 v2, v11590; GFX90A-NEXT: v_mov_b32_e32 v3, v11591; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], 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_v4f32_v2f32__3_1_1_1:1596; GFX942: ; %bb.0:1597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1598; GFX942-NEXT: ;;#ASMSTART1599; GFX942-NEXT: ; def v[0:1]1600; GFX942-NEXT: ;;#ASMEND1601; GFX942-NEXT: ;;#ASMSTART1602; GFX942-NEXT: ; def v[2:3]1603; GFX942-NEXT: ;;#ASMEND1604; GFX942-NEXT: v_mov_b32_e32 v4, 01605; GFX942-NEXT: v_mov_b32_e32 v0, v31606; GFX942-NEXT: v_mov_b32_e32 v2, v11607; GFX942-NEXT: v_mov_b32_e32 v3, v11608; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1609; GFX942-NEXT: s_waitcnt vmcnt(0)1610; GFX942-NEXT: s_setpc_b64 s[30:31]1611 %vec0 = call <2 x float> asm "; def $0", "=v"()1612 %vec1 = call <2 x float> asm "; def $0", "=v"()1613 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>1614 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161615 ret void1616}1617 1618define void @v_shuffle_v4f32_v2f32__3_u_1_1(ptr addrspace(1) inreg %ptr) {1619; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:1620; GFX900: ; %bb.0:1621; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-NEXT: v_mov_b32_e32 v5, 01623; GFX900-NEXT: ;;#ASMSTART1624; GFX900-NEXT: ; def v[2:3]1625; GFX900-NEXT: ;;#ASMEND1626; GFX900-NEXT: v_mov_b32_e32 v4, v31627; GFX900-NEXT: ;;#ASMSTART1628; GFX900-NEXT: ; def v[0:1]1629; GFX900-NEXT: ;;#ASMEND1630; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1631; GFX900-NEXT: s_waitcnt vmcnt(0)1632; GFX900-NEXT: s_setpc_b64 s[30:31]1633;1634; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:1635; GFX90A: ; %bb.0:1636; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1637; GFX90A-NEXT: ;;#ASMSTART1638; GFX90A-NEXT: ; def v[2:3]1639; GFX90A-NEXT: ;;#ASMEND1640; GFX90A-NEXT: ;;#ASMSTART1641; GFX90A-NEXT: ; def v[0:1]1642; GFX90A-NEXT: ;;#ASMEND1643; GFX90A-NEXT: v_mov_b32_e32 v4, 01644; GFX90A-NEXT: v_mov_b32_e32 v0, v11645; GFX90A-NEXT: v_mov_b32_e32 v2, v31646; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1647; GFX90A-NEXT: s_waitcnt vmcnt(0)1648; GFX90A-NEXT: s_setpc_b64 s[30:31]1649;1650; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:1651; GFX942: ; %bb.0:1652; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1653; GFX942-NEXT: ;;#ASMSTART1654; GFX942-NEXT: ; def v[2:3]1655; GFX942-NEXT: ;;#ASMEND1656; GFX942-NEXT: ;;#ASMSTART1657; GFX942-NEXT: ; def v[0:1]1658; GFX942-NEXT: ;;#ASMEND1659; GFX942-NEXT: v_mov_b32_e32 v4, 01660; GFX942-NEXT: v_mov_b32_e32 v0, v11661; GFX942-NEXT: v_mov_b32_e32 v2, v31662; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1663; GFX942-NEXT: s_waitcnt vmcnt(0)1664; GFX942-NEXT: s_setpc_b64 s[30:31]1665 %vec0 = call <2 x float> asm "; def $0", "=v"()1666 %vec1 = call <2 x float> asm "; def $0", "=v"()1667 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>1668 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161669 ret void1670}1671 1672define void @v_shuffle_v4f32_v2f32__3_0_1_1(ptr addrspace(1) inreg %ptr) {1673; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:1674; GFX900: ; %bb.0:1675; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1676; GFX900-NEXT: v_mov_b32_e32 v5, 01677; GFX900-NEXT: ;;#ASMSTART1678; GFX900-NEXT: ; def v[2:3]1679; GFX900-NEXT: ;;#ASMEND1680; GFX900-NEXT: v_mov_b32_e32 v4, v31681; GFX900-NEXT: ;;#ASMSTART1682; GFX900-NEXT: ; def v[0:1]1683; GFX900-NEXT: ;;#ASMEND1684; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1685; GFX900-NEXT: s_waitcnt vmcnt(0)1686; GFX900-NEXT: s_setpc_b64 s[30:31]1687;1688; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:1689; GFX90A: ; %bb.0:1690; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1691; GFX90A-NEXT: ;;#ASMSTART1692; GFX90A-NEXT: ; def v[2:3]1693; GFX90A-NEXT: ;;#ASMEND1694; GFX90A-NEXT: ;;#ASMSTART1695; GFX90A-NEXT: ; def v[0:1]1696; GFX90A-NEXT: ;;#ASMEND1697; GFX90A-NEXT: v_mov_b32_e32 v4, 01698; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]1699; GFX90A-NEXT: v_mov_b32_e32 v2, v31700; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1701; GFX90A-NEXT: s_waitcnt vmcnt(0)1702; GFX90A-NEXT: s_setpc_b64 s[30:31]1703;1704; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:1705; GFX942: ; %bb.0:1706; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1707; GFX942-NEXT: ;;#ASMSTART1708; GFX942-NEXT: ; def v[2:3]1709; GFX942-NEXT: ;;#ASMEND1710; GFX942-NEXT: ;;#ASMSTART1711; GFX942-NEXT: ; def v[0:1]1712; GFX942-NEXT: ;;#ASMEND1713; GFX942-NEXT: v_mov_b32_e32 v4, 01714; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]1715; GFX942-NEXT: v_mov_b32_e32 v2, v31716; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1717; GFX942-NEXT: s_waitcnt vmcnt(0)1718; GFX942-NEXT: s_setpc_b64 s[30:31]1719 %vec0 = call <2 x float> asm "; def $0", "=v"()1720 %vec1 = call <2 x float> asm "; def $0", "=v"()1721 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>1722 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161723 ret void1724}1725 1726define void @v_shuffle_v4f32_v2f32__3_2_1_1(ptr addrspace(1) inreg %ptr) {1727; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:1728; GFX900: ; %bb.0:1729; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1730; GFX900-NEXT: ;;#ASMSTART1731; GFX900-NEXT: ; def v[2:3]1732; GFX900-NEXT: ;;#ASMEND1733; GFX900-NEXT: v_mov_b32_e32 v5, 01734; GFX900-NEXT: ;;#ASMSTART1735; GFX900-NEXT: ; def v[0:1]1736; GFX900-NEXT: ;;#ASMEND1737; GFX900-NEXT: v_mov_b32_e32 v2, v01738; GFX900-NEXT: v_mov_b32_e32 v4, v31739; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1740; GFX900-NEXT: s_waitcnt vmcnt(0)1741; GFX900-NEXT: s_setpc_b64 s[30:31]1742;1743; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:1744; GFX90A: ; %bb.0:1745; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1746; GFX90A-NEXT: ;;#ASMSTART1747; GFX90A-NEXT: ; def v[2:3]1748; GFX90A-NEXT: ;;#ASMEND1749; GFX90A-NEXT: ;;#ASMSTART1750; GFX90A-NEXT: ; def v[0:1]1751; GFX90A-NEXT: ;;#ASMEND1752; GFX90A-NEXT: v_mov_b32_e32 v4, 01753; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]1754; GFX90A-NEXT: v_mov_b32_e32 v2, v31755; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1756; GFX90A-NEXT: s_waitcnt vmcnt(0)1757; GFX90A-NEXT: s_setpc_b64 s[30:31]1758;1759; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:1760; GFX942: ; %bb.0:1761; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1762; GFX942-NEXT: ;;#ASMSTART1763; GFX942-NEXT: ; def v[2:3]1764; GFX942-NEXT: ;;#ASMEND1765; GFX942-NEXT: ;;#ASMSTART1766; GFX942-NEXT: ; def v[0:1]1767; GFX942-NEXT: ;;#ASMEND1768; GFX942-NEXT: v_mov_b32_e32 v4, 01769; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]1770; GFX942-NEXT: v_mov_b32_e32 v2, v31771; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1772; GFX942-NEXT: s_waitcnt vmcnt(0)1773; GFX942-NEXT: s_setpc_b64 s[30:31]1774 %vec0 = call <2 x float> asm "; def $0", "=v"()1775 %vec1 = call <2 x float> asm "; def $0", "=v"()1776 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>1777 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161778 ret void1779}1780 1781define void @v_shuffle_v4f32_v2f32__3_3_1_1(ptr addrspace(1) inreg %ptr) {1782; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:1783; GFX900: ; %bb.0:1784; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1785; GFX900-NEXT: ;;#ASMSTART1786; GFX900-NEXT: ; def v[2:3]1787; GFX900-NEXT: ;;#ASMEND1788; GFX900-NEXT: v_mov_b32_e32 v5, 01789; GFX900-NEXT: ;;#ASMSTART1790; GFX900-NEXT: ; def v[0:1]1791; GFX900-NEXT: ;;#ASMEND1792; GFX900-NEXT: v_mov_b32_e32 v2, v11793; GFX900-NEXT: v_mov_b32_e32 v4, v31794; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1795; GFX900-NEXT: s_waitcnt vmcnt(0)1796; GFX900-NEXT: s_setpc_b64 s[30:31]1797;1798; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:1799; GFX90A: ; %bb.0:1800; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1801; GFX90A-NEXT: ;;#ASMSTART1802; GFX90A-NEXT: ; def v[2:3]1803; GFX90A-NEXT: ;;#ASMEND1804; GFX90A-NEXT: ;;#ASMSTART1805; GFX90A-NEXT: ; def v[0:1]1806; GFX90A-NEXT: ;;#ASMEND1807; GFX90A-NEXT: v_mov_b32_e32 v4, 01808; GFX90A-NEXT: v_mov_b32_e32 v0, v11809; GFX90A-NEXT: v_mov_b32_e32 v2, v31810; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1811; GFX90A-NEXT: s_waitcnt vmcnt(0)1812; GFX90A-NEXT: s_setpc_b64 s[30:31]1813;1814; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:1815; GFX942: ; %bb.0:1816; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1817; GFX942-NEXT: ;;#ASMSTART1818; GFX942-NEXT: ; def v[2:3]1819; GFX942-NEXT: ;;#ASMEND1820; GFX942-NEXT: ;;#ASMSTART1821; GFX942-NEXT: ; def v[0:1]1822; GFX942-NEXT: ;;#ASMEND1823; GFX942-NEXT: v_mov_b32_e32 v4, 01824; GFX942-NEXT: v_mov_b32_e32 v0, v11825; GFX942-NEXT: v_mov_b32_e32 v2, v31826; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1827; GFX942-NEXT: s_waitcnt vmcnt(0)1828; GFX942-NEXT: s_setpc_b64 s[30:31]1829 %vec0 = call <2 x float> asm "; def $0", "=v"()1830 %vec1 = call <2 x float> asm "; def $0", "=v"()1831 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>1832 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161833 ret void1834}1835 1836define void @v_shuffle_v4f32_v2f32__3_3_u_1(ptr addrspace(1) inreg %ptr) {1837; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:1838; GFX900: ; %bb.0:1839; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1840; GFX900-NEXT: v_mov_b32_e32 v5, 01841; GFX900-NEXT: ;;#ASMSTART1842; GFX900-NEXT: ; def v[0:1]1843; GFX900-NEXT: ;;#ASMEND1844; GFX900-NEXT: v_mov_b32_e32 v2, v11845; GFX900-NEXT: ;;#ASMSTART1846; GFX900-NEXT: ; def v[3:4]1847; GFX900-NEXT: ;;#ASMEND1848; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1849; GFX900-NEXT: s_waitcnt vmcnt(0)1850; GFX900-NEXT: s_setpc_b64 s[30:31]1851;1852; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:1853; GFX90A: ; %bb.0:1854; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1855; GFX90A-NEXT: ;;#ASMSTART1856; GFX90A-NEXT: ; def v[0:1]1857; GFX90A-NEXT: ;;#ASMEND1858; GFX90A-NEXT: v_mov_b32_e32 v4, 01859; GFX90A-NEXT: v_mov_b32_e32 v0, v11860; GFX90A-NEXT: ;;#ASMSTART1861; GFX90A-NEXT: ; def v[2:3]1862; GFX90A-NEXT: ;;#ASMEND1863; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1864; GFX90A-NEXT: s_waitcnt vmcnt(0)1865; GFX90A-NEXT: s_setpc_b64 s[30:31]1866;1867; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:1868; GFX942: ; %bb.0:1869; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1870; GFX942-NEXT: ;;#ASMSTART1871; GFX942-NEXT: ; def v[0:1]1872; GFX942-NEXT: ;;#ASMEND1873; GFX942-NEXT: v_mov_b32_e32 v4, 01874; GFX942-NEXT: v_mov_b32_e32 v0, v11875; GFX942-NEXT: ;;#ASMSTART1876; GFX942-NEXT: ; def v[2:3]1877; GFX942-NEXT: ;;#ASMEND1878; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1879; GFX942-NEXT: s_waitcnt vmcnt(0)1880; GFX942-NEXT: s_setpc_b64 s[30:31]1881 %vec0 = call <2 x float> asm "; def $0", "=v"()1882 %vec1 = call <2 x float> asm "; def $0", "=v"()1883 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>1884 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161885 ret void1886}1887 1888define void @v_shuffle_v4f32_v2f32__3_3_0_1(ptr addrspace(1) inreg %ptr) {1889; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:1890; GFX900: ; %bb.0:1891; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1892; GFX900-NEXT: v_mov_b32_e32 v5, 01893; GFX900-NEXT: ;;#ASMSTART1894; GFX900-NEXT: ; def v[0:1]1895; GFX900-NEXT: ;;#ASMEND1896; GFX900-NEXT: v_mov_b32_e32 v2, v11897; GFX900-NEXT: ;;#ASMSTART1898; GFX900-NEXT: ; def v[3:4]1899; GFX900-NEXT: ;;#ASMEND1900; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1901; GFX900-NEXT: s_waitcnt vmcnt(0)1902; GFX900-NEXT: s_setpc_b64 s[30:31]1903;1904; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:1905; GFX90A: ; %bb.0:1906; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1907; GFX90A-NEXT: ;;#ASMSTART1908; GFX90A-NEXT: ; def v[0:1]1909; GFX90A-NEXT: ;;#ASMEND1910; GFX90A-NEXT: v_mov_b32_e32 v4, 01911; GFX90A-NEXT: v_mov_b32_e32 v0, v11912; GFX90A-NEXT: ;;#ASMSTART1913; GFX90A-NEXT: ; def v[2:3]1914; GFX90A-NEXT: ;;#ASMEND1915; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]1916; GFX90A-NEXT: s_waitcnt vmcnt(0)1917; GFX90A-NEXT: s_setpc_b64 s[30:31]1918;1919; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:1920; GFX942: ; %bb.0:1921; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1922; GFX942-NEXT: ;;#ASMSTART1923; GFX942-NEXT: ; def v[0:1]1924; GFX942-NEXT: ;;#ASMEND1925; GFX942-NEXT: v_mov_b32_e32 v4, 01926; GFX942-NEXT: v_mov_b32_e32 v0, v11927; GFX942-NEXT: ;;#ASMSTART1928; GFX942-NEXT: ; def v[2:3]1929; GFX942-NEXT: ;;#ASMEND1930; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]1931; GFX942-NEXT: s_waitcnt vmcnt(0)1932; GFX942-NEXT: s_setpc_b64 s[30:31]1933 %vec0 = call <2 x float> asm "; def $0", "=v"()1934 %vec1 = call <2 x float> asm "; def $0", "=v"()1935 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>1936 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161937 ret void1938}1939 1940define void @v_shuffle_v4f32_v2f32__3_3_2_1(ptr addrspace(1) inreg %ptr) {1941; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:1942; GFX900: ; %bb.0:1943; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX900-NEXT: ;;#ASMSTART1945; GFX900-NEXT: ; def v[3:4]1946; GFX900-NEXT: ;;#ASMEND1947; GFX900-NEXT: v_mov_b32_e32 v5, 01948; GFX900-NEXT: ;;#ASMSTART1949; GFX900-NEXT: ; def v[0:1]1950; GFX900-NEXT: ;;#ASMEND1951; GFX900-NEXT: v_mov_b32_e32 v2, v11952; GFX900-NEXT: v_mov_b32_e32 v3, v01953; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]1954; GFX900-NEXT: s_waitcnt vmcnt(0)1955; GFX900-NEXT: s_setpc_b64 s[30:31]1956;1957; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:1958; GFX90A: ; %bb.0:1959; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1960; GFX90A-NEXT: ;;#ASMSTART1961; GFX90A-NEXT: ; def v[2:3]1962; GFX90A-NEXT: ;;#ASMEND1963; GFX90A-NEXT: v_mov_b32_e32 v6, 01964; GFX90A-NEXT: ;;#ASMSTART1965; GFX90A-NEXT: ; def v[4:5]1966; GFX90A-NEXT: ;;#ASMEND1967; GFX90A-NEXT: v_mov_b32_e32 v0, v31968; GFX90A-NEXT: v_mov_b32_e32 v1, v31969; GFX90A-NEXT: v_mov_b32_e32 v3, v51970; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]1971; GFX90A-NEXT: s_waitcnt vmcnt(0)1972; GFX90A-NEXT: s_setpc_b64 s[30:31]1973;1974; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:1975; GFX942: ; %bb.0:1976; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1977; GFX942-NEXT: ;;#ASMSTART1978; GFX942-NEXT: ; def v[2:3]1979; GFX942-NEXT: ;;#ASMEND1980; GFX942-NEXT: v_mov_b32_e32 v6, 01981; GFX942-NEXT: ;;#ASMSTART1982; GFX942-NEXT: ; def v[4:5]1983; GFX942-NEXT: ;;#ASMEND1984; GFX942-NEXT: v_mov_b32_e32 v0, v31985; GFX942-NEXT: v_mov_b32_e32 v1, v31986; GFX942-NEXT: v_mov_b32_e32 v3, v51987; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]1988; GFX942-NEXT: s_waitcnt vmcnt(0)1989; GFX942-NEXT: s_setpc_b64 s[30:31]1990 %vec0 = call <2 x float> asm "; def $0", "=v"()1991 %vec1 = call <2 x float> asm "; def $0", "=v"()1992 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>1993 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 161994 ret void1995}1996 1997define void @v_shuffle_v4f32_v2f32__u_2_2_2(ptr addrspace(1) inreg %ptr) {1998; GFX9-LABEL: v_shuffle_v4f32_v2f32__u_2_2_2:1999; GFX9: ; %bb.0:2000; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2001; GFX9-NEXT: s_setpc_b64 s[30:31]2002 %vec0 = call <2 x float> asm "; def $0", "=v"()2003 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>2004 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162005 ret void2006}2007 2008define void @v_shuffle_v4f32_v2f32__0_2_2_2(ptr addrspace(1) inreg %ptr) {2009; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:2010; GFX900: ; %bb.0:2011; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2012; GFX900-NEXT: v_mov_b32_e32 v2, 02013; GFX900-NEXT: ;;#ASMSTART2014; GFX900-NEXT: ; def v[0:1]2015; GFX900-NEXT: ;;#ASMEND2016; GFX900-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]2017; GFX900-NEXT: s_waitcnt vmcnt(0)2018; GFX900-NEXT: s_setpc_b64 s[30:31]2019;2020; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:2021; GFX90A: ; %bb.0:2022; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2023; GFX90A-NEXT: v_mov_b32_e32 v2, 02024; GFX90A-NEXT: ;;#ASMSTART2025; GFX90A-NEXT: ; def v[0:1]2026; GFX90A-NEXT: ;;#ASMEND2027; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]2028; GFX90A-NEXT: s_waitcnt vmcnt(0)2029; GFX90A-NEXT: s_setpc_b64 s[30:31]2030;2031; GFX942-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:2032; GFX942: ; %bb.0:2033; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2034; GFX942-NEXT: v_mov_b32_e32 v2, 02035; GFX942-NEXT: ;;#ASMSTART2036; GFX942-NEXT: ; def v[0:1]2037; GFX942-NEXT: ;;#ASMEND2038; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]2039; GFX942-NEXT: s_waitcnt vmcnt(0)2040; GFX942-NEXT: s_setpc_b64 s[30:31]2041 %vec0 = call <2 x float> asm "; def $0", "=v"()2042 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>2043 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162044 ret void2045}2046 2047define void @v_shuffle_v4f32_v2f32__1_2_2_2(ptr addrspace(1) inreg %ptr) {2048; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:2049; GFX900: ; %bb.0:2050; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2051; GFX900-NEXT: v_mov_b32_e32 v2, 02052; GFX900-NEXT: ;;#ASMSTART2053; GFX900-NEXT: ; def v[0:1]2054; GFX900-NEXT: ;;#ASMEND2055; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], s[16:17]2056; GFX900-NEXT: s_waitcnt vmcnt(0)2057; GFX900-NEXT: s_setpc_b64 s[30:31]2058;2059; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:2060; GFX90A: ; %bb.0:2061; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2062; GFX90A-NEXT: ;;#ASMSTART2063; GFX90A-NEXT: ; def v[0:1]2064; GFX90A-NEXT: ;;#ASMEND2065; GFX90A-NEXT: v_mov_b32_e32 v2, 02066; GFX90A-NEXT: v_mov_b32_e32 v0, v12067; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]2068; GFX90A-NEXT: s_waitcnt vmcnt(0)2069; GFX90A-NEXT: s_setpc_b64 s[30:31]2070;2071; GFX942-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:2072; GFX942: ; %bb.0:2073; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2074; GFX942-NEXT: ;;#ASMSTART2075; GFX942-NEXT: ; def v[0:1]2076; GFX942-NEXT: ;;#ASMEND2077; GFX942-NEXT: v_mov_b32_e32 v2, 02078; GFX942-NEXT: v_mov_b32_e32 v0, v12079; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]2080; GFX942-NEXT: s_waitcnt vmcnt(0)2081; GFX942-NEXT: s_setpc_b64 s[30:31]2082 %vec0 = call <2 x float> asm "; def $0", "=v"()2083 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>2084 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162085 ret void2086}2087 2088define void @v_shuffle_v4f32_v2f32__2_2_2_2(ptr addrspace(1) inreg %ptr) {2089; GFX9-LABEL: v_shuffle_v4f32_v2f32__2_2_2_2:2090; GFX9: ; %bb.0:2091; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2092; GFX9-NEXT: s_setpc_b64 s[30:31]2093 %vec0 = call <2 x float> asm "; def $0", "=v"()2094 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>2095 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162096 ret void2097}2098 2099define void @v_shuffle_v4f32_v2f32__3_2_2_2(ptr addrspace(1) inreg %ptr) {2100; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:2101; GFX900: ; %bb.0:2102; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2103; GFX900-NEXT: v_mov_b32_e32 v5, 02104; GFX900-NEXT: ;;#ASMSTART2105; GFX900-NEXT: ; def v[0:1]2106; GFX900-NEXT: ;;#ASMEND2107; GFX900-NEXT: v_mov_b32_e32 v2, v02108; GFX900-NEXT: v_mov_b32_e32 v3, v02109; GFX900-NEXT: v_mov_b32_e32 v4, v02110; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2111; GFX900-NEXT: s_waitcnt vmcnt(0)2112; GFX900-NEXT: s_setpc_b64 s[30:31]2113;2114; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:2115; GFX90A: ; %bb.0:2116; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2117; GFX90A-NEXT: ;;#ASMSTART2118; GFX90A-NEXT: ; def v[2:3]2119; GFX90A-NEXT: ;;#ASMEND2120; GFX90A-NEXT: v_mov_b32_e32 v4, 02121; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]2122; GFX90A-NEXT: v_mov_b32_e32 v3, v22123; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2124; GFX90A-NEXT: s_waitcnt vmcnt(0)2125; GFX90A-NEXT: s_setpc_b64 s[30:31]2126;2127; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:2128; GFX942: ; %bb.0:2129; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2130; GFX942-NEXT: ;;#ASMSTART2131; GFX942-NEXT: ; def v[2:3]2132; GFX942-NEXT: ;;#ASMEND2133; GFX942-NEXT: v_mov_b32_e32 v4, 02134; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]2135; GFX942-NEXT: v_mov_b32_e32 v3, v22136; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2137; GFX942-NEXT: s_waitcnt vmcnt(0)2138; GFX942-NEXT: s_setpc_b64 s[30:31]2139 %vec0 = call <2 x float> asm "; def $0", "=v"()2140 %vec1 = call <2 x float> asm "; def $0", "=v"()2141 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>2142 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162143 ret void2144}2145 2146define void @v_shuffle_v4f32_v2f32__3_u_2_2(ptr addrspace(1) inreg %ptr) {2147; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:2148; GFX900: ; %bb.0:2149; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2150; GFX900-NEXT: v_mov_b32_e32 v2, 02151; GFX900-NEXT: ;;#ASMSTART2152; GFX900-NEXT: ; def v[0:1]2153; GFX900-NEXT: ;;#ASMEND2154; GFX900-NEXT: v_mov_b32_e32 v3, v02155; GFX900-NEXT: v_mov_b32_e32 v4, v02156; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], s[16:17]2157; GFX900-NEXT: s_waitcnt vmcnt(0)2158; GFX900-NEXT: s_setpc_b64 s[30:31]2159;2160; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:2161; GFX90A: ; %bb.0:2162; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2163; GFX90A-NEXT: ;;#ASMSTART2164; GFX90A-NEXT: ; def v[2:3]2165; GFX90A-NEXT: ;;#ASMEND2166; GFX90A-NEXT: v_mov_b32_e32 v1, 02167; GFX90A-NEXT: v_mov_b32_e32 v0, v32168; GFX90A-NEXT: v_mov_b32_e32 v3, v22169; GFX90A-NEXT: global_store_dwordx4 v1, v[0:3], s[16:17]2170; GFX90A-NEXT: s_waitcnt vmcnt(0)2171; GFX90A-NEXT: s_setpc_b64 s[30:31]2172;2173; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:2174; GFX942: ; %bb.0:2175; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2176; GFX942-NEXT: ;;#ASMSTART2177; GFX942-NEXT: ; def v[2:3]2178; GFX942-NEXT: ;;#ASMEND2179; GFX942-NEXT: v_mov_b32_e32 v1, 02180; GFX942-NEXT: v_mov_b32_e32 v0, v32181; GFX942-NEXT: v_mov_b32_e32 v3, v22182; GFX942-NEXT: global_store_dwordx4 v1, v[0:3], s[0:1]2183; GFX942-NEXT: s_waitcnt vmcnt(0)2184; GFX942-NEXT: s_setpc_b64 s[30:31]2185 %vec0 = call <2 x float> asm "; def $0", "=v"()2186 %vec1 = call <2 x float> asm "; def $0", "=v"()2187 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>2188 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162189 ret void2190}2191 2192define void @v_shuffle_v4f32_v2f32__3_0_2_2(ptr addrspace(1) inreg %ptr) {2193; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:2194; GFX900: ; %bb.0:2195; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2196; GFX900-NEXT: ;;#ASMSTART2197; GFX900-NEXT: ; def v[2:3]2198; GFX900-NEXT: ;;#ASMEND2199; GFX900-NEXT: v_mov_b32_e32 v5, 02200; GFX900-NEXT: ;;#ASMSTART2201; GFX900-NEXT: ; def v[0:1]2202; GFX900-NEXT: ;;#ASMEND2203; GFX900-NEXT: v_mov_b32_e32 v3, v02204; GFX900-NEXT: v_mov_b32_e32 v4, v02205; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2206; GFX900-NEXT: s_waitcnt vmcnt(0)2207; GFX900-NEXT: s_setpc_b64 s[30:31]2208;2209; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:2210; GFX90A: ; %bb.0:2211; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX90A-NEXT: ;;#ASMSTART2213; GFX90A-NEXT: ; def v[0:1]2214; GFX90A-NEXT: ;;#ASMEND2215; GFX90A-NEXT: ;;#ASMSTART2216; GFX90A-NEXT: ; def v[2:3]2217; GFX90A-NEXT: ;;#ASMEND2218; GFX90A-NEXT: v_mov_b32_e32 v4, 02219; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]2220; GFX90A-NEXT: v_mov_b32_e32 v3, v22221; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2222; GFX90A-NEXT: s_waitcnt vmcnt(0)2223; GFX90A-NEXT: s_setpc_b64 s[30:31]2224;2225; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:2226; GFX942: ; %bb.0:2227; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2228; GFX942-NEXT: ;;#ASMSTART2229; GFX942-NEXT: ; def v[0:1]2230; GFX942-NEXT: ;;#ASMEND2231; GFX942-NEXT: ;;#ASMSTART2232; GFX942-NEXT: ; def v[2:3]2233; GFX942-NEXT: ;;#ASMEND2234; GFX942-NEXT: v_mov_b32_e32 v4, 02235; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]2236; GFX942-NEXT: v_mov_b32_e32 v3, v22237; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2238; GFX942-NEXT: s_waitcnt vmcnt(0)2239; GFX942-NEXT: s_setpc_b64 s[30:31]2240 %vec0 = call <2 x float> asm "; def $0", "=v"()2241 %vec1 = call <2 x float> asm "; def $0", "=v"()2242 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>2243 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162244 ret void2245}2246 2247define void @v_shuffle_v4f32_v2f32__3_1_2_2(ptr addrspace(1) inreg %ptr) {2248; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:2249; GFX900: ; %bb.0:2250; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2251; GFX900-NEXT: ;;#ASMSTART2252; GFX900-NEXT: ; def v[1:2]2253; GFX900-NEXT: ;;#ASMEND2254; GFX900-NEXT: v_mov_b32_e32 v5, 02255; GFX900-NEXT: ;;#ASMSTART2256; GFX900-NEXT: ; def v[0:1]2257; GFX900-NEXT: ;;#ASMEND2258; GFX900-NEXT: v_mov_b32_e32 v3, v02259; GFX900-NEXT: v_mov_b32_e32 v4, v02260; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2261; GFX900-NEXT: s_waitcnt vmcnt(0)2262; GFX900-NEXT: s_setpc_b64 s[30:31]2263;2264; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:2265; GFX90A: ; %bb.0:2266; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2267; GFX90A-NEXT: ;;#ASMSTART2268; GFX90A-NEXT: ; def v[0:1]2269; GFX90A-NEXT: ;;#ASMEND2270; GFX90A-NEXT: ;;#ASMSTART2271; GFX90A-NEXT: ; def v[2:3]2272; GFX90A-NEXT: ;;#ASMEND2273; GFX90A-NEXT: v_mov_b32_e32 v4, 02274; GFX90A-NEXT: v_mov_b32_e32 v0, v32275; GFX90A-NEXT: v_mov_b32_e32 v3, v22276; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2277; GFX90A-NEXT: s_waitcnt vmcnt(0)2278; GFX90A-NEXT: s_setpc_b64 s[30:31]2279;2280; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:2281; GFX942: ; %bb.0:2282; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2283; GFX942-NEXT: ;;#ASMSTART2284; GFX942-NEXT: ; def v[0:1]2285; GFX942-NEXT: ;;#ASMEND2286; GFX942-NEXT: ;;#ASMSTART2287; GFX942-NEXT: ; def v[2:3]2288; GFX942-NEXT: ;;#ASMEND2289; GFX942-NEXT: v_mov_b32_e32 v4, 02290; GFX942-NEXT: v_mov_b32_e32 v0, v32291; GFX942-NEXT: v_mov_b32_e32 v3, v22292; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2293; GFX942-NEXT: s_waitcnt vmcnt(0)2294; GFX942-NEXT: s_setpc_b64 s[30:31]2295 %vec0 = call <2 x float> asm "; def $0", "=v"()2296 %vec1 = call <2 x float> asm "; def $0", "=v"()2297 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>2298 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162299 ret void2300}2301 2302define void @v_shuffle_v4f32_v2f32__3_3_2_2(ptr addrspace(1) inreg %ptr) {2303; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:2304; GFX900: ; %bb.0:2305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2306; GFX900-NEXT: v_mov_b32_e32 v5, 02307; GFX900-NEXT: ;;#ASMSTART2308; GFX900-NEXT: ; def v[0:1]2309; GFX900-NEXT: ;;#ASMEND2310; GFX900-NEXT: v_mov_b32_e32 v2, v12311; GFX900-NEXT: v_mov_b32_e32 v3, v02312; GFX900-NEXT: v_mov_b32_e32 v4, v02313; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2314; GFX900-NEXT: s_waitcnt vmcnt(0)2315; GFX900-NEXT: s_setpc_b64 s[30:31]2316;2317; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:2318; GFX90A: ; %bb.0:2319; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2320; GFX90A-NEXT: ;;#ASMSTART2321; GFX90A-NEXT: ; def v[2:3]2322; GFX90A-NEXT: ;;#ASMEND2323; GFX90A-NEXT: v_mov_b32_e32 v4, 02324; GFX90A-NEXT: v_mov_b32_e32 v0, v32325; GFX90A-NEXT: v_mov_b32_e32 v1, v32326; GFX90A-NEXT: v_mov_b32_e32 v3, v22327; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2328; GFX90A-NEXT: s_waitcnt vmcnt(0)2329; GFX90A-NEXT: s_setpc_b64 s[30:31]2330;2331; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:2332; GFX942: ; %bb.0:2333; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX942-NEXT: ;;#ASMSTART2335; GFX942-NEXT: ; def v[2:3]2336; GFX942-NEXT: ;;#ASMEND2337; GFX942-NEXT: v_mov_b32_e32 v4, 02338; GFX942-NEXT: v_mov_b32_e32 v0, v32339; GFX942-NEXT: v_mov_b32_e32 v1, v32340; GFX942-NEXT: v_mov_b32_e32 v3, v22341; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2342; GFX942-NEXT: s_waitcnt vmcnt(0)2343; GFX942-NEXT: s_setpc_b64 s[30:31]2344 %vec0 = call <2 x float> asm "; def $0", "=v"()2345 %vec1 = call <2 x float> asm "; def $0", "=v"()2346 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>2347 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162348 ret void2349}2350 2351define void @v_shuffle_v4f32_v2f32__3_3_u_2(ptr addrspace(1) inreg %ptr) {2352; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:2353; GFX900: ; %bb.0:2354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2355; GFX900-NEXT: v_mov_b32_e32 v3, 02356; GFX900-NEXT: ;;#ASMSTART2357; GFX900-NEXT: ; def v[0:1]2358; GFX900-NEXT: ;;#ASMEND2359; GFX900-NEXT: v_mov_b32_e32 v2, v12360; GFX900-NEXT: v_mov_b32_e32 v4, v02361; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]2362; GFX900-NEXT: s_waitcnt vmcnt(0)2363; GFX900-NEXT: s_setpc_b64 s[30:31]2364;2365; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:2366; GFX90A: ; %bb.0:2367; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2368; GFX90A-NEXT: v_mov_b32_e32 v2, 02369; GFX90A-NEXT: ;;#ASMSTART2370; GFX90A-NEXT: ; def v[0:1]2371; GFX90A-NEXT: ;;#ASMEND2372; GFX90A-NEXT: v_mov_b32_e32 v4, v12373; GFX90A-NEXT: v_mov_b32_e32 v5, v12374; GFX90A-NEXT: v_mov_b32_e32 v7, v02375; GFX90A-NEXT: global_store_dwordx4 v2, v[4:7], s[16:17]2376; GFX90A-NEXT: s_waitcnt vmcnt(0)2377; GFX90A-NEXT: s_setpc_b64 s[30:31]2378;2379; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:2380; GFX942: ; %bb.0:2381; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2382; GFX942-NEXT: v_mov_b32_e32 v2, 02383; GFX942-NEXT: ;;#ASMSTART2384; GFX942-NEXT: ; def v[0:1]2385; GFX942-NEXT: ;;#ASMEND2386; GFX942-NEXT: s_nop 02387; GFX942-NEXT: v_mov_b32_e32 v4, v12388; GFX942-NEXT: v_mov_b32_e32 v5, v12389; GFX942-NEXT: v_mov_b32_e32 v7, v02390; GFX942-NEXT: global_store_dwordx4 v2, v[4:7], s[0:1]2391; GFX942-NEXT: s_waitcnt vmcnt(0)2392; GFX942-NEXT: s_setpc_b64 s[30:31]2393 %vec0 = call <2 x float> asm "; def $0", "=v"()2394 %vec1 = call <2 x float> asm "; def $0", "=v"()2395 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>2396 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162397 ret void2398}2399 2400define void @v_shuffle_v4f32_v2f32__3_3_0_2(ptr addrspace(1) inreg %ptr) {2401; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:2402; GFX900: ; %bb.0:2403; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2404; GFX900-NEXT: ;;#ASMSTART2405; GFX900-NEXT: ; def v[3:4]2406; GFX900-NEXT: ;;#ASMEND2407; GFX900-NEXT: v_mov_b32_e32 v5, 02408; GFX900-NEXT: ;;#ASMSTART2409; GFX900-NEXT: ; def v[0:1]2410; GFX900-NEXT: ;;#ASMEND2411; GFX900-NEXT: v_mov_b32_e32 v2, v12412; GFX900-NEXT: v_mov_b32_e32 v4, v02413; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2414; GFX900-NEXT: s_waitcnt vmcnt(0)2415; GFX900-NEXT: s_setpc_b64 s[30:31]2416;2417; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:2418; GFX90A: ; %bb.0:2419; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2420; GFX90A-NEXT: ;;#ASMSTART2421; GFX90A-NEXT: ; def v[2:3]2422; GFX90A-NEXT: ;;#ASMEND2423; GFX90A-NEXT: v_mov_b32_e32 v6, 02424; GFX90A-NEXT: ;;#ASMSTART2425; GFX90A-NEXT: ; def v[4:5]2426; GFX90A-NEXT: ;;#ASMEND2427; GFX90A-NEXT: v_mov_b32_e32 v0, v52428; GFX90A-NEXT: v_mov_b32_e32 v1, v52429; GFX90A-NEXT: v_mov_b32_e32 v3, v42430; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]2431; GFX90A-NEXT: s_waitcnt vmcnt(0)2432; GFX90A-NEXT: s_setpc_b64 s[30:31]2433;2434; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:2435; GFX942: ; %bb.0:2436; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2437; GFX942-NEXT: ;;#ASMSTART2438; GFX942-NEXT: ; def v[2:3]2439; GFX942-NEXT: ;;#ASMEND2440; GFX942-NEXT: v_mov_b32_e32 v6, 02441; GFX942-NEXT: ;;#ASMSTART2442; GFX942-NEXT: ; def v[4:5]2443; GFX942-NEXT: ;;#ASMEND2444; GFX942-NEXT: s_nop 02445; GFX942-NEXT: v_mov_b32_e32 v0, v52446; GFX942-NEXT: v_mov_b32_e32 v1, v52447; GFX942-NEXT: v_mov_b32_e32 v3, v42448; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]2449; GFX942-NEXT: s_waitcnt vmcnt(0)2450; GFX942-NEXT: s_setpc_b64 s[30:31]2451 %vec0 = call <2 x float> asm "; def $0", "=v"()2452 %vec1 = call <2 x float> asm "; def $0", "=v"()2453 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>2454 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162455 ret void2456}2457 2458define void @v_shuffle_v4f32_v2f32__3_3_1_2(ptr addrspace(1) inreg %ptr) {2459; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:2460; GFX900: ; %bb.0:2461; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2462; GFX900-NEXT: ;;#ASMSTART2463; GFX900-NEXT: ; def v[2:3]2464; GFX900-NEXT: ;;#ASMEND2465; GFX900-NEXT: v_mov_b32_e32 v5, 02466; GFX900-NEXT: ;;#ASMSTART2467; GFX900-NEXT: ; def v[0:1]2468; GFX900-NEXT: ;;#ASMEND2469; GFX900-NEXT: v_mov_b32_e32 v2, v12470; GFX900-NEXT: v_mov_b32_e32 v4, v02471; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2472; GFX900-NEXT: s_waitcnt vmcnt(0)2473; GFX900-NEXT: s_setpc_b64 s[30:31]2474;2475; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:2476; GFX90A: ; %bb.0:2477; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2478; GFX90A-NEXT: ;;#ASMSTART2479; GFX90A-NEXT: ; def v[2:3]2480; GFX90A-NEXT: ;;#ASMEND2481; GFX90A-NEXT: ;;#ASMSTART2482; GFX90A-NEXT: ; def v[0:1]2483; GFX90A-NEXT: ;;#ASMEND2484; GFX90A-NEXT: v_mov_b32_e32 v4, 02485; GFX90A-NEXT: v_pk_mov_b32 v[2:3], v[2:3], v[0:1] op_sel:[1,0]2486; GFX90A-NEXT: v_mov_b32_e32 v0, v12487; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2488; GFX90A-NEXT: s_waitcnt vmcnt(0)2489; GFX90A-NEXT: s_setpc_b64 s[30:31]2490;2491; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:2492; GFX942: ; %bb.0:2493; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2494; GFX942-NEXT: ;;#ASMSTART2495; GFX942-NEXT: ; def v[2:3]2496; GFX942-NEXT: ;;#ASMEND2497; GFX942-NEXT: ;;#ASMSTART2498; GFX942-NEXT: ; def v[0:1]2499; GFX942-NEXT: ;;#ASMEND2500; GFX942-NEXT: v_mov_b32_e32 v4, 02501; GFX942-NEXT: v_pk_mov_b32 v[2:3], v[2:3], v[0:1] op_sel:[1,0]2502; GFX942-NEXT: v_mov_b32_e32 v0, v12503; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2504; GFX942-NEXT: s_waitcnt vmcnt(0)2505; GFX942-NEXT: s_setpc_b64 s[30:31]2506 %vec0 = call <2 x float> asm "; def $0", "=v"()2507 %vec1 = call <2 x float> asm "; def $0", "=v"()2508 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>2509 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162510 ret void2511}2512 2513define void @v_shuffle_v4f32_v2f32__u_3_3_3(ptr addrspace(1) inreg %ptr) {2514; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:2515; GFX900: ; %bb.0:2516; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2517; GFX900-NEXT: v_mov_b32_e32 v4, 02518; GFX900-NEXT: ;;#ASMSTART2519; GFX900-NEXT: ; def v[0:1]2520; GFX900-NEXT: ;;#ASMEND2521; GFX900-NEXT: v_mov_b32_e32 v2, v12522; GFX900-NEXT: v_mov_b32_e32 v3, v12523; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2524; GFX900-NEXT: s_waitcnt vmcnt(0)2525; GFX900-NEXT: s_setpc_b64 s[30:31]2526;2527; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:2528; GFX90A: ; %bb.0:2529; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2530; GFX90A-NEXT: v_mov_b32_e32 v4, 02531; GFX90A-NEXT: ;;#ASMSTART2532; GFX90A-NEXT: ; def v[0:1]2533; GFX90A-NEXT: ;;#ASMEND2534; GFX90A-NEXT: v_mov_b32_e32 v2, v12535; GFX90A-NEXT: v_mov_b32_e32 v3, v12536; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2537; GFX90A-NEXT: s_waitcnt vmcnt(0)2538; GFX90A-NEXT: s_setpc_b64 s[30:31]2539;2540; GFX942-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:2541; GFX942: ; %bb.0:2542; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2543; GFX942-NEXT: v_mov_b32_e32 v4, 02544; GFX942-NEXT: ;;#ASMSTART2545; GFX942-NEXT: ; def v[0:1]2546; GFX942-NEXT: ;;#ASMEND2547; GFX942-NEXT: s_nop 02548; GFX942-NEXT: v_mov_b32_e32 v2, v12549; GFX942-NEXT: v_mov_b32_e32 v3, v12550; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2551; GFX942-NEXT: s_waitcnt vmcnt(0)2552; GFX942-NEXT: s_setpc_b64 s[30:31]2553 %vec0 = call <2 x float> asm "; def $0", "=v"()2554 %vec1 = call <2 x float> asm "; def $0", "=v"()2555 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>2556 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162557 ret void2558}2559 2560define void @v_shuffle_v4f32_v2f32__0_3_3_3(ptr addrspace(1) inreg %ptr) {2561; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:2562; GFX900: ; %bb.0:2563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2564; GFX900-NEXT: ;;#ASMSTART2565; GFX900-NEXT: ; def v[0:1]2566; GFX900-NEXT: ;;#ASMEND2567; GFX900-NEXT: ;;#ASMSTART2568; GFX900-NEXT: ; def v[1:2]2569; GFX900-NEXT: ;;#ASMEND2570; GFX900-NEXT: v_mov_b32_e32 v4, 02571; GFX900-NEXT: v_mov_b32_e32 v1, v22572; GFX900-NEXT: v_mov_b32_e32 v3, v22573; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2574; GFX900-NEXT: s_waitcnt vmcnt(0)2575; GFX900-NEXT: s_setpc_b64 s[30:31]2576;2577; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:2578; GFX90A: ; %bb.0:2579; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX90A-NEXT: ;;#ASMSTART2581; GFX90A-NEXT: ; def v[0:1]2582; GFX90A-NEXT: ;;#ASMEND2583; GFX90A-NEXT: ;;#ASMSTART2584; GFX90A-NEXT: ; def v[2:3]2585; GFX90A-NEXT: ;;#ASMEND2586; GFX90A-NEXT: v_mov_b32_e32 v4, 02587; GFX90A-NEXT: v_mov_b32_e32 v1, v32588; GFX90A-NEXT: v_mov_b32_e32 v2, v32589; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2590; GFX90A-NEXT: s_waitcnt vmcnt(0)2591; GFX90A-NEXT: s_setpc_b64 s[30:31]2592;2593; GFX942-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:2594; GFX942: ; %bb.0:2595; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2596; GFX942-NEXT: ;;#ASMSTART2597; GFX942-NEXT: ; def v[0:1]2598; GFX942-NEXT: ;;#ASMEND2599; GFX942-NEXT: ;;#ASMSTART2600; GFX942-NEXT: ; def v[2:3]2601; GFX942-NEXT: ;;#ASMEND2602; GFX942-NEXT: v_mov_b32_e32 v4, 02603; GFX942-NEXT: v_mov_b32_e32 v1, v32604; GFX942-NEXT: v_mov_b32_e32 v2, v32605; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2606; GFX942-NEXT: s_waitcnt vmcnt(0)2607; GFX942-NEXT: s_setpc_b64 s[30:31]2608 %vec0 = call <2 x float> asm "; def $0", "=v"()2609 %vec1 = call <2 x float> asm "; def $0", "=v"()2610 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>2611 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162612 ret void2613}2614 2615define void @v_shuffle_v4f32_v2f32__1_3_3_3(ptr addrspace(1) inreg %ptr) {2616; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:2617; GFX900: ; %bb.0:2618; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2619; GFX900-NEXT: ;;#ASMSTART2620; GFX900-NEXT: ; def v[2:3]2621; GFX900-NEXT: ;;#ASMEND2622; GFX900-NEXT: v_mov_b32_e32 v5, 02623; GFX900-NEXT: v_mov_b32_e32 v2, v32624; GFX900-NEXT: v_mov_b32_e32 v4, v32625; GFX900-NEXT: ;;#ASMSTART2626; GFX900-NEXT: ; def v[0:1]2627; GFX900-NEXT: ;;#ASMEND2628; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2629; GFX900-NEXT: s_waitcnt vmcnt(0)2630; GFX900-NEXT: s_setpc_b64 s[30:31]2631;2632; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:2633; GFX90A: ; %bb.0:2634; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2635; GFX90A-NEXT: ;;#ASMSTART2636; GFX90A-NEXT: ; def v[2:3]2637; GFX90A-NEXT: ;;#ASMEND2638; GFX90A-NEXT: ;;#ASMSTART2639; GFX90A-NEXT: ; def v[0:1]2640; GFX90A-NEXT: ;;#ASMEND2641; GFX90A-NEXT: v_mov_b32_e32 v4, 02642; GFX90A-NEXT: v_mov_b32_e32 v0, v32643; GFX90A-NEXT: v_mov_b32_e32 v2, v12644; GFX90A-NEXT: v_mov_b32_e32 v3, v12645; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2646; GFX90A-NEXT: s_waitcnt vmcnt(0)2647; GFX90A-NEXT: s_setpc_b64 s[30:31]2648;2649; GFX942-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:2650; GFX942: ; %bb.0:2651; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2652; GFX942-NEXT: ;;#ASMSTART2653; GFX942-NEXT: ; def v[2:3]2654; GFX942-NEXT: ;;#ASMEND2655; GFX942-NEXT: ;;#ASMSTART2656; GFX942-NEXT: ; def v[0:1]2657; GFX942-NEXT: ;;#ASMEND2658; GFX942-NEXT: v_mov_b32_e32 v4, 02659; GFX942-NEXT: v_mov_b32_e32 v0, v32660; GFX942-NEXT: v_mov_b32_e32 v2, v12661; GFX942-NEXT: v_mov_b32_e32 v3, v12662; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2663; GFX942-NEXT: s_waitcnt vmcnt(0)2664; GFX942-NEXT: s_setpc_b64 s[30:31]2665 %vec0 = call <2 x float> asm "; def $0", "=v"()2666 %vec1 = call <2 x float> asm "; def $0", "=v"()2667 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>2668 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162669 ret void2670}2671 2672define void @v_shuffle_v4f32_v2f32__2_3_3_3(ptr addrspace(1) inreg %ptr) {2673; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:2674; GFX900: ; %bb.0:2675; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2676; GFX900-NEXT: v_mov_b32_e32 v4, 02677; GFX900-NEXT: ;;#ASMSTART2678; GFX900-NEXT: ; def v[0:1]2679; GFX900-NEXT: ;;#ASMEND2680; GFX900-NEXT: v_mov_b32_e32 v2, v12681; GFX900-NEXT: v_mov_b32_e32 v3, v12682; GFX900-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2683; GFX900-NEXT: s_waitcnt vmcnt(0)2684; GFX900-NEXT: s_setpc_b64 s[30:31]2685;2686; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:2687; GFX90A: ; %bb.0:2688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2689; GFX90A-NEXT: v_mov_b32_e32 v4, 02690; GFX90A-NEXT: ;;#ASMSTART2691; GFX90A-NEXT: ; def v[0:1]2692; GFX90A-NEXT: ;;#ASMEND2693; GFX90A-NEXT: v_mov_b32_e32 v2, v12694; GFX90A-NEXT: v_mov_b32_e32 v3, v12695; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2696; GFX90A-NEXT: s_waitcnt vmcnt(0)2697; GFX90A-NEXT: s_setpc_b64 s[30:31]2698;2699; GFX942-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:2700; GFX942: ; %bb.0:2701; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2702; GFX942-NEXT: v_mov_b32_e32 v4, 02703; GFX942-NEXT: ;;#ASMSTART2704; GFX942-NEXT: ; def v[0:1]2705; GFX942-NEXT: ;;#ASMEND2706; GFX942-NEXT: s_nop 02707; GFX942-NEXT: v_mov_b32_e32 v2, v12708; GFX942-NEXT: v_mov_b32_e32 v3, v12709; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2710; GFX942-NEXT: s_waitcnt vmcnt(0)2711; GFX942-NEXT: s_setpc_b64 s[30:31]2712 %vec0 = call <2 x float> asm "; def $0", "=v"()2713 %vec1 = call <2 x float> asm "; def $0", "=v"()2714 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>2715 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162716 ret void2717}2718 2719define void @v_shuffle_v4f32_v2f32__3_u_3_3(ptr addrspace(1) inreg %ptr) {2720; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:2721; GFX900: ; %bb.0:2722; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2723; GFX900-NEXT: v_mov_b32_e32 v2, 02724; GFX900-NEXT: ;;#ASMSTART2725; GFX900-NEXT: ; def v[0:1]2726; GFX900-NEXT: ;;#ASMEND2727; GFX900-NEXT: v_mov_b32_e32 v3, v12728; GFX900-NEXT: v_mov_b32_e32 v4, v12729; GFX900-NEXT: global_store_dwordx4 v2, v[1:4], s[16:17]2730; GFX900-NEXT: s_waitcnt vmcnt(0)2731; GFX900-NEXT: s_setpc_b64 s[30:31]2732;2733; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:2734; GFX90A: ; %bb.0:2735; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2736; GFX90A-NEXT: ;;#ASMSTART2737; GFX90A-NEXT: ; def v[2:3]2738; GFX90A-NEXT: ;;#ASMEND2739; GFX90A-NEXT: v_mov_b32_e32 v1, 02740; GFX90A-NEXT: v_mov_b32_e32 v0, v32741; GFX90A-NEXT: v_mov_b32_e32 v2, v32742; GFX90A-NEXT: global_store_dwordx4 v1, v[0:3], s[16:17]2743; GFX90A-NEXT: s_waitcnt vmcnt(0)2744; GFX90A-NEXT: s_setpc_b64 s[30:31]2745;2746; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:2747; GFX942: ; %bb.0:2748; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2749; GFX942-NEXT: ;;#ASMSTART2750; GFX942-NEXT: ; def v[2:3]2751; GFX942-NEXT: ;;#ASMEND2752; GFX942-NEXT: v_mov_b32_e32 v1, 02753; GFX942-NEXT: v_mov_b32_e32 v0, v32754; GFX942-NEXT: v_mov_b32_e32 v2, v32755; GFX942-NEXT: global_store_dwordx4 v1, v[0:3], s[0:1]2756; GFX942-NEXT: s_waitcnt vmcnt(0)2757; GFX942-NEXT: s_setpc_b64 s[30:31]2758 %vec0 = call <2 x float> asm "; def $0", "=v"()2759 %vec1 = call <2 x float> asm "; def $0", "=v"()2760 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>2761 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162762 ret void2763}2764 2765define void @v_shuffle_v4f32_v2f32__3_0_3_3(ptr addrspace(1) inreg %ptr) {2766; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:2767; GFX900: ; %bb.0:2768; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX900-NEXT: ;;#ASMSTART2770; GFX900-NEXT: ; def v[2:3]2771; GFX900-NEXT: ;;#ASMEND2772; GFX900-NEXT: v_mov_b32_e32 v5, 02773; GFX900-NEXT: ;;#ASMSTART2774; GFX900-NEXT: ; def v[0:1]2775; GFX900-NEXT: ;;#ASMEND2776; GFX900-NEXT: v_mov_b32_e32 v3, v12777; GFX900-NEXT: v_mov_b32_e32 v4, v12778; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2779; GFX900-NEXT: s_waitcnt vmcnt(0)2780; GFX900-NEXT: s_setpc_b64 s[30:31]2781;2782; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:2783; GFX90A: ; %bb.0:2784; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2785; GFX90A-NEXT: ;;#ASMSTART2786; GFX90A-NEXT: ; def v[0:1]2787; GFX90A-NEXT: ;;#ASMEND2788; GFX90A-NEXT: ;;#ASMSTART2789; GFX90A-NEXT: ; def v[2:3]2790; GFX90A-NEXT: ;;#ASMEND2791; GFX90A-NEXT: v_mov_b32_e32 v4, 02792; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]2793; GFX90A-NEXT: v_mov_b32_e32 v2, v32794; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2795; GFX90A-NEXT: s_waitcnt vmcnt(0)2796; GFX90A-NEXT: s_setpc_b64 s[30:31]2797;2798; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:2799; GFX942: ; %bb.0:2800; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2801; GFX942-NEXT: ;;#ASMSTART2802; GFX942-NEXT: ; def v[0:1]2803; GFX942-NEXT: ;;#ASMEND2804; GFX942-NEXT: ;;#ASMSTART2805; GFX942-NEXT: ; def v[2:3]2806; GFX942-NEXT: ;;#ASMEND2807; GFX942-NEXT: v_mov_b32_e32 v4, 02808; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]2809; GFX942-NEXT: v_mov_b32_e32 v2, v32810; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2811; GFX942-NEXT: s_waitcnt vmcnt(0)2812; GFX942-NEXT: s_setpc_b64 s[30:31]2813 %vec0 = call <2 x float> asm "; def $0", "=v"()2814 %vec1 = call <2 x float> asm "; def $0", "=v"()2815 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>2816 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162817 ret void2818}2819 2820define void @v_shuffle_v4f32_v2f32__3_1_3_3(ptr addrspace(1) inreg %ptr) {2821; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:2822; GFX900: ; %bb.0:2823; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2824; GFX900-NEXT: ;;#ASMSTART2825; GFX900-NEXT: ; def v[1:2]2826; GFX900-NEXT: ;;#ASMEND2827; GFX900-NEXT: v_mov_b32_e32 v5, 02828; GFX900-NEXT: ;;#ASMSTART2829; GFX900-NEXT: ; def v[0:1]2830; GFX900-NEXT: ;;#ASMEND2831; GFX900-NEXT: v_mov_b32_e32 v3, v12832; GFX900-NEXT: v_mov_b32_e32 v4, v12833; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2834; GFX900-NEXT: s_waitcnt vmcnt(0)2835; GFX900-NEXT: s_setpc_b64 s[30:31]2836;2837; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:2838; GFX90A: ; %bb.0:2839; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2840; GFX90A-NEXT: ;;#ASMSTART2841; GFX90A-NEXT: ; def v[0:1]2842; GFX90A-NEXT: ;;#ASMEND2843; GFX90A-NEXT: ;;#ASMSTART2844; GFX90A-NEXT: ; def v[2:3]2845; GFX90A-NEXT: ;;#ASMEND2846; GFX90A-NEXT: v_mov_b32_e32 v4, 02847; GFX90A-NEXT: v_mov_b32_e32 v0, v32848; GFX90A-NEXT: v_mov_b32_e32 v2, v32849; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2850; GFX90A-NEXT: s_waitcnt vmcnt(0)2851; GFX90A-NEXT: s_setpc_b64 s[30:31]2852;2853; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:2854; GFX942: ; %bb.0:2855; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2856; GFX942-NEXT: ;;#ASMSTART2857; GFX942-NEXT: ; def v[0:1]2858; GFX942-NEXT: ;;#ASMEND2859; GFX942-NEXT: ;;#ASMSTART2860; GFX942-NEXT: ; def v[2:3]2861; GFX942-NEXT: ;;#ASMEND2862; GFX942-NEXT: v_mov_b32_e32 v4, 02863; GFX942-NEXT: v_mov_b32_e32 v0, v32864; GFX942-NEXT: v_mov_b32_e32 v2, v32865; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2866; GFX942-NEXT: s_waitcnt vmcnt(0)2867; GFX942-NEXT: s_setpc_b64 s[30:31]2868 %vec0 = call <2 x float> asm "; def $0", "=v"()2869 %vec1 = call <2 x float> asm "; def $0", "=v"()2870 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>2871 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162872 ret void2873}2874 2875define void @v_shuffle_v4f32_v2f32__3_2_3_3(ptr addrspace(1) inreg %ptr) {2876; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:2877; GFX900: ; %bb.0:2878; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2879; GFX900-NEXT: v_mov_b32_e32 v5, 02880; GFX900-NEXT: ;;#ASMSTART2881; GFX900-NEXT: ; def v[0:1]2882; GFX900-NEXT: ;;#ASMEND2883; GFX900-NEXT: v_mov_b32_e32 v2, v02884; GFX900-NEXT: v_mov_b32_e32 v3, v12885; GFX900-NEXT: v_mov_b32_e32 v4, v12886; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2887; GFX900-NEXT: s_waitcnt vmcnt(0)2888; GFX900-NEXT: s_setpc_b64 s[30:31]2889;2890; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:2891; GFX90A: ; %bb.0:2892; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2893; GFX90A-NEXT: ;;#ASMSTART2894; GFX90A-NEXT: ; def v[2:3]2895; GFX90A-NEXT: ;;#ASMEND2896; GFX90A-NEXT: v_mov_b32_e32 v4, 02897; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]2898; GFX90A-NEXT: v_mov_b32_e32 v2, v32899; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2900; GFX90A-NEXT: s_waitcnt vmcnt(0)2901; GFX90A-NEXT: s_setpc_b64 s[30:31]2902;2903; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:2904; GFX942: ; %bb.0:2905; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2906; GFX942-NEXT: ;;#ASMSTART2907; GFX942-NEXT: ; def v[2:3]2908; GFX942-NEXT: ;;#ASMEND2909; GFX942-NEXT: v_mov_b32_e32 v4, 02910; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]2911; GFX942-NEXT: v_mov_b32_e32 v2, v32912; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]2913; GFX942-NEXT: s_waitcnt vmcnt(0)2914; GFX942-NEXT: s_setpc_b64 s[30:31]2915 %vec0 = call <2 x float> asm "; def $0", "=v"()2916 %vec1 = call <2 x float> asm "; def $0", "=v"()2917 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>2918 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162919 ret void2920}2921 2922define void @v_shuffle_v4f32_v2f32__3_3_u_3(ptr addrspace(1) inreg %ptr) {2923; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:2924; GFX900: ; %bb.0:2925; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2926; GFX900-NEXT: v_mov_b32_e32 v3, 02927; GFX900-NEXT: ;;#ASMSTART2928; GFX900-NEXT: ; def v[0:1]2929; GFX900-NEXT: ;;#ASMEND2930; GFX900-NEXT: v_mov_b32_e32 v2, v12931; GFX900-NEXT: v_mov_b32_e32 v4, v12932; GFX900-NEXT: global_store_dwordx4 v3, v[1:4], s[16:17]2933; GFX900-NEXT: s_waitcnt vmcnt(0)2934; GFX900-NEXT: s_setpc_b64 s[30:31]2935;2936; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:2937; GFX90A: ; %bb.0:2938; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2939; GFX90A-NEXT: ;;#ASMSTART2940; GFX90A-NEXT: ; def v[0:1]2941; GFX90A-NEXT: ;;#ASMEND2942; GFX90A-NEXT: v_mov_b32_e32 v2, 02943; GFX90A-NEXT: v_mov_b32_e32 v0, v12944; GFX90A-NEXT: v_mov_b32_e32 v3, v12945; GFX90A-NEXT: global_store_dwordx4 v2, v[0:3], s[16:17]2946; GFX90A-NEXT: s_waitcnt vmcnt(0)2947; GFX90A-NEXT: s_setpc_b64 s[30:31]2948;2949; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:2950; GFX942: ; %bb.0:2951; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2952; GFX942-NEXT: ;;#ASMSTART2953; GFX942-NEXT: ; def v[0:1]2954; GFX942-NEXT: ;;#ASMEND2955; GFX942-NEXT: v_mov_b32_e32 v2, 02956; GFX942-NEXT: v_mov_b32_e32 v0, v12957; GFX942-NEXT: v_mov_b32_e32 v3, v12958; GFX942-NEXT: global_store_dwordx4 v2, v[0:3], s[0:1]2959; GFX942-NEXT: s_waitcnt vmcnt(0)2960; GFX942-NEXT: s_setpc_b64 s[30:31]2961 %vec0 = call <2 x float> asm "; def $0", "=v"()2962 %vec1 = call <2 x float> asm "; def $0", "=v"()2963 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>2964 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 162965 ret void2966}2967 2968define void @v_shuffle_v4f32_v2f32__3_3_0_3(ptr addrspace(1) inreg %ptr) {2969; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:2970; GFX900: ; %bb.0:2971; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2972; GFX900-NEXT: ;;#ASMSTART2973; GFX900-NEXT: ; def v[3:4]2974; GFX900-NEXT: ;;#ASMEND2975; GFX900-NEXT: v_mov_b32_e32 v5, 02976; GFX900-NEXT: ;;#ASMSTART2977; GFX900-NEXT: ; def v[0:1]2978; GFX900-NEXT: ;;#ASMEND2979; GFX900-NEXT: v_mov_b32_e32 v2, v12980; GFX900-NEXT: v_mov_b32_e32 v4, v12981; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]2982; GFX900-NEXT: s_waitcnt vmcnt(0)2983; GFX900-NEXT: s_setpc_b64 s[30:31]2984;2985; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:2986; GFX90A: ; %bb.0:2987; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2988; GFX90A-NEXT: ;;#ASMSTART2989; GFX90A-NEXT: ; def v[2:3]2990; GFX90A-NEXT: ;;#ASMEND2991; GFX90A-NEXT: ;;#ASMSTART2992; GFX90A-NEXT: ; def v[0:1]2993; GFX90A-NEXT: ;;#ASMEND2994; GFX90A-NEXT: v_mov_b32_e32 v4, 02995; GFX90A-NEXT: v_mov_b32_e32 v0, v12996; GFX90A-NEXT: v_mov_b32_e32 v3, v12997; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]2998; GFX90A-NEXT: s_waitcnt vmcnt(0)2999; GFX90A-NEXT: s_setpc_b64 s[30:31]3000;3001; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:3002; GFX942: ; %bb.0:3003; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3004; GFX942-NEXT: ;;#ASMSTART3005; GFX942-NEXT: ; def v[2:3]3006; GFX942-NEXT: ;;#ASMEND3007; GFX942-NEXT: ;;#ASMSTART3008; GFX942-NEXT: ; def v[0:1]3009; GFX942-NEXT: ;;#ASMEND3010; GFX942-NEXT: v_mov_b32_e32 v4, 03011; GFX942-NEXT: v_mov_b32_e32 v0, v13012; GFX942-NEXT: v_mov_b32_e32 v3, v13013; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]3014; GFX942-NEXT: s_waitcnt vmcnt(0)3015; GFX942-NEXT: s_setpc_b64 s[30:31]3016 %vec0 = call <2 x float> asm "; def $0", "=v"()3017 %vec1 = call <2 x float> asm "; def $0", "=v"()3018 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>3019 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 163020 ret void3021}3022 3023define void @v_shuffle_v4f32_v2f32__3_3_1_3(ptr addrspace(1) inreg %ptr) {3024; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:3025; GFX900: ; %bb.0:3026; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3027; GFX900-NEXT: ;;#ASMSTART3028; GFX900-NEXT: ; def v[2:3]3029; GFX900-NEXT: ;;#ASMEND3030; GFX900-NEXT: v_mov_b32_e32 v5, 03031; GFX900-NEXT: ;;#ASMSTART3032; GFX900-NEXT: ; def v[0:1]3033; GFX900-NEXT: ;;#ASMEND3034; GFX900-NEXT: v_mov_b32_e32 v2, v13035; GFX900-NEXT: v_mov_b32_e32 v4, v13036; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]3037; GFX900-NEXT: s_waitcnt vmcnt(0)3038; GFX900-NEXT: s_setpc_b64 s[30:31]3039;3040; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:3041; GFX90A: ; %bb.0:3042; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3043; GFX90A-NEXT: ;;#ASMSTART3044; GFX90A-NEXT: ; def v[2:3]3045; GFX90A-NEXT: ;;#ASMEND3046; GFX90A-NEXT: ;;#ASMSTART3047; GFX90A-NEXT: ; def v[0:1]3048; GFX90A-NEXT: ;;#ASMEND3049; GFX90A-NEXT: v_mov_b32_e32 v4, 03050; GFX90A-NEXT: v_mov_b32_e32 v0, v13051; GFX90A-NEXT: v_mov_b32_e32 v2, v33052; GFX90A-NEXT: v_mov_b32_e32 v3, v13053; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]3054; GFX90A-NEXT: s_waitcnt vmcnt(0)3055; GFX90A-NEXT: s_setpc_b64 s[30:31]3056;3057; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:3058; GFX942: ; %bb.0:3059; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3060; GFX942-NEXT: ;;#ASMSTART3061; GFX942-NEXT: ; def v[2:3]3062; GFX942-NEXT: ;;#ASMEND3063; GFX942-NEXT: ;;#ASMSTART3064; GFX942-NEXT: ; def v[0:1]3065; GFX942-NEXT: ;;#ASMEND3066; GFX942-NEXT: v_mov_b32_e32 v4, 03067; GFX942-NEXT: v_mov_b32_e32 v0, v13068; GFX942-NEXT: v_mov_b32_e32 v2, v33069; GFX942-NEXT: v_mov_b32_e32 v3, v13070; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]3071; GFX942-NEXT: s_waitcnt vmcnt(0)3072; GFX942-NEXT: s_setpc_b64 s[30:31]3073 %vec0 = call <2 x float> asm "; def $0", "=v"()3074 %vec1 = call <2 x float> asm "; def $0", "=v"()3075 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>3076 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 163077 ret void3078}3079 3080define void @v_shuffle_v4f32_v2f32__3_3_2_3(ptr addrspace(1) inreg %ptr) {3081; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:3082; GFX900: ; %bb.0:3083; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3084; GFX900-NEXT: v_mov_b32_e32 v5, 03085; GFX900-NEXT: ;;#ASMSTART3086; GFX900-NEXT: ; def v[0:1]3087; GFX900-NEXT: ;;#ASMEND3088; GFX900-NEXT: v_mov_b32_e32 v2, v13089; GFX900-NEXT: v_mov_b32_e32 v3, v03090; GFX900-NEXT: v_mov_b32_e32 v4, v13091; GFX900-NEXT: global_store_dwordx4 v5, v[1:4], s[16:17]3092; GFX900-NEXT: s_waitcnt vmcnt(0)3093; GFX900-NEXT: s_setpc_b64 s[30:31]3094;3095; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:3096; GFX90A: ; %bb.0:3097; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3098; GFX90A-NEXT: v_mov_b32_e32 v4, 03099; GFX90A-NEXT: ;;#ASMSTART3100; GFX90A-NEXT: ; def v[2:3]3101; GFX90A-NEXT: ;;#ASMEND3102; GFX90A-NEXT: v_mov_b32_e32 v0, v33103; GFX90A-NEXT: v_mov_b32_e32 v1, v33104; GFX90A-NEXT: global_store_dwordx4 v4, v[0:3], s[16:17]3105; GFX90A-NEXT: s_waitcnt vmcnt(0)3106; GFX90A-NEXT: s_setpc_b64 s[30:31]3107;3108; GFX942-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:3109; GFX942: ; %bb.0:3110; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3111; GFX942-NEXT: v_mov_b32_e32 v4, 03112; GFX942-NEXT: ;;#ASMSTART3113; GFX942-NEXT: ; def v[2:3]3114; GFX942-NEXT: ;;#ASMEND3115; GFX942-NEXT: s_nop 03116; GFX942-NEXT: v_mov_b32_e32 v0, v33117; GFX942-NEXT: v_mov_b32_e32 v1, v33118; GFX942-NEXT: global_store_dwordx4 v4, v[0:3], s[0:1]3119; GFX942-NEXT: s_waitcnt vmcnt(0)3120; GFX942-NEXT: s_setpc_b64 s[30:31]3121 %vec0 = call <2 x float> asm "; def $0", "=v"()3122 %vec1 = call <2 x float> asm "; def $0", "=v"()3123 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>3124 store <4 x float> %shuf, ptr addrspace(1) %ptr, align 163125 ret void3126}3127 3128define void @s_shuffle_v4f32_v2f32__u_u_u_u() {3129; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_u_u_u:3130; GFX9: ; %bb.0:3131; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3132; GFX9-NEXT: ;;#ASMSTART3133; GFX9-NEXT: ; use s[8:11]3134; GFX9-NEXT: ;;#ASMEND3135; GFX9-NEXT: s_setpc_b64 s[30:31]3136 %vec0 = call <2 x float> asm "; def $0", "=s"()3137 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> poison3138 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3139 ret void3140}3141 3142define void @s_shuffle_v4f32_v2f32__0_u_u_u() {3143; GFX900-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:3144; GFX900: ; %bb.0:3145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3146; GFX900-NEXT: ;;#ASMSTART3147; GFX900-NEXT: ; def s[8:9]3148; GFX900-NEXT: ;;#ASMEND3149; GFX900-NEXT: ;;#ASMSTART3150; GFX900-NEXT: ; use s[8:11]3151; GFX900-NEXT: ;;#ASMEND3152; GFX900-NEXT: s_setpc_b64 s[30:31]3153;3154; GFX90A-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:3155; GFX90A: ; %bb.0:3156; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3157; GFX90A-NEXT: ;;#ASMSTART3158; GFX90A-NEXT: ; def s[8:9]3159; GFX90A-NEXT: ;;#ASMEND3160; GFX90A-NEXT: ;;#ASMSTART3161; GFX90A-NEXT: ; use s[8:11]3162; GFX90A-NEXT: ;;#ASMEND3163; GFX90A-NEXT: s_setpc_b64 s[30:31]3164;3165; GFX942-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:3166; GFX942: ; %bb.0:3167; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3168; GFX942-NEXT: ;;#ASMSTART3169; GFX942-NEXT: ; def s[8:9]3170; GFX942-NEXT: ;;#ASMEND3171; GFX942-NEXT: s_nop 03172; GFX942-NEXT: ;;#ASMSTART3173; GFX942-NEXT: ; use s[8:11]3174; GFX942-NEXT: ;;#ASMEND3175; GFX942-NEXT: s_setpc_b64 s[30:31]3176 %vec0 = call <2 x float> asm "; def $0", "=s"()3177 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>3178 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3179 ret void3180}3181 3182define void @s_shuffle_v4f32_v2f32__1_u_u_u() {3183; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:3184; GFX900: ; %bb.0:3185; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3186; GFX900-NEXT: ;;#ASMSTART3187; GFX900-NEXT: ; def s[4:5]3188; GFX900-NEXT: ;;#ASMEND3189; GFX900-NEXT: s_mov_b32 s8, s53190; GFX900-NEXT: ;;#ASMSTART3191; GFX900-NEXT: ; use s[8:11]3192; GFX900-NEXT: ;;#ASMEND3193; GFX900-NEXT: s_setpc_b64 s[30:31]3194;3195; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:3196; GFX90A: ; %bb.0:3197; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3198; GFX90A-NEXT: ;;#ASMSTART3199; GFX90A-NEXT: ; def s[4:5]3200; GFX90A-NEXT: ;;#ASMEND3201; GFX90A-NEXT: s_mov_b32 s8, s53202; GFX90A-NEXT: ;;#ASMSTART3203; GFX90A-NEXT: ; use s[8:11]3204; GFX90A-NEXT: ;;#ASMEND3205; GFX90A-NEXT: s_setpc_b64 s[30:31]3206;3207; GFX942-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:3208; GFX942: ; %bb.0:3209; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3210; GFX942-NEXT: ;;#ASMSTART3211; GFX942-NEXT: ; def s[0:1]3212; GFX942-NEXT: ;;#ASMEND3213; GFX942-NEXT: s_mov_b32 s8, s13214; GFX942-NEXT: ;;#ASMSTART3215; GFX942-NEXT: ; use s[8:11]3216; GFX942-NEXT: ;;#ASMEND3217; GFX942-NEXT: s_setpc_b64 s[30:31]3218 %vec0 = call <2 x float> asm "; def $0", "=s"()3219 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>3220 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3221 ret void3222}3223 3224define void @s_shuffle_v4f32_v2f32__2_u_u_u() {3225; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_u_u_u:3226; GFX9: ; %bb.0:3227; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3228; GFX9-NEXT: ;;#ASMSTART3229; GFX9-NEXT: ; use s[8:11]3230; GFX9-NEXT: ;;#ASMEND3231; GFX9-NEXT: s_setpc_b64 s[30:31]3232 %vec0 = call <2 x float> asm "; def $0", "=s"()3233 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>3234 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3235 ret void3236}3237 3238define void @s_shuffle_v4f32_v2f32__3_u_u_u() {3239; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:3240; GFX900: ; %bb.0:3241; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3242; GFX900-NEXT: ;;#ASMSTART3243; GFX900-NEXT: ; def s[4:5]3244; GFX900-NEXT: ;;#ASMEND3245; GFX900-NEXT: s_mov_b32 s8, s53246; GFX900-NEXT: ;;#ASMSTART3247; GFX900-NEXT: ; use s[8:11]3248; GFX900-NEXT: ;;#ASMEND3249; GFX900-NEXT: s_setpc_b64 s[30:31]3250;3251; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:3252; GFX90A: ; %bb.0:3253; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3254; GFX90A-NEXT: ;;#ASMSTART3255; GFX90A-NEXT: ; def s[4:5]3256; GFX90A-NEXT: ;;#ASMEND3257; GFX90A-NEXT: s_mov_b32 s8, s53258; GFX90A-NEXT: ;;#ASMSTART3259; GFX90A-NEXT: ; use s[8:11]3260; GFX90A-NEXT: ;;#ASMEND3261; GFX90A-NEXT: s_setpc_b64 s[30:31]3262;3263; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:3264; GFX942: ; %bb.0:3265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX942-NEXT: ;;#ASMSTART3267; GFX942-NEXT: ; def s[0:1]3268; GFX942-NEXT: ;;#ASMEND3269; GFX942-NEXT: s_mov_b32 s8, s13270; GFX942-NEXT: ;;#ASMSTART3271; GFX942-NEXT: ; use s[8:11]3272; GFX942-NEXT: ;;#ASMEND3273; GFX942-NEXT: s_setpc_b64 s[30:31]3274 %vec0 = call <2 x float> asm "; def $0", "=s"()3275 %vec1 = call <2 x float> asm "; def $0", "=s"()3276 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>3277 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3278 ret void3279}3280 3281define void @s_shuffle_v4f32_v2f32__3_0_u_u() {3282; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:3283; GFX900: ; %bb.0:3284; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3285; GFX900-NEXT: ;;#ASMSTART3286; GFX900-NEXT: ; def s[4:5]3287; GFX900-NEXT: ;;#ASMEND3288; GFX900-NEXT: ;;#ASMSTART3289; GFX900-NEXT: ; def s[6:7]3290; GFX900-NEXT: ;;#ASMEND3291; GFX900-NEXT: s_mov_b32 s8, s73292; GFX900-NEXT: s_mov_b32 s9, s43293; GFX900-NEXT: ;;#ASMSTART3294; GFX900-NEXT: ; use s[8:11]3295; GFX900-NEXT: ;;#ASMEND3296; GFX900-NEXT: s_setpc_b64 s[30:31]3297;3298; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:3299; GFX90A: ; %bb.0:3300; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3301; GFX90A-NEXT: ;;#ASMSTART3302; GFX90A-NEXT: ; def s[4:5]3303; GFX90A-NEXT: ;;#ASMEND3304; GFX90A-NEXT: ;;#ASMSTART3305; GFX90A-NEXT: ; def s[6:7]3306; GFX90A-NEXT: ;;#ASMEND3307; GFX90A-NEXT: s_mov_b32 s8, s73308; GFX90A-NEXT: s_mov_b32 s9, s43309; GFX90A-NEXT: ;;#ASMSTART3310; GFX90A-NEXT: ; use s[8:11]3311; GFX90A-NEXT: ;;#ASMEND3312; GFX90A-NEXT: s_setpc_b64 s[30:31]3313;3314; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:3315; GFX942: ; %bb.0:3316; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3317; GFX942-NEXT: ;;#ASMSTART3318; GFX942-NEXT: ; def s[0:1]3319; GFX942-NEXT: ;;#ASMEND3320; GFX942-NEXT: ;;#ASMSTART3321; GFX942-NEXT: ; def s[2:3]3322; GFX942-NEXT: ;;#ASMEND3323; GFX942-NEXT: s_mov_b32 s8, s33324; GFX942-NEXT: s_mov_b32 s9, s03325; GFX942-NEXT: ;;#ASMSTART3326; GFX942-NEXT: ; use s[8:11]3327; GFX942-NEXT: ;;#ASMEND3328; GFX942-NEXT: s_setpc_b64 s[30:31]3329 %vec0 = call <2 x float> asm "; def $0", "=s"()3330 %vec1 = call <2 x float> asm "; def $0", "=s"()3331 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>3332 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3333 ret void3334}3335 3336define void @s_shuffle_v4f32_v2f32__3_1_u_u() {3337; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:3338; GFX900: ; %bb.0:3339; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX900-NEXT: ;;#ASMSTART3341; GFX900-NEXT: ; def s[8:9]3342; GFX900-NEXT: ;;#ASMEND3343; GFX900-NEXT: ;;#ASMSTART3344; GFX900-NEXT: ; def s[4:5]3345; GFX900-NEXT: ;;#ASMEND3346; GFX900-NEXT: s_mov_b32 s8, s53347; GFX900-NEXT: ;;#ASMSTART3348; GFX900-NEXT: ; use s[8:11]3349; GFX900-NEXT: ;;#ASMEND3350; GFX900-NEXT: s_setpc_b64 s[30:31]3351;3352; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:3353; GFX90A: ; %bb.0:3354; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3355; GFX90A-NEXT: ;;#ASMSTART3356; GFX90A-NEXT: ; def s[8:9]3357; GFX90A-NEXT: ;;#ASMEND3358; GFX90A-NEXT: ;;#ASMSTART3359; GFX90A-NEXT: ; def s[4:5]3360; GFX90A-NEXT: ;;#ASMEND3361; GFX90A-NEXT: s_mov_b32 s8, s53362; GFX90A-NEXT: ;;#ASMSTART3363; GFX90A-NEXT: ; use s[8:11]3364; GFX90A-NEXT: ;;#ASMEND3365; GFX90A-NEXT: s_setpc_b64 s[30:31]3366;3367; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:3368; GFX942: ; %bb.0:3369; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3370; GFX942-NEXT: ;;#ASMSTART3371; GFX942-NEXT: ; def s[8:9]3372; GFX942-NEXT: ;;#ASMEND3373; GFX942-NEXT: ;;#ASMSTART3374; GFX942-NEXT: ; def s[0:1]3375; GFX942-NEXT: ;;#ASMEND3376; GFX942-NEXT: s_mov_b32 s8, s13377; GFX942-NEXT: ;;#ASMSTART3378; GFX942-NEXT: ; use s[8:11]3379; GFX942-NEXT: ;;#ASMEND3380; GFX942-NEXT: s_setpc_b64 s[30:31]3381 %vec0 = call <2 x float> asm "; def $0", "=s"()3382 %vec1 = call <2 x float> asm "; def $0", "=s"()3383 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>3384 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3385 ret void3386}3387 3388define void @s_shuffle_v4f32_v2f32__3_2_u_u() {3389; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:3390; GFX900: ; %bb.0:3391; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3392; GFX900-NEXT: ;;#ASMSTART3393; GFX900-NEXT: ; def s[4:5]3394; GFX900-NEXT: ;;#ASMEND3395; GFX900-NEXT: s_mov_b32 s8, s53396; GFX900-NEXT: s_mov_b32 s9, s43397; GFX900-NEXT: ;;#ASMSTART3398; GFX900-NEXT: ; use s[8:11]3399; GFX900-NEXT: ;;#ASMEND3400; GFX900-NEXT: s_setpc_b64 s[30:31]3401;3402; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:3403; GFX90A: ; %bb.0:3404; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3405; GFX90A-NEXT: ;;#ASMSTART3406; GFX90A-NEXT: ; def s[4:5]3407; GFX90A-NEXT: ;;#ASMEND3408; GFX90A-NEXT: s_mov_b32 s8, s53409; GFX90A-NEXT: s_mov_b32 s9, s43410; GFX90A-NEXT: ;;#ASMSTART3411; GFX90A-NEXT: ; use s[8:11]3412; GFX90A-NEXT: ;;#ASMEND3413; GFX90A-NEXT: s_setpc_b64 s[30:31]3414;3415; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:3416; GFX942: ; %bb.0:3417; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3418; GFX942-NEXT: ;;#ASMSTART3419; GFX942-NEXT: ; def s[0:1]3420; GFX942-NEXT: ;;#ASMEND3421; GFX942-NEXT: s_mov_b32 s8, s13422; GFX942-NEXT: s_mov_b32 s9, s03423; GFX942-NEXT: ;;#ASMSTART3424; GFX942-NEXT: ; use s[8:11]3425; GFX942-NEXT: ;;#ASMEND3426; GFX942-NEXT: s_setpc_b64 s[30:31]3427 %vec0 = call <2 x float> asm "; def $0", "=s"()3428 %vec1 = call <2 x float> asm "; def $0", "=s"()3429 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>3430 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3431 ret void3432}3433 3434define void @s_shuffle_v4f32_v2f32__3_3_u_u() {3435; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_u:3436; GFX9: ; %bb.0:3437; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3438; GFX9-NEXT: ;;#ASMSTART3439; GFX9-NEXT: ; def s[8:9]3440; GFX9-NEXT: ;;#ASMEND3441; GFX9-NEXT: s_mov_b32 s8, s93442; GFX9-NEXT: ;;#ASMSTART3443; GFX9-NEXT: ; use s[8:11]3444; GFX9-NEXT: ;;#ASMEND3445; GFX9-NEXT: s_setpc_b64 s[30:31]3446 %vec0 = call <2 x float> asm "; def $0", "=s"()3447 %vec1 = call <2 x float> asm "; def $0", "=s"()3448 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>3449 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3450 ret void3451}3452 3453define void @s_shuffle_v4f32_v2f32__3_3_0_u() {3454; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_u:3455; GFX9: ; %bb.0:3456; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3457; GFX9-NEXT: ;;#ASMSTART3458; GFX9-NEXT: ; def s[8:9]3459; GFX9-NEXT: ;;#ASMEND3460; GFX9-NEXT: ;;#ASMSTART3461; GFX9-NEXT: ; def s[10:11]3462; GFX9-NEXT: ;;#ASMEND3463; GFX9-NEXT: s_mov_b32 s8, s93464; GFX9-NEXT: ;;#ASMSTART3465; GFX9-NEXT: ; use s[8:11]3466; GFX9-NEXT: ;;#ASMEND3467; GFX9-NEXT: s_setpc_b64 s[30:31]3468 %vec0 = call <2 x float> asm "; def $0", "=s"()3469 %vec1 = call <2 x float> asm "; def $0", "=s"()3470 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>3471 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3472 ret void3473}3474 3475define void @s_shuffle_v4f32_v2f32__3_3_1_u() {3476; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:3477; GFX900: ; %bb.0:3478; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3479; GFX900-NEXT: ;;#ASMSTART3480; GFX900-NEXT: ; def s[8:9]3481; GFX900-NEXT: ;;#ASMEND3482; GFX900-NEXT: ;;#ASMSTART3483; GFX900-NEXT: ; def s[4:5]3484; GFX900-NEXT: ;;#ASMEND3485; GFX900-NEXT: s_mov_b32 s8, s93486; GFX900-NEXT: s_mov_b32 s10, s53487; GFX900-NEXT: ;;#ASMSTART3488; GFX900-NEXT: ; use s[8:11]3489; GFX900-NEXT: ;;#ASMEND3490; GFX900-NEXT: s_setpc_b64 s[30:31]3491;3492; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:3493; GFX90A: ; %bb.0:3494; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3495; GFX90A-NEXT: ;;#ASMSTART3496; GFX90A-NEXT: ; def s[8:9]3497; GFX90A-NEXT: ;;#ASMEND3498; GFX90A-NEXT: ;;#ASMSTART3499; GFX90A-NEXT: ; def s[4:5]3500; GFX90A-NEXT: ;;#ASMEND3501; GFX90A-NEXT: s_mov_b32 s8, s93502; GFX90A-NEXT: s_mov_b32 s10, s53503; GFX90A-NEXT: ;;#ASMSTART3504; GFX90A-NEXT: ; use s[8:11]3505; GFX90A-NEXT: ;;#ASMEND3506; GFX90A-NEXT: s_setpc_b64 s[30:31]3507;3508; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:3509; GFX942: ; %bb.0:3510; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3511; GFX942-NEXT: ;;#ASMSTART3512; GFX942-NEXT: ; def s[8:9]3513; GFX942-NEXT: ;;#ASMEND3514; GFX942-NEXT: ;;#ASMSTART3515; GFX942-NEXT: ; def s[0:1]3516; GFX942-NEXT: ;;#ASMEND3517; GFX942-NEXT: s_mov_b32 s8, s93518; GFX942-NEXT: s_mov_b32 s10, s13519; GFX942-NEXT: ;;#ASMSTART3520; GFX942-NEXT: ; use s[8:11]3521; GFX942-NEXT: ;;#ASMEND3522; GFX942-NEXT: s_setpc_b64 s[30:31]3523 %vec0 = call <2 x float> asm "; def $0", "=s"()3524 %vec1 = call <2 x float> asm "; def $0", "=s"()3525 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>3526 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3527 ret void3528}3529 3530define void @s_shuffle_v4f32_v2f32__3_3_2_u() {3531; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_u:3532; GFX9: ; %bb.0:3533; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3534; GFX9-NEXT: ;;#ASMSTART3535; GFX9-NEXT: ; def s[10:11]3536; GFX9-NEXT: ;;#ASMEND3537; GFX9-NEXT: s_mov_b32 s8, s113538; GFX9-NEXT: s_mov_b32 s9, s113539; GFX9-NEXT: ;;#ASMSTART3540; GFX9-NEXT: ; use s[8:11]3541; GFX9-NEXT: ;;#ASMEND3542; GFX9-NEXT: s_setpc_b64 s[30:31]3543 %vec0 = call <2 x float> asm "; def $0", "=s"()3544 %vec1 = call <2 x float> asm "; def $0", "=s"()3545 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>3546 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3547 ret void3548}3549 3550define void @s_shuffle_v4f32_v2f32__3_3_3_u() {3551; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_u:3552; GFX9: ; %bb.0:3553; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3554; GFX9-NEXT: ;;#ASMSTART3555; GFX9-NEXT: ; def s[8:9]3556; GFX9-NEXT: ;;#ASMEND3557; GFX9-NEXT: s_mov_b32 s8, s93558; GFX9-NEXT: s_mov_b32 s10, s93559; GFX9-NEXT: ;;#ASMSTART3560; GFX9-NEXT: ; use s[8:11]3561; GFX9-NEXT: ;;#ASMEND3562; GFX9-NEXT: s_setpc_b64 s[30:31]3563 %vec0 = call <2 x float> asm "; def $0", "=s"()3564 %vec1 = call <2 x float> asm "; def $0", "=s"()3565 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>3566 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3567 ret void3568}3569 3570define void @s_shuffle_v4f32_v2f32__3_3_3_0() {3571; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:3572; GFX900: ; %bb.0:3573; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3574; GFX900-NEXT: ;;#ASMSTART3575; GFX900-NEXT: ; def s[8:9]3576; GFX900-NEXT: ;;#ASMEND3577; GFX900-NEXT: ;;#ASMSTART3578; GFX900-NEXT: ; def s[4:5]3579; GFX900-NEXT: ;;#ASMEND3580; GFX900-NEXT: s_mov_b32 s8, s93581; GFX900-NEXT: s_mov_b32 s10, s93582; GFX900-NEXT: s_mov_b32 s11, s43583; GFX900-NEXT: ;;#ASMSTART3584; GFX900-NEXT: ; use s[8:11]3585; GFX900-NEXT: ;;#ASMEND3586; GFX900-NEXT: s_setpc_b64 s[30:31]3587;3588; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:3589; GFX90A: ; %bb.0:3590; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3591; GFX90A-NEXT: ;;#ASMSTART3592; GFX90A-NEXT: ; def s[8:9]3593; GFX90A-NEXT: ;;#ASMEND3594; GFX90A-NEXT: ;;#ASMSTART3595; GFX90A-NEXT: ; def s[4:5]3596; GFX90A-NEXT: ;;#ASMEND3597; GFX90A-NEXT: s_mov_b32 s8, s93598; GFX90A-NEXT: s_mov_b32 s10, s93599; GFX90A-NEXT: s_mov_b32 s11, s43600; GFX90A-NEXT: ;;#ASMSTART3601; GFX90A-NEXT: ; use s[8:11]3602; GFX90A-NEXT: ;;#ASMEND3603; GFX90A-NEXT: s_setpc_b64 s[30:31]3604;3605; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:3606; GFX942: ; %bb.0:3607; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3608; GFX942-NEXT: ;;#ASMSTART3609; GFX942-NEXT: ; def s[8:9]3610; GFX942-NEXT: ;;#ASMEND3611; GFX942-NEXT: ;;#ASMSTART3612; GFX942-NEXT: ; def s[0:1]3613; GFX942-NEXT: ;;#ASMEND3614; GFX942-NEXT: s_mov_b32 s8, s93615; GFX942-NEXT: s_mov_b32 s10, s93616; GFX942-NEXT: s_mov_b32 s11, s03617; GFX942-NEXT: ;;#ASMSTART3618; GFX942-NEXT: ; use s[8:11]3619; GFX942-NEXT: ;;#ASMEND3620; GFX942-NEXT: s_setpc_b64 s[30:31]3621 %vec0 = call <2 x float> asm "; def $0", "=s"()3622 %vec1 = call <2 x float> asm "; def $0", "=s"()3623 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>3624 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3625 ret void3626}3627 3628define void @s_shuffle_v4f32_v2f32__3_3_3_1() {3629; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_1:3630; GFX9: ; %bb.0:3631; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3632; GFX9-NEXT: ;;#ASMSTART3633; GFX9-NEXT: ; def s[10:11]3634; GFX9-NEXT: ;;#ASMEND3635; GFX9-NEXT: ;;#ASMSTART3636; GFX9-NEXT: ; def s[8:9]3637; GFX9-NEXT: ;;#ASMEND3638; GFX9-NEXT: s_mov_b32 s8, s93639; GFX9-NEXT: s_mov_b32 s10, s93640; GFX9-NEXT: ;;#ASMSTART3641; GFX9-NEXT: ; use s[8:11]3642; GFX9-NEXT: ;;#ASMEND3643; GFX9-NEXT: s_setpc_b64 s[30:31]3644 %vec0 = call <2 x float> asm "; def $0", "=s"()3645 %vec1 = call <2 x float> asm "; def $0", "=s"()3646 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>3647 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3648 ret void3649}3650 3651define void @s_shuffle_v4f32_v2f32__3_3_3_2() {3652; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:3653; GFX900: ; %bb.0:3654; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3655; GFX900-NEXT: ;;#ASMSTART3656; GFX900-NEXT: ; def s[4:5]3657; GFX900-NEXT: ;;#ASMEND3658; GFX900-NEXT: s_mov_b32 s8, s53659; GFX900-NEXT: s_mov_b32 s9, s53660; GFX900-NEXT: s_mov_b32 s10, s53661; GFX900-NEXT: s_mov_b32 s11, s43662; GFX900-NEXT: ;;#ASMSTART3663; GFX900-NEXT: ; use s[8:11]3664; GFX900-NEXT: ;;#ASMEND3665; GFX900-NEXT: s_setpc_b64 s[30:31]3666;3667; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:3668; GFX90A: ; %bb.0:3669; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3670; GFX90A-NEXT: ;;#ASMSTART3671; GFX90A-NEXT: ; def s[4:5]3672; GFX90A-NEXT: ;;#ASMEND3673; GFX90A-NEXT: s_mov_b32 s8, s53674; GFX90A-NEXT: s_mov_b32 s9, s53675; GFX90A-NEXT: s_mov_b32 s10, s53676; GFX90A-NEXT: s_mov_b32 s11, s43677; GFX90A-NEXT: ;;#ASMSTART3678; GFX90A-NEXT: ; use s[8:11]3679; GFX90A-NEXT: ;;#ASMEND3680; GFX90A-NEXT: s_setpc_b64 s[30:31]3681;3682; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:3683; GFX942: ; %bb.0:3684; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3685; GFX942-NEXT: ;;#ASMSTART3686; GFX942-NEXT: ; def s[0:1]3687; GFX942-NEXT: ;;#ASMEND3688; GFX942-NEXT: s_mov_b32 s8, s13689; GFX942-NEXT: s_mov_b32 s9, s13690; GFX942-NEXT: s_mov_b32 s10, s13691; GFX942-NEXT: s_mov_b32 s11, s03692; GFX942-NEXT: ;;#ASMSTART3693; GFX942-NEXT: ; use s[8:11]3694; GFX942-NEXT: ;;#ASMEND3695; GFX942-NEXT: s_setpc_b64 s[30:31]3696 %vec0 = call <2 x float> asm "; def $0", "=s"()3697 %vec1 = call <2 x float> asm "; def $0", "=s"()3698 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>3699 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3700 ret void3701}3702 3703define void @s_shuffle_v4f32_v2f32__3_3_3_3() {3704; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_3:3705; GFX9: ; %bb.0:3706; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3707; GFX9-NEXT: ;;#ASMSTART3708; GFX9-NEXT: ; def s[8:9]3709; GFX9-NEXT: ;;#ASMEND3710; GFX9-NEXT: s_mov_b32 s8, s93711; GFX9-NEXT: s_mov_b32 s10, s93712; GFX9-NEXT: s_mov_b32 s11, s93713; GFX9-NEXT: ;;#ASMSTART3714; GFX9-NEXT: ; use s[8:11]3715; GFX9-NEXT: ;;#ASMEND3716; GFX9-NEXT: s_setpc_b64 s[30:31]3717 %vec0 = call <2 x float> asm "; def $0", "=s"()3718 %vec1 = call <2 x float> asm "; def $0", "=s"()3719 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>3720 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3721 ret void3722}3723 3724define void @s_shuffle_v4f32_v2f32__u_0_0_0() {3725; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_0_0_0:3726; GFX9: ; %bb.0:3727; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3728; GFX9-NEXT: ;;#ASMSTART3729; GFX9-NEXT: ; def s[10:11]3730; GFX9-NEXT: ;;#ASMEND3731; GFX9-NEXT: s_mov_b32 s9, s103732; GFX9-NEXT: s_mov_b32 s11, s103733; GFX9-NEXT: ;;#ASMSTART3734; GFX9-NEXT: ; use s[8:11]3735; GFX9-NEXT: ;;#ASMEND3736; GFX9-NEXT: s_setpc_b64 s[30:31]3737 %vec0 = call <2 x float> asm "; def $0", "=s"()3738 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>3739 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3740 ret void3741}3742 3743define void @s_shuffle_v4f32_v2f32__0_0_0_0() {3744; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_0_0_0:3745; GFX9: ; %bb.0:3746; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3747; GFX9-NEXT: ;;#ASMSTART3748; GFX9-NEXT: ; def s[8:9]3749; GFX9-NEXT: ;;#ASMEND3750; GFX9-NEXT: s_mov_b32 s9, s83751; GFX9-NEXT: s_mov_b32 s10, s83752; GFX9-NEXT: s_mov_b32 s11, s83753; GFX9-NEXT: ;;#ASMSTART3754; GFX9-NEXT: ; use s[8:11]3755; GFX9-NEXT: ;;#ASMEND3756; GFX9-NEXT: s_setpc_b64 s[30:31]3757 %vec0 = call <2 x float> asm "; def $0", "=s"()3758 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> zeroinitializer3759 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3760 ret void3761}3762 3763define void @s_shuffle_v4f32_v2f32__1_0_0_0() {3764; GFX9-LABEL: s_shuffle_v4f32_v2f32__1_0_0_0:3765; GFX9: ; %bb.0:3766; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3767; GFX9-NEXT: ;;#ASMSTART3768; GFX9-NEXT: ; def s[10:11]3769; GFX9-NEXT: ;;#ASMEND3770; GFX9-NEXT: s_mov_b32 s8, s113771; GFX9-NEXT: s_mov_b32 s9, s103772; GFX9-NEXT: s_mov_b32 s11, s103773; GFX9-NEXT: ;;#ASMSTART3774; GFX9-NEXT: ; use s[8:11]3775; GFX9-NEXT: ;;#ASMEND3776; GFX9-NEXT: s_setpc_b64 s[30:31]3777 %vec0 = call <2 x float> asm "; def $0", "=s"()3778 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>3779 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3780 ret void3781}3782 3783define void @s_shuffle_v4f32_v2f32__2_0_0_0() {3784; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_0_0_0:3785; GFX9: ; %bb.0:3786; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3787; GFX9-NEXT: ;;#ASMSTART3788; GFX9-NEXT: ; def s[10:11]3789; GFX9-NEXT: ;;#ASMEND3790; GFX9-NEXT: s_mov_b32 s9, s103791; GFX9-NEXT: s_mov_b32 s11, s103792; GFX9-NEXT: ;;#ASMSTART3793; GFX9-NEXT: ; use s[8:11]3794; GFX9-NEXT: ;;#ASMEND3795; GFX9-NEXT: s_setpc_b64 s[30:31]3796 %vec0 = call <2 x float> asm "; def $0", "=s"()3797 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>3798 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3799 ret void3800}3801 3802define void @s_shuffle_v4f32_v2f32__3_0_0_0() {3803; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:3804; GFX900: ; %bb.0:3805; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3806; GFX900-NEXT: ;;#ASMSTART3807; GFX900-NEXT: ; def s[10:11]3808; GFX900-NEXT: ;;#ASMEND3809; GFX900-NEXT: ;;#ASMSTART3810; GFX900-NEXT: ; def s[4:5]3811; GFX900-NEXT: ;;#ASMEND3812; GFX900-NEXT: s_mov_b32 s8, s53813; GFX900-NEXT: s_mov_b32 s9, s103814; GFX900-NEXT: s_mov_b32 s11, s103815; GFX900-NEXT: ;;#ASMSTART3816; GFX900-NEXT: ; use s[8:11]3817; GFX900-NEXT: ;;#ASMEND3818; GFX900-NEXT: s_setpc_b64 s[30:31]3819;3820; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:3821; GFX90A: ; %bb.0:3822; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3823; GFX90A-NEXT: ;;#ASMSTART3824; GFX90A-NEXT: ; def s[10:11]3825; GFX90A-NEXT: ;;#ASMEND3826; GFX90A-NEXT: ;;#ASMSTART3827; GFX90A-NEXT: ; def s[4:5]3828; GFX90A-NEXT: ;;#ASMEND3829; GFX90A-NEXT: s_mov_b32 s8, s53830; GFX90A-NEXT: s_mov_b32 s9, s103831; GFX90A-NEXT: s_mov_b32 s11, s103832; GFX90A-NEXT: ;;#ASMSTART3833; GFX90A-NEXT: ; use s[8:11]3834; GFX90A-NEXT: ;;#ASMEND3835; GFX90A-NEXT: s_setpc_b64 s[30:31]3836;3837; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:3838; GFX942: ; %bb.0:3839; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3840; GFX942-NEXT: ;;#ASMSTART3841; GFX942-NEXT: ; def s[10:11]3842; GFX942-NEXT: ;;#ASMEND3843; GFX942-NEXT: ;;#ASMSTART3844; GFX942-NEXT: ; def s[0:1]3845; GFX942-NEXT: ;;#ASMEND3846; GFX942-NEXT: s_mov_b32 s8, s13847; GFX942-NEXT: s_mov_b32 s9, s103848; GFX942-NEXT: s_mov_b32 s11, s103849; GFX942-NEXT: ;;#ASMSTART3850; GFX942-NEXT: ; use s[8:11]3851; GFX942-NEXT: ;;#ASMEND3852; GFX942-NEXT: s_setpc_b64 s[30:31]3853 %vec0 = call <2 x float> asm "; def $0", "=s"()3854 %vec1 = call <2 x float> asm "; def $0", "=s"()3855 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>3856 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3857 ret void3858}3859 3860define void @s_shuffle_v4f32_v2f32__3_u_0_0() {3861; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:3862; GFX900: ; %bb.0:3863; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3864; GFX900-NEXT: ;;#ASMSTART3865; GFX900-NEXT: ; def s[10:11]3866; GFX900-NEXT: ;;#ASMEND3867; GFX900-NEXT: ;;#ASMSTART3868; GFX900-NEXT: ; def s[4:5]3869; GFX900-NEXT: ;;#ASMEND3870; GFX900-NEXT: s_mov_b32 s8, s53871; GFX900-NEXT: s_mov_b32 s11, s103872; GFX900-NEXT: ;;#ASMSTART3873; GFX900-NEXT: ; use s[8:11]3874; GFX900-NEXT: ;;#ASMEND3875; GFX900-NEXT: s_setpc_b64 s[30:31]3876;3877; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:3878; GFX90A: ; %bb.0:3879; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3880; GFX90A-NEXT: ;;#ASMSTART3881; GFX90A-NEXT: ; def s[10:11]3882; GFX90A-NEXT: ;;#ASMEND3883; GFX90A-NEXT: ;;#ASMSTART3884; GFX90A-NEXT: ; def s[4:5]3885; GFX90A-NEXT: ;;#ASMEND3886; GFX90A-NEXT: s_mov_b32 s8, s53887; GFX90A-NEXT: s_mov_b32 s11, s103888; GFX90A-NEXT: ;;#ASMSTART3889; GFX90A-NEXT: ; use s[8:11]3890; GFX90A-NEXT: ;;#ASMEND3891; GFX90A-NEXT: s_setpc_b64 s[30:31]3892;3893; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:3894; GFX942: ; %bb.0:3895; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3896; GFX942-NEXT: ;;#ASMSTART3897; GFX942-NEXT: ; def s[10:11]3898; GFX942-NEXT: ;;#ASMEND3899; GFX942-NEXT: ;;#ASMSTART3900; GFX942-NEXT: ; def s[0:1]3901; GFX942-NEXT: ;;#ASMEND3902; GFX942-NEXT: s_mov_b32 s8, s13903; GFX942-NEXT: s_mov_b32 s11, s103904; GFX942-NEXT: ;;#ASMSTART3905; GFX942-NEXT: ; use s[8:11]3906; GFX942-NEXT: ;;#ASMEND3907; GFX942-NEXT: s_setpc_b64 s[30:31]3908 %vec0 = call <2 x float> asm "; def $0", "=s"()3909 %vec1 = call <2 x float> asm "; def $0", "=s"()3910 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>3911 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3912 ret void3913}3914 3915define void @s_shuffle_v4f32_v2f32__3_1_0_0() {3916; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:3917; GFX900: ; %bb.0:3918; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3919; GFX900-NEXT: ;;#ASMSTART3920; GFX900-NEXT: ; def s[10:11]3921; GFX900-NEXT: ;;#ASMEND3922; GFX900-NEXT: ;;#ASMSTART3923; GFX900-NEXT: ; def s[4:5]3924; GFX900-NEXT: ;;#ASMEND3925; GFX900-NEXT: s_mov_b32 s8, s53926; GFX900-NEXT: s_mov_b32 s9, s113927; GFX900-NEXT: s_mov_b32 s11, s103928; GFX900-NEXT: ;;#ASMSTART3929; GFX900-NEXT: ; use s[8:11]3930; GFX900-NEXT: ;;#ASMEND3931; GFX900-NEXT: s_setpc_b64 s[30:31]3932;3933; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:3934; GFX90A: ; %bb.0:3935; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3936; GFX90A-NEXT: ;;#ASMSTART3937; GFX90A-NEXT: ; def s[10:11]3938; GFX90A-NEXT: ;;#ASMEND3939; GFX90A-NEXT: ;;#ASMSTART3940; GFX90A-NEXT: ; def s[4:5]3941; GFX90A-NEXT: ;;#ASMEND3942; GFX90A-NEXT: s_mov_b32 s8, s53943; GFX90A-NEXT: s_mov_b32 s9, s113944; GFX90A-NEXT: s_mov_b32 s11, s103945; GFX90A-NEXT: ;;#ASMSTART3946; GFX90A-NEXT: ; use s[8:11]3947; GFX90A-NEXT: ;;#ASMEND3948; GFX90A-NEXT: s_setpc_b64 s[30:31]3949;3950; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:3951; GFX942: ; %bb.0:3952; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3953; GFX942-NEXT: ;;#ASMSTART3954; GFX942-NEXT: ; def s[10:11]3955; GFX942-NEXT: ;;#ASMEND3956; GFX942-NEXT: ;;#ASMSTART3957; GFX942-NEXT: ; def s[0:1]3958; GFX942-NEXT: ;;#ASMEND3959; GFX942-NEXT: s_mov_b32 s8, s13960; GFX942-NEXT: s_mov_b32 s9, s113961; GFX942-NEXT: s_mov_b32 s11, s103962; GFX942-NEXT: ;;#ASMSTART3963; GFX942-NEXT: ; use s[8:11]3964; GFX942-NEXT: ;;#ASMEND3965; GFX942-NEXT: s_setpc_b64 s[30:31]3966 %vec0 = call <2 x float> asm "; def $0", "=s"()3967 %vec1 = call <2 x float> asm "; def $0", "=s"()3968 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>3969 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)3970 ret void3971}3972 3973define void @s_shuffle_v4f32_v2f32__3_2_0_0() {3974; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:3975; GFX900: ; %bb.0:3976; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3977; GFX900-NEXT: ;;#ASMSTART3978; GFX900-NEXT: ; def s[10:11]3979; GFX900-NEXT: ;;#ASMEND3980; GFX900-NEXT: ;;#ASMSTART3981; GFX900-NEXT: ; def s[4:5]3982; GFX900-NEXT: ;;#ASMEND3983; GFX900-NEXT: s_mov_b32 s8, s53984; GFX900-NEXT: s_mov_b32 s9, s43985; GFX900-NEXT: s_mov_b32 s11, s103986; GFX900-NEXT: ;;#ASMSTART3987; GFX900-NEXT: ; use s[8:11]3988; GFX900-NEXT: ;;#ASMEND3989; GFX900-NEXT: s_setpc_b64 s[30:31]3990;3991; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:3992; GFX90A: ; %bb.0:3993; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3994; GFX90A-NEXT: ;;#ASMSTART3995; GFX90A-NEXT: ; def s[10:11]3996; GFX90A-NEXT: ;;#ASMEND3997; GFX90A-NEXT: ;;#ASMSTART3998; GFX90A-NEXT: ; def s[4:5]3999; GFX90A-NEXT: ;;#ASMEND4000; GFX90A-NEXT: s_mov_b32 s8, s54001; GFX90A-NEXT: s_mov_b32 s9, s44002; GFX90A-NEXT: s_mov_b32 s11, s104003; GFX90A-NEXT: ;;#ASMSTART4004; GFX90A-NEXT: ; use s[8:11]4005; GFX90A-NEXT: ;;#ASMEND4006; GFX90A-NEXT: s_setpc_b64 s[30:31]4007;4008; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:4009; GFX942: ; %bb.0:4010; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4011; GFX942-NEXT: ;;#ASMSTART4012; GFX942-NEXT: ; def s[10:11]4013; GFX942-NEXT: ;;#ASMEND4014; GFX942-NEXT: ;;#ASMSTART4015; GFX942-NEXT: ; def s[0:1]4016; GFX942-NEXT: ;;#ASMEND4017; GFX942-NEXT: s_mov_b32 s8, s14018; GFX942-NEXT: s_mov_b32 s9, s04019; GFX942-NEXT: s_mov_b32 s11, s104020; GFX942-NEXT: ;;#ASMSTART4021; GFX942-NEXT: ; use s[8:11]4022; GFX942-NEXT: ;;#ASMEND4023; GFX942-NEXT: s_setpc_b64 s[30:31]4024 %vec0 = call <2 x float> asm "; def $0", "=s"()4025 %vec1 = call <2 x float> asm "; def $0", "=s"()4026 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>4027 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4028 ret void4029}4030 4031define void @s_shuffle_v4f32_v2f32__3_3_0_0() {4032; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_0:4033; GFX9: ; %bb.0:4034; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4035; GFX9-NEXT: ;;#ASMSTART4036; GFX9-NEXT: ; def s[10:11]4037; GFX9-NEXT: ;;#ASMEND4038; GFX9-NEXT: ;;#ASMSTART4039; GFX9-NEXT: ; def s[8:9]4040; GFX9-NEXT: ;;#ASMEND4041; GFX9-NEXT: s_mov_b32 s8, s94042; GFX9-NEXT: s_mov_b32 s11, s104043; GFX9-NEXT: ;;#ASMSTART4044; GFX9-NEXT: ; use s[8:11]4045; GFX9-NEXT: ;;#ASMEND4046; GFX9-NEXT: s_setpc_b64 s[30:31]4047 %vec0 = call <2 x float> asm "; def $0", "=s"()4048 %vec1 = call <2 x float> asm "; def $0", "=s"()4049 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>4050 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4051 ret void4052}4053 4054define void @s_shuffle_v4f32_v2f32__3_3_u_0() {4055; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:4056; GFX900: ; %bb.0:4057; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4058; GFX900-NEXT: ;;#ASMSTART4059; GFX900-NEXT: ; def s[8:9]4060; GFX900-NEXT: ;;#ASMEND4061; GFX900-NEXT: ;;#ASMSTART4062; GFX900-NEXT: ; def s[4:5]4063; GFX900-NEXT: ;;#ASMEND4064; GFX900-NEXT: s_mov_b32 s8, s94065; GFX900-NEXT: s_mov_b32 s11, s44066; GFX900-NEXT: ;;#ASMSTART4067; GFX900-NEXT: ; use s[8:11]4068; GFX900-NEXT: ;;#ASMEND4069; GFX900-NEXT: s_setpc_b64 s[30:31]4070;4071; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:4072; GFX90A: ; %bb.0:4073; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4074; GFX90A-NEXT: ;;#ASMSTART4075; GFX90A-NEXT: ; def s[8:9]4076; GFX90A-NEXT: ;;#ASMEND4077; GFX90A-NEXT: ;;#ASMSTART4078; GFX90A-NEXT: ; def s[4:5]4079; GFX90A-NEXT: ;;#ASMEND4080; GFX90A-NEXT: s_mov_b32 s8, s94081; GFX90A-NEXT: s_mov_b32 s11, s44082; GFX90A-NEXT: ;;#ASMSTART4083; GFX90A-NEXT: ; use s[8:11]4084; GFX90A-NEXT: ;;#ASMEND4085; GFX90A-NEXT: s_setpc_b64 s[30:31]4086;4087; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:4088; GFX942: ; %bb.0:4089; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4090; GFX942-NEXT: ;;#ASMSTART4091; GFX942-NEXT: ; def s[8:9]4092; GFX942-NEXT: ;;#ASMEND4093; GFX942-NEXT: ;;#ASMSTART4094; GFX942-NEXT: ; def s[0:1]4095; GFX942-NEXT: ;;#ASMEND4096; GFX942-NEXT: s_mov_b32 s8, s94097; GFX942-NEXT: s_mov_b32 s11, s04098; GFX942-NEXT: ;;#ASMSTART4099; GFX942-NEXT: ; use s[8:11]4100; GFX942-NEXT: ;;#ASMEND4101; GFX942-NEXT: s_setpc_b64 s[30:31]4102 %vec0 = call <2 x float> asm "; def $0", "=s"()4103 %vec1 = call <2 x float> asm "; def $0", "=s"()4104 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>4105 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4106 ret void4107}4108 4109define void @s_shuffle_v4f32_v2f32__3_3_1_0() {4110; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:4111; GFX900: ; %bb.0:4112; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4113; GFX900-NEXT: ;;#ASMSTART4114; GFX900-NEXT: ; def s[8:9]4115; GFX900-NEXT: ;;#ASMEND4116; GFX900-NEXT: ;;#ASMSTART4117; GFX900-NEXT: ; def s[4:5]4118; GFX900-NEXT: ;;#ASMEND4119; GFX900-NEXT: s_mov_b32 s8, s94120; GFX900-NEXT: s_mov_b32 s10, s54121; GFX900-NEXT: s_mov_b32 s11, s44122; GFX900-NEXT: ;;#ASMSTART4123; GFX900-NEXT: ; use s[8:11]4124; GFX900-NEXT: ;;#ASMEND4125; GFX900-NEXT: s_setpc_b64 s[30:31]4126;4127; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:4128; GFX90A: ; %bb.0:4129; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4130; GFX90A-NEXT: ;;#ASMSTART4131; GFX90A-NEXT: ; def s[8:9]4132; GFX90A-NEXT: ;;#ASMEND4133; GFX90A-NEXT: ;;#ASMSTART4134; GFX90A-NEXT: ; def s[4:5]4135; GFX90A-NEXT: ;;#ASMEND4136; GFX90A-NEXT: s_mov_b32 s8, s94137; GFX90A-NEXT: s_mov_b32 s10, s54138; GFX90A-NEXT: s_mov_b32 s11, s44139; GFX90A-NEXT: ;;#ASMSTART4140; GFX90A-NEXT: ; use s[8:11]4141; GFX90A-NEXT: ;;#ASMEND4142; GFX90A-NEXT: s_setpc_b64 s[30:31]4143;4144; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:4145; GFX942: ; %bb.0:4146; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4147; GFX942-NEXT: ;;#ASMSTART4148; GFX942-NEXT: ; def s[8:9]4149; GFX942-NEXT: ;;#ASMEND4150; GFX942-NEXT: ;;#ASMSTART4151; GFX942-NEXT: ; def s[0:1]4152; GFX942-NEXT: ;;#ASMEND4153; GFX942-NEXT: s_mov_b32 s8, s94154; GFX942-NEXT: s_mov_b32 s10, s14155; GFX942-NEXT: s_mov_b32 s11, s04156; GFX942-NEXT: ;;#ASMSTART4157; GFX942-NEXT: ; use s[8:11]4158; GFX942-NEXT: ;;#ASMEND4159; GFX942-NEXT: s_setpc_b64 s[30:31]4160 %vec0 = call <2 x float> asm "; def $0", "=s"()4161 %vec1 = call <2 x float> asm "; def $0", "=s"()4162 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>4163 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4164 ret void4165}4166 4167define void @s_shuffle_v4f32_v2f32__3_3_2_0() {4168; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:4169; GFX900: ; %bb.0:4170; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4171; GFX900-NEXT: ;;#ASMSTART4172; GFX900-NEXT: ; def s[10:11]4173; GFX900-NEXT: ;;#ASMEND4174; GFX900-NEXT: ;;#ASMSTART4175; GFX900-NEXT: ; def s[4:5]4176; GFX900-NEXT: ;;#ASMEND4177; GFX900-NEXT: s_mov_b32 s8, s114178; GFX900-NEXT: s_mov_b32 s9, s114179; GFX900-NEXT: s_mov_b32 s11, s44180; GFX900-NEXT: ;;#ASMSTART4181; GFX900-NEXT: ; use s[8:11]4182; GFX900-NEXT: ;;#ASMEND4183; GFX900-NEXT: s_setpc_b64 s[30:31]4184;4185; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:4186; GFX90A: ; %bb.0:4187; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4188; GFX90A-NEXT: ;;#ASMSTART4189; GFX90A-NEXT: ; def s[10:11]4190; GFX90A-NEXT: ;;#ASMEND4191; GFX90A-NEXT: ;;#ASMSTART4192; GFX90A-NEXT: ; def s[4:5]4193; GFX90A-NEXT: ;;#ASMEND4194; GFX90A-NEXT: s_mov_b32 s8, s114195; GFX90A-NEXT: s_mov_b32 s9, s114196; GFX90A-NEXT: s_mov_b32 s11, s44197; GFX90A-NEXT: ;;#ASMSTART4198; GFX90A-NEXT: ; use s[8:11]4199; GFX90A-NEXT: ;;#ASMEND4200; GFX90A-NEXT: s_setpc_b64 s[30:31]4201;4202; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:4203; GFX942: ; %bb.0:4204; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4205; GFX942-NEXT: ;;#ASMSTART4206; GFX942-NEXT: ; def s[10:11]4207; GFX942-NEXT: ;;#ASMEND4208; GFX942-NEXT: ;;#ASMSTART4209; GFX942-NEXT: ; def s[0:1]4210; GFX942-NEXT: ;;#ASMEND4211; GFX942-NEXT: s_mov_b32 s8, s114212; GFX942-NEXT: s_mov_b32 s9, s114213; GFX942-NEXT: s_mov_b32 s11, s04214; GFX942-NEXT: ;;#ASMSTART4215; GFX942-NEXT: ; use s[8:11]4216; GFX942-NEXT: ;;#ASMEND4217; GFX942-NEXT: s_setpc_b64 s[30:31]4218 %vec0 = call <2 x float> asm "; def $0", "=s"()4219 %vec1 = call <2 x float> asm "; def $0", "=s"()4220 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>4221 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4222 ret void4223}4224 4225define void @s_shuffle_v4f32_v2f32__u_1_1_1() {4226; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_1_1_1:4227; GFX9: ; %bb.0:4228; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4229; GFX9-NEXT: ;;#ASMSTART4230; GFX9-NEXT: ; def s[8:9]4231; GFX9-NEXT: ;;#ASMEND4232; GFX9-NEXT: s_mov_b32 s10, s94233; GFX9-NEXT: s_mov_b32 s11, s94234; GFX9-NEXT: ;;#ASMSTART4235; GFX9-NEXT: ; use s[8:11]4236; GFX9-NEXT: ;;#ASMEND4237; GFX9-NEXT: s_setpc_b64 s[30:31]4238 %vec0 = call <2 x float> asm "; def $0", "=s"()4239 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>4240 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4241 ret void4242}4243 4244define void @s_shuffle_v4f32_v2f32__0_1_1_1() {4245; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_1_1_1:4246; GFX9: ; %bb.0:4247; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4248; GFX9-NEXT: ;;#ASMSTART4249; GFX9-NEXT: ; def s[8:9]4250; GFX9-NEXT: ;;#ASMEND4251; GFX9-NEXT: s_mov_b32 s10, s94252; GFX9-NEXT: s_mov_b32 s11, s94253; GFX9-NEXT: ;;#ASMSTART4254; GFX9-NEXT: ; use s[8:11]4255; GFX9-NEXT: ;;#ASMEND4256; GFX9-NEXT: s_setpc_b64 s[30:31]4257 %vec0 = call <2 x float> asm "; def $0", "=s"()4258 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>4259 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4260 ret void4261}4262 4263define void @s_shuffle_v4f32_v2f32__1_1_1_1() {4264; GFX9-LABEL: s_shuffle_v4f32_v2f32__1_1_1_1:4265; GFX9: ; %bb.0:4266; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4267; GFX9-NEXT: ;;#ASMSTART4268; GFX9-NEXT: ; def s[8:9]4269; GFX9-NEXT: ;;#ASMEND4270; GFX9-NEXT: s_mov_b32 s8, s94271; GFX9-NEXT: s_mov_b32 s10, s94272; GFX9-NEXT: s_mov_b32 s11, s94273; GFX9-NEXT: ;;#ASMSTART4274; GFX9-NEXT: ; use s[8:11]4275; GFX9-NEXT: ;;#ASMEND4276; GFX9-NEXT: s_setpc_b64 s[30:31]4277 %vec0 = call <2 x float> asm "; def $0", "=s"()4278 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>4279 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4280 ret void4281}4282 4283define void @s_shuffle_v4f32_v2f32__2_1_1_1() {4284; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_1_1_1:4285; GFX9: ; %bb.0:4286; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4287; GFX9-NEXT: ;;#ASMSTART4288; GFX9-NEXT: ; def s[8:9]4289; GFX9-NEXT: ;;#ASMEND4290; GFX9-NEXT: s_mov_b32 s10, s94291; GFX9-NEXT: s_mov_b32 s11, s94292; GFX9-NEXT: ;;#ASMSTART4293; GFX9-NEXT: ; use s[8:11]4294; GFX9-NEXT: ;;#ASMEND4295; GFX9-NEXT: s_setpc_b64 s[30:31]4296 %vec0 = call <2 x float> asm "; def $0", "=s"()4297 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>4298 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4299 ret void4300}4301 4302define void @s_shuffle_v4f32_v2f32__3_1_1_1() {4303; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:4304; GFX900: ; %bb.0:4305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4306; GFX900-NEXT: ;;#ASMSTART4307; GFX900-NEXT: ; def s[8:9]4308; GFX900-NEXT: ;;#ASMEND4309; GFX900-NEXT: ;;#ASMSTART4310; GFX900-NEXT: ; def s[4:5]4311; GFX900-NEXT: ;;#ASMEND4312; GFX900-NEXT: s_mov_b32 s8, s54313; GFX900-NEXT: s_mov_b32 s10, s94314; GFX900-NEXT: s_mov_b32 s11, s94315; GFX900-NEXT: ;;#ASMSTART4316; GFX900-NEXT: ; use s[8:11]4317; GFX900-NEXT: ;;#ASMEND4318; GFX900-NEXT: s_setpc_b64 s[30:31]4319;4320; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:4321; GFX90A: ; %bb.0:4322; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4323; GFX90A-NEXT: ;;#ASMSTART4324; GFX90A-NEXT: ; def s[8:9]4325; GFX90A-NEXT: ;;#ASMEND4326; GFX90A-NEXT: ;;#ASMSTART4327; GFX90A-NEXT: ; def s[4:5]4328; GFX90A-NEXT: ;;#ASMEND4329; GFX90A-NEXT: s_mov_b32 s8, s54330; GFX90A-NEXT: s_mov_b32 s10, s94331; GFX90A-NEXT: s_mov_b32 s11, s94332; GFX90A-NEXT: ;;#ASMSTART4333; GFX90A-NEXT: ; use s[8:11]4334; GFX90A-NEXT: ;;#ASMEND4335; GFX90A-NEXT: s_setpc_b64 s[30:31]4336;4337; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:4338; GFX942: ; %bb.0:4339; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4340; GFX942-NEXT: ;;#ASMSTART4341; GFX942-NEXT: ; def s[8:9]4342; GFX942-NEXT: ;;#ASMEND4343; GFX942-NEXT: ;;#ASMSTART4344; GFX942-NEXT: ; def s[0:1]4345; GFX942-NEXT: ;;#ASMEND4346; GFX942-NEXT: s_mov_b32 s8, s14347; GFX942-NEXT: s_mov_b32 s10, s94348; GFX942-NEXT: s_mov_b32 s11, s94349; GFX942-NEXT: ;;#ASMSTART4350; GFX942-NEXT: ; use s[8:11]4351; GFX942-NEXT: ;;#ASMEND4352; GFX942-NEXT: s_setpc_b64 s[30:31]4353 %vec0 = call <2 x float> asm "; def $0", "=s"()4354 %vec1 = call <2 x float> asm "; def $0", "=s"()4355 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>4356 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4357 ret void4358}4359 4360define void @s_shuffle_v4f32_v2f32__3_u_1_1() {4361; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:4362; GFX900: ; %bb.0:4363; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4364; GFX900-NEXT: ;;#ASMSTART4365; GFX900-NEXT: ; def s[10:11]4366; GFX900-NEXT: ;;#ASMEND4367; GFX900-NEXT: ;;#ASMSTART4368; GFX900-NEXT: ; def s[4:5]4369; GFX900-NEXT: ;;#ASMEND4370; GFX900-NEXT: s_mov_b32 s8, s54371; GFX900-NEXT: s_mov_b32 s10, s114372; GFX900-NEXT: ;;#ASMSTART4373; GFX900-NEXT: ; use s[8:11]4374; GFX900-NEXT: ;;#ASMEND4375; GFX900-NEXT: s_setpc_b64 s[30:31]4376;4377; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:4378; GFX90A: ; %bb.0:4379; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4380; GFX90A-NEXT: ;;#ASMSTART4381; GFX90A-NEXT: ; def s[10:11]4382; GFX90A-NEXT: ;;#ASMEND4383; GFX90A-NEXT: ;;#ASMSTART4384; GFX90A-NEXT: ; def s[4:5]4385; GFX90A-NEXT: ;;#ASMEND4386; GFX90A-NEXT: s_mov_b32 s8, s54387; GFX90A-NEXT: s_mov_b32 s10, s114388; GFX90A-NEXT: ;;#ASMSTART4389; GFX90A-NEXT: ; use s[8:11]4390; GFX90A-NEXT: ;;#ASMEND4391; GFX90A-NEXT: s_setpc_b64 s[30:31]4392;4393; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:4394; GFX942: ; %bb.0:4395; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4396; GFX942-NEXT: ;;#ASMSTART4397; GFX942-NEXT: ; def s[10:11]4398; GFX942-NEXT: ;;#ASMEND4399; GFX942-NEXT: ;;#ASMSTART4400; GFX942-NEXT: ; def s[0:1]4401; GFX942-NEXT: ;;#ASMEND4402; GFX942-NEXT: s_mov_b32 s8, s14403; GFX942-NEXT: s_mov_b32 s10, s114404; GFX942-NEXT: ;;#ASMSTART4405; GFX942-NEXT: ; use s[8:11]4406; GFX942-NEXT: ;;#ASMEND4407; GFX942-NEXT: s_setpc_b64 s[30:31]4408 %vec0 = call <2 x float> asm "; def $0", "=s"()4409 %vec1 = call <2 x float> asm "; def $0", "=s"()4410 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>4411 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4412 ret void4413}4414 4415define void @s_shuffle_v4f32_v2f32__3_0_1_1() {4416; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:4417; GFX900: ; %bb.0:4418; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4419; GFX900-NEXT: ;;#ASMSTART4420; GFX900-NEXT: ; def s[10:11]4421; GFX900-NEXT: ;;#ASMEND4422; GFX900-NEXT: ;;#ASMSTART4423; GFX900-NEXT: ; def s[4:5]4424; GFX900-NEXT: ;;#ASMEND4425; GFX900-NEXT: s_mov_b32 s8, s54426; GFX900-NEXT: s_mov_b32 s9, s104427; GFX900-NEXT: s_mov_b32 s10, s114428; GFX900-NEXT: ;;#ASMSTART4429; GFX900-NEXT: ; use s[8:11]4430; GFX900-NEXT: ;;#ASMEND4431; GFX900-NEXT: s_setpc_b64 s[30:31]4432;4433; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:4434; GFX90A: ; %bb.0:4435; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4436; GFX90A-NEXT: ;;#ASMSTART4437; GFX90A-NEXT: ; def s[10:11]4438; GFX90A-NEXT: ;;#ASMEND4439; GFX90A-NEXT: ;;#ASMSTART4440; GFX90A-NEXT: ; def s[4:5]4441; GFX90A-NEXT: ;;#ASMEND4442; GFX90A-NEXT: s_mov_b32 s8, s54443; GFX90A-NEXT: s_mov_b32 s9, s104444; GFX90A-NEXT: s_mov_b32 s10, s114445; GFX90A-NEXT: ;;#ASMSTART4446; GFX90A-NEXT: ; use s[8:11]4447; GFX90A-NEXT: ;;#ASMEND4448; GFX90A-NEXT: s_setpc_b64 s[30:31]4449;4450; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:4451; GFX942: ; %bb.0:4452; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4453; GFX942-NEXT: ;;#ASMSTART4454; GFX942-NEXT: ; def s[10:11]4455; GFX942-NEXT: ;;#ASMEND4456; GFX942-NEXT: ;;#ASMSTART4457; GFX942-NEXT: ; def s[0:1]4458; GFX942-NEXT: ;;#ASMEND4459; GFX942-NEXT: s_mov_b32 s8, s14460; GFX942-NEXT: s_mov_b32 s9, s104461; GFX942-NEXT: s_mov_b32 s10, s114462; GFX942-NEXT: ;;#ASMSTART4463; GFX942-NEXT: ; use s[8:11]4464; GFX942-NEXT: ;;#ASMEND4465; GFX942-NEXT: s_setpc_b64 s[30:31]4466 %vec0 = call <2 x float> asm "; def $0", "=s"()4467 %vec1 = call <2 x float> asm "; def $0", "=s"()4468 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>4469 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4470 ret void4471}4472 4473define void @s_shuffle_v4f32_v2f32__3_2_1_1() {4474; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:4475; GFX900: ; %bb.0:4476; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4477; GFX900-NEXT: ;;#ASMSTART4478; GFX900-NEXT: ; def s[10:11]4479; GFX900-NEXT: ;;#ASMEND4480; GFX900-NEXT: ;;#ASMSTART4481; GFX900-NEXT: ; def s[4:5]4482; GFX900-NEXT: ;;#ASMEND4483; GFX900-NEXT: s_mov_b32 s8, s54484; GFX900-NEXT: s_mov_b32 s9, s44485; GFX900-NEXT: s_mov_b32 s10, s114486; GFX900-NEXT: ;;#ASMSTART4487; GFX900-NEXT: ; use s[8:11]4488; GFX900-NEXT: ;;#ASMEND4489; GFX900-NEXT: s_setpc_b64 s[30:31]4490;4491; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:4492; GFX90A: ; %bb.0:4493; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4494; GFX90A-NEXT: ;;#ASMSTART4495; GFX90A-NEXT: ; def s[10:11]4496; GFX90A-NEXT: ;;#ASMEND4497; GFX90A-NEXT: ;;#ASMSTART4498; GFX90A-NEXT: ; def s[4:5]4499; GFX90A-NEXT: ;;#ASMEND4500; GFX90A-NEXT: s_mov_b32 s8, s54501; GFX90A-NEXT: s_mov_b32 s9, s44502; GFX90A-NEXT: s_mov_b32 s10, s114503; GFX90A-NEXT: ;;#ASMSTART4504; GFX90A-NEXT: ; use s[8:11]4505; GFX90A-NEXT: ;;#ASMEND4506; GFX90A-NEXT: s_setpc_b64 s[30:31]4507;4508; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:4509; GFX942: ; %bb.0:4510; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4511; GFX942-NEXT: ;;#ASMSTART4512; GFX942-NEXT: ; def s[10:11]4513; GFX942-NEXT: ;;#ASMEND4514; GFX942-NEXT: ;;#ASMSTART4515; GFX942-NEXT: ; def s[0:1]4516; GFX942-NEXT: ;;#ASMEND4517; GFX942-NEXT: s_mov_b32 s8, s14518; GFX942-NEXT: s_mov_b32 s9, s04519; GFX942-NEXT: s_mov_b32 s10, s114520; GFX942-NEXT: ;;#ASMSTART4521; GFX942-NEXT: ; use s[8:11]4522; GFX942-NEXT: ;;#ASMEND4523; GFX942-NEXT: s_setpc_b64 s[30:31]4524 %vec0 = call <2 x float> asm "; def $0", "=s"()4525 %vec1 = call <2 x float> asm "; def $0", "=s"()4526 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>4527 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4528 ret void4529}4530 4531define void @s_shuffle_v4f32_v2f32__3_3_1_1() {4532; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_1_1:4533; GFX9: ; %bb.0:4534; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4535; GFX9-NEXT: ;;#ASMSTART4536; GFX9-NEXT: ; def s[10:11]4537; GFX9-NEXT: ;;#ASMEND4538; GFX9-NEXT: ;;#ASMSTART4539; GFX9-NEXT: ; def s[8:9]4540; GFX9-NEXT: ;;#ASMEND4541; GFX9-NEXT: s_mov_b32 s8, s94542; GFX9-NEXT: s_mov_b32 s10, s114543; GFX9-NEXT: ;;#ASMSTART4544; GFX9-NEXT: ; use s[8:11]4545; GFX9-NEXT: ;;#ASMEND4546; GFX9-NEXT: s_setpc_b64 s[30:31]4547 %vec0 = call <2 x float> asm "; def $0", "=s"()4548 %vec1 = call <2 x float> asm "; def $0", "=s"()4549 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>4550 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4551 ret void4552}4553 4554define void @s_shuffle_v4f32_v2f32__3_3_u_1() {4555; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_1:4556; GFX9: ; %bb.0:4557; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4558; GFX9-NEXT: ;;#ASMSTART4559; GFX9-NEXT: ; def s[8:9]4560; GFX9-NEXT: ;;#ASMEND4561; GFX9-NEXT: ;;#ASMSTART4562; GFX9-NEXT: ; def s[10:11]4563; GFX9-NEXT: ;;#ASMEND4564; GFX9-NEXT: s_mov_b32 s8, s94565; GFX9-NEXT: ;;#ASMSTART4566; GFX9-NEXT: ; use s[8:11]4567; GFX9-NEXT: ;;#ASMEND4568; GFX9-NEXT: s_setpc_b64 s[30:31]4569 %vec0 = call <2 x float> asm "; def $0", "=s"()4570 %vec1 = call <2 x float> asm "; def $0", "=s"()4571 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>4572 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4573 ret void4574}4575 4576define void @s_shuffle_v4f32_v2f32__3_3_0_1() {4577; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_1:4578; GFX9: ; %bb.0:4579; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4580; GFX9-NEXT: ;;#ASMSTART4581; GFX9-NEXT: ; def s[8:9]4582; GFX9-NEXT: ;;#ASMEND4583; GFX9-NEXT: ;;#ASMSTART4584; GFX9-NEXT: ; def s[10:11]4585; GFX9-NEXT: ;;#ASMEND4586; GFX9-NEXT: s_mov_b32 s8, s94587; GFX9-NEXT: ;;#ASMSTART4588; GFX9-NEXT: ; use s[8:11]4589; GFX9-NEXT: ;;#ASMEND4590; GFX9-NEXT: s_setpc_b64 s[30:31]4591 %vec0 = call <2 x float> asm "; def $0", "=s"()4592 %vec1 = call <2 x float> asm "; def $0", "=s"()4593 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>4594 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4595 ret void4596}4597 4598define void @s_shuffle_v4f32_v2f32__3_3_2_1() {4599; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:4600; GFX900: ; %bb.0:4601; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4602; GFX900-NEXT: ;;#ASMSTART4603; GFX900-NEXT: ; def s[10:11]4604; GFX900-NEXT: ;;#ASMEND4605; GFX900-NEXT: ;;#ASMSTART4606; GFX900-NEXT: ; def s[4:5]4607; GFX900-NEXT: ;;#ASMEND4608; GFX900-NEXT: s_mov_b32 s8, s114609; GFX900-NEXT: s_mov_b32 s9, s114610; GFX900-NEXT: s_mov_b32 s11, s54611; GFX900-NEXT: ;;#ASMSTART4612; GFX900-NEXT: ; use s[8:11]4613; GFX900-NEXT: ;;#ASMEND4614; GFX900-NEXT: s_setpc_b64 s[30:31]4615;4616; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:4617; GFX90A: ; %bb.0:4618; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4619; GFX90A-NEXT: ;;#ASMSTART4620; GFX90A-NEXT: ; def s[10:11]4621; GFX90A-NEXT: ;;#ASMEND4622; GFX90A-NEXT: ;;#ASMSTART4623; GFX90A-NEXT: ; def s[4:5]4624; GFX90A-NEXT: ;;#ASMEND4625; GFX90A-NEXT: s_mov_b32 s8, s114626; GFX90A-NEXT: s_mov_b32 s9, s114627; GFX90A-NEXT: s_mov_b32 s11, s54628; GFX90A-NEXT: ;;#ASMSTART4629; GFX90A-NEXT: ; use s[8:11]4630; GFX90A-NEXT: ;;#ASMEND4631; GFX90A-NEXT: s_setpc_b64 s[30:31]4632;4633; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:4634; GFX942: ; %bb.0:4635; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4636; GFX942-NEXT: ;;#ASMSTART4637; GFX942-NEXT: ; def s[10:11]4638; GFX942-NEXT: ;;#ASMEND4639; GFX942-NEXT: ;;#ASMSTART4640; GFX942-NEXT: ; def s[0:1]4641; GFX942-NEXT: ;;#ASMEND4642; GFX942-NEXT: s_mov_b32 s8, s114643; GFX942-NEXT: s_mov_b32 s9, s114644; GFX942-NEXT: s_mov_b32 s11, s14645; GFX942-NEXT: ;;#ASMSTART4646; GFX942-NEXT: ; use s[8:11]4647; GFX942-NEXT: ;;#ASMEND4648; GFX942-NEXT: s_setpc_b64 s[30:31]4649 %vec0 = call <2 x float> asm "; def $0", "=s"()4650 %vec1 = call <2 x float> asm "; def $0", "=s"()4651 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>4652 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4653 ret void4654}4655 4656define void @s_shuffle_v4f32_v2f32__u_2_2_2() {4657; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_2_2_2:4658; GFX9: ; %bb.0:4659; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4660; GFX9-NEXT: ;;#ASMSTART4661; GFX9-NEXT: ; use s[8:11]4662; GFX9-NEXT: ;;#ASMEND4663; GFX9-NEXT: s_setpc_b64 s[30:31]4664 %vec0 = call <2 x float> asm "; def $0", "=s"()4665 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>4666 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4667 ret void4668}4669 4670define void @s_shuffle_v4f32_v2f32__0_2_2_2() {4671; GFX900-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:4672; GFX900: ; %bb.0:4673; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4674; GFX900-NEXT: ;;#ASMSTART4675; GFX900-NEXT: ; def s[8:9]4676; GFX900-NEXT: ;;#ASMEND4677; GFX900-NEXT: ;;#ASMSTART4678; GFX900-NEXT: ; use s[8:11]4679; GFX900-NEXT: ;;#ASMEND4680; GFX900-NEXT: s_setpc_b64 s[30:31]4681;4682; GFX90A-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:4683; GFX90A: ; %bb.0:4684; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4685; GFX90A-NEXT: ;;#ASMSTART4686; GFX90A-NEXT: ; def s[8:9]4687; GFX90A-NEXT: ;;#ASMEND4688; GFX90A-NEXT: ;;#ASMSTART4689; GFX90A-NEXT: ; use s[8:11]4690; GFX90A-NEXT: ;;#ASMEND4691; GFX90A-NEXT: s_setpc_b64 s[30:31]4692;4693; GFX942-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:4694; GFX942: ; %bb.0:4695; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4696; GFX942-NEXT: ;;#ASMSTART4697; GFX942-NEXT: ; def s[8:9]4698; GFX942-NEXT: ;;#ASMEND4699; GFX942-NEXT: s_nop 04700; GFX942-NEXT: ;;#ASMSTART4701; GFX942-NEXT: ; use s[8:11]4702; GFX942-NEXT: ;;#ASMEND4703; GFX942-NEXT: s_setpc_b64 s[30:31]4704 %vec0 = call <2 x float> asm "; def $0", "=s"()4705 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>4706 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4707 ret void4708}4709 4710define void @s_shuffle_v4f32_v2f32__1_2_2_2() {4711; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:4712; GFX900: ; %bb.0:4713; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4714; GFX900-NEXT: ;;#ASMSTART4715; GFX900-NEXT: ; def s[4:5]4716; GFX900-NEXT: ;;#ASMEND4717; GFX900-NEXT: s_mov_b32 s8, s54718; GFX900-NEXT: ;;#ASMSTART4719; GFX900-NEXT: ; use s[8:11]4720; GFX900-NEXT: ;;#ASMEND4721; GFX900-NEXT: s_setpc_b64 s[30:31]4722;4723; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:4724; GFX90A: ; %bb.0:4725; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4726; GFX90A-NEXT: ;;#ASMSTART4727; GFX90A-NEXT: ; def s[4:5]4728; GFX90A-NEXT: ;;#ASMEND4729; GFX90A-NEXT: s_mov_b32 s8, s54730; GFX90A-NEXT: ;;#ASMSTART4731; GFX90A-NEXT: ; use s[8:11]4732; GFX90A-NEXT: ;;#ASMEND4733; GFX90A-NEXT: s_setpc_b64 s[30:31]4734;4735; GFX942-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:4736; GFX942: ; %bb.0:4737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4738; GFX942-NEXT: ;;#ASMSTART4739; GFX942-NEXT: ; def s[0:1]4740; GFX942-NEXT: ;;#ASMEND4741; GFX942-NEXT: s_mov_b32 s8, s14742; GFX942-NEXT: ;;#ASMSTART4743; GFX942-NEXT: ; use s[8:11]4744; GFX942-NEXT: ;;#ASMEND4745; GFX942-NEXT: s_setpc_b64 s[30:31]4746 %vec0 = call <2 x float> asm "; def $0", "=s"()4747 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>4748 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4749 ret void4750}4751 4752define void @s_shuffle_v4f32_v2f32__2_2_2_2() {4753; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_2_2_2:4754; GFX9: ; %bb.0:4755; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4756; GFX9-NEXT: ;;#ASMSTART4757; GFX9-NEXT: ; use s[8:11]4758; GFX9-NEXT: ;;#ASMEND4759; GFX9-NEXT: s_setpc_b64 s[30:31]4760 %vec0 = call <2 x float> asm "; def $0", "=s"()4761 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>4762 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4763 ret void4764}4765 4766define void @s_shuffle_v4f32_v2f32__3_2_2_2() {4767; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_2_2_2:4768; GFX9: ; %bb.0:4769; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4770; GFX9-NEXT: ;;#ASMSTART4771; GFX9-NEXT: ; def s[10:11]4772; GFX9-NEXT: ;;#ASMEND4773; GFX9-NEXT: s_mov_b32 s8, s114774; GFX9-NEXT: s_mov_b32 s9, s104775; GFX9-NEXT: s_mov_b32 s11, s104776; GFX9-NEXT: ;;#ASMSTART4777; GFX9-NEXT: ; use s[8:11]4778; GFX9-NEXT: ;;#ASMEND4779; GFX9-NEXT: s_setpc_b64 s[30:31]4780 %vec0 = call <2 x float> asm "; def $0", "=s"()4781 %vec1 = call <2 x float> asm "; def $0", "=s"()4782 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>4783 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4784 ret void4785}4786 4787define void @s_shuffle_v4f32_v2f32__3_u_2_2() {4788; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_u_2_2:4789; GFX9: ; %bb.0:4790; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4791; GFX9-NEXT: ;;#ASMSTART4792; GFX9-NEXT: ; def s[10:11]4793; GFX9-NEXT: ;;#ASMEND4794; GFX9-NEXT: s_mov_b32 s8, s114795; GFX9-NEXT: s_mov_b32 s11, s104796; GFX9-NEXT: ;;#ASMSTART4797; GFX9-NEXT: ; use s[8:11]4798; GFX9-NEXT: ;;#ASMEND4799; GFX9-NEXT: s_setpc_b64 s[30:31]4800 %vec0 = call <2 x float> asm "; def $0", "=s"()4801 %vec1 = call <2 x float> asm "; def $0", "=s"()4802 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>4803 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4804 ret void4805}4806 4807define void @s_shuffle_v4f32_v2f32__3_0_2_2() {4808; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:4809; GFX900: ; %bb.0:4810; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4811; GFX900-NEXT: ;;#ASMSTART4812; GFX900-NEXT: ; def s[10:11]4813; GFX900-NEXT: ;;#ASMEND4814; GFX900-NEXT: ;;#ASMSTART4815; GFX900-NEXT: ; def s[4:5]4816; GFX900-NEXT: ;;#ASMEND4817; GFX900-NEXT: s_mov_b32 s8, s114818; GFX900-NEXT: s_mov_b32 s9, s44819; GFX900-NEXT: s_mov_b32 s11, s104820; GFX900-NEXT: ;;#ASMSTART4821; GFX900-NEXT: ; use s[8:11]4822; GFX900-NEXT: ;;#ASMEND4823; GFX900-NEXT: s_setpc_b64 s[30:31]4824;4825; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:4826; GFX90A: ; %bb.0:4827; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4828; GFX90A-NEXT: ;;#ASMSTART4829; GFX90A-NEXT: ; def s[10:11]4830; GFX90A-NEXT: ;;#ASMEND4831; GFX90A-NEXT: ;;#ASMSTART4832; GFX90A-NEXT: ; def s[4:5]4833; GFX90A-NEXT: ;;#ASMEND4834; GFX90A-NEXT: s_mov_b32 s8, s114835; GFX90A-NEXT: s_mov_b32 s9, s44836; GFX90A-NEXT: s_mov_b32 s11, s104837; GFX90A-NEXT: ;;#ASMSTART4838; GFX90A-NEXT: ; use s[8:11]4839; GFX90A-NEXT: ;;#ASMEND4840; GFX90A-NEXT: s_setpc_b64 s[30:31]4841;4842; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:4843; GFX942: ; %bb.0:4844; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4845; GFX942-NEXT: ;;#ASMSTART4846; GFX942-NEXT: ; def s[10:11]4847; GFX942-NEXT: ;;#ASMEND4848; GFX942-NEXT: ;;#ASMSTART4849; GFX942-NEXT: ; def s[0:1]4850; GFX942-NEXT: ;;#ASMEND4851; GFX942-NEXT: s_mov_b32 s8, s114852; GFX942-NEXT: s_mov_b32 s9, s04853; GFX942-NEXT: s_mov_b32 s11, s104854; GFX942-NEXT: ;;#ASMSTART4855; GFX942-NEXT: ; use s[8:11]4856; GFX942-NEXT: ;;#ASMEND4857; GFX942-NEXT: s_setpc_b64 s[30:31]4858 %vec0 = call <2 x float> asm "; def $0", "=s"()4859 %vec1 = call <2 x float> asm "; def $0", "=s"()4860 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>4861 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4862 ret void4863}4864 4865define void @s_shuffle_v4f32_v2f32__3_1_2_2() {4866; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_1_2_2:4867; GFX9: ; %bb.0:4868; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4869; GFX9-NEXT: ;;#ASMSTART4870; GFX9-NEXT: ; def s[8:9]4871; GFX9-NEXT: ;;#ASMEND4872; GFX9-NEXT: ;;#ASMSTART4873; GFX9-NEXT: ; def s[10:11]4874; GFX9-NEXT: ;;#ASMEND4875; GFX9-NEXT: s_mov_b32 s8, s114876; GFX9-NEXT: s_mov_b32 s11, s104877; GFX9-NEXT: ;;#ASMSTART4878; GFX9-NEXT: ; use s[8:11]4879; GFX9-NEXT: ;;#ASMEND4880; GFX9-NEXT: s_setpc_b64 s[30:31]4881 %vec0 = call <2 x float> asm "; def $0", "=s"()4882 %vec1 = call <2 x float> asm "; def $0", "=s"()4883 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>4884 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4885 ret void4886}4887 4888define void @s_shuffle_v4f32_v2f32__3_3_2_2() {4889; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_2:4890; GFX9: ; %bb.0:4891; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4892; GFX9-NEXT: ;;#ASMSTART4893; GFX9-NEXT: ; def s[10:11]4894; GFX9-NEXT: ;;#ASMEND4895; GFX9-NEXT: s_mov_b32 s8, s114896; GFX9-NEXT: s_mov_b32 s9, s114897; GFX9-NEXT: s_mov_b32 s11, s104898; GFX9-NEXT: ;;#ASMSTART4899; GFX9-NEXT: ; use s[8:11]4900; GFX9-NEXT: ;;#ASMEND4901; GFX9-NEXT: s_setpc_b64 s[30:31]4902 %vec0 = call <2 x float> asm "; def $0", "=s"()4903 %vec1 = call <2 x float> asm "; def $0", "=s"()4904 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>4905 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4906 ret void4907}4908 4909define void @s_shuffle_v4f32_v2f32__3_3_u_2() {4910; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:4911; GFX900: ; %bb.0:4912; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4913; GFX900-NEXT: ;;#ASMSTART4914; GFX900-NEXT: ; def s[4:5]4915; GFX900-NEXT: ;;#ASMEND4916; GFX900-NEXT: s_mov_b32 s8, s54917; GFX900-NEXT: s_mov_b32 s9, s54918; GFX900-NEXT: s_mov_b32 s11, s44919; GFX900-NEXT: ;;#ASMSTART4920; GFX900-NEXT: ; use s[8:11]4921; GFX900-NEXT: ;;#ASMEND4922; GFX900-NEXT: s_setpc_b64 s[30:31]4923;4924; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:4925; GFX90A: ; %bb.0:4926; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4927; GFX90A-NEXT: ;;#ASMSTART4928; GFX90A-NEXT: ; def s[4:5]4929; GFX90A-NEXT: ;;#ASMEND4930; GFX90A-NEXT: s_mov_b32 s8, s54931; GFX90A-NEXT: s_mov_b32 s9, s54932; GFX90A-NEXT: s_mov_b32 s11, s44933; GFX90A-NEXT: ;;#ASMSTART4934; GFX90A-NEXT: ; use s[8:11]4935; GFX90A-NEXT: ;;#ASMEND4936; GFX90A-NEXT: s_setpc_b64 s[30:31]4937;4938; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:4939; GFX942: ; %bb.0:4940; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4941; GFX942-NEXT: ;;#ASMSTART4942; GFX942-NEXT: ; def s[0:1]4943; GFX942-NEXT: ;;#ASMEND4944; GFX942-NEXT: s_mov_b32 s8, s14945; GFX942-NEXT: s_mov_b32 s9, s14946; GFX942-NEXT: s_mov_b32 s11, s04947; GFX942-NEXT: ;;#ASMSTART4948; GFX942-NEXT: ; use s[8:11]4949; GFX942-NEXT: ;;#ASMEND4950; GFX942-NEXT: s_setpc_b64 s[30:31]4951 %vec0 = call <2 x float> asm "; def $0", "=s"()4952 %vec1 = call <2 x float> asm "; def $0", "=s"()4953 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>4954 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)4955 ret void4956}4957 4958define void @s_shuffle_v4f32_v2f32__3_3_0_2() {4959; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:4960; GFX900: ; %bb.0:4961; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4962; GFX900-NEXT: ;;#ASMSTART4963; GFX900-NEXT: ; def s[10:11]4964; GFX900-NEXT: ;;#ASMEND4965; GFX900-NEXT: ;;#ASMSTART4966; GFX900-NEXT: ; def s[4:5]4967; GFX900-NEXT: ;;#ASMEND4968; GFX900-NEXT: s_mov_b32 s8, s54969; GFX900-NEXT: s_mov_b32 s9, s54970; GFX900-NEXT: s_mov_b32 s11, s44971; GFX900-NEXT: ;;#ASMSTART4972; GFX900-NEXT: ; use s[8:11]4973; GFX900-NEXT: ;;#ASMEND4974; GFX900-NEXT: s_setpc_b64 s[30:31]4975;4976; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:4977; GFX90A: ; %bb.0:4978; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4979; GFX90A-NEXT: ;;#ASMSTART4980; GFX90A-NEXT: ; def s[10:11]4981; GFX90A-NEXT: ;;#ASMEND4982; GFX90A-NEXT: ;;#ASMSTART4983; GFX90A-NEXT: ; def s[4:5]4984; GFX90A-NEXT: ;;#ASMEND4985; GFX90A-NEXT: s_mov_b32 s8, s54986; GFX90A-NEXT: s_mov_b32 s9, s54987; GFX90A-NEXT: s_mov_b32 s11, s44988; GFX90A-NEXT: ;;#ASMSTART4989; GFX90A-NEXT: ; use s[8:11]4990; GFX90A-NEXT: ;;#ASMEND4991; GFX90A-NEXT: s_setpc_b64 s[30:31]4992;4993; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:4994; GFX942: ; %bb.0:4995; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4996; GFX942-NEXT: ;;#ASMSTART4997; GFX942-NEXT: ; def s[10:11]4998; GFX942-NEXT: ;;#ASMEND4999; GFX942-NEXT: ;;#ASMSTART5000; GFX942-NEXT: ; def s[0:1]5001; GFX942-NEXT: ;;#ASMEND5002; GFX942-NEXT: s_mov_b32 s8, s15003; GFX942-NEXT: s_mov_b32 s9, s15004; GFX942-NEXT: s_mov_b32 s11, s05005; GFX942-NEXT: ;;#ASMSTART5006; GFX942-NEXT: ; use s[8:11]5007; GFX942-NEXT: ;;#ASMEND5008; GFX942-NEXT: s_setpc_b64 s[30:31]5009 %vec0 = call <2 x float> asm "; def $0", "=s"()5010 %vec1 = call <2 x float> asm "; def $0", "=s"()5011 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>5012 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5013 ret void5014}5015 5016define void @s_shuffle_v4f32_v2f32__3_3_1_2() {5017; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:5018; GFX900: ; %bb.0:5019; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5020; GFX900-NEXT: ;;#ASMSTART5021; GFX900-NEXT: ; def s[4:5]5022; GFX900-NEXT: ;;#ASMEND5023; GFX900-NEXT: ;;#ASMSTART5024; GFX900-NEXT: ; def s[6:7]5025; GFX900-NEXT: ;;#ASMEND5026; GFX900-NEXT: s_mov_b32 s8, s75027; GFX900-NEXT: s_mov_b32 s9, s75028; GFX900-NEXT: s_mov_b32 s10, s55029; GFX900-NEXT: s_mov_b32 s11, s65030; GFX900-NEXT: ;;#ASMSTART5031; GFX900-NEXT: ; use s[8:11]5032; GFX900-NEXT: ;;#ASMEND5033; GFX900-NEXT: s_setpc_b64 s[30:31]5034;5035; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:5036; GFX90A: ; %bb.0:5037; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5038; GFX90A-NEXT: ;;#ASMSTART5039; GFX90A-NEXT: ; def s[4:5]5040; GFX90A-NEXT: ;;#ASMEND5041; GFX90A-NEXT: ;;#ASMSTART5042; GFX90A-NEXT: ; def s[6:7]5043; GFX90A-NEXT: ;;#ASMEND5044; GFX90A-NEXT: s_mov_b32 s8, s75045; GFX90A-NEXT: s_mov_b32 s9, s75046; GFX90A-NEXT: s_mov_b32 s10, s55047; GFX90A-NEXT: s_mov_b32 s11, s65048; GFX90A-NEXT: ;;#ASMSTART5049; GFX90A-NEXT: ; use s[8:11]5050; GFX90A-NEXT: ;;#ASMEND5051; GFX90A-NEXT: s_setpc_b64 s[30:31]5052;5053; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:5054; GFX942: ; %bb.0:5055; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5056; GFX942-NEXT: ;;#ASMSTART5057; GFX942-NEXT: ; def s[0:1]5058; GFX942-NEXT: ;;#ASMEND5059; GFX942-NEXT: ;;#ASMSTART5060; GFX942-NEXT: ; def s[2:3]5061; GFX942-NEXT: ;;#ASMEND5062; GFX942-NEXT: s_mov_b32 s8, s35063; GFX942-NEXT: s_mov_b32 s9, s35064; GFX942-NEXT: s_mov_b32 s10, s15065; GFX942-NEXT: s_mov_b32 s11, s25066; GFX942-NEXT: ;;#ASMSTART5067; GFX942-NEXT: ; use s[8:11]5068; GFX942-NEXT: ;;#ASMEND5069; GFX942-NEXT: s_setpc_b64 s[30:31]5070 %vec0 = call <2 x float> asm "; def $0", "=s"()5071 %vec1 = call <2 x float> asm "; def $0", "=s"()5072 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>5073 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5074 ret void5075}5076 5077define void @s_shuffle_v4f32_v2f32__u_3_3_3() {5078; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_3_3_3:5079; GFX9: ; %bb.0:5080; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5081; GFX9-NEXT: ;;#ASMSTART5082; GFX9-NEXT: ; def s[8:9]5083; GFX9-NEXT: ;;#ASMEND5084; GFX9-NEXT: s_mov_b32 s10, s95085; GFX9-NEXT: s_mov_b32 s11, s95086; GFX9-NEXT: ;;#ASMSTART5087; GFX9-NEXT: ; use s[8:11]5088; GFX9-NEXT: ;;#ASMEND5089; GFX9-NEXT: s_setpc_b64 s[30:31]5090 %vec0 = call <2 x float> asm "; def $0", "=s"()5091 %vec1 = call <2 x float> asm "; def $0", "=s"()5092 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>5093 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5094 ret void5095}5096 5097define void @s_shuffle_v4f32_v2f32__0_3_3_3() {5098; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_3_3_3:5099; GFX9: ; %bb.0:5100; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5101; GFX9-NEXT: ;;#ASMSTART5102; GFX9-NEXT: ; def s[8:9]5103; GFX9-NEXT: ;;#ASMEND5104; GFX9-NEXT: ;;#ASMSTART5105; GFX9-NEXT: ; def s[10:11]5106; GFX9-NEXT: ;;#ASMEND5107; GFX9-NEXT: s_mov_b32 s9, s115108; GFX9-NEXT: s_mov_b32 s10, s115109; GFX9-NEXT: ;;#ASMSTART5110; GFX9-NEXT: ; use s[8:11]5111; GFX9-NEXT: ;;#ASMEND5112; GFX9-NEXT: s_setpc_b64 s[30:31]5113 %vec0 = call <2 x float> asm "; def $0", "=s"()5114 %vec1 = call <2 x float> asm "; def $0", "=s"()5115 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>5116 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5117 ret void5118}5119 5120define void @s_shuffle_v4f32_v2f32__1_3_3_3() {5121; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:5122; GFX900: ; %bb.0:5123; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5124; GFX900-NEXT: ;;#ASMSTART5125; GFX900-NEXT: ; def s[8:9]5126; GFX900-NEXT: ;;#ASMEND5127; GFX900-NEXT: ;;#ASMSTART5128; GFX900-NEXT: ; def s[4:5]5129; GFX900-NEXT: ;;#ASMEND5130; GFX900-NEXT: s_mov_b32 s8, s55131; GFX900-NEXT: s_mov_b32 s10, s95132; GFX900-NEXT: s_mov_b32 s11, s95133; GFX900-NEXT: ;;#ASMSTART5134; GFX900-NEXT: ; use s[8:11]5135; GFX900-NEXT: ;;#ASMEND5136; GFX900-NEXT: s_setpc_b64 s[30:31]5137;5138; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:5139; GFX90A: ; %bb.0:5140; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5141; GFX90A-NEXT: ;;#ASMSTART5142; GFX90A-NEXT: ; def s[8:9]5143; GFX90A-NEXT: ;;#ASMEND5144; GFX90A-NEXT: ;;#ASMSTART5145; GFX90A-NEXT: ; def s[4:5]5146; GFX90A-NEXT: ;;#ASMEND5147; GFX90A-NEXT: s_mov_b32 s8, s55148; GFX90A-NEXT: s_mov_b32 s10, s95149; GFX90A-NEXT: s_mov_b32 s11, s95150; GFX90A-NEXT: ;;#ASMSTART5151; GFX90A-NEXT: ; use s[8:11]5152; GFX90A-NEXT: ;;#ASMEND5153; GFX90A-NEXT: s_setpc_b64 s[30:31]5154;5155; GFX942-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:5156; GFX942: ; %bb.0:5157; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5158; GFX942-NEXT: ;;#ASMSTART5159; GFX942-NEXT: ; def s[8:9]5160; GFX942-NEXT: ;;#ASMEND5161; GFX942-NEXT: ;;#ASMSTART5162; GFX942-NEXT: ; def s[0:1]5163; GFX942-NEXT: ;;#ASMEND5164; GFX942-NEXT: s_mov_b32 s8, s15165; GFX942-NEXT: s_mov_b32 s10, s95166; GFX942-NEXT: s_mov_b32 s11, s95167; GFX942-NEXT: ;;#ASMSTART5168; GFX942-NEXT: ; use s[8:11]5169; GFX942-NEXT: ;;#ASMEND5170; GFX942-NEXT: s_setpc_b64 s[30:31]5171 %vec0 = call <2 x float> asm "; def $0", "=s"()5172 %vec1 = call <2 x float> asm "; def $0", "=s"()5173 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>5174 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5175 ret void5176}5177 5178define void @s_shuffle_v4f32_v2f32__2_3_3_3() {5179; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_3_3_3:5180; GFX9: ; %bb.0:5181; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5182; GFX9-NEXT: ;;#ASMSTART5183; GFX9-NEXT: ; def s[8:9]5184; GFX9-NEXT: ;;#ASMEND5185; GFX9-NEXT: s_mov_b32 s10, s95186; GFX9-NEXT: s_mov_b32 s11, s95187; GFX9-NEXT: ;;#ASMSTART5188; GFX9-NEXT: ; use s[8:11]5189; GFX9-NEXT: ;;#ASMEND5190; GFX9-NEXT: s_setpc_b64 s[30:31]5191 %vec0 = call <2 x float> asm "; def $0", "=s"()5192 %vec1 = call <2 x float> asm "; def $0", "=s"()5193 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>5194 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5195 ret void5196}5197 5198define void @s_shuffle_v4f32_v2f32__3_u_3_3() {5199; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_u_3_3:5200; GFX9: ; %bb.0:5201; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5202; GFX9-NEXT: ;;#ASMSTART5203; GFX9-NEXT: ; def s[10:11]5204; GFX9-NEXT: ;;#ASMEND5205; GFX9-NEXT: s_mov_b32 s8, s115206; GFX9-NEXT: s_mov_b32 s10, s115207; GFX9-NEXT: ;;#ASMSTART5208; GFX9-NEXT: ; use s[8:11]5209; GFX9-NEXT: ;;#ASMEND5210; GFX9-NEXT: s_setpc_b64 s[30:31]5211 %vec0 = call <2 x float> asm "; def $0", "=s"()5212 %vec1 = call <2 x float> asm "; def $0", "=s"()5213 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>5214 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5215 ret void5216}5217 5218define void @s_shuffle_v4f32_v2f32__3_0_3_3() {5219; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:5220; GFX900: ; %bb.0:5221; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5222; GFX900-NEXT: ;;#ASMSTART5223; GFX900-NEXT: ; def s[10:11]5224; GFX900-NEXT: ;;#ASMEND5225; GFX900-NEXT: ;;#ASMSTART5226; GFX900-NEXT: ; def s[4:5]5227; GFX900-NEXT: ;;#ASMEND5228; GFX900-NEXT: s_mov_b32 s8, s115229; GFX900-NEXT: s_mov_b32 s9, s45230; GFX900-NEXT: s_mov_b32 s10, s115231; GFX900-NEXT: ;;#ASMSTART5232; GFX900-NEXT: ; use s[8:11]5233; GFX900-NEXT: ;;#ASMEND5234; GFX900-NEXT: s_setpc_b64 s[30:31]5235;5236; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:5237; GFX90A: ; %bb.0:5238; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5239; GFX90A-NEXT: ;;#ASMSTART5240; GFX90A-NEXT: ; def s[10:11]5241; GFX90A-NEXT: ;;#ASMEND5242; GFX90A-NEXT: ;;#ASMSTART5243; GFX90A-NEXT: ; def s[4:5]5244; GFX90A-NEXT: ;;#ASMEND5245; GFX90A-NEXT: s_mov_b32 s8, s115246; GFX90A-NEXT: s_mov_b32 s9, s45247; GFX90A-NEXT: s_mov_b32 s10, s115248; GFX90A-NEXT: ;;#ASMSTART5249; GFX90A-NEXT: ; use s[8:11]5250; GFX90A-NEXT: ;;#ASMEND5251; GFX90A-NEXT: s_setpc_b64 s[30:31]5252;5253; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:5254; GFX942: ; %bb.0:5255; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5256; GFX942-NEXT: ;;#ASMSTART5257; GFX942-NEXT: ; def s[10:11]5258; GFX942-NEXT: ;;#ASMEND5259; GFX942-NEXT: ;;#ASMSTART5260; GFX942-NEXT: ; def s[0:1]5261; GFX942-NEXT: ;;#ASMEND5262; GFX942-NEXT: s_mov_b32 s8, s115263; GFX942-NEXT: s_mov_b32 s9, s05264; GFX942-NEXT: s_mov_b32 s10, s115265; GFX942-NEXT: ;;#ASMSTART5266; GFX942-NEXT: ; use s[8:11]5267; GFX942-NEXT: ;;#ASMEND5268; GFX942-NEXT: s_setpc_b64 s[30:31]5269 %vec0 = call <2 x float> asm "; def $0", "=s"()5270 %vec1 = call <2 x float> asm "; def $0", "=s"()5271 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>5272 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5273 ret void5274}5275 5276define void @s_shuffle_v4f32_v2f32__3_1_3_3() {5277; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_1_3_3:5278; GFX9: ; %bb.0:5279; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5280; GFX9-NEXT: ;;#ASMSTART5281; GFX9-NEXT: ; def s[8:9]5282; GFX9-NEXT: ;;#ASMEND5283; GFX9-NEXT: ;;#ASMSTART5284; GFX9-NEXT: ; def s[10:11]5285; GFX9-NEXT: ;;#ASMEND5286; GFX9-NEXT: s_mov_b32 s8, s115287; GFX9-NEXT: s_mov_b32 s10, s115288; GFX9-NEXT: ;;#ASMSTART5289; GFX9-NEXT: ; use s[8:11]5290; GFX9-NEXT: ;;#ASMEND5291; GFX9-NEXT: s_setpc_b64 s[30:31]5292 %vec0 = call <2 x float> asm "; def $0", "=s"()5293 %vec1 = call <2 x float> asm "; def $0", "=s"()5294 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>5295 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5296 ret void5297}5298 5299define void @s_shuffle_v4f32_v2f32__3_2_3_3() {5300; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_2_3_3:5301; GFX9: ; %bb.0:5302; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5303; GFX9-NEXT: ;;#ASMSTART5304; GFX9-NEXT: ; def s[10:11]5305; GFX9-NEXT: ;;#ASMEND5306; GFX9-NEXT: s_mov_b32 s8, s115307; GFX9-NEXT: s_mov_b32 s9, s105308; GFX9-NEXT: s_mov_b32 s10, s115309; GFX9-NEXT: ;;#ASMSTART5310; GFX9-NEXT: ; use s[8:11]5311; GFX9-NEXT: ;;#ASMEND5312; GFX9-NEXT: s_setpc_b64 s[30:31]5313 %vec0 = call <2 x float> asm "; def $0", "=s"()5314 %vec1 = call <2 x float> asm "; def $0", "=s"()5315 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>5316 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5317 ret void5318}5319 5320define void @s_shuffle_v4f32_v2f32__3_3_u_3() {5321; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_3:5322; GFX9: ; %bb.0:5323; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5324; GFX9-NEXT: ;;#ASMSTART5325; GFX9-NEXT: ; def s[8:9]5326; GFX9-NEXT: ;;#ASMEND5327; GFX9-NEXT: s_mov_b32 s8, s95328; GFX9-NEXT: s_mov_b32 s11, s95329; GFX9-NEXT: ;;#ASMSTART5330; GFX9-NEXT: ; use s[8:11]5331; GFX9-NEXT: ;;#ASMEND5332; GFX9-NEXT: s_setpc_b64 s[30:31]5333 %vec0 = call <2 x float> asm "; def $0", "=s"()5334 %vec1 = call <2 x float> asm "; def $0", "=s"()5335 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>5336 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5337 ret void5338}5339 5340define void @s_shuffle_v4f32_v2f32__3_3_0_3() {5341; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_3:5342; GFX9: ; %bb.0:5343; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5344; GFX9-NEXT: ;;#ASMSTART5345; GFX9-NEXT: ; def s[10:11]5346; GFX9-NEXT: ;;#ASMEND5347; GFX9-NEXT: ;;#ASMSTART5348; GFX9-NEXT: ; def s[8:9]5349; GFX9-NEXT: ;;#ASMEND5350; GFX9-NEXT: s_mov_b32 s8, s95351; GFX9-NEXT: s_mov_b32 s11, s95352; GFX9-NEXT: ;;#ASMSTART5353; GFX9-NEXT: ; use s[8:11]5354; GFX9-NEXT: ;;#ASMEND5355; GFX9-NEXT: s_setpc_b64 s[30:31]5356 %vec0 = call <2 x float> asm "; def $0", "=s"()5357 %vec1 = call <2 x float> asm "; def $0", "=s"()5358 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>5359 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5360 ret void5361}5362 5363define void @s_shuffle_v4f32_v2f32__3_3_1_3() {5364; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:5365; GFX900: ; %bb.0:5366; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5367; GFX900-NEXT: ;;#ASMSTART5368; GFX900-NEXT: ; def s[8:9]5369; GFX900-NEXT: ;;#ASMEND5370; GFX900-NEXT: ;;#ASMSTART5371; GFX900-NEXT: ; def s[4:5]5372; GFX900-NEXT: ;;#ASMEND5373; GFX900-NEXT: s_mov_b32 s8, s95374; GFX900-NEXT: s_mov_b32 s10, s55375; GFX900-NEXT: s_mov_b32 s11, s95376; GFX900-NEXT: ;;#ASMSTART5377; GFX900-NEXT: ; use s[8:11]5378; GFX900-NEXT: ;;#ASMEND5379; GFX900-NEXT: s_setpc_b64 s[30:31]5380;5381; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:5382; GFX90A: ; %bb.0:5383; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5384; GFX90A-NEXT: ;;#ASMSTART5385; GFX90A-NEXT: ; def s[8:9]5386; GFX90A-NEXT: ;;#ASMEND5387; GFX90A-NEXT: ;;#ASMSTART5388; GFX90A-NEXT: ; def s[4:5]5389; GFX90A-NEXT: ;;#ASMEND5390; GFX90A-NEXT: s_mov_b32 s8, s95391; GFX90A-NEXT: s_mov_b32 s10, s55392; GFX90A-NEXT: s_mov_b32 s11, s95393; GFX90A-NEXT: ;;#ASMSTART5394; GFX90A-NEXT: ; use s[8:11]5395; GFX90A-NEXT: ;;#ASMEND5396; GFX90A-NEXT: s_setpc_b64 s[30:31]5397;5398; GFX942-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:5399; GFX942: ; %bb.0:5400; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5401; GFX942-NEXT: ;;#ASMSTART5402; GFX942-NEXT: ; def s[8:9]5403; GFX942-NEXT: ;;#ASMEND5404; GFX942-NEXT: ;;#ASMSTART5405; GFX942-NEXT: ; def s[0:1]5406; GFX942-NEXT: ;;#ASMEND5407; GFX942-NEXT: s_mov_b32 s8, s95408; GFX942-NEXT: s_mov_b32 s10, s15409; GFX942-NEXT: s_mov_b32 s11, s95410; GFX942-NEXT: ;;#ASMSTART5411; GFX942-NEXT: ; use s[8:11]5412; GFX942-NEXT: ;;#ASMEND5413; GFX942-NEXT: s_setpc_b64 s[30:31]5414 %vec0 = call <2 x float> asm "; def $0", "=s"()5415 %vec1 = call <2 x float> asm "; def $0", "=s"()5416 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>5417 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5418 ret void5419}5420 5421define void @s_shuffle_v4f32_v2f32__3_3_2_3() {5422; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_3:5423; GFX9: ; %bb.0:5424; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5425; GFX9-NEXT: ;;#ASMSTART5426; GFX9-NEXT: ; def s[10:11]5427; GFX9-NEXT: ;;#ASMEND5428; GFX9-NEXT: s_mov_b32 s8, s115429; GFX9-NEXT: s_mov_b32 s9, s115430; GFX9-NEXT: ;;#ASMSTART5431; GFX9-NEXT: ; use s[8:11]5432; GFX9-NEXT: ;;#ASMEND5433; GFX9-NEXT: s_setpc_b64 s[30:31]5434 %vec0 = call <2 x float> asm "; def $0", "=s"()5435 %vec1 = call <2 x float> asm "; def $0", "=s"()5436 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>5437 call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)5438 ret void5439}5440;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:5441; GFX90APLUS: {{.*}}5442