1861 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v2f32_v2f32__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2f32_v2f32__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, <2 x i32> poison14 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 815 ret void16}17 18define void @v_shuffle_v2f32_v2f32__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2f32_v2f32__0_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_dwordx2 v2, v[0:1], s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v2f32_v2f32__0_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_dwordx2 v2, v[0:1], s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v2f32_v2f32__0_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_dwordx2 v2, v[0:1], s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x float> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 poison>53 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 854 ret void55}56 57define void @v_shuffle_v2f32_v2f32__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2f32_v2f32__1_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_dwordx2 v2, v[1:2], s[16:17]66; GFX900-NEXT: s_waitcnt vmcnt(0)67; GFX900-NEXT: s_setpc_b64 s[30:31]68;69; GFX90A-LABEL: v_shuffle_v2f32_v2f32__1_u:70; GFX90A: ; %bb.0:71; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX90A-NEXT: ;;#ASMSTART73; GFX90A-NEXT: ; def v[0: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_dwordx2 v2, v[0:1], s[16:17]78; GFX90A-NEXT: s_waitcnt vmcnt(0)79; GFX90A-NEXT: s_setpc_b64 s[30:31]80;81; GFX942-LABEL: v_shuffle_v2f32_v2f32__1_u:82; GFX942: ; %bb.0:83; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX942-NEXT: ;;#ASMSTART85; GFX942-NEXT: ; def v[0: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_dwordx2 v2, v[0:1], s[0:1]90; GFX942-NEXT: s_waitcnt vmcnt(0)91; GFX942-NEXT: s_setpc_b64 s[30:31]92 %vec0 = call <2 x float> asm "; def $0", "=v"()93 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 poison>94 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 895 ret void96}97 98define void @v_shuffle_v2f32_v2f32__2_u(ptr addrspace(1) inreg %ptr) {99; GFX9-LABEL: v_shuffle_v2f32_v2f32__2_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, <2 x i32> <i32 2, i32 poison>105 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8106 ret void107}108 109define void @v_shuffle_v2f32_v2f32__3_u(ptr addrspace(1) inreg %ptr) {110; GFX900-LABEL: v_shuffle_v2f32_v2f32__3_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_dwordx2 v2, v[1:2], 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_v2f32_v2f32__3_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_dwordx2 v2, v[0:1], 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_v2f32_v2f32__3_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_dwordx2 v2, v[0:1], 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, <2 x i32> <i32 3, i32 poison>147 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8148 ret void149}150 151define void @v_shuffle_v2f32_v2f32__3_0(ptr addrspace(1) inreg %ptr) {152; GFX900-LABEL: v_shuffle_v2f32_v2f32__3_0: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_dwordx2 v4, v[1:2], 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_v2f32_v2f32__3_0: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_dwordx2 v4, v[0:1], 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_v2f32_v2f32__3_0: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_dwordx2 v4, v[0:1], 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, <2 x i32> <i32 3, i32 0>199 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8200 ret void201}202 203define void @v_shuffle_v2f32_v2f32__3_1(ptr addrspace(1) inreg %ptr) {204; GFX900-LABEL: v_shuffle_v2f32_v2f32__3_1: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_dwordx2 v3, v[1:2], 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_v2f32_v2f32__3_1: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_dwordx2 v4, v[0:1], 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_v2f32_v2f32__3_1: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_dwordx2 v4, v[0:1], 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, <2 x i32> <i32 3, i32 1>251 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8252 ret void253}254 255define void @v_shuffle_v2f32_v2f32__3_2(ptr addrspace(1) inreg %ptr) {256; GFX900-LABEL: v_shuffle_v2f32_v2f32__3_2: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_dwordx2 v3, v[1:2], 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_v2f32_v2f32__3_2:269; GFX90A: ; %bb.0:270; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)271; GFX90A-NEXT: ;;#ASMSTART272; GFX90A-NEXT: ; def v[0:1]273; GFX90A-NEXT: ;;#ASMEND274; GFX90A-NEXT: v_mov_b32_e32 v2, 0275; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]276; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]277; GFX90A-NEXT: s_waitcnt vmcnt(0)278; GFX90A-NEXT: s_setpc_b64 s[30:31]279;280; GFX942-LABEL: v_shuffle_v2f32_v2f32__3_2:281; GFX942: ; %bb.0:282; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)283; GFX942-NEXT: ;;#ASMSTART284; GFX942-NEXT: ; def v[0:1]285; GFX942-NEXT: ;;#ASMEND286; GFX942-NEXT: v_mov_b32_e32 v2, 0287; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]288; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]289; GFX942-NEXT: s_waitcnt vmcnt(0)290; GFX942-NEXT: s_setpc_b64 s[30:31]291 %vec0 = call <2 x float> asm "; def $0", "=v"()292 %vec1 = call <2 x float> asm "; def $0", "=v"()293 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 2>294 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8295 ret void296}297 298define void @v_shuffle_v2f32_v2f32__3_3(ptr addrspace(1) inreg %ptr) {299; GFX900-LABEL: v_shuffle_v2f32_v2f32__3_3:300; GFX900: ; %bb.0:301; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX900-NEXT: v_mov_b32_e32 v3, 0303; GFX900-NEXT: ;;#ASMSTART304; GFX900-NEXT: ; def v[0:1]305; GFX900-NEXT: ;;#ASMEND306; GFX900-NEXT: v_mov_b32_e32 v2, v1307; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]308; GFX900-NEXT: s_waitcnt vmcnt(0)309; GFX900-NEXT: s_setpc_b64 s[30:31]310;311; GFX90A-LABEL: v_shuffle_v2f32_v2f32__3_3:312; GFX90A: ; %bb.0:313; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GFX90A-NEXT: ;;#ASMSTART315; GFX90A-NEXT: ; def v[0:1]316; GFX90A-NEXT: ;;#ASMEND317; GFX90A-NEXT: v_mov_b32_e32 v2, 0318; GFX90A-NEXT: v_mov_b32_e32 v0, v1319; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]320; GFX90A-NEXT: s_waitcnt vmcnt(0)321; GFX90A-NEXT: s_setpc_b64 s[30:31]322;323; GFX942-LABEL: v_shuffle_v2f32_v2f32__3_3:324; GFX942: ; %bb.0:325; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)326; GFX942-NEXT: ;;#ASMSTART327; GFX942-NEXT: ; def v[0:1]328; GFX942-NEXT: ;;#ASMEND329; GFX942-NEXT: v_mov_b32_e32 v2, 0330; GFX942-NEXT: v_mov_b32_e32 v0, v1331; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]332; GFX942-NEXT: s_waitcnt vmcnt(0)333; GFX942-NEXT: s_setpc_b64 s[30:31]334 %vec0 = call <2 x float> asm "; def $0", "=v"()335 %vec1 = call <2 x float> asm "; def $0", "=v"()336 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 3>337 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8338 ret void339}340 341define void @v_shuffle_v2f32_v2f32__u_0(ptr addrspace(1) inreg %ptr) {342; GFX900-LABEL: v_shuffle_v2f32_v2f32__u_0:343; GFX900: ; %bb.0:344; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)345; GFX900-NEXT: v_mov_b32_e32 v0, 0346; GFX900-NEXT: ;;#ASMSTART347; GFX900-NEXT: ; def v[1:2]348; GFX900-NEXT: ;;#ASMEND349; GFX900-NEXT: global_store_dwordx2 v0, v[0:1], s[16:17]350; GFX900-NEXT: s_waitcnt vmcnt(0)351; GFX900-NEXT: s_setpc_b64 s[30:31]352;353; GFX90A-LABEL: v_shuffle_v2f32_v2f32__u_0:354; GFX90A: ; %bb.0:355; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)356; GFX90A-NEXT: ;;#ASMSTART357; GFX90A-NEXT: ; def v[0:1]358; GFX90A-NEXT: ;;#ASMEND359; GFX90A-NEXT: v_mov_b32_e32 v2, 0360; GFX90A-NEXT: v_mov_b32_e32 v1, v0361; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]362; GFX90A-NEXT: s_waitcnt vmcnt(0)363; GFX90A-NEXT: s_setpc_b64 s[30:31]364;365; GFX942-LABEL: v_shuffle_v2f32_v2f32__u_0:366; GFX942: ; %bb.0:367; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)368; GFX942-NEXT: ;;#ASMSTART369; GFX942-NEXT: ; def v[0:1]370; GFX942-NEXT: ;;#ASMEND371; GFX942-NEXT: v_mov_b32_e32 v2, 0372; GFX942-NEXT: v_mov_b32_e32 v1, v0373; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]374; GFX942-NEXT: s_waitcnt vmcnt(0)375; GFX942-NEXT: s_setpc_b64 s[30:31]376 %vec0 = call <2 x float> asm "; def $0", "=v"()377 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 0>378 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8379 ret void380}381 382define void @v_shuffle_v2f32_v2f32__0_0(ptr addrspace(1) inreg %ptr) {383; GFX900-LABEL: v_shuffle_v2f32_v2f32__0_0:384; GFX900: ; %bb.0:385; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)386; GFX900-NEXT: ;;#ASMSTART387; GFX900-NEXT: ; def v[0:1]388; GFX900-NEXT: ;;#ASMEND389; GFX900-NEXT: v_mov_b32_e32 v2, 0390; GFX900-NEXT: v_mov_b32_e32 v1, v0391; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]392; GFX900-NEXT: s_waitcnt vmcnt(0)393; GFX900-NEXT: s_setpc_b64 s[30:31]394;395; GFX90A-LABEL: v_shuffle_v2f32_v2f32__0_0:396; GFX90A: ; %bb.0:397; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)398; GFX90A-NEXT: ;;#ASMSTART399; GFX90A-NEXT: ; def v[0:1]400; GFX90A-NEXT: ;;#ASMEND401; GFX90A-NEXT: v_mov_b32_e32 v2, 0402; GFX90A-NEXT: v_mov_b32_e32 v1, v0403; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]404; GFX90A-NEXT: s_waitcnt vmcnt(0)405; GFX90A-NEXT: s_setpc_b64 s[30:31]406;407; GFX942-LABEL: v_shuffle_v2f32_v2f32__0_0:408; GFX942: ; %bb.0:409; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX942-NEXT: ;;#ASMSTART411; GFX942-NEXT: ; def v[0:1]412; GFX942-NEXT: ;;#ASMEND413; GFX942-NEXT: v_mov_b32_e32 v2, 0414; GFX942-NEXT: v_mov_b32_e32 v1, v0415; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]416; GFX942-NEXT: s_waitcnt vmcnt(0)417; GFX942-NEXT: s_setpc_b64 s[30:31]418 %vec0 = call <2 x float> asm "; def $0", "=v"()419 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> zeroinitializer420 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8421 ret void422}423 424define void @v_shuffle_v2f32_v2f32__1_0(ptr addrspace(1) inreg %ptr) {425; GFX900-LABEL: v_shuffle_v2f32_v2f32__1_0:426; GFX900: ; %bb.0:427; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)428; GFX900-NEXT: v_mov_b32_e32 v3, 0429; GFX900-NEXT: ;;#ASMSTART430; GFX900-NEXT: ; def v[0:1]431; GFX900-NEXT: ;;#ASMEND432; GFX900-NEXT: v_mov_b32_e32 v2, v0433; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]434; GFX900-NEXT: s_waitcnt vmcnt(0)435; GFX900-NEXT: s_setpc_b64 s[30:31]436;437; GFX90A-LABEL: v_shuffle_v2f32_v2f32__1_0:438; GFX90A: ; %bb.0:439; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)440; GFX90A-NEXT: ;;#ASMSTART441; GFX90A-NEXT: ; def v[0:1]442; GFX90A-NEXT: ;;#ASMEND443; GFX90A-NEXT: v_mov_b32_e32 v2, 0444; GFX90A-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]445; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]446; GFX90A-NEXT: s_waitcnt vmcnt(0)447; GFX90A-NEXT: s_setpc_b64 s[30:31]448;449; GFX942-LABEL: v_shuffle_v2f32_v2f32__1_0:450; GFX942: ; %bb.0:451; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)452; GFX942-NEXT: ;;#ASMSTART453; GFX942-NEXT: ; def v[0:1]454; GFX942-NEXT: ;;#ASMEND455; GFX942-NEXT: v_mov_b32_e32 v2, 0456; GFX942-NEXT: v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]457; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]458; GFX942-NEXT: s_waitcnt vmcnt(0)459; GFX942-NEXT: s_setpc_b64 s[30:31]460 %vec0 = call <2 x float> asm "; def $0", "=v"()461 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 0>462 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8463 ret void464}465 466define void @v_shuffle_v2f32_v2f32__2_0(ptr addrspace(1) inreg %ptr) {467; GFX900-LABEL: v_shuffle_v2f32_v2f32__2_0:468; GFX900: ; %bb.0:469; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)470; GFX900-NEXT: v_mov_b32_e32 v0, 0471; GFX900-NEXT: ;;#ASMSTART472; GFX900-NEXT: ; def v[1:2]473; GFX900-NEXT: ;;#ASMEND474; GFX900-NEXT: global_store_dwordx2 v0, v[0:1], s[16:17]475; GFX900-NEXT: s_waitcnt vmcnt(0)476; GFX900-NEXT: s_setpc_b64 s[30:31]477;478; GFX90A-LABEL: v_shuffle_v2f32_v2f32__2_0:479; GFX90A: ; %bb.0:480; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX90A-NEXT: ;;#ASMSTART482; GFX90A-NEXT: ; def v[0:1]483; GFX90A-NEXT: ;;#ASMEND484; GFX90A-NEXT: v_mov_b32_e32 v2, 0485; GFX90A-NEXT: v_mov_b32_e32 v1, v0486; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]487; GFX90A-NEXT: s_waitcnt vmcnt(0)488; GFX90A-NEXT: s_setpc_b64 s[30:31]489;490; GFX942-LABEL: v_shuffle_v2f32_v2f32__2_0:491; GFX942: ; %bb.0:492; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; GFX942-NEXT: ;;#ASMSTART494; GFX942-NEXT: ; def v[0:1]495; GFX942-NEXT: ;;#ASMEND496; GFX942-NEXT: v_mov_b32_e32 v2, 0497; GFX942-NEXT: v_mov_b32_e32 v1, v0498; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]499; GFX942-NEXT: s_waitcnt vmcnt(0)500; GFX942-NEXT: s_setpc_b64 s[30:31]501 %vec0 = call <2 x float> asm "; def $0", "=v"()502 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 0>503 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8504 ret void505}506 507define void @v_shuffle_v2f32_v2f32__u_1(ptr addrspace(1) inreg %ptr) {508; GFX900-LABEL: v_shuffle_v2f32_v2f32__u_1:509; GFX900: ; %bb.0:510; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)511; GFX900-NEXT: v_mov_b32_e32 v2, 0512; GFX900-NEXT: ;;#ASMSTART513; GFX900-NEXT: ; def v[0:1]514; GFX900-NEXT: ;;#ASMEND515; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]516; GFX900-NEXT: s_waitcnt vmcnt(0)517; GFX900-NEXT: s_setpc_b64 s[30:31]518;519; GFX90A-LABEL: v_shuffle_v2f32_v2f32__u_1:520; GFX90A: ; %bb.0:521; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)522; GFX90A-NEXT: v_mov_b32_e32 v2, 0523; GFX90A-NEXT: ;;#ASMSTART524; GFX90A-NEXT: ; def v[0:1]525; GFX90A-NEXT: ;;#ASMEND526; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]527; GFX90A-NEXT: s_waitcnt vmcnt(0)528; GFX90A-NEXT: s_setpc_b64 s[30:31]529;530; GFX942-LABEL: v_shuffle_v2f32_v2f32__u_1:531; GFX942: ; %bb.0:532; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)533; GFX942-NEXT: v_mov_b32_e32 v2, 0534; GFX942-NEXT: ;;#ASMSTART535; GFX942-NEXT: ; def v[0:1]536; GFX942-NEXT: ;;#ASMEND537; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]538; GFX942-NEXT: s_waitcnt vmcnt(0)539; GFX942-NEXT: s_setpc_b64 s[30:31]540 %vec0 = call <2 x float> asm "; def $0", "=v"()541 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 1>542 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8543 ret void544}545 546define void @v_shuffle_v2f32_v2f32__0_1(ptr addrspace(1) inreg %ptr) {547; GFX900-LABEL: v_shuffle_v2f32_v2f32__0_1:548; GFX900: ; %bb.0:549; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)550; GFX900-NEXT: v_mov_b32_e32 v2, 0551; GFX900-NEXT: ;;#ASMSTART552; GFX900-NEXT: ; def v[0:1]553; GFX900-NEXT: ;;#ASMEND554; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]555; GFX900-NEXT: s_waitcnt vmcnt(0)556; GFX900-NEXT: s_setpc_b64 s[30:31]557;558; GFX90A-LABEL: v_shuffle_v2f32_v2f32__0_1:559; GFX90A: ; %bb.0:560; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)561; GFX90A-NEXT: v_mov_b32_e32 v2, 0562; GFX90A-NEXT: ;;#ASMSTART563; GFX90A-NEXT: ; def v[0:1]564; GFX90A-NEXT: ;;#ASMEND565; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]566; GFX90A-NEXT: s_waitcnt vmcnt(0)567; GFX90A-NEXT: s_setpc_b64 s[30:31]568;569; GFX942-LABEL: v_shuffle_v2f32_v2f32__0_1:570; GFX942: ; %bb.0:571; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)572; GFX942-NEXT: v_mov_b32_e32 v2, 0573; GFX942-NEXT: ;;#ASMSTART574; GFX942-NEXT: ; def v[0:1]575; GFX942-NEXT: ;;#ASMEND576; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]577; GFX942-NEXT: s_waitcnt vmcnt(0)578; GFX942-NEXT: s_setpc_b64 s[30:31]579 %vec0 = call <2 x float> asm "; def $0", "=v"()580 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 1>581 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8582 ret void583}584 585define void @v_shuffle_v2f32_v2f32__1_1(ptr addrspace(1) inreg %ptr) {586; GFX900-LABEL: v_shuffle_v2f32_v2f32__1_1:587; GFX900: ; %bb.0:588; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)589; GFX900-NEXT: v_mov_b32_e32 v3, 0590; GFX900-NEXT: ;;#ASMSTART591; GFX900-NEXT: ; def v[0:1]592; GFX900-NEXT: ;;#ASMEND593; GFX900-NEXT: v_mov_b32_e32 v2, v1594; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]595; GFX900-NEXT: s_waitcnt vmcnt(0)596; GFX900-NEXT: s_setpc_b64 s[30:31]597;598; GFX90A-LABEL: v_shuffle_v2f32_v2f32__1_1:599; GFX90A: ; %bb.0:600; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)601; GFX90A-NEXT: ;;#ASMSTART602; GFX90A-NEXT: ; def v[0:1]603; GFX90A-NEXT: ;;#ASMEND604; GFX90A-NEXT: v_mov_b32_e32 v2, 0605; GFX90A-NEXT: v_mov_b32_e32 v0, v1606; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]607; GFX90A-NEXT: s_waitcnt vmcnt(0)608; GFX90A-NEXT: s_setpc_b64 s[30:31]609;610; GFX942-LABEL: v_shuffle_v2f32_v2f32__1_1:611; GFX942: ; %bb.0:612; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)613; GFX942-NEXT: ;;#ASMSTART614; GFX942-NEXT: ; def v[0:1]615; GFX942-NEXT: ;;#ASMEND616; GFX942-NEXT: v_mov_b32_e32 v2, 0617; GFX942-NEXT: v_mov_b32_e32 v0, v1618; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]619; GFX942-NEXT: s_waitcnt vmcnt(0)620; GFX942-NEXT: s_setpc_b64 s[30:31]621 %vec0 = call <2 x float> asm "; def $0", "=v"()622 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 1>623 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8624 ret void625}626 627define void @v_shuffle_v2f32_v2f32__2_1(ptr addrspace(1) inreg %ptr) {628; GFX900-LABEL: v_shuffle_v2f32_v2f32__2_1:629; GFX900: ; %bb.0:630; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)631; GFX900-NEXT: v_mov_b32_e32 v2, 0632; GFX900-NEXT: ;;#ASMSTART633; GFX900-NEXT: ; def v[0:1]634; GFX900-NEXT: ;;#ASMEND635; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]636; GFX900-NEXT: s_waitcnt vmcnt(0)637; GFX900-NEXT: s_setpc_b64 s[30:31]638;639; GFX90A-LABEL: v_shuffle_v2f32_v2f32__2_1:640; GFX90A: ; %bb.0:641; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)642; GFX90A-NEXT: v_mov_b32_e32 v2, 0643; GFX90A-NEXT: ;;#ASMSTART644; GFX90A-NEXT: ; def v[0:1]645; GFX90A-NEXT: ;;#ASMEND646; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]647; GFX90A-NEXT: s_waitcnt vmcnt(0)648; GFX90A-NEXT: s_setpc_b64 s[30:31]649;650; GFX942-LABEL: v_shuffle_v2f32_v2f32__2_1:651; GFX942: ; %bb.0:652; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)653; GFX942-NEXT: v_mov_b32_e32 v2, 0654; GFX942-NEXT: ;;#ASMSTART655; GFX942-NEXT: ; def v[0:1]656; GFX942-NEXT: ;;#ASMEND657; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]658; GFX942-NEXT: s_waitcnt vmcnt(0)659; GFX942-NEXT: s_setpc_b64 s[30:31]660 %vec0 = call <2 x float> asm "; def $0", "=v"()661 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 1>662 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8663 ret void664}665 666define void @v_shuffle_v2f32_v2f32__u_2(ptr addrspace(1) inreg %ptr) {667; GFX9-LABEL: v_shuffle_v2f32_v2f32__u_2:668; GFX9: ; %bb.0:669; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)670; GFX9-NEXT: s_setpc_b64 s[30:31]671 %vec0 = call <2 x float> asm "; def $0", "=v"()672 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 2>673 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8674 ret void675}676 677define void @v_shuffle_v2f32_v2f32__0_2(ptr addrspace(1) inreg %ptr) {678; GFX900-LABEL: v_shuffle_v2f32_v2f32__0_2:679; GFX900: ; %bb.0:680; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)681; GFX900-NEXT: v_mov_b32_e32 v2, 0682; GFX900-NEXT: ;;#ASMSTART683; GFX900-NEXT: ; def v[0:1]684; GFX900-NEXT: ;;#ASMEND685; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]686; GFX900-NEXT: s_waitcnt vmcnt(0)687; GFX900-NEXT: s_setpc_b64 s[30:31]688;689; GFX90A-LABEL: v_shuffle_v2f32_v2f32__0_2:690; GFX90A: ; %bb.0:691; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)692; GFX90A-NEXT: v_mov_b32_e32 v2, 0693; GFX90A-NEXT: ;;#ASMSTART694; GFX90A-NEXT: ; def v[0:1]695; GFX90A-NEXT: ;;#ASMEND696; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]697; GFX90A-NEXT: s_waitcnt vmcnt(0)698; GFX90A-NEXT: s_setpc_b64 s[30:31]699;700; GFX942-LABEL: v_shuffle_v2f32_v2f32__0_2:701; GFX942: ; %bb.0:702; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)703; GFX942-NEXT: v_mov_b32_e32 v2, 0704; GFX942-NEXT: ;;#ASMSTART705; GFX942-NEXT: ; def v[0:1]706; GFX942-NEXT: ;;#ASMEND707; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]708; GFX942-NEXT: s_waitcnt vmcnt(0)709; GFX942-NEXT: s_setpc_b64 s[30:31]710 %vec0 = call <2 x float> asm "; def $0", "=v"()711 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 2>712 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8713 ret void714}715 716define void @v_shuffle_v2f32_v2f32__1_2(ptr addrspace(1) inreg %ptr) {717; GFX900-LABEL: v_shuffle_v2f32_v2f32__1_2:718; GFX900: ; %bb.0:719; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)720; GFX900-NEXT: v_mov_b32_e32 v2, 0721; GFX900-NEXT: ;;#ASMSTART722; GFX900-NEXT: ; def v[0:1]723; GFX900-NEXT: ;;#ASMEND724; GFX900-NEXT: global_store_dwordx2 v2, v[1:2], s[16:17]725; GFX900-NEXT: s_waitcnt vmcnt(0)726; GFX900-NEXT: s_setpc_b64 s[30:31]727;728; GFX90A-LABEL: v_shuffle_v2f32_v2f32__1_2:729; GFX90A: ; %bb.0:730; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)731; GFX90A-NEXT: ;;#ASMSTART732; GFX90A-NEXT: ; def v[0:1]733; GFX90A-NEXT: ;;#ASMEND734; GFX90A-NEXT: v_mov_b32_e32 v2, 0735; GFX90A-NEXT: v_mov_b32_e32 v0, v1736; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]737; GFX90A-NEXT: s_waitcnt vmcnt(0)738; GFX90A-NEXT: s_setpc_b64 s[30:31]739;740; GFX942-LABEL: v_shuffle_v2f32_v2f32__1_2:741; GFX942: ; %bb.0:742; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)743; GFX942-NEXT: ;;#ASMSTART744; GFX942-NEXT: ; def v[0:1]745; GFX942-NEXT: ;;#ASMEND746; GFX942-NEXT: v_mov_b32_e32 v2, 0747; GFX942-NEXT: v_mov_b32_e32 v0, v1748; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]749; GFX942-NEXT: s_waitcnt vmcnt(0)750; GFX942-NEXT: s_setpc_b64 s[30:31]751 %vec0 = call <2 x float> asm "; def $0", "=v"()752 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 2>753 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8754 ret void755}756 757define void @v_shuffle_v2f32_v2f32__2_2(ptr addrspace(1) inreg %ptr) {758; GFX9-LABEL: v_shuffle_v2f32_v2f32__2_2:759; GFX9: ; %bb.0:760; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)761; GFX9-NEXT: s_setpc_b64 s[30:31]762 %vec0 = call <2 x float> asm "; def $0", "=v"()763 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 2>764 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8765 ret void766}767 768define void @v_shuffle_v2f32_v2f32__u_3(ptr addrspace(1) inreg %ptr) {769; GFX900-LABEL: v_shuffle_v2f32_v2f32__u_3:770; GFX900: ; %bb.0:771; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)772; GFX900-NEXT: v_mov_b32_e32 v2, 0773; GFX900-NEXT: ;;#ASMSTART774; GFX900-NEXT: ; def v[0:1]775; GFX900-NEXT: ;;#ASMEND776; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]777; GFX900-NEXT: s_waitcnt vmcnt(0)778; GFX900-NEXT: s_setpc_b64 s[30:31]779;780; GFX90A-LABEL: v_shuffle_v2f32_v2f32__u_3:781; GFX90A: ; %bb.0:782; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)783; GFX90A-NEXT: v_mov_b32_e32 v2, 0784; GFX90A-NEXT: ;;#ASMSTART785; GFX90A-NEXT: ; def v[0:1]786; GFX90A-NEXT: ;;#ASMEND787; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]788; GFX90A-NEXT: s_waitcnt vmcnt(0)789; GFX90A-NEXT: s_setpc_b64 s[30:31]790;791; GFX942-LABEL: v_shuffle_v2f32_v2f32__u_3:792; GFX942: ; %bb.0:793; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX942-NEXT: v_mov_b32_e32 v2, 0795; GFX942-NEXT: ;;#ASMSTART796; GFX942-NEXT: ; def v[0:1]797; GFX942-NEXT: ;;#ASMEND798; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]799; GFX942-NEXT: s_waitcnt vmcnt(0)800; GFX942-NEXT: s_setpc_b64 s[30:31]801 %vec0 = call <2 x float> asm "; def $0", "=v"()802 %vec1 = call <2 x float> asm "; def $0", "=v"()803 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 poison, i32 3>804 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8805 ret void806}807 808define void @v_shuffle_v2f32_v2f32__0_3(ptr addrspace(1) inreg %ptr) {809; GFX900-LABEL: v_shuffle_v2f32_v2f32__0_3:810; GFX900: ; %bb.0:811; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)812; GFX900-NEXT: ;;#ASMSTART813; GFX900-NEXT: ; def v[0:1]814; GFX900-NEXT: ;;#ASMEND815; GFX900-NEXT: ;;#ASMSTART816; GFX900-NEXT: ; def v[1:2]817; GFX900-NEXT: ;;#ASMEND818; GFX900-NEXT: v_mov_b32_e32 v3, 0819; GFX900-NEXT: v_mov_b32_e32 v1, v2820; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]821; GFX900-NEXT: s_waitcnt vmcnt(0)822; GFX900-NEXT: s_setpc_b64 s[30:31]823;824; GFX90A-LABEL: v_shuffle_v2f32_v2f32__0_3:825; GFX90A: ; %bb.0:826; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)827; GFX90A-NEXT: ;;#ASMSTART828; GFX90A-NEXT: ; def v[0:1]829; GFX90A-NEXT: ;;#ASMEND830; GFX90A-NEXT: v_mov_b32_e32 v4, 0831; GFX90A-NEXT: ;;#ASMSTART832; GFX90A-NEXT: ; def v[2:3]833; GFX90A-NEXT: ;;#ASMEND834; GFX90A-NEXT: v_mov_b32_e32 v1, v3835; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]836; GFX90A-NEXT: s_waitcnt vmcnt(0)837; GFX90A-NEXT: s_setpc_b64 s[30:31]838;839; GFX942-LABEL: v_shuffle_v2f32_v2f32__0_3:840; GFX942: ; %bb.0:841; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX942-NEXT: ;;#ASMSTART843; GFX942-NEXT: ; def v[0:1]844; GFX942-NEXT: ;;#ASMEND845; GFX942-NEXT: v_mov_b32_e32 v4, 0846; GFX942-NEXT: ;;#ASMSTART847; GFX942-NEXT: ; def v[2:3]848; GFX942-NEXT: ;;#ASMEND849; GFX942-NEXT: s_nop 0850; GFX942-NEXT: v_mov_b32_e32 v1, v3851; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]852; GFX942-NEXT: s_waitcnt vmcnt(0)853; GFX942-NEXT: s_setpc_b64 s[30:31]854 %vec0 = call <2 x float> asm "; def $0", "=v"()855 %vec1 = call <2 x float> asm "; def $0", "=v"()856 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 0, i32 3>857 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8858 ret void859}860 861define void @v_shuffle_v2f32_v2f32__1_3(ptr addrspace(1) inreg %ptr) {862; GFX900-LABEL: v_shuffle_v2f32_v2f32__1_3:863; GFX900: ; %bb.0:864; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)865; GFX900-NEXT: ;;#ASMSTART866; GFX900-NEXT: ; def v[2:3]867; GFX900-NEXT: ;;#ASMEND868; GFX900-NEXT: v_mov_b32_e32 v4, 0869; GFX900-NEXT: v_mov_b32_e32 v2, v3870; GFX900-NEXT: ;;#ASMSTART871; GFX900-NEXT: ; def v[0:1]872; GFX900-NEXT: ;;#ASMEND873; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]874; GFX900-NEXT: s_waitcnt vmcnt(0)875; GFX900-NEXT: s_setpc_b64 s[30:31]876;877; GFX90A-LABEL: v_shuffle_v2f32_v2f32__1_3:878; GFX90A: ; %bb.0:879; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)880; GFX90A-NEXT: ;;#ASMSTART881; GFX90A-NEXT: ; def v[2:3]882; GFX90A-NEXT: ;;#ASMEND883; GFX90A-NEXT: v_mov_b32_e32 v4, 0884; GFX90A-NEXT: ;;#ASMSTART885; GFX90A-NEXT: ; def v[0:1]886; GFX90A-NEXT: ;;#ASMEND887; GFX90A-NEXT: v_mov_b32_e32 v2, v1888; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]889; GFX90A-NEXT: s_waitcnt vmcnt(0)890; GFX90A-NEXT: s_setpc_b64 s[30:31]891;892; GFX942-LABEL: v_shuffle_v2f32_v2f32__1_3:893; GFX942: ; %bb.0:894; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)895; GFX942-NEXT: ;;#ASMSTART896; GFX942-NEXT: ; def v[2:3]897; GFX942-NEXT: ;;#ASMEND898; GFX942-NEXT: v_mov_b32_e32 v4, 0899; GFX942-NEXT: ;;#ASMSTART900; GFX942-NEXT: ; def v[0:1]901; GFX942-NEXT: ;;#ASMEND902; GFX942-NEXT: s_nop 0903; GFX942-NEXT: v_mov_b32_e32 v2, v1904; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]905; GFX942-NEXT: s_waitcnt vmcnt(0)906; GFX942-NEXT: s_setpc_b64 s[30:31]907 %vec0 = call <2 x float> asm "; def $0", "=v"()908 %vec1 = call <2 x float> asm "; def $0", "=v"()909 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 1, i32 3>910 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8911 ret void912}913 914define void @v_shuffle_v2f32_v2f32__2_3(ptr addrspace(1) inreg %ptr) {915; GFX900-LABEL: v_shuffle_v2f32_v2f32__2_3:916; GFX900: ; %bb.0:917; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)918; GFX900-NEXT: v_mov_b32_e32 v2, 0919; GFX900-NEXT: ;;#ASMSTART920; GFX900-NEXT: ; def v[0:1]921; GFX900-NEXT: ;;#ASMEND922; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]923; GFX900-NEXT: s_waitcnt vmcnt(0)924; GFX900-NEXT: s_setpc_b64 s[30:31]925;926; GFX90A-LABEL: v_shuffle_v2f32_v2f32__2_3:927; GFX90A: ; %bb.0:928; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)929; GFX90A-NEXT: v_mov_b32_e32 v2, 0930; GFX90A-NEXT: ;;#ASMSTART931; GFX90A-NEXT: ; def v[0:1]932; GFX90A-NEXT: ;;#ASMEND933; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]934; GFX90A-NEXT: s_waitcnt vmcnt(0)935; GFX90A-NEXT: s_setpc_b64 s[30:31]936;937; GFX942-LABEL: v_shuffle_v2f32_v2f32__2_3:938; GFX942: ; %bb.0:939; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)940; GFX942-NEXT: v_mov_b32_e32 v2, 0941; GFX942-NEXT: ;;#ASMSTART942; GFX942-NEXT: ; def v[0:1]943; GFX942-NEXT: ;;#ASMEND944; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]945; GFX942-NEXT: s_waitcnt vmcnt(0)946; GFX942-NEXT: s_setpc_b64 s[30:31]947 %vec0 = call <2 x float> asm "; def $0", "=v"()948 %vec1 = call <2 x float> asm "; def $0", "=v"()949 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 2, i32 3>950 store <2 x float> %shuf, ptr addrspace(1) %ptr, align 8951 ret void952}953 954define void @s_shuffle_v2f32_v2f32__u_u() {955; GFX9-LABEL: s_shuffle_v2f32_v2f32__u_u:956; GFX9: ; %bb.0:957; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)958; GFX9-NEXT: ;;#ASMSTART959; GFX9-NEXT: ; use s[8:9]960; GFX9-NEXT: ;;#ASMEND961; GFX9-NEXT: s_setpc_b64 s[30:31]962 %vec0 = call <2 x float> asm "; def $0", "=s"()963 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> poison964 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)965 ret void966}967 968define void @s_shuffle_v2f32_v2f32__0_u() {969; GFX900-LABEL: s_shuffle_v2f32_v2f32__0_u:970; GFX900: ; %bb.0:971; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)972; GFX900-NEXT: ;;#ASMSTART973; GFX900-NEXT: ; def s[8:9]974; GFX900-NEXT: ;;#ASMEND975; GFX900-NEXT: ;;#ASMSTART976; GFX900-NEXT: ; use s[8:9]977; GFX900-NEXT: ;;#ASMEND978; GFX900-NEXT: s_setpc_b64 s[30:31]979;980; GFX90A-LABEL: s_shuffle_v2f32_v2f32__0_u:981; GFX90A: ; %bb.0:982; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)983; GFX90A-NEXT: ;;#ASMSTART984; GFX90A-NEXT: ; def s[8:9]985; GFX90A-NEXT: ;;#ASMEND986; GFX90A-NEXT: ;;#ASMSTART987; GFX90A-NEXT: ; use s[8:9]988; GFX90A-NEXT: ;;#ASMEND989; GFX90A-NEXT: s_setpc_b64 s[30:31]990;991; GFX942-LABEL: s_shuffle_v2f32_v2f32__0_u:992; GFX942: ; %bb.0:993; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)994; GFX942-NEXT: ;;#ASMSTART995; GFX942-NEXT: ; def s[8:9]996; GFX942-NEXT: ;;#ASMEND997; GFX942-NEXT: s_nop 0998; GFX942-NEXT: ;;#ASMSTART999; GFX942-NEXT: ; use s[8:9]1000; GFX942-NEXT: ;;#ASMEND1001; GFX942-NEXT: s_setpc_b64 s[30:31]1002 %vec0 = call <2 x float> asm "; def $0", "=s"()1003 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 poison>1004 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1005 ret void1006}1007 1008define void @s_shuffle_v2f32_v2f32__1_u() {1009; GFX900-LABEL: s_shuffle_v2f32_v2f32__1_u:1010; GFX900: ; %bb.0:1011; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1012; GFX900-NEXT: ;;#ASMSTART1013; GFX900-NEXT: ; def s[4:5]1014; GFX900-NEXT: ;;#ASMEND1015; GFX900-NEXT: s_mov_b32 s8, s51016; GFX900-NEXT: ;;#ASMSTART1017; GFX900-NEXT: ; use s[8:9]1018; GFX900-NEXT: ;;#ASMEND1019; GFX900-NEXT: s_setpc_b64 s[30:31]1020;1021; GFX90A-LABEL: s_shuffle_v2f32_v2f32__1_u:1022; GFX90A: ; %bb.0:1023; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1024; GFX90A-NEXT: ;;#ASMSTART1025; GFX90A-NEXT: ; def s[4:5]1026; GFX90A-NEXT: ;;#ASMEND1027; GFX90A-NEXT: s_mov_b32 s8, s51028; GFX90A-NEXT: ;;#ASMSTART1029; GFX90A-NEXT: ; use s[8:9]1030; GFX90A-NEXT: ;;#ASMEND1031; GFX90A-NEXT: s_setpc_b64 s[30:31]1032;1033; GFX942-LABEL: s_shuffle_v2f32_v2f32__1_u:1034; GFX942: ; %bb.0:1035; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1036; GFX942-NEXT: ;;#ASMSTART1037; GFX942-NEXT: ; def s[0:1]1038; GFX942-NEXT: ;;#ASMEND1039; GFX942-NEXT: s_mov_b32 s8, s11040; GFX942-NEXT: ;;#ASMSTART1041; GFX942-NEXT: ; use s[8:9]1042; GFX942-NEXT: ;;#ASMEND1043; GFX942-NEXT: s_setpc_b64 s[30:31]1044 %vec0 = call <2 x float> asm "; def $0", "=s"()1045 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 poison>1046 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1047 ret void1048}1049 1050define void @s_shuffle_v2f32_v2f32__2_u() {1051; GFX9-LABEL: s_shuffle_v2f32_v2f32__2_u:1052; GFX9: ; %bb.0:1053; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1054; GFX9-NEXT: ;;#ASMSTART1055; GFX9-NEXT: ; use s[8:9]1056; GFX9-NEXT: ;;#ASMEND1057; GFX9-NEXT: s_setpc_b64 s[30:31]1058 %vec0 = call <2 x float> asm "; def $0", "=s"()1059 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 poison>1060 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1061 ret void1062}1063 1064define void @s_shuffle_v2f32_v2f32__3_u() {1065; GFX900-LABEL: s_shuffle_v2f32_v2f32__3_u:1066; GFX900: ; %bb.0:1067; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1068; GFX900-NEXT: ;;#ASMSTART1069; GFX900-NEXT: ; def s[4:5]1070; GFX900-NEXT: ;;#ASMEND1071; GFX900-NEXT: s_mov_b32 s8, s51072; GFX900-NEXT: ;;#ASMSTART1073; GFX900-NEXT: ; use s[8:9]1074; GFX900-NEXT: ;;#ASMEND1075; GFX900-NEXT: s_setpc_b64 s[30:31]1076;1077; GFX90A-LABEL: s_shuffle_v2f32_v2f32__3_u:1078; GFX90A: ; %bb.0:1079; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1080; GFX90A-NEXT: ;;#ASMSTART1081; GFX90A-NEXT: ; def s[4:5]1082; GFX90A-NEXT: ;;#ASMEND1083; GFX90A-NEXT: s_mov_b32 s8, s51084; GFX90A-NEXT: ;;#ASMSTART1085; GFX90A-NEXT: ; use s[8:9]1086; GFX90A-NEXT: ;;#ASMEND1087; GFX90A-NEXT: s_setpc_b64 s[30:31]1088;1089; GFX942-LABEL: s_shuffle_v2f32_v2f32__3_u:1090; GFX942: ; %bb.0:1091; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1092; GFX942-NEXT: ;;#ASMSTART1093; GFX942-NEXT: ; def s[0:1]1094; GFX942-NEXT: ;;#ASMEND1095; GFX942-NEXT: s_mov_b32 s8, s11096; GFX942-NEXT: ;;#ASMSTART1097; GFX942-NEXT: ; use s[8:9]1098; GFX942-NEXT: ;;#ASMEND1099; GFX942-NEXT: s_setpc_b64 s[30:31]1100 %vec0 = call <2 x float> asm "; def $0", "=s"()1101 %vec1 = call <2 x float> asm "; def $0", "=s"()1102 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 poison>1103 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1104 ret void1105}1106 1107define void @s_shuffle_v2f32_v2f32__3_0() {1108; GFX900-LABEL: s_shuffle_v2f32_v2f32__3_0:1109; GFX900: ; %bb.0:1110; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1111; GFX900-NEXT: ;;#ASMSTART1112; GFX900-NEXT: ; def s[4:5]1113; GFX900-NEXT: ;;#ASMEND1114; GFX900-NEXT: ;;#ASMSTART1115; GFX900-NEXT: ; def s[6:7]1116; GFX900-NEXT: ;;#ASMEND1117; GFX900-NEXT: s_mov_b32 s8, s71118; GFX900-NEXT: s_mov_b32 s9, s41119; GFX900-NEXT: ;;#ASMSTART1120; GFX900-NEXT: ; use s[8:9]1121; GFX900-NEXT: ;;#ASMEND1122; GFX900-NEXT: s_setpc_b64 s[30:31]1123;1124; GFX90A-LABEL: s_shuffle_v2f32_v2f32__3_0:1125; GFX90A: ; %bb.0:1126; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1127; GFX90A-NEXT: ;;#ASMSTART1128; GFX90A-NEXT: ; def s[4:5]1129; GFX90A-NEXT: ;;#ASMEND1130; GFX90A-NEXT: ;;#ASMSTART1131; GFX90A-NEXT: ; def s[6:7]1132; GFX90A-NEXT: ;;#ASMEND1133; GFX90A-NEXT: s_mov_b32 s8, s71134; GFX90A-NEXT: s_mov_b32 s9, s41135; GFX90A-NEXT: ;;#ASMSTART1136; GFX90A-NEXT: ; use s[8:9]1137; GFX90A-NEXT: ;;#ASMEND1138; GFX90A-NEXT: s_setpc_b64 s[30:31]1139;1140; GFX942-LABEL: s_shuffle_v2f32_v2f32__3_0:1141; GFX942: ; %bb.0:1142; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1143; GFX942-NEXT: ;;#ASMSTART1144; GFX942-NEXT: ; def s[0:1]1145; GFX942-NEXT: ;;#ASMEND1146; GFX942-NEXT: ;;#ASMSTART1147; GFX942-NEXT: ; def s[2:3]1148; GFX942-NEXT: ;;#ASMEND1149; GFX942-NEXT: s_mov_b32 s8, s31150; GFX942-NEXT: s_mov_b32 s9, s01151; GFX942-NEXT: ;;#ASMSTART1152; GFX942-NEXT: ; use s[8:9]1153; GFX942-NEXT: ;;#ASMEND1154; GFX942-NEXT: s_setpc_b64 s[30:31]1155 %vec0 = call <2 x float> asm "; def $0", "=s"()1156 %vec1 = call <2 x float> asm "; def $0", "=s"()1157 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 0>1158 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1159 ret void1160}1161 1162define void @s_shuffle_v2f32_v2f32__3_1() {1163; GFX900-LABEL: s_shuffle_v2f32_v2f32__3_1:1164; GFX900: ; %bb.0:1165; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1166; GFX900-NEXT: ;;#ASMSTART1167; GFX900-NEXT: ; def s[8:9]1168; GFX900-NEXT: ;;#ASMEND1169; GFX900-NEXT: ;;#ASMSTART1170; GFX900-NEXT: ; def s[4:5]1171; GFX900-NEXT: ;;#ASMEND1172; GFX900-NEXT: s_mov_b32 s8, s51173; GFX900-NEXT: ;;#ASMSTART1174; GFX900-NEXT: ; use s[8:9]1175; GFX900-NEXT: ;;#ASMEND1176; GFX900-NEXT: s_setpc_b64 s[30:31]1177;1178; GFX90A-LABEL: s_shuffle_v2f32_v2f32__3_1:1179; GFX90A: ; %bb.0:1180; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1181; GFX90A-NEXT: ;;#ASMSTART1182; GFX90A-NEXT: ; def s[8:9]1183; GFX90A-NEXT: ;;#ASMEND1184; GFX90A-NEXT: ;;#ASMSTART1185; GFX90A-NEXT: ; def s[4:5]1186; GFX90A-NEXT: ;;#ASMEND1187; GFX90A-NEXT: s_mov_b32 s8, s51188; GFX90A-NEXT: ;;#ASMSTART1189; GFX90A-NEXT: ; use s[8:9]1190; GFX90A-NEXT: ;;#ASMEND1191; GFX90A-NEXT: s_setpc_b64 s[30:31]1192;1193; GFX942-LABEL: s_shuffle_v2f32_v2f32__3_1:1194; GFX942: ; %bb.0:1195; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1196; GFX942-NEXT: ;;#ASMSTART1197; GFX942-NEXT: ; def s[8:9]1198; GFX942-NEXT: ;;#ASMEND1199; GFX942-NEXT: ;;#ASMSTART1200; GFX942-NEXT: ; def s[0:1]1201; GFX942-NEXT: ;;#ASMEND1202; GFX942-NEXT: s_mov_b32 s8, s11203; GFX942-NEXT: ;;#ASMSTART1204; GFX942-NEXT: ; use s[8:9]1205; GFX942-NEXT: ;;#ASMEND1206; GFX942-NEXT: s_setpc_b64 s[30:31]1207 %vec0 = call <2 x float> asm "; def $0", "=s"()1208 %vec1 = call <2 x float> asm "; def $0", "=s"()1209 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 1>1210 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1211 ret void1212}1213 1214define void @s_shuffle_v2f32_v2f32__3_2() {1215; GFX900-LABEL: s_shuffle_v2f32_v2f32__3_2:1216; GFX900: ; %bb.0:1217; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1218; GFX900-NEXT: ;;#ASMSTART1219; GFX900-NEXT: ; def s[4:5]1220; GFX900-NEXT: ;;#ASMEND1221; GFX900-NEXT: s_mov_b32 s8, s51222; GFX900-NEXT: s_mov_b32 s9, s41223; GFX900-NEXT: ;;#ASMSTART1224; GFX900-NEXT: ; use s[8:9]1225; GFX900-NEXT: ;;#ASMEND1226; GFX900-NEXT: s_setpc_b64 s[30:31]1227;1228; GFX90A-LABEL: s_shuffle_v2f32_v2f32__3_2:1229; GFX90A: ; %bb.0:1230; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1231; GFX90A-NEXT: ;;#ASMSTART1232; GFX90A-NEXT: ; def s[4:5]1233; GFX90A-NEXT: ;;#ASMEND1234; GFX90A-NEXT: s_mov_b32 s8, s51235; GFX90A-NEXT: s_mov_b32 s9, s41236; GFX90A-NEXT: ;;#ASMSTART1237; GFX90A-NEXT: ; use s[8:9]1238; GFX90A-NEXT: ;;#ASMEND1239; GFX90A-NEXT: s_setpc_b64 s[30:31]1240;1241; GFX942-LABEL: s_shuffle_v2f32_v2f32__3_2:1242; GFX942: ; %bb.0:1243; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1244; GFX942-NEXT: ;;#ASMSTART1245; GFX942-NEXT: ; def s[0:1]1246; GFX942-NEXT: ;;#ASMEND1247; GFX942-NEXT: s_mov_b32 s8, s11248; GFX942-NEXT: s_mov_b32 s9, s01249; GFX942-NEXT: ;;#ASMSTART1250; GFX942-NEXT: ; use s[8:9]1251; GFX942-NEXT: ;;#ASMEND1252; GFX942-NEXT: s_setpc_b64 s[30:31]1253 %vec0 = call <2 x float> asm "; def $0", "=s"()1254 %vec1 = call <2 x float> asm "; def $0", "=s"()1255 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 2>1256 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1257 ret void1258}1259 1260define void @s_shuffle_v2f32_v2f32__3_3() {1261; GFX9-LABEL: s_shuffle_v2f32_v2f32__3_3:1262; GFX9: ; %bb.0:1263; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1264; GFX9-NEXT: ;;#ASMSTART1265; GFX9-NEXT: ; def s[8:9]1266; GFX9-NEXT: ;;#ASMEND1267; GFX9-NEXT: s_mov_b32 s8, s91268; GFX9-NEXT: ;;#ASMSTART1269; GFX9-NEXT: ; use s[8:9]1270; GFX9-NEXT: ;;#ASMEND1271; GFX9-NEXT: s_setpc_b64 s[30:31]1272 %vec0 = call <2 x float> asm "; def $0", "=s"()1273 %vec1 = call <2 x float> asm "; def $0", "=s"()1274 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 3, i32 3>1275 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1276 ret void1277}1278 1279define void @s_shuffle_v2f32_v2f32__u_0() {1280; GFX900-LABEL: s_shuffle_v2f32_v2f32__u_0:1281; GFX900: ; %bb.0:1282; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1283; GFX900-NEXT: ;;#ASMSTART1284; GFX900-NEXT: ; def s[4:5]1285; GFX900-NEXT: ;;#ASMEND1286; GFX900-NEXT: s_mov_b32 s9, s41287; GFX900-NEXT: ;;#ASMSTART1288; GFX900-NEXT: ; use s[8:9]1289; GFX900-NEXT: ;;#ASMEND1290; GFX900-NEXT: s_setpc_b64 s[30:31]1291;1292; GFX90A-LABEL: s_shuffle_v2f32_v2f32__u_0:1293; GFX90A: ; %bb.0:1294; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1295; GFX90A-NEXT: ;;#ASMSTART1296; GFX90A-NEXT: ; def s[4:5]1297; GFX90A-NEXT: ;;#ASMEND1298; GFX90A-NEXT: s_mov_b32 s9, s41299; GFX90A-NEXT: ;;#ASMSTART1300; GFX90A-NEXT: ; use s[8:9]1301; GFX90A-NEXT: ;;#ASMEND1302; GFX90A-NEXT: s_setpc_b64 s[30:31]1303;1304; GFX942-LABEL: s_shuffle_v2f32_v2f32__u_0:1305; GFX942: ; %bb.0:1306; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1307; GFX942-NEXT: ;;#ASMSTART1308; GFX942-NEXT: ; def s[0:1]1309; GFX942-NEXT: ;;#ASMEND1310; GFX942-NEXT: s_mov_b32 s9, s01311; GFX942-NEXT: ;;#ASMSTART1312; GFX942-NEXT: ; use s[8:9]1313; GFX942-NEXT: ;;#ASMEND1314; GFX942-NEXT: s_setpc_b64 s[30:31]1315 %vec0 = call <2 x float> asm "; def $0", "=s"()1316 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 0>1317 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1318 ret void1319}1320 1321define void @s_shuffle_v2f32_v2f32__0_0() {1322; GFX9-LABEL: s_shuffle_v2f32_v2f32__0_0:1323; GFX9: ; %bb.0:1324; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1325; GFX9-NEXT: ;;#ASMSTART1326; GFX9-NEXT: ; def s[8:9]1327; GFX9-NEXT: ;;#ASMEND1328; GFX9-NEXT: s_mov_b32 s9, s81329; GFX9-NEXT: ;;#ASMSTART1330; GFX9-NEXT: ; use s[8:9]1331; GFX9-NEXT: ;;#ASMEND1332; GFX9-NEXT: s_setpc_b64 s[30:31]1333 %vec0 = call <2 x float> asm "; def $0", "=s"()1334 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> zeroinitializer1335 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1336 ret void1337}1338 1339define void @s_shuffle_v2f32_v2f32__1_0() {1340; GFX900-LABEL: s_shuffle_v2f32_v2f32__1_0:1341; GFX900: ; %bb.0:1342; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1343; GFX900-NEXT: ;;#ASMSTART1344; GFX900-NEXT: ; def s[4:5]1345; GFX900-NEXT: ;;#ASMEND1346; GFX900-NEXT: s_mov_b32 s8, s51347; GFX900-NEXT: s_mov_b32 s9, s41348; GFX900-NEXT: ;;#ASMSTART1349; GFX900-NEXT: ; use s[8:9]1350; GFX900-NEXT: ;;#ASMEND1351; GFX900-NEXT: s_setpc_b64 s[30:31]1352;1353; GFX90A-LABEL: s_shuffle_v2f32_v2f32__1_0:1354; GFX90A: ; %bb.0:1355; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1356; GFX90A-NEXT: ;;#ASMSTART1357; GFX90A-NEXT: ; def s[4:5]1358; GFX90A-NEXT: ;;#ASMEND1359; GFX90A-NEXT: s_mov_b32 s8, s51360; GFX90A-NEXT: s_mov_b32 s9, s41361; GFX90A-NEXT: ;;#ASMSTART1362; GFX90A-NEXT: ; use s[8:9]1363; GFX90A-NEXT: ;;#ASMEND1364; GFX90A-NEXT: s_setpc_b64 s[30:31]1365;1366; GFX942-LABEL: s_shuffle_v2f32_v2f32__1_0:1367; GFX942: ; %bb.0:1368; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1369; GFX942-NEXT: ;;#ASMSTART1370; GFX942-NEXT: ; def s[0:1]1371; GFX942-NEXT: ;;#ASMEND1372; GFX942-NEXT: s_mov_b32 s8, s11373; GFX942-NEXT: s_mov_b32 s9, s01374; GFX942-NEXT: ;;#ASMSTART1375; GFX942-NEXT: ; use s[8:9]1376; GFX942-NEXT: ;;#ASMEND1377; GFX942-NEXT: s_setpc_b64 s[30:31]1378 %vec0 = call <2 x float> asm "; def $0", "=s"()1379 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 0>1380 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1381 ret void1382}1383 1384define void @s_shuffle_v2f32_v2f32__2_0() {1385; GFX900-LABEL: s_shuffle_v2f32_v2f32__2_0:1386; GFX900: ; %bb.0:1387; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1388; GFX900-NEXT: ;;#ASMSTART1389; GFX900-NEXT: ; def s[4:5]1390; GFX900-NEXT: ;;#ASMEND1391; GFX900-NEXT: s_mov_b32 s9, s41392; GFX900-NEXT: ;;#ASMSTART1393; GFX900-NEXT: ; use s[8:9]1394; GFX900-NEXT: ;;#ASMEND1395; GFX900-NEXT: s_setpc_b64 s[30:31]1396;1397; GFX90A-LABEL: s_shuffle_v2f32_v2f32__2_0:1398; GFX90A: ; %bb.0:1399; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1400; GFX90A-NEXT: ;;#ASMSTART1401; GFX90A-NEXT: ; def s[4:5]1402; GFX90A-NEXT: ;;#ASMEND1403; GFX90A-NEXT: s_mov_b32 s9, s41404; GFX90A-NEXT: ;;#ASMSTART1405; GFX90A-NEXT: ; use s[8:9]1406; GFX90A-NEXT: ;;#ASMEND1407; GFX90A-NEXT: s_setpc_b64 s[30:31]1408;1409; GFX942-LABEL: s_shuffle_v2f32_v2f32__2_0:1410; GFX942: ; %bb.0:1411; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1412; GFX942-NEXT: ;;#ASMSTART1413; GFX942-NEXT: ; def s[0:1]1414; GFX942-NEXT: ;;#ASMEND1415; GFX942-NEXT: s_mov_b32 s9, s01416; GFX942-NEXT: ;;#ASMSTART1417; GFX942-NEXT: ; use s[8:9]1418; GFX942-NEXT: ;;#ASMEND1419; GFX942-NEXT: s_setpc_b64 s[30:31]1420 %vec0 = call <2 x float> asm "; def $0", "=s"()1421 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 0>1422 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1423 ret void1424}1425 1426define void @s_shuffle_v2f32_v2f32__u_1() {1427; GFX900-LABEL: s_shuffle_v2f32_v2f32__u_1:1428; GFX900: ; %bb.0:1429; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; GFX900-NEXT: ;;#ASMSTART1431; GFX900-NEXT: ; def s[8:9]1432; GFX900-NEXT: ;;#ASMEND1433; GFX900-NEXT: ;;#ASMSTART1434; GFX900-NEXT: ; use s[8:9]1435; GFX900-NEXT: ;;#ASMEND1436; GFX900-NEXT: s_setpc_b64 s[30:31]1437;1438; GFX90A-LABEL: s_shuffle_v2f32_v2f32__u_1:1439; GFX90A: ; %bb.0:1440; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1441; GFX90A-NEXT: ;;#ASMSTART1442; GFX90A-NEXT: ; def s[8:9]1443; GFX90A-NEXT: ;;#ASMEND1444; GFX90A-NEXT: ;;#ASMSTART1445; GFX90A-NEXT: ; use s[8:9]1446; GFX90A-NEXT: ;;#ASMEND1447; GFX90A-NEXT: s_setpc_b64 s[30:31]1448;1449; GFX942-LABEL: s_shuffle_v2f32_v2f32__u_1:1450; GFX942: ; %bb.0:1451; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1452; GFX942-NEXT: ;;#ASMSTART1453; GFX942-NEXT: ; def s[8:9]1454; GFX942-NEXT: ;;#ASMEND1455; GFX942-NEXT: s_nop 01456; GFX942-NEXT: ;;#ASMSTART1457; GFX942-NEXT: ; use s[8:9]1458; GFX942-NEXT: ;;#ASMEND1459; GFX942-NEXT: s_setpc_b64 s[30:31]1460 %vec0 = call <2 x float> asm "; def $0", "=s"()1461 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 1>1462 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1463 ret void1464}1465 1466define void @s_shuffle_v2f32_v2f32__0_1() {1467; GFX900-LABEL: s_shuffle_v2f32_v2f32__0_1:1468; GFX900: ; %bb.0:1469; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1470; GFX900-NEXT: ;;#ASMSTART1471; GFX900-NEXT: ; def s[8:9]1472; GFX900-NEXT: ;;#ASMEND1473; GFX900-NEXT: ;;#ASMSTART1474; GFX900-NEXT: ; use s[8:9]1475; GFX900-NEXT: ;;#ASMEND1476; GFX900-NEXT: s_setpc_b64 s[30:31]1477;1478; GFX90A-LABEL: s_shuffle_v2f32_v2f32__0_1:1479; GFX90A: ; %bb.0:1480; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1481; GFX90A-NEXT: ;;#ASMSTART1482; GFX90A-NEXT: ; def s[8:9]1483; GFX90A-NEXT: ;;#ASMEND1484; GFX90A-NEXT: ;;#ASMSTART1485; GFX90A-NEXT: ; use s[8:9]1486; GFX90A-NEXT: ;;#ASMEND1487; GFX90A-NEXT: s_setpc_b64 s[30:31]1488;1489; GFX942-LABEL: s_shuffle_v2f32_v2f32__0_1:1490; GFX942: ; %bb.0:1491; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1492; GFX942-NEXT: ;;#ASMSTART1493; GFX942-NEXT: ; def s[8:9]1494; GFX942-NEXT: ;;#ASMEND1495; GFX942-NEXT: s_nop 01496; GFX942-NEXT: ;;#ASMSTART1497; GFX942-NEXT: ; use s[8:9]1498; GFX942-NEXT: ;;#ASMEND1499; GFX942-NEXT: s_setpc_b64 s[30:31]1500 %vec0 = call <2 x float> asm "; def $0", "=s"()1501 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 1>1502 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1503 ret void1504}1505 1506define void @s_shuffle_v2f32_v2f32__1_1() {1507; GFX9-LABEL: s_shuffle_v2f32_v2f32__1_1:1508; GFX9: ; %bb.0:1509; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1510; GFX9-NEXT: ;;#ASMSTART1511; GFX9-NEXT: ; def s[8:9]1512; GFX9-NEXT: ;;#ASMEND1513; GFX9-NEXT: s_mov_b32 s8, s91514; GFX9-NEXT: ;;#ASMSTART1515; GFX9-NEXT: ; use s[8:9]1516; GFX9-NEXT: ;;#ASMEND1517; GFX9-NEXT: s_setpc_b64 s[30:31]1518 %vec0 = call <2 x float> asm "; def $0", "=s"()1519 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 1>1520 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1521 ret void1522}1523 1524define void @s_shuffle_v2f32_v2f32__2_1() {1525; GFX900-LABEL: s_shuffle_v2f32_v2f32__2_1:1526; GFX900: ; %bb.0:1527; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1528; GFX900-NEXT: ;;#ASMSTART1529; GFX900-NEXT: ; def s[8:9]1530; GFX900-NEXT: ;;#ASMEND1531; GFX900-NEXT: ;;#ASMSTART1532; GFX900-NEXT: ; use s[8:9]1533; GFX900-NEXT: ;;#ASMEND1534; GFX900-NEXT: s_setpc_b64 s[30:31]1535;1536; GFX90A-LABEL: s_shuffle_v2f32_v2f32__2_1:1537; GFX90A: ; %bb.0:1538; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1539; GFX90A-NEXT: ;;#ASMSTART1540; GFX90A-NEXT: ; def s[8:9]1541; GFX90A-NEXT: ;;#ASMEND1542; GFX90A-NEXT: ;;#ASMSTART1543; GFX90A-NEXT: ; use s[8:9]1544; GFX90A-NEXT: ;;#ASMEND1545; GFX90A-NEXT: s_setpc_b64 s[30:31]1546;1547; GFX942-LABEL: s_shuffle_v2f32_v2f32__2_1:1548; GFX942: ; %bb.0:1549; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1550; GFX942-NEXT: ;;#ASMSTART1551; GFX942-NEXT: ; def s[8:9]1552; GFX942-NEXT: ;;#ASMEND1553; GFX942-NEXT: s_nop 01554; GFX942-NEXT: ;;#ASMSTART1555; GFX942-NEXT: ; use s[8:9]1556; GFX942-NEXT: ;;#ASMEND1557; GFX942-NEXT: s_setpc_b64 s[30:31]1558 %vec0 = call <2 x float> asm "; def $0", "=s"()1559 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 1>1560 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1561 ret void1562}1563 1564define void @s_shuffle_v2f32_v2f32__u_2() {1565; GFX9-LABEL: s_shuffle_v2f32_v2f32__u_2:1566; GFX9: ; %bb.0:1567; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1568; GFX9-NEXT: ;;#ASMSTART1569; GFX9-NEXT: ; use s[8:9]1570; GFX9-NEXT: ;;#ASMEND1571; GFX9-NEXT: s_setpc_b64 s[30:31]1572 %vec0 = call <2 x float> asm "; def $0", "=s"()1573 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 poison, i32 2>1574 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1575 ret void1576}1577 1578define void @s_shuffle_v2f32_v2f32__0_2() {1579; GFX900-LABEL: s_shuffle_v2f32_v2f32__0_2:1580; GFX900: ; %bb.0:1581; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1582; GFX900-NEXT: ;;#ASMSTART1583; GFX900-NEXT: ; def s[8:9]1584; GFX900-NEXT: ;;#ASMEND1585; GFX900-NEXT: ;;#ASMSTART1586; GFX900-NEXT: ; use s[8:9]1587; GFX900-NEXT: ;;#ASMEND1588; GFX900-NEXT: s_setpc_b64 s[30:31]1589;1590; GFX90A-LABEL: s_shuffle_v2f32_v2f32__0_2:1591; GFX90A: ; %bb.0:1592; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1593; GFX90A-NEXT: ;;#ASMSTART1594; GFX90A-NEXT: ; def s[8:9]1595; GFX90A-NEXT: ;;#ASMEND1596; GFX90A-NEXT: ;;#ASMSTART1597; GFX90A-NEXT: ; use s[8:9]1598; GFX90A-NEXT: ;;#ASMEND1599; GFX90A-NEXT: s_setpc_b64 s[30:31]1600;1601; GFX942-LABEL: s_shuffle_v2f32_v2f32__0_2:1602; GFX942: ; %bb.0:1603; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1604; GFX942-NEXT: ;;#ASMSTART1605; GFX942-NEXT: ; def s[8:9]1606; GFX942-NEXT: ;;#ASMEND1607; GFX942-NEXT: s_nop 01608; GFX942-NEXT: ;;#ASMSTART1609; GFX942-NEXT: ; use s[8:9]1610; GFX942-NEXT: ;;#ASMEND1611; GFX942-NEXT: s_setpc_b64 s[30:31]1612 %vec0 = call <2 x float> asm "; def $0", "=s"()1613 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 0, i32 2>1614 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1615 ret void1616}1617 1618define void @s_shuffle_v2f32_v2f32__1_2() {1619; GFX900-LABEL: s_shuffle_v2f32_v2f32__1_2:1620; GFX900: ; %bb.0:1621; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-NEXT: ;;#ASMSTART1623; GFX900-NEXT: ; def s[4:5]1624; GFX900-NEXT: ;;#ASMEND1625; GFX900-NEXT: s_mov_b32 s8, s51626; GFX900-NEXT: ;;#ASMSTART1627; GFX900-NEXT: ; use s[8:9]1628; GFX900-NEXT: ;;#ASMEND1629; GFX900-NEXT: s_setpc_b64 s[30:31]1630;1631; GFX90A-LABEL: s_shuffle_v2f32_v2f32__1_2:1632; GFX90A: ; %bb.0:1633; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX90A-NEXT: ;;#ASMSTART1635; GFX90A-NEXT: ; def s[4:5]1636; GFX90A-NEXT: ;;#ASMEND1637; GFX90A-NEXT: s_mov_b32 s8, s51638; GFX90A-NEXT: ;;#ASMSTART1639; GFX90A-NEXT: ; use s[8:9]1640; GFX90A-NEXT: ;;#ASMEND1641; GFX90A-NEXT: s_setpc_b64 s[30:31]1642;1643; GFX942-LABEL: s_shuffle_v2f32_v2f32__1_2:1644; GFX942: ; %bb.0:1645; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1646; GFX942-NEXT: ;;#ASMSTART1647; GFX942-NEXT: ; def s[0:1]1648; GFX942-NEXT: ;;#ASMEND1649; GFX942-NEXT: s_mov_b32 s8, s11650; GFX942-NEXT: ;;#ASMSTART1651; GFX942-NEXT: ; use s[8:9]1652; GFX942-NEXT: ;;#ASMEND1653; GFX942-NEXT: s_setpc_b64 s[30:31]1654 %vec0 = call <2 x float> asm "; def $0", "=s"()1655 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 1, i32 2>1656 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1657 ret void1658}1659 1660define void @s_shuffle_v2f32_v2f32__2_2() {1661; GFX9-LABEL: s_shuffle_v2f32_v2f32__2_2:1662; GFX9: ; %bb.0:1663; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX9-NEXT: ;;#ASMSTART1665; GFX9-NEXT: ; use s[8:9]1666; GFX9-NEXT: ;;#ASMEND1667; GFX9-NEXT: s_setpc_b64 s[30:31]1668 %vec0 = call <2 x float> asm "; def $0", "=s"()1669 %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <2 x i32> <i32 2, i32 2>1670 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1671 ret void1672}1673 1674define void @s_shuffle_v2f32_v2f32__u_3() {1675; GFX900-LABEL: s_shuffle_v2f32_v2f32__u_3:1676; GFX900: ; %bb.0:1677; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1678; GFX900-NEXT: ;;#ASMSTART1679; GFX900-NEXT: ; def s[8:9]1680; GFX900-NEXT: ;;#ASMEND1681; GFX900-NEXT: ;;#ASMSTART1682; GFX900-NEXT: ; use s[8:9]1683; GFX900-NEXT: ;;#ASMEND1684; GFX900-NEXT: s_setpc_b64 s[30:31]1685;1686; GFX90A-LABEL: s_shuffle_v2f32_v2f32__u_3:1687; GFX90A: ; %bb.0:1688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1689; GFX90A-NEXT: ;;#ASMSTART1690; GFX90A-NEXT: ; def s[8:9]1691; GFX90A-NEXT: ;;#ASMEND1692; GFX90A-NEXT: ;;#ASMSTART1693; GFX90A-NEXT: ; use s[8:9]1694; GFX90A-NEXT: ;;#ASMEND1695; GFX90A-NEXT: s_setpc_b64 s[30:31]1696;1697; GFX942-LABEL: s_shuffle_v2f32_v2f32__u_3:1698; GFX942: ; %bb.0:1699; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1700; GFX942-NEXT: ;;#ASMSTART1701; GFX942-NEXT: ; def s[8:9]1702; GFX942-NEXT: ;;#ASMEND1703; GFX942-NEXT: s_nop 01704; GFX942-NEXT: ;;#ASMSTART1705; GFX942-NEXT: ; use s[8:9]1706; GFX942-NEXT: ;;#ASMEND1707; GFX942-NEXT: s_setpc_b64 s[30:31]1708 %vec0 = call <2 x float> asm "; def $0", "=s"()1709 %vec1 = call <2 x float> asm "; def $0", "=s"()1710 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 poison, i32 3>1711 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1712 ret void1713}1714 1715define void @s_shuffle_v2f32_v2f32__0_3() {1716; GFX900-LABEL: s_shuffle_v2f32_v2f32__0_3:1717; GFX900: ; %bb.0:1718; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1719; GFX900-NEXT: ;;#ASMSTART1720; GFX900-NEXT: ; def s[8:9]1721; GFX900-NEXT: ;;#ASMEND1722; GFX900-NEXT: ;;#ASMSTART1723; GFX900-NEXT: ; def s[4:5]1724; GFX900-NEXT: ;;#ASMEND1725; GFX900-NEXT: s_mov_b32 s9, s51726; GFX900-NEXT: ;;#ASMSTART1727; GFX900-NEXT: ; use s[8:9]1728; GFX900-NEXT: ;;#ASMEND1729; GFX900-NEXT: s_setpc_b64 s[30:31]1730;1731; GFX90A-LABEL: s_shuffle_v2f32_v2f32__0_3:1732; GFX90A: ; %bb.0:1733; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1734; GFX90A-NEXT: ;;#ASMSTART1735; GFX90A-NEXT: ; def s[8:9]1736; GFX90A-NEXT: ;;#ASMEND1737; GFX90A-NEXT: ;;#ASMSTART1738; GFX90A-NEXT: ; def s[4:5]1739; GFX90A-NEXT: ;;#ASMEND1740; GFX90A-NEXT: s_mov_b32 s9, s51741; GFX90A-NEXT: ;;#ASMSTART1742; GFX90A-NEXT: ; use s[8:9]1743; GFX90A-NEXT: ;;#ASMEND1744; GFX90A-NEXT: s_setpc_b64 s[30:31]1745;1746; GFX942-LABEL: s_shuffle_v2f32_v2f32__0_3:1747; GFX942: ; %bb.0:1748; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1749; GFX942-NEXT: ;;#ASMSTART1750; GFX942-NEXT: ; def s[8:9]1751; GFX942-NEXT: ;;#ASMEND1752; GFX942-NEXT: ;;#ASMSTART1753; GFX942-NEXT: ; def s[0:1]1754; GFX942-NEXT: ;;#ASMEND1755; GFX942-NEXT: s_mov_b32 s9, s11756; GFX942-NEXT: ;;#ASMSTART1757; GFX942-NEXT: ; use s[8:9]1758; GFX942-NEXT: ;;#ASMEND1759; GFX942-NEXT: s_setpc_b64 s[30:31]1760 %vec0 = call <2 x float> asm "; def $0", "=s"()1761 %vec1 = call <2 x float> asm "; def $0", "=s"()1762 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 0, i32 3>1763 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1764 ret void1765}1766 1767define void @s_shuffle_v2f32_v2f32__1_3() {1768; GFX900-LABEL: s_shuffle_v2f32_v2f32__1_3:1769; GFX900: ; %bb.0:1770; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1771; GFX900-NEXT: ;;#ASMSTART1772; GFX900-NEXT: ; def s[8:9]1773; GFX900-NEXT: ;;#ASMEND1774; GFX900-NEXT: ;;#ASMSTART1775; GFX900-NEXT: ; def s[4:5]1776; GFX900-NEXT: ;;#ASMEND1777; GFX900-NEXT: s_mov_b32 s8, s51778; GFX900-NEXT: ;;#ASMSTART1779; GFX900-NEXT: ; use s[8:9]1780; GFX900-NEXT: ;;#ASMEND1781; GFX900-NEXT: s_setpc_b64 s[30:31]1782;1783; GFX90A-LABEL: s_shuffle_v2f32_v2f32__1_3:1784; GFX90A: ; %bb.0:1785; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1786; GFX90A-NEXT: ;;#ASMSTART1787; GFX90A-NEXT: ; def s[8:9]1788; GFX90A-NEXT: ;;#ASMEND1789; GFX90A-NEXT: ;;#ASMSTART1790; GFX90A-NEXT: ; def s[4:5]1791; GFX90A-NEXT: ;;#ASMEND1792; GFX90A-NEXT: s_mov_b32 s8, s51793; GFX90A-NEXT: ;;#ASMSTART1794; GFX90A-NEXT: ; use s[8:9]1795; GFX90A-NEXT: ;;#ASMEND1796; GFX90A-NEXT: s_setpc_b64 s[30:31]1797;1798; GFX942-LABEL: s_shuffle_v2f32_v2f32__1_3:1799; GFX942: ; %bb.0:1800; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1801; GFX942-NEXT: ;;#ASMSTART1802; GFX942-NEXT: ; def s[8:9]1803; GFX942-NEXT: ;;#ASMEND1804; GFX942-NEXT: ;;#ASMSTART1805; GFX942-NEXT: ; def s[0:1]1806; GFX942-NEXT: ;;#ASMEND1807; GFX942-NEXT: s_mov_b32 s8, s11808; GFX942-NEXT: ;;#ASMSTART1809; GFX942-NEXT: ; use s[8:9]1810; GFX942-NEXT: ;;#ASMEND1811; GFX942-NEXT: s_setpc_b64 s[30:31]1812 %vec0 = call <2 x float> asm "; def $0", "=s"()1813 %vec1 = call <2 x float> asm "; def $0", "=s"()1814 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 1, i32 3>1815 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1816 ret void1817}1818 1819define void @s_shuffle_v2f32_v2f32__2_3() {1820; GFX900-LABEL: s_shuffle_v2f32_v2f32__2_3:1821; GFX900: ; %bb.0:1822; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1823; GFX900-NEXT: ;;#ASMSTART1824; GFX900-NEXT: ; def s[8:9]1825; GFX900-NEXT: ;;#ASMEND1826; GFX900-NEXT: ;;#ASMSTART1827; GFX900-NEXT: ; use s[8:9]1828; GFX900-NEXT: ;;#ASMEND1829; GFX900-NEXT: s_setpc_b64 s[30:31]1830;1831; GFX90A-LABEL: s_shuffle_v2f32_v2f32__2_3:1832; GFX90A: ; %bb.0:1833; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1834; GFX90A-NEXT: ;;#ASMSTART1835; GFX90A-NEXT: ; def s[8:9]1836; GFX90A-NEXT: ;;#ASMEND1837; GFX90A-NEXT: ;;#ASMSTART1838; GFX90A-NEXT: ; use s[8:9]1839; GFX90A-NEXT: ;;#ASMEND1840; GFX90A-NEXT: s_setpc_b64 s[30:31]1841;1842; GFX942-LABEL: s_shuffle_v2f32_v2f32__2_3:1843; GFX942: ; %bb.0:1844; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1845; GFX942-NEXT: ;;#ASMSTART1846; GFX942-NEXT: ; def s[8:9]1847; GFX942-NEXT: ;;#ASMEND1848; GFX942-NEXT: s_nop 01849; GFX942-NEXT: ;;#ASMSTART1850; GFX942-NEXT: ; use s[8:9]1851; GFX942-NEXT: ;;#ASMEND1852; GFX942-NEXT: s_setpc_b64 s[30:31]1853 %vec0 = call <2 x float> asm "; def $0", "=s"()1854 %vec1 = call <2 x float> asm "; def $0", "=s"()1855 %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <2 x i32> <i32 2, i32 3>1856 call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x float> %shuf)1857 ret void1858}1859;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1860; GFX90APLUS: {{.*}}1861