6114 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX942 %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s6; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s7 8define <4 x half> @shuffle_v4f16_23uu(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {9; GFX9-LABEL: shuffle_v4f16_23uu:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:413; GFX9-NEXT: s_waitcnt vmcnt(0)14; GFX9-NEXT: s_setpc_b64 s[30:31]15;16; GFX10-LABEL: shuffle_v4f16_23uu:17; GFX10: ; %bb.0:18; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)19; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:420; GFX10-NEXT: s_waitcnt vmcnt(0)21; GFX10-NEXT: s_setpc_b64 s[30:31]22;23; GFX11-LABEL: shuffle_v4f16_23uu:24; GFX11: ; %bb.0:25; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)26; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:427; GFX11-NEXT: s_waitcnt vmcnt(0)28; GFX11-NEXT: s_setpc_b64 s[30:31]29 %val0 = load <4 x half>, ptr addrspace(1) %arg030 %val1 = load <4 x half>, ptr addrspace(1) %arg131 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 poison, i32 poison>32 ret <4 x half> %shuffle33}34 35define <4 x half> @shuffle_v4f16_234u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {36; GX900-LABEL: shuffle_v4f16_234u:37; GX900: ; %bb.0:38; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)39; GX900-NEXT: global_load_dword v6, v[0:1], off offset:440; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off41; GX900-NEXT: s_waitcnt vmcnt(1)42; GX900-NEXT: v_mov_b32_e32 v0, v643; GX900-NEXT: s_waitcnt vmcnt(0)44; GX900-NEXT: v_mov_b32_e32 v1, v445; GX900-NEXT: s_setpc_b64 s[30:31]46;47; GFX942-LABEL: shuffle_v4f16_234u:48; GFX942: ; %bb.0:49; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)50; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:451; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off52; GFX942-NEXT: s_waitcnt vmcnt(1)53; GFX942-NEXT: v_mov_b32_e32 v0, v454; GFX942-NEXT: s_waitcnt vmcnt(0)55; GFX942-NEXT: v_mov_b32_e32 v1, v656; GFX942-NEXT: s_setpc_b64 s[30:31]57;58; GFX10-LABEL: shuffle_v4f16_234u:59; GFX10: ; %bb.0:60; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:462; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off63; GFX10-NEXT: s_waitcnt vmcnt(1)64; GFX10-NEXT: v_mov_b32_e32 v0, v665; GFX10-NEXT: s_waitcnt vmcnt(0)66; GFX10-NEXT: v_mov_b32_e32 v1, v467; GFX10-NEXT: s_setpc_b64 s[30:31]68;69; GFX11-LABEL: shuffle_v4f16_234u:70; GFX11: ; %bb.0:71; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:473; GFX11-NEXT: global_load_b64 v[1:2], v[2:3], off74; GFX11-NEXT: s_waitcnt vmcnt(0)75; GFX11-NEXT: s_setpc_b64 s[30:31]76 %val0 = load <4 x half>, ptr addrspace(1) %arg077 %val1 = load <4 x half>, ptr addrspace(1) %arg178 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 4, i32 poison>79 ret <4 x half> %shuffle80}81 82define <4 x half> @shuffle_v4f16_u1u3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {83; GFX9-LABEL: shuffle_v4f16_u1u3:84; GFX9: ; %bb.0:85; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)86; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off87; GFX9-NEXT: s_waitcnt vmcnt(0)88; GFX9-NEXT: s_setpc_b64 s[30:31]89;90; GFX10-LABEL: shuffle_v4f16_u1u3:91; GFX10: ; %bb.0:92; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)93; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off94; GFX10-NEXT: s_waitcnt vmcnt(0)95; GFX10-NEXT: s_setpc_b64 s[30:31]96;97; GFX11-LABEL: shuffle_v4f16_u1u3:98; GFX11: ; %bb.0:99; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off101; GFX11-NEXT: s_waitcnt vmcnt(0)102; GFX11-NEXT: s_setpc_b64 s[30:31]103 %val0 = load <4 x half>, ptr addrspace(1) %arg0104 %val1 = load <4 x half>, ptr addrspace(1) %arg1105 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 poison, i32 1, i32 poison, i32 3>106 ret <4 x half> %shuffle107}108 109define <4 x half> @shuffle_v4f16_u3u1(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {110; GX900-LABEL: shuffle_v4f16_u3u1:111; GX900: ; %bb.0:112; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off114; GX900-NEXT: s_waitcnt vmcnt(0)115; GX900-NEXT: v_mov_b32_e32 v0, v2116; GX900-NEXT: s_setpc_b64 s[30:31]117;118; GFX942-LABEL: shuffle_v4f16_u3u1:119; GFX942: ; %bb.0:120; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)121; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off122; GFX942-NEXT: s_waitcnt vmcnt(0)123; GFX942-NEXT: v_mov_b32_e32 v0, v3124; GFX942-NEXT: v_mov_b32_e32 v1, v2125; GFX942-NEXT: s_setpc_b64 s[30:31]126;127; GFX10-LABEL: shuffle_v4f16_u3u1:128; GFX10: ; %bb.0:129; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)130; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off131; GFX10-NEXT: s_waitcnt vmcnt(0)132; GFX10-NEXT: v_mov_b32_e32 v0, v2133; GFX10-NEXT: s_setpc_b64 s[30:31]134;135; GFX11-LABEL: shuffle_v4f16_u3u1:136; GFX11: ; %bb.0:137; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX11-NEXT: global_load_b64 v[1:2], v[0:1], off139; GFX11-NEXT: s_waitcnt vmcnt(0)140; GFX11-NEXT: v_mov_b32_e32 v0, v2141; GFX11-NEXT: s_setpc_b64 s[30:31]142 %val0 = load <4 x half>, ptr addrspace(1) %arg0143 %val1 = load <4 x half>, ptr addrspace(1) %arg1144 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 poison, i32 3, i32 poison, i32 1>145 ret <4 x half> %shuffle146}147 148define <4 x half> @shuffle_v4f16_u3uu(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {149; GFX9-LABEL: shuffle_v4f16_u3uu:150; GFX9: ; %bb.0:151; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:4153; GFX9-NEXT: s_waitcnt vmcnt(0)154; GFX9-NEXT: s_setpc_b64 s[30:31]155;156; GFX10-LABEL: shuffle_v4f16_u3uu:157; GFX10: ; %bb.0:158; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)159; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:4160; GFX10-NEXT: s_waitcnt vmcnt(0)161; GFX10-NEXT: s_setpc_b64 s[30:31]162;163; GFX11-LABEL: shuffle_v4f16_u3uu:164; GFX11: ; %bb.0:165; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:4167; GFX11-NEXT: s_waitcnt vmcnt(0)168; GFX11-NEXT: s_setpc_b64 s[30:31]169 %val0 = load <4 x half>, ptr addrspace(1) %arg0170 %val1 = load <4 x half>, ptr addrspace(1) %arg1171 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 poison, i32 3, i32 poison, i32 poison>172 ret <4 x half> %shuffle173}174 175define <4 x half> @shuffle_v4f16_3u6u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {176; GX900-LABEL: shuffle_v4f16_3u6u:177; GX900: ; %bb.0:178; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)179; GX900-NEXT: global_load_dword v5, v[0:1], off offset:4180; GX900-NEXT: global_load_dword v4, v[2:3], off offset:4181; GX900-NEXT: s_waitcnt vmcnt(1)182; GX900-NEXT: v_alignbit_b32 v0, s4, v5, 16183; GX900-NEXT: s_waitcnt vmcnt(0)184; GX900-NEXT: v_mov_b32_e32 v1, v4185; GX900-NEXT: s_setpc_b64 s[30:31]186;187; GFX942-LABEL: shuffle_v4f16_3u6u:188; GFX942: ; %bb.0:189; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)190; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:4191; GFX942-NEXT: global_load_dword v4, v[2:3], off offset:4192; GFX942-NEXT: s_waitcnt vmcnt(1)193; GFX942-NEXT: v_alignbit_b32 v0, s0, v5, 16194; GFX942-NEXT: s_waitcnt vmcnt(0)195; GFX942-NEXT: v_mov_b32_e32 v1, v4196; GFX942-NEXT: s_setpc_b64 s[30:31]197;198; GFX10-LABEL: shuffle_v4f16_3u6u:199; GFX10: ; %bb.0:200; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)201; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:4202; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:4203; GFX10-NEXT: s_waitcnt vmcnt(1)204; GFX10-NEXT: v_alignbit_b32 v0, s4, v5, 16205; GFX10-NEXT: s_waitcnt vmcnt(0)206; GFX10-NEXT: v_mov_b32_e32 v1, v4207; GFX10-NEXT: s_setpc_b64 s[30:31]208;209; GFX11-TRUE16-LABEL: shuffle_v4f16_3u6u:210; GFX11-TRUE16: ; %bb.0:211; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)212; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:4213; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off offset:4214; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)215; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h216; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)217; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]218;219; GFX11-FAKE16-LABEL: shuffle_v4f16_3u6u:220; GFX11-FAKE16: ; %bb.0:221; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)222; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:4223; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:4224; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)225; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, s0, v0, 16226; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)227; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]228 %val0 = load <4 x half>, ptr addrspace(1) %arg0229 %val1 = load <4 x half>, ptr addrspace(1) %arg1230 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 3, i32 poison, i32 6, i32 poison>231 ret <4 x half> %shuffle232}233 234define <4 x half> @shuffle_v4f16_3uu7(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {235; GX900-LABEL: shuffle_v4f16_3uu7:236; GX900: ; %bb.0:237; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GX900-NEXT: global_load_dword v5, v[0:1], off offset:4239; GX900-NEXT: global_load_dword v4, v[2:3], off offset:4240; GX900-NEXT: s_waitcnt vmcnt(1)241; GX900-NEXT: v_alignbit_b32 v0, s4, v5, 16242; GX900-NEXT: s_waitcnt vmcnt(0)243; GX900-NEXT: v_mov_b32_e32 v1, v4244; GX900-NEXT: s_setpc_b64 s[30:31]245;246; GFX942-LABEL: shuffle_v4f16_3uu7:247; GFX942: ; %bb.0:248; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:4250; GFX942-NEXT: global_load_dword v4, v[2:3], off offset:4251; GFX942-NEXT: s_waitcnt vmcnt(1)252; GFX942-NEXT: v_alignbit_b32 v0, s0, v5, 16253; GFX942-NEXT: s_waitcnt vmcnt(0)254; GFX942-NEXT: v_mov_b32_e32 v1, v4255; GFX942-NEXT: s_setpc_b64 s[30:31]256;257; GFX10-LABEL: shuffle_v4f16_3uu7:258; GFX10: ; %bb.0:259; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:4261; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:4262; GFX10-NEXT: s_waitcnt vmcnt(1)263; GFX10-NEXT: v_alignbit_b32 v0, s4, v5, 16264; GFX10-NEXT: s_waitcnt vmcnt(0)265; GFX10-NEXT: v_mov_b32_e32 v1, v4266; GFX10-NEXT: s_setpc_b64 s[30:31]267;268; GFX11-TRUE16-LABEL: shuffle_v4f16_3uu7:269; GFX11-TRUE16: ; %bb.0:270; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)271; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:4272; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off offset:4273; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)274; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h275; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)276; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]277;278; GFX11-FAKE16-LABEL: shuffle_v4f16_3uu7:279; GFX11-FAKE16: ; %bb.0:280; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)281; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:4282; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:4283; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)284; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, s0, v0, 16285; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)286; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]287 %val0 = load <4 x half>, ptr addrspace(1) %arg0288 %val1 = load <4 x half>, ptr addrspace(1) %arg1289 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 7>290 ret <4 x half> %shuffle291}292 293define <4 x half> @shuffle_v4f16_35u5(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {294; GX900-LABEL: shuffle_v4f16_35u5:295; GX900: ; %bb.0:296; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GX900-NEXT: global_load_dword v5, v[0:1], off offset:4298; GX900-NEXT: global_load_dword v4, v[2:3], off299; GX900-NEXT: s_mov_b32 s4, 0x7060302300; GX900-NEXT: s_waitcnt vmcnt(0)301; GX900-NEXT: v_perm_b32 v0, v4, v5, s4302; GX900-NEXT: v_mov_b32_e32 v1, v4303; GX900-NEXT: s_setpc_b64 s[30:31]304;305; GFX942-LABEL: shuffle_v4f16_35u5:306; GFX942: ; %bb.0:307; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)308; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:4309; GFX942-NEXT: global_load_dword v4, v[2:3], off310; GFX942-NEXT: s_mov_b32 s0, 0x7060302311; GFX942-NEXT: s_waitcnt vmcnt(0)312; GFX942-NEXT: v_perm_b32 v0, v4, v5, s0313; GFX942-NEXT: v_mov_b32_e32 v1, v4314; GFX942-NEXT: s_setpc_b64 s[30:31]315;316; GFX10-LABEL: shuffle_v4f16_35u5:317; GFX10: ; %bb.0:318; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)319; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:4320; GFX10-NEXT: global_load_dword v4, v[2:3], off321; GFX10-NEXT: s_waitcnt vmcnt(0)322; GFX10-NEXT: v_perm_b32 v0, v4, v5, 0x7060302323; GFX10-NEXT: v_mov_b32_e32 v1, v4324; GFX10-NEXT: s_setpc_b64 s[30:31]325;326; GFX11-TRUE16-LABEL: shuffle_v4f16_35u5:327; GFX11-TRUE16: ; %bb.0:328; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)329; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:4330; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off331; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)332; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h333; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)334; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.h335; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]336;337; GFX11-FAKE16-LABEL: shuffle_v4f16_35u5:338; GFX11-FAKE16: ; %bb.0:339; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)340; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:4341; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off342; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)343; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x7060302344; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]345 %val0 = load <4 x half>, ptr addrspace(1) %arg0346 %val1 = load <4 x half>, ptr addrspace(1) %arg1347 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 3, i32 5, i32 poison, i32 5>348 ret <4 x half> %shuffle349}350 351define <4 x half> @shuffle_v4f16_357u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {352; GX900-LABEL: shuffle_v4f16_357u:353; GX900: ; %bb.0:354; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off356; GX900-NEXT: global_load_dword v6, v[0:1], off offset:4357; GX900-NEXT: s_mov_b32 s4, 0x7060302358; GX900-NEXT: s_waitcnt vmcnt(1)359; GX900-NEXT: v_alignbit_b32 v1, s4, v5, 16360; GX900-NEXT: s_waitcnt vmcnt(0)361; GX900-NEXT: v_perm_b32 v0, v4, v6, s4362; GX900-NEXT: s_setpc_b64 s[30:31]363;364; GFX942-LABEL: shuffle_v4f16_357u:365; GFX942: ; %bb.0:366; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX942-NEXT: global_load_dwordx2 v[4:5], v[2:3], off368; GFX942-NEXT: global_load_dword v6, v[0:1], off offset:4369; GFX942-NEXT: s_mov_b32 s0, 0x7060302370; GFX942-NEXT: s_waitcnt vmcnt(1)371; GFX942-NEXT: v_alignbit_b32 v1, s0, v5, 16372; GFX942-NEXT: s_waitcnt vmcnt(0)373; GFX942-NEXT: v_perm_b32 v0, v4, v6, s0374; GFX942-NEXT: s_setpc_b64 s[30:31]375;376; GFX10-LABEL: shuffle_v4f16_357u:377; GFX10: ; %bb.0:378; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)379; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off380; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:4381; GFX10-NEXT: s_waitcnt vmcnt(1)382; GFX10-NEXT: v_alignbit_b32 v1, s4, v5, 16383; GFX10-NEXT: s_waitcnt vmcnt(0)384; GFX10-NEXT: v_perm_b32 v0, v4, v6, 0x7060302385; GFX10-NEXT: s_setpc_b64 s[30:31]386;387; GFX11-TRUE16-LABEL: shuffle_v4f16_357u:388; GFX11-TRUE16: ; %bb.0:389; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX11-TRUE16-NEXT: global_load_b32 v4, v[0:1], off offset:4391; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[2:3], off392; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)393; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v4.h394; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v1.h395; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]396;397; GFX11-FAKE16-LABEL: shuffle_v4f16_357u:398; GFX11-FAKE16: ; %bb.0:399; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)400; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off401; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:4402; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)403; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, s0, v3, 16404; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)405; GFX11-FAKE16-NEXT: v_perm_b32 v0, v2, v0, 0x7060302406; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]407 %val0 = load <4 x half>, ptr addrspace(1) %arg0408 %val1 = load <4 x half>, ptr addrspace(1) %arg1409 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 3, i32 5, i32 7, i32 poison>410 ret <4 x half> %shuffle411}412 413define <4 x half> @shuffle_v4f16_0101(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {414; GFX9-LABEL: shuffle_v4f16_0101:415; GFX9: ; %bb.0:416; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)417; GFX9-NEXT: global_load_dword v0, v[0:1], off418; GFX9-NEXT: s_waitcnt vmcnt(0)419; GFX9-NEXT: v_mov_b32_e32 v1, v0420; GFX9-NEXT: s_setpc_b64 s[30:31]421;422; GFX10-LABEL: shuffle_v4f16_0101:423; GFX10: ; %bb.0:424; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)425; GFX10-NEXT: global_load_dword v0, v[0:1], off426; GFX10-NEXT: s_waitcnt vmcnt(0)427; GFX10-NEXT: v_mov_b32_e32 v1, v0428; GFX10-NEXT: s_setpc_b64 s[30:31]429;430; GFX11-LABEL: shuffle_v4f16_0101:431; GFX11: ; %bb.0:432; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)433; GFX11-NEXT: global_load_b32 v0, v[0:1], off434; GFX11-NEXT: s_waitcnt vmcnt(0)435; GFX11-NEXT: v_mov_b32_e32 v1, v0436; GFX11-NEXT: s_setpc_b64 s[30:31]437 %val0 = load <4 x half>, ptr addrspace(1) %arg0438 %val1 = load <4 x half>, ptr addrspace(1) %arg1439 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 0, i32 1, i32 0, i32 1>440 ret <4 x half> %shuffle441}442 443define <4 x half> @shuffle_v4f16_0123(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {444; GFX9-LABEL: shuffle_v4f16_0123:445; GFX9: ; %bb.0:446; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)447; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off448; GFX9-NEXT: s_waitcnt vmcnt(0)449; GFX9-NEXT: s_setpc_b64 s[30:31]450;451; GFX10-LABEL: shuffle_v4f16_0123:452; GFX10: ; %bb.0:453; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off455; GFX10-NEXT: s_waitcnt vmcnt(0)456; GFX10-NEXT: s_setpc_b64 s[30:31]457;458; GFX11-LABEL: shuffle_v4f16_0123:459; GFX11: ; %bb.0:460; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off462; GFX11-NEXT: s_waitcnt vmcnt(0)463; GFX11-NEXT: s_setpc_b64 s[30:31]464 %val0 = load <4 x half>, ptr addrspace(1) %arg0465 %val1 = load <4 x half>, ptr addrspace(1) %arg1466 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>467 ret <4 x half> %shuffle468}469 470define <4 x half> @shuffle_v4f16_0145(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {471; GFX9-LABEL: shuffle_v4f16_0145:472; GFX9: ; %bb.0:473; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)474; GFX9-NEXT: global_load_dword v4, v[0:1], off475; GFX9-NEXT: global_load_dword v5, v[2:3], off476; GFX9-NEXT: s_waitcnt vmcnt(1)477; GFX9-NEXT: v_mov_b32_e32 v0, v4478; GFX9-NEXT: s_waitcnt vmcnt(0)479; GFX9-NEXT: v_mov_b32_e32 v1, v5480; GFX9-NEXT: s_setpc_b64 s[30:31]481;482; GFX10-LABEL: shuffle_v4f16_0145:483; GFX10: ; %bb.0:484; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)485; GFX10-NEXT: global_load_dword v4, v[0:1], off486; GFX10-NEXT: global_load_dword v5, v[2:3], off487; GFX10-NEXT: s_waitcnt vmcnt(1)488; GFX10-NEXT: v_mov_b32_e32 v0, v4489; GFX10-NEXT: s_waitcnt vmcnt(0)490; GFX10-NEXT: v_mov_b32_e32 v1, v5491; GFX10-NEXT: s_setpc_b64 s[30:31]492;493; GFX11-LABEL: shuffle_v4f16_0145:494; GFX11: ; %bb.0:495; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX11-NEXT: global_load_b32 v0, v[0:1], off497; GFX11-NEXT: global_load_b32 v1, v[2:3], off498; GFX11-NEXT: s_waitcnt vmcnt(0)499; GFX11-NEXT: s_setpc_b64 s[30:31]500 %val0 = load <4 x half>, ptr addrspace(1) %arg0501 %val1 = load <4 x half>, ptr addrspace(1) %arg1502 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>503 ret <4 x half> %shuffle504}505 506define <4 x half> @shuffle_v4f16_0167(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {507; GFX9-LABEL: shuffle_v4f16_0167:508; GFX9: ; %bb.0:509; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)510; GFX9-NEXT: global_load_dword v4, v[0:1], off511; GFX9-NEXT: global_load_dword v5, v[2:3], off offset:4512; GFX9-NEXT: s_waitcnt vmcnt(1)513; GFX9-NEXT: v_mov_b32_e32 v0, v4514; GFX9-NEXT: s_waitcnt vmcnt(0)515; GFX9-NEXT: v_mov_b32_e32 v1, v5516; GFX9-NEXT: s_setpc_b64 s[30:31]517;518; GFX10-LABEL: shuffle_v4f16_0167:519; GFX10: ; %bb.0:520; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)521; GFX10-NEXT: global_load_dword v4, v[0:1], off522; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:4523; GFX10-NEXT: s_waitcnt vmcnt(1)524; GFX10-NEXT: v_mov_b32_e32 v0, v4525; GFX10-NEXT: s_waitcnt vmcnt(0)526; GFX10-NEXT: v_mov_b32_e32 v1, v5527; GFX10-NEXT: s_setpc_b64 s[30:31]528;529; GFX11-LABEL: shuffle_v4f16_0167:530; GFX11: ; %bb.0:531; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)532; GFX11-NEXT: global_load_b32 v0, v[0:1], off533; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:4534; GFX11-NEXT: s_waitcnt vmcnt(0)535; GFX11-NEXT: s_setpc_b64 s[30:31]536 %val0 = load <4 x half>, ptr addrspace(1) %arg0537 %val1 = load <4 x half>, ptr addrspace(1) %arg1538 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 0, i32 1, i32 6, i32 7>539 ret <4 x half> %shuffle540}541 542define <4 x half> @shuffle_v4f16_2301(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {543; GX900-LABEL: shuffle_v4f16_2301:544; GX900: ; %bb.0:545; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)546; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off547; GX900-NEXT: s_waitcnt vmcnt(0)548; GX900-NEXT: v_mov_b32_e32 v0, v2549; GX900-NEXT: s_setpc_b64 s[30:31]550;551; GFX942-LABEL: shuffle_v4f16_2301:552; GFX942: ; %bb.0:553; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)554; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off555; GFX942-NEXT: s_waitcnt vmcnt(0)556; GFX942-NEXT: v_mov_b32_e32 v0, v3557; GFX942-NEXT: v_mov_b32_e32 v1, v2558; GFX942-NEXT: s_setpc_b64 s[30:31]559;560; GFX10-LABEL: shuffle_v4f16_2301:561; GFX10: ; %bb.0:562; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off564; GFX10-NEXT: s_waitcnt vmcnt(0)565; GFX10-NEXT: v_mov_b32_e32 v0, v2566; GFX10-NEXT: s_setpc_b64 s[30:31]567;568; GFX11-LABEL: shuffle_v4f16_2301:569; GFX11: ; %bb.0:570; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)571; GFX11-NEXT: global_load_b64 v[1:2], v[0:1], off572; GFX11-NEXT: s_waitcnt vmcnt(0)573; GFX11-NEXT: v_mov_b32_e32 v0, v2574; GFX11-NEXT: s_setpc_b64 s[30:31]575 %val0 = load <4 x half>, ptr addrspace(1) %arg0576 %val1 = load <4 x half>, ptr addrspace(1) %arg1577 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 0, i32 1>578 ret <4 x half> %shuffle579}580 581define <4 x half> @shuffle_v4f16_2323(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {582; GFX9-LABEL: shuffle_v4f16_2323:583; GFX9: ; %bb.0:584; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)585; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:4586; GFX9-NEXT: s_waitcnt vmcnt(0)587; GFX9-NEXT: v_mov_b32_e32 v1, v0588; GFX9-NEXT: s_setpc_b64 s[30:31]589;590; GFX10-LABEL: shuffle_v4f16_2323:591; GFX10: ; %bb.0:592; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)593; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:4594; GFX10-NEXT: s_waitcnt vmcnt(0)595; GFX10-NEXT: v_mov_b32_e32 v1, v0596; GFX10-NEXT: s_setpc_b64 s[30:31]597;598; GFX11-LABEL: shuffle_v4f16_2323:599; GFX11: ; %bb.0:600; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)601; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:4602; GFX11-NEXT: s_waitcnt vmcnt(0)603; GFX11-NEXT: v_mov_b32_e32 v1, v0604; GFX11-NEXT: s_setpc_b64 s[30:31]605 %val0 = load <4 x half>, ptr addrspace(1) %arg0606 %val1 = load <4 x half>, ptr addrspace(1) %arg1607 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 2, i32 3>608 ret <4 x half> %shuffle609}610 611define <4 x half> @shuffle_v4f16_2345(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {612; GFX9-LABEL: shuffle_v4f16_2345:613; GFX9: ; %bb.0:614; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)615; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:4616; GFX9-NEXT: global_load_dword v5, v[2:3], off617; GFX9-NEXT: s_waitcnt vmcnt(1)618; GFX9-NEXT: v_mov_b32_e32 v0, v4619; GFX9-NEXT: s_waitcnt vmcnt(0)620; GFX9-NEXT: v_mov_b32_e32 v1, v5621; GFX9-NEXT: s_setpc_b64 s[30:31]622;623; GFX10-LABEL: shuffle_v4f16_2345:624; GFX10: ; %bb.0:625; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)626; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:4627; GFX10-NEXT: global_load_dword v5, v[2:3], off628; GFX10-NEXT: s_waitcnt vmcnt(1)629; GFX10-NEXT: v_mov_b32_e32 v0, v4630; GFX10-NEXT: s_waitcnt vmcnt(0)631; GFX10-NEXT: v_mov_b32_e32 v1, v5632; GFX10-NEXT: s_setpc_b64 s[30:31]633;634; GFX11-LABEL: shuffle_v4f16_2345:635; GFX11: ; %bb.0:636; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:4638; GFX11-NEXT: global_load_b32 v1, v[2:3], off639; GFX11-NEXT: s_waitcnt vmcnt(0)640; GFX11-NEXT: s_setpc_b64 s[30:31]641 %val0 = load <4 x half>, ptr addrspace(1) %arg0642 %val1 = load <4 x half>, ptr addrspace(1) %arg1643 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 4, i32 5>644 ret <4 x half> %shuffle645}646 647define <4 x half> @shuffle_v4f16_2367(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {648; GFX9-LABEL: shuffle_v4f16_2367:649; GFX9: ; %bb.0:650; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)651; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:4652; GFX9-NEXT: global_load_dword v5, v[2:3], off offset:4653; GFX9-NEXT: s_waitcnt vmcnt(1)654; GFX9-NEXT: v_mov_b32_e32 v0, v4655; GFX9-NEXT: s_waitcnt vmcnt(0)656; GFX9-NEXT: v_mov_b32_e32 v1, v5657; GFX9-NEXT: s_setpc_b64 s[30:31]658;659; GFX10-LABEL: shuffle_v4f16_2367:660; GFX10: ; %bb.0:661; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)662; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:4663; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:4664; GFX10-NEXT: s_waitcnt vmcnt(1)665; GFX10-NEXT: v_mov_b32_e32 v0, v4666; GFX10-NEXT: s_waitcnt vmcnt(0)667; GFX10-NEXT: v_mov_b32_e32 v1, v5668; GFX10-NEXT: s_setpc_b64 s[30:31]669;670; GFX11-LABEL: shuffle_v4f16_2367:671; GFX11: ; %bb.0:672; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)673; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:4674; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:4675; GFX11-NEXT: s_waitcnt vmcnt(0)676; GFX11-NEXT: s_setpc_b64 s[30:31]677 %val0 = load <4 x half>, ptr addrspace(1) %arg0678 %val1 = load <4 x half>, ptr addrspace(1) %arg1679 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 6, i32 7>680 ret <4 x half> %shuffle681}682 683define <4 x half> @shuffle_v4f16_4501(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {684; GFX9-LABEL: shuffle_v4f16_4501:685; GFX9: ; %bb.0:686; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)687; GFX9-NEXT: global_load_dword v4, v[2:3], off688; GFX9-NEXT: global_load_dword v5, v[0:1], off689; GFX9-NEXT: s_waitcnt vmcnt(1)690; GFX9-NEXT: v_mov_b32_e32 v0, v4691; GFX9-NEXT: s_waitcnt vmcnt(0)692; GFX9-NEXT: v_mov_b32_e32 v1, v5693; GFX9-NEXT: s_setpc_b64 s[30:31]694;695; GFX10-LABEL: shuffle_v4f16_4501:696; GFX10: ; %bb.0:697; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)698; GFX10-NEXT: global_load_dword v4, v[2:3], off699; GFX10-NEXT: global_load_dword v5, v[0:1], off700; GFX10-NEXT: s_waitcnt vmcnt(1)701; GFX10-NEXT: v_mov_b32_e32 v0, v4702; GFX10-NEXT: s_waitcnt vmcnt(0)703; GFX10-NEXT: v_mov_b32_e32 v1, v5704; GFX10-NEXT: s_setpc_b64 s[30:31]705;706; GFX11-LABEL: shuffle_v4f16_4501:707; GFX11: ; %bb.0:708; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX11-NEXT: global_load_b32 v2, v[2:3], off710; GFX11-NEXT: global_load_b32 v1, v[0:1], off711; GFX11-NEXT: s_waitcnt vmcnt(1)712; GFX11-NEXT: v_mov_b32_e32 v0, v2713; GFX11-NEXT: s_waitcnt vmcnt(0)714; GFX11-NEXT: s_setpc_b64 s[30:31]715 %val0 = load <4 x half>, ptr addrspace(1) %arg0716 %val1 = load <4 x half>, ptr addrspace(1) %arg1717 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 4, i32 5, i32 0, i32 1>718 ret <4 x half> %shuffle719}720 721define <4 x half> @shuffle_v4f16_4523(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {722; GFX9-LABEL: shuffle_v4f16_4523:723; GFX9: ; %bb.0:724; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)725; GFX9-NEXT: global_load_dword v4, v[2:3], off726; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:4727; GFX9-NEXT: s_waitcnt vmcnt(1)728; GFX9-NEXT: v_mov_b32_e32 v0, v4729; GFX9-NEXT: s_waitcnt vmcnt(0)730; GFX9-NEXT: v_mov_b32_e32 v1, v5731; GFX9-NEXT: s_setpc_b64 s[30:31]732;733; GFX10-LABEL: shuffle_v4f16_4523:734; GFX10: ; %bb.0:735; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)736; GFX10-NEXT: global_load_dword v4, v[2:3], off737; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:4738; GFX10-NEXT: s_waitcnt vmcnt(1)739; GFX10-NEXT: v_mov_b32_e32 v0, v4740; GFX10-NEXT: s_waitcnt vmcnt(0)741; GFX10-NEXT: v_mov_b32_e32 v1, v5742; GFX10-NEXT: s_setpc_b64 s[30:31]743;744; GFX11-LABEL: shuffle_v4f16_4523:745; GFX11: ; %bb.0:746; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)747; GFX11-NEXT: global_load_b32 v2, v[2:3], off748; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:4749; GFX11-NEXT: s_waitcnt vmcnt(1)750; GFX11-NEXT: v_mov_b32_e32 v0, v2751; GFX11-NEXT: s_waitcnt vmcnt(0)752; GFX11-NEXT: s_setpc_b64 s[30:31]753 %val0 = load <4 x half>, ptr addrspace(1) %arg0754 %val1 = load <4 x half>, ptr addrspace(1) %arg1755 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 4, i32 5, i32 2, i32 3>756 ret <4 x half> %shuffle757}758 759define <4 x half> @shuffle_v4f16_4545(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {760; GFX9-LABEL: shuffle_v4f16_4545:761; GFX9: ; %bb.0:762; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)763; GFX9-NEXT: global_load_dword v0, v[2:3], off764; GFX9-NEXT: s_waitcnt vmcnt(0)765; GFX9-NEXT: v_mov_b32_e32 v1, v0766; GFX9-NEXT: s_setpc_b64 s[30:31]767;768; GFX10-LABEL: shuffle_v4f16_4545:769; GFX10: ; %bb.0:770; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)771; GFX10-NEXT: global_load_dword v0, v[2:3], off772; GFX10-NEXT: s_waitcnt vmcnt(0)773; GFX10-NEXT: v_mov_b32_e32 v1, v0774; GFX10-NEXT: s_setpc_b64 s[30:31]775;776; GFX11-LABEL: shuffle_v4f16_4545:777; GFX11: ; %bb.0:778; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)779; GFX11-NEXT: global_load_b32 v0, v[2:3], off780; GFX11-NEXT: s_waitcnt vmcnt(0)781; GFX11-NEXT: v_mov_b32_e32 v1, v0782; GFX11-NEXT: s_setpc_b64 s[30:31]783 %val0 = load <4 x half>, ptr addrspace(1) %arg0784 %val1 = load <4 x half>, ptr addrspace(1) %arg1785 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 4, i32 5, i32 4, i32 5>786 ret <4 x half> %shuffle787}788 789define <4 x half> @shuffle_v4f16_4567(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {790; GFX9-LABEL: shuffle_v4f16_4567:791; GFX9: ; %bb.0:792; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)793; GFX9-NEXT: global_load_dwordx2 v[0:1], v[2:3], off794; GFX9-NEXT: s_waitcnt vmcnt(0)795; GFX9-NEXT: s_setpc_b64 s[30:31]796;797; GFX10-LABEL: shuffle_v4f16_4567:798; GFX10: ; %bb.0:799; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)800; GFX10-NEXT: global_load_dwordx2 v[0:1], v[2:3], off801; GFX10-NEXT: s_waitcnt vmcnt(0)802; GFX10-NEXT: s_setpc_b64 s[30:31]803;804; GFX11-LABEL: shuffle_v4f16_4567:805; GFX11: ; %bb.0:806; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)807; GFX11-NEXT: global_load_b64 v[0:1], v[2:3], off808; GFX11-NEXT: s_waitcnt vmcnt(0)809; GFX11-NEXT: s_setpc_b64 s[30:31]810 %val0 = load <4 x half>, ptr addrspace(1) %arg0811 %val1 = load <4 x half>, ptr addrspace(1) %arg1812 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>813 ret <4 x half> %shuffle814}815 816define <4 x half> @shuffle_v4f16_6701(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {817; GFX9-LABEL: shuffle_v4f16_6701:818; GFX9: ; %bb.0:819; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)820; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:4821; GFX9-NEXT: global_load_dword v5, v[0:1], off822; GFX9-NEXT: s_waitcnt vmcnt(1)823; GFX9-NEXT: v_mov_b32_e32 v0, v4824; GFX9-NEXT: s_waitcnt vmcnt(0)825; GFX9-NEXT: v_mov_b32_e32 v1, v5826; GFX9-NEXT: s_setpc_b64 s[30:31]827;828; GFX10-LABEL: shuffle_v4f16_6701:829; GFX10: ; %bb.0:830; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)831; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:4832; GFX10-NEXT: global_load_dword v5, v[0:1], off833; GFX10-NEXT: s_waitcnt vmcnt(1)834; GFX10-NEXT: v_mov_b32_e32 v0, v4835; GFX10-NEXT: s_waitcnt vmcnt(0)836; GFX10-NEXT: v_mov_b32_e32 v1, v5837; GFX10-NEXT: s_setpc_b64 s[30:31]838;839; GFX11-LABEL: shuffle_v4f16_6701:840; GFX11: ; %bb.0:841; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:4843; GFX11-NEXT: global_load_b32 v1, v[0:1], off844; GFX11-NEXT: s_waitcnt vmcnt(1)845; GFX11-NEXT: v_mov_b32_e32 v0, v2846; GFX11-NEXT: s_waitcnt vmcnt(0)847; GFX11-NEXT: s_setpc_b64 s[30:31]848 %val0 = load <4 x half>, ptr addrspace(1) %arg0849 %val1 = load <4 x half>, ptr addrspace(1) %arg1850 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 6, i32 7, i32 0, i32 1>851 ret <4 x half> %shuffle852}853 854define <4 x half> @shuffle_v4f16_6723(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {855; GFX9-LABEL: shuffle_v4f16_6723:856; GFX9: ; %bb.0:857; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)858; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:4859; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:4860; GFX9-NEXT: s_waitcnt vmcnt(1)861; GFX9-NEXT: v_mov_b32_e32 v0, v4862; GFX9-NEXT: s_waitcnt vmcnt(0)863; GFX9-NEXT: v_mov_b32_e32 v1, v5864; GFX9-NEXT: s_setpc_b64 s[30:31]865;866; GFX10-LABEL: shuffle_v4f16_6723:867; GFX10: ; %bb.0:868; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)869; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:4870; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:4871; GFX10-NEXT: s_waitcnt vmcnt(1)872; GFX10-NEXT: v_mov_b32_e32 v0, v4873; GFX10-NEXT: s_waitcnt vmcnt(0)874; GFX10-NEXT: v_mov_b32_e32 v1, v5875; GFX10-NEXT: s_setpc_b64 s[30:31]876;877; GFX11-LABEL: shuffle_v4f16_6723:878; GFX11: ; %bb.0:879; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)880; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:4881; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:4882; GFX11-NEXT: s_waitcnt vmcnt(1)883; GFX11-NEXT: v_mov_b32_e32 v0, v2884; GFX11-NEXT: s_waitcnt vmcnt(0)885; GFX11-NEXT: s_setpc_b64 s[30:31]886 %val0 = load <4 x half>, ptr addrspace(1) %arg0887 %val1 = load <4 x half>, ptr addrspace(1) %arg1888 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>889 ret <4 x half> %shuffle890}891 892define <4 x half> @shuffle_v4f16_6745(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {893; GX900-LABEL: shuffle_v4f16_6745:894; GX900: ; %bb.0:895; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)896; GX900-NEXT: global_load_dwordx2 v[1:2], v[2:3], off897; GX900-NEXT: s_waitcnt vmcnt(0)898; GX900-NEXT: v_mov_b32_e32 v0, v2899; GX900-NEXT: s_setpc_b64 s[30:31]900;901; GFX942-LABEL: shuffle_v4f16_6745:902; GFX942: ; %bb.0:903; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)904; GFX942-NEXT: global_load_dwordx2 v[2:3], v[2:3], off905; GFX942-NEXT: s_waitcnt vmcnt(0)906; GFX942-NEXT: v_mov_b32_e32 v0, v3907; GFX942-NEXT: v_mov_b32_e32 v1, v2908; GFX942-NEXT: s_setpc_b64 s[30:31]909;910; GFX10-LABEL: shuffle_v4f16_6745:911; GFX10: ; %bb.0:912; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)913; GFX10-NEXT: global_load_dwordx2 v[1:2], v[2:3], off914; GFX10-NEXT: s_waitcnt vmcnt(0)915; GFX10-NEXT: v_mov_b32_e32 v0, v2916; GFX10-NEXT: s_setpc_b64 s[30:31]917;918; GFX11-LABEL: shuffle_v4f16_6745:919; GFX11: ; %bb.0:920; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)921; GFX11-NEXT: global_load_b64 v[1:2], v[2:3], off922; GFX11-NEXT: s_waitcnt vmcnt(0)923; GFX11-NEXT: v_mov_b32_e32 v0, v2924; GFX11-NEXT: s_setpc_b64 s[30:31]925 %val0 = load <4 x half>, ptr addrspace(1) %arg0926 %val1 = load <4 x half>, ptr addrspace(1) %arg1927 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 6, i32 7, i32 4, i32 5>928 ret <4 x half> %shuffle929}930 931define <4 x half> @shuffle_v4f16_6767(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {932; GFX9-LABEL: shuffle_v4f16_6767:933; GFX9: ; %bb.0:934; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)935; GFX9-NEXT: global_load_dword v0, v[2:3], off offset:4936; GFX9-NEXT: s_waitcnt vmcnt(0)937; GFX9-NEXT: v_mov_b32_e32 v1, v0938; GFX9-NEXT: s_setpc_b64 s[30:31]939;940; GFX10-LABEL: shuffle_v4f16_6767:941; GFX10: ; %bb.0:942; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)943; GFX10-NEXT: global_load_dword v0, v[2:3], off offset:4944; GFX10-NEXT: s_waitcnt vmcnt(0)945; GFX10-NEXT: v_mov_b32_e32 v1, v0946; GFX10-NEXT: s_setpc_b64 s[30:31]947;948; GFX11-LABEL: shuffle_v4f16_6767:949; GFX11: ; %bb.0:950; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)951; GFX11-NEXT: global_load_b32 v0, v[2:3], off offset:4952; GFX11-NEXT: s_waitcnt vmcnt(0)953; GFX11-NEXT: v_mov_b32_e32 v1, v0954; GFX11-NEXT: s_setpc_b64 s[30:31]955 %val0 = load <4 x half>, ptr addrspace(1) %arg0956 %val1 = load <4 x half>, ptr addrspace(1) %arg1957 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 6, i32 7, i32 6, i32 7>958 ret <4 x half> %shuffle959}960 961define <4 x half> @shuffle_v4f16_2356(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {962; GX900-LABEL: shuffle_v4f16_2356:963; GX900: ; %bb.0:964; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off966; GX900-NEXT: global_load_dword v4, v[0:1], off offset:4967; GX900-NEXT: s_waitcnt vmcnt(1)968; GX900-NEXT: v_alignbit_b32 v1, v6, v5, 16969; GX900-NEXT: s_waitcnt vmcnt(0)970; GX900-NEXT: v_mov_b32_e32 v0, v4971; GX900-NEXT: s_setpc_b64 s[30:31]972;973; GFX942-LABEL: shuffle_v4f16_2356:974; GFX942: ; %bb.0:975; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)976; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off977; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:4978; GFX942-NEXT: s_waitcnt vmcnt(1)979; GFX942-NEXT: v_alignbit_b32 v1, v7, v6, 16980; GFX942-NEXT: s_waitcnt vmcnt(0)981; GFX942-NEXT: v_mov_b32_e32 v0, v4982; GFX942-NEXT: s_setpc_b64 s[30:31]983;984; GFX10-LABEL: shuffle_v4f16_2356:985; GFX10: ; %bb.0:986; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)987; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off988; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:4989; GFX10-NEXT: s_waitcnt vmcnt(1)990; GFX10-NEXT: v_alignbit_b32 v1, v6, v5, 16991; GFX10-NEXT: s_waitcnt vmcnt(0)992; GFX10-NEXT: v_mov_b32_e32 v0, v4993; GFX10-NEXT: s_setpc_b64 s[30:31]994;995; GFX11-TRUE16-LABEL: shuffle_v4f16_2356:996; GFX11-TRUE16: ; %bb.0:997; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)998; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off999; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41000; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1001; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h1002; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l1003; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1004; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1005;1006; GFX11-FAKE16-LABEL: shuffle_v4f16_2356:1007; GFX11-FAKE16: ; %bb.0:1008; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1009; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1010; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:41011; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1012; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v3, v2, 161013; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1014; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1015 %val0 = load <4 x half>, ptr addrspace(1) %arg01016 %val1 = load <4 x half>, ptr addrspace(1) %arg11017 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 5, i32 6>1018 ret <4 x half> %shuffle1019}1020 1021define <4 x half> @shuffle_v4f16_5623(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1022; GX900-LABEL: shuffle_v4f16_5623:1023; GX900: ; %bb.0:1024; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1025; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off1026; GX900-NEXT: global_load_dword v4, v[0:1], off offset:41027; GX900-NEXT: s_waitcnt vmcnt(1)1028; GX900-NEXT: v_alignbit_b32 v0, v6, v5, 161029; GX900-NEXT: s_waitcnt vmcnt(0)1030; GX900-NEXT: v_mov_b32_e32 v1, v41031; GX900-NEXT: s_setpc_b64 s[30:31]1032;1033; GFX942-LABEL: shuffle_v4f16_5623:1034; GFX942: ; %bb.0:1035; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1036; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off1037; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:41038; GFX942-NEXT: s_waitcnt vmcnt(1)1039; GFX942-NEXT: v_alignbit_b32 v0, v7, v6, 161040; GFX942-NEXT: s_waitcnt vmcnt(0)1041; GFX942-NEXT: v_mov_b32_e32 v1, v41042; GFX942-NEXT: s_setpc_b64 s[30:31]1043;1044; GFX10-LABEL: shuffle_v4f16_5623:1045; GFX10: ; %bb.0:1046; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1047; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off1048; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:41049; GFX10-NEXT: s_waitcnt vmcnt(1)1050; GFX10-NEXT: v_alignbit_b32 v0, v6, v5, 161051; GFX10-NEXT: s_waitcnt vmcnt(0)1052; GFX10-NEXT: v_mov_b32_e32 v1, v41053; GFX10-NEXT: s_setpc_b64 s[30:31]1054;1055; GFX11-TRUE16-LABEL: shuffle_v4f16_5623:1056; GFX11-TRUE16: ; %bb.0:1057; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1058; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off1059; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off offset:41060; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1061; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h1062; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l1063; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1064; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1065;1066; GFX11-FAKE16-LABEL: shuffle_v4f16_5623:1067; GFX11-FAKE16: ; %bb.0:1068; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1069; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1070; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:41071; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1072; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 161073; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1074; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1075 %val0 = load <4 x half>, ptr addrspace(1) %arg01076 %val1 = load <4 x half>, ptr addrspace(1) %arg11077 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 5, i32 6, i32 2, i32 3>1078 ret <4 x half> %shuffle1079}1080 1081define <4 x half> @shuffle_v4f16_3456(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1082; GFX9-LABEL: shuffle_v4f16_3456:1083; GFX9: ; %bb.0:1084; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1085; GFX9-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1086; GFX9-NEXT: global_load_dword v6, v[0:1], off offset:41087; GFX9-NEXT: s_waitcnt vmcnt(1)1088; GFX9-NEXT: v_alignbit_b32 v1, v5, v4, 161089; GFX9-NEXT: s_waitcnt vmcnt(0)1090; GFX9-NEXT: v_alignbit_b32 v0, v4, v6, 161091; GFX9-NEXT: s_setpc_b64 s[30:31]1092;1093; GFX10-LABEL: shuffle_v4f16_3456:1094; GFX10: ; %bb.0:1095; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1096; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1097; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:41098; GFX10-NEXT: s_waitcnt vmcnt(1)1099; GFX10-NEXT: v_alignbit_b32 v1, v5, v4, 161100; GFX10-NEXT: s_waitcnt vmcnt(0)1101; GFX10-NEXT: v_alignbit_b32 v0, v4, v6, 161102; GFX10-NEXT: s_setpc_b64 s[30:31]1103;1104; GFX11-TRUE16-LABEL: shuffle_v4f16_3456:1105; GFX11-TRUE16: ; %bb.0:1106; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1107; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41108; GFX11-TRUE16-NEXT: global_load_b64 v[1:2], v[2:3], off1109; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1110; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h1111; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1112; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l1113; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v1.h1114; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l1115; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1116;1117; GFX11-FAKE16-LABEL: shuffle_v4f16_3456:1118; GFX11-FAKE16: ; %bb.0:1119; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1120; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1121; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:41122; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1123; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v3, v2, 161124; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1125; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v2, v0, 161126; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1127 %val0 = load <4 x half>, ptr addrspace(1) %arg01128 %val1 = load <4 x half>, ptr addrspace(1) %arg11129 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 3, i32 4, i32 5, i32 6>1130 ret <4 x half> %shuffle1131}1132 1133define <4 x half> @shuffle_v4f16_5634(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1134; GFX9-LABEL: shuffle_v4f16_5634:1135; GFX9: ; %bb.0:1136; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1137; GFX9-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1138; GFX9-NEXT: global_load_dword v6, v[0:1], off offset:41139; GFX9-NEXT: s_waitcnt vmcnt(1)1140; GFX9-NEXT: v_alignbit_b32 v0, v5, v4, 161141; GFX9-NEXT: s_waitcnt vmcnt(0)1142; GFX9-NEXT: v_alignbit_b32 v1, v4, v6, 161143; GFX9-NEXT: s_setpc_b64 s[30:31]1144;1145; GFX10-LABEL: shuffle_v4f16_5634:1146; GFX10: ; %bb.0:1147; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1148; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1149; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:41150; GFX10-NEXT: s_waitcnt vmcnt(1)1151; GFX10-NEXT: v_alignbit_b32 v0, v5, v4, 161152; GFX10-NEXT: s_waitcnt vmcnt(0)1153; GFX10-NEXT: v_alignbit_b32 v1, v4, v6, 161154; GFX10-NEXT: s_setpc_b64 s[30:31]1155;1156; GFX11-TRUE16-LABEL: shuffle_v4f16_5634:1157; GFX11-TRUE16: ; %bb.0:1158; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1159; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41160; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off1161; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1162; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h1163; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1164; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h1165; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l1166; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l1167; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1168;1169; GFX11-FAKE16-LABEL: shuffle_v4f16_5634:1170; GFX11-FAKE16: ; %bb.0:1171; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1172; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1173; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:41174; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1175; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 161176; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1177; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 161178; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1179 %val0 = load <4 x half>, ptr addrspace(1) %arg01180 %val1 = load <4 x half>, ptr addrspace(1) %arg11181 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 5, i32 6, i32 3, i32 4>1182 ret <4 x half> %shuffle1183}1184 1185define <4 x half> @shuffle_v4f16_5734(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1186; GX900-LABEL: shuffle_v4f16_5734:1187; GX900: ; %bb.0:1188; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1189; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1190; GX900-NEXT: global_load_dword v6, v[0:1], off offset:41191; GX900-NEXT: s_mov_b32 s4, 0x70603021192; GX900-NEXT: s_waitcnt vmcnt(1)1193; GX900-NEXT: v_perm_b32 v0, v5, v4, s41194; GX900-NEXT: s_waitcnt vmcnt(0)1195; GX900-NEXT: v_alignbit_b32 v1, v4, v6, 161196; GX900-NEXT: s_setpc_b64 s[30:31]1197;1198; GFX942-LABEL: shuffle_v4f16_5734:1199; GFX942: ; %bb.0:1200; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX942-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1202; GFX942-NEXT: global_load_dword v6, v[0:1], off offset:41203; GFX942-NEXT: s_mov_b32 s0, 0x70603021204; GFX942-NEXT: s_waitcnt vmcnt(1)1205; GFX942-NEXT: v_perm_b32 v0, v5, v4, s01206; GFX942-NEXT: s_waitcnt vmcnt(0)1207; GFX942-NEXT: v_alignbit_b32 v1, v4, v6, 161208; GFX942-NEXT: s_setpc_b64 s[30:31]1209;1210; GFX10-LABEL: shuffle_v4f16_5734:1211; GFX10: ; %bb.0:1212; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1213; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off1214; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:41215; GFX10-NEXT: s_waitcnt vmcnt(1)1216; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x70603021217; GFX10-NEXT: s_waitcnt vmcnt(0)1218; GFX10-NEXT: v_alignbit_b32 v1, v4, v6, 161219; GFX10-NEXT: s_setpc_b64 s[30:31]1220;1221; GFX11-TRUE16-LABEL: shuffle_v4f16_5734:1222; GFX11-TRUE16: ; %bb.0:1223; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1224; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41225; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off1226; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1227; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h1228; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1229; GFX11-TRUE16-NEXT: v_mov_b16_e32 v3.l, v2.h1230; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l1231; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1232; GFX11-TRUE16-NEXT: v_mov_b32_e32 v0, v31233; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1234;1235; GFX11-FAKE16-LABEL: shuffle_v4f16_5734:1236; GFX11-FAKE16: ; %bb.0:1237; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1238; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1239; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:41240; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1241; GFX11-FAKE16-NEXT: v_perm_b32 v0, v3, v2, 0x70603021242; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1243; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 161244; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1245 %val0 = load <4 x half>, ptr addrspace(1) %arg01246 %val1 = load <4 x half>, ptr addrspace(1) %arg11247 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 5, i32 7, i32 3, i32 4>1248 ret <4 x half> %shuffle1249}1250 1251define <4 x i16> @shuffle_v4i16_2356(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1252; GX900-LABEL: shuffle_v4i16_2356:1253; GX900: ; %bb.0:1254; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1255; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off1256; GX900-NEXT: global_load_dword v4, v[0:1], off offset:41257; GX900-NEXT: s_waitcnt vmcnt(1)1258; GX900-NEXT: v_alignbit_b32 v1, v6, v5, 161259; GX900-NEXT: s_waitcnt vmcnt(0)1260; GX900-NEXT: v_mov_b32_e32 v0, v41261; GX900-NEXT: s_setpc_b64 s[30:31]1262;1263; GFX942-LABEL: shuffle_v4i16_2356:1264; GFX942: ; %bb.0:1265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1266; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off1267; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:41268; GFX942-NEXT: s_waitcnt vmcnt(1)1269; GFX942-NEXT: v_alignbit_b32 v1, v7, v6, 161270; GFX942-NEXT: s_waitcnt vmcnt(0)1271; GFX942-NEXT: v_mov_b32_e32 v0, v41272; GFX942-NEXT: s_setpc_b64 s[30:31]1273;1274; GFX10-LABEL: shuffle_v4i16_2356:1275; GFX10: ; %bb.0:1276; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1277; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off1278; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:41279; GFX10-NEXT: s_waitcnt vmcnt(1)1280; GFX10-NEXT: v_alignbit_b32 v1, v6, v5, 161281; GFX10-NEXT: s_waitcnt vmcnt(0)1282; GFX10-NEXT: v_mov_b32_e32 v0, v41283; GFX10-NEXT: s_setpc_b64 s[30:31]1284;1285; GFX11-TRUE16-LABEL: shuffle_v4i16_2356:1286; GFX11-TRUE16: ; %bb.0:1287; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1288; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off1289; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41290; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1291; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h1292; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l1293; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1294; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1295;1296; GFX11-FAKE16-LABEL: shuffle_v4i16_2356:1297; GFX11-FAKE16: ; %bb.0:1298; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1299; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off1300; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:41301; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1302; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v3, v2, 161303; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1304; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1305 %val0 = load <4 x i16>, ptr addrspace(1) %arg01306 %val1 = load <4 x i16>, ptr addrspace(1) %arg11307 %shuffle = shufflevector <4 x i16> %val0, <4 x i16> %val1, <4 x i32> <i32 2, i32 3, i32 5, i32 6>1308 ret <4 x i16> %shuffle1309}1310 1311define <4 x i16> @shuffle_v4i16_0167(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1312; GFX9-LABEL: shuffle_v4i16_0167:1313; GFX9: ; %bb.0:1314; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1315; GFX9-NEXT: global_load_dword v4, v[0:1], off1316; GFX9-NEXT: global_load_dword v5, v[2:3], off offset:41317; GFX9-NEXT: s_waitcnt vmcnt(1)1318; GFX9-NEXT: v_mov_b32_e32 v0, v41319; GFX9-NEXT: s_waitcnt vmcnt(0)1320; GFX9-NEXT: v_mov_b32_e32 v1, v51321; GFX9-NEXT: s_setpc_b64 s[30:31]1322;1323; GFX10-LABEL: shuffle_v4i16_0167:1324; GFX10: ; %bb.0:1325; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1326; GFX10-NEXT: global_load_dword v4, v[0:1], off1327; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:41328; GFX10-NEXT: s_waitcnt vmcnt(1)1329; GFX10-NEXT: v_mov_b32_e32 v0, v41330; GFX10-NEXT: s_waitcnt vmcnt(0)1331; GFX10-NEXT: v_mov_b32_e32 v1, v51332; GFX10-NEXT: s_setpc_b64 s[30:31]1333;1334; GFX11-LABEL: shuffle_v4i16_0167:1335; GFX11: ; %bb.0:1336; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1337; GFX11-NEXT: global_load_b32 v0, v[0:1], off1338; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:41339; GFX11-NEXT: s_waitcnt vmcnt(0)1340; GFX11-NEXT: s_setpc_b64 s[30:31]1341 %val0 = load <4 x i16>, ptr addrspace(1) %arg01342 %val1 = load <4 x i16>, ptr addrspace(1) %arg11343 %shuffle = shufflevector <4 x i16> %val0, <4 x i16> %val1, <4 x i32> <i32 0, i32 1, i32 6, i32 7>1344 ret <4 x i16> %shuffle1345}1346 1347define <4 x half> @shuffle_v4f16_0000(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1348; GX900-LABEL: shuffle_v4f16_0000:1349; GX900: ; %bb.0:1350; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1351; GX900-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1352; GX900-NEXT: s_mov_b32 s4, 0x50401001353; GX900-NEXT: s_waitcnt vmcnt(0)1354; GX900-NEXT: v_perm_b32 v0, v0, v0, s41355; GX900-NEXT: v_mov_b32_e32 v1, v01356; GX900-NEXT: s_setpc_b64 s[30:31]1357;1358; GFX942-LABEL: shuffle_v4f16_0000:1359; GFX942: ; %bb.0:1360; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1361; GFX942-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1362; GFX942-NEXT: s_mov_b32 s0, 0x50401001363; GFX942-NEXT: s_waitcnt vmcnt(0)1364; GFX942-NEXT: v_perm_b32 v0, v0, v0, s01365; GFX942-NEXT: v_mov_b32_e32 v1, v01366; GFX942-NEXT: s_setpc_b64 s[30:31]1367;1368; GFX10-LABEL: shuffle_v4f16_0000:1369; GFX10: ; %bb.0:1370; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1371; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1372; GFX10-NEXT: s_waitcnt vmcnt(0)1373; GFX10-NEXT: v_perm_b32 v0, v0, v0, 0x50401001374; GFX10-NEXT: v_mov_b32_e32 v1, v01375; GFX10-NEXT: s_setpc_b64 s[30:31]1376;1377; GFX11-TRUE16-LABEL: shuffle_v4f16_0000:1378; GFX11-TRUE16: ; %bb.0:1379; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1380; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off1381; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1382; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l1383; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1384; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v01385; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1386;1387; GFX11-FAKE16-LABEL: shuffle_v4f16_0000:1388; GFX11-FAKE16: ; %bb.0:1389; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1390; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off1391; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1392; GFX11-FAKE16-NEXT: v_perm_b32 v0, v0, v0, 0x50401001393; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1394; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v01395; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1396 %val0 = load <4 x half>, ptr addrspace(1) %arg01397 %val1 = load <4 x half>, ptr addrspace(1) %arg11398 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> zeroinitializer1399 ret <4 x half> %shuffle1400}1401 1402define <4 x half> @shuffle_v4f16_1010(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1403; GFX9-LABEL: shuffle_v4f16_1010:1404; GFX9: ; %bb.0:1405; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1406; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1407; GFX9-NEXT: s_waitcnt vmcnt(0)1408; GFX9-NEXT: v_alignbit_b32 v0, v0, v0, 161409; GFX9-NEXT: v_mov_b32_e32 v1, v01410; GFX9-NEXT: s_setpc_b64 s[30:31]1411;1412; GFX10-LABEL: shuffle_v4f16_1010:1413; GFX10: ; %bb.0:1414; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1415; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1416; GFX10-NEXT: s_waitcnt vmcnt(0)1417; GFX10-NEXT: v_alignbit_b32 v0, v0, v0, 161418; GFX10-NEXT: v_mov_b32_e32 v1, v01419; GFX10-NEXT: s_setpc_b64 s[30:31]1420;1421; GFX11-TRUE16-LABEL: shuffle_v4f16_1010:1422; GFX11-TRUE16: ; %bb.0:1423; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1424; GFX11-TRUE16-NEXT: global_load_b64 v[1:2], v[0:1], off1425; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1426; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.h1427; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l1428; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1429; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v01430; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1431;1432; GFX11-FAKE16-LABEL: shuffle_v4f16_1010:1433; GFX11-FAKE16: ; %bb.0:1434; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1435; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off1436; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1437; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v0, v0, 161438; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1439; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v01440; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1441 %val0 = load <4 x half>, ptr addrspace(1) %arg01442 %val1 = load <4 x half>, ptr addrspace(1) %arg11443 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 1, i32 0, i32 1, i32 0>1444 ret <4 x half> %shuffle1445}1446 1447define <4 x half> @shuffle_v4f16_1100(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1448; GX900-LABEL: shuffle_v4f16_1100:1449; GX900: ; %bb.0:1450; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1451; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off1452; GX900-NEXT: s_mov_b32 s4, 0x70603021453; GX900-NEXT: s_mov_b32 s5, 0x50401001454; GX900-NEXT: s_waitcnt vmcnt(0)1455; GX900-NEXT: v_perm_b32 v0, v1, v1, s41456; GX900-NEXT: v_perm_b32 v1, v1, v1, s51457; GX900-NEXT: s_setpc_b64 s[30:31]1458;1459; GFX942-LABEL: shuffle_v4f16_1100:1460; GFX942: ; %bb.0:1461; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1462; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off1463; GFX942-NEXT: s_mov_b32 s0, 0x70603021464; GFX942-NEXT: s_mov_b32 s1, 0x50401001465; GFX942-NEXT: s_waitcnt vmcnt(0)1466; GFX942-NEXT: v_perm_b32 v0, v2, v2, s01467; GFX942-NEXT: v_perm_b32 v1, v2, v2, s11468; GFX942-NEXT: s_setpc_b64 s[30:31]1469;1470; GFX10-LABEL: shuffle_v4f16_1100:1471; GFX10: ; %bb.0:1472; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1473; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off1474; GFX10-NEXT: s_waitcnt vmcnt(0)1475; GFX10-NEXT: v_perm_b32 v0, v1, v1, 0x70603021476; GFX10-NEXT: v_perm_b32 v1, v1, v1, 0x50401001477; GFX10-NEXT: s_setpc_b64 s[30:31]1478;1479; GFX11-TRUE16-LABEL: shuffle_v4f16_1100:1480; GFX11-TRUE16: ; %bb.0:1481; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1482; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off1483; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1484; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l1485; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l1486; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h1487; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1488;1489; GFX11-FAKE16-LABEL: shuffle_v4f16_1100:1490; GFX11-FAKE16: ; %bb.0:1491; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1492; GFX11-FAKE16-NEXT: global_load_b64 v[1:2], v[0:1], off1493; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1494; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v1, 0x70603021495; GFX11-FAKE16-NEXT: v_perm_b32 v1, v1, v1, 0x50401001496; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1497 %val0 = load <4 x half>, ptr addrspace(1) %arg01498 %val1 = load <4 x half>, ptr addrspace(1) %arg11499 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 1, i32 1, i32 0, i32 0>1500 ret <4 x half> %shuffle1501}1502 1503define <4 x half> @shuffle_v4f16_6161(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1504; GX900-LABEL: shuffle_v4f16_6161:1505; GX900: ; %bb.0:1506; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1507; GX900-NEXT: global_load_dword v4, v[0:1], off1508; GX900-NEXT: global_load_dword v5, v[2:3], off offset:41509; GX900-NEXT: s_mov_b32 s4, 0xffff1510; GX900-NEXT: s_waitcnt vmcnt(0)1511; GX900-NEXT: v_bfi_b32 v0, s4, v5, v41512; GX900-NEXT: v_mov_b32_e32 v1, v01513; GX900-NEXT: s_setpc_b64 s[30:31]1514;1515; GFX942-LABEL: shuffle_v4f16_6161:1516; GFX942: ; %bb.0:1517; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1518; GFX942-NEXT: global_load_dword v4, v[0:1], off1519; GFX942-NEXT: global_load_dword v5, v[2:3], off offset:41520; GFX942-NEXT: s_mov_b32 s0, 0xffff1521; GFX942-NEXT: s_waitcnt vmcnt(0)1522; GFX942-NEXT: v_bfi_b32 v0, s0, v5, v41523; GFX942-NEXT: v_mov_b32_e32 v1, v01524; GFX942-NEXT: s_setpc_b64 s[30:31]1525;1526; GFX10-LABEL: shuffle_v4f16_6161:1527; GFX10: ; %bb.0:1528; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1529; GFX10-NEXT: global_load_dword v4, v[0:1], off1530; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:41531; GFX10-NEXT: s_waitcnt vmcnt(0)1532; GFX10-NEXT: v_bfi_b32 v0, 0xffff, v5, v41533; GFX10-NEXT: v_mov_b32_e32 v1, v01534; GFX10-NEXT: s_setpc_b64 s[30:31]1535;1536; GFX11-TRUE16-LABEL: shuffle_v4f16_6161:1537; GFX11-TRUE16: ; %bb.0:1538; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1539; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off1540; GFX11-TRUE16-NEXT: global_load_b32 v0, v[2:3], off offset:41541; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1542; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.h1543; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1544; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v01545; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1546;1547; GFX11-FAKE16-LABEL: shuffle_v4f16_6161:1548; GFX11-FAKE16: ; %bb.0:1549; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1550; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off1551; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:41552; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1553; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v1, v01554; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1555; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v01556; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1557 %val0 = load <4 x half>, ptr addrspace(1) %arg01558 %val1 = load <4 x half>, ptr addrspace(1) %arg11559 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 6, i32 1, i32 6, i32 1>1560 ret <4 x half> %shuffle1561}1562 1563define <4 x half> @shuffle_v4f16_2333(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1564; GX900-LABEL: shuffle_v4f16_2333:1565; GX900: ; %bb.0:1566; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1567; GX900-NEXT: global_load_dword v0, v[0:1], off offset:41568; GX900-NEXT: s_mov_b32 s4, 0x70603021569; GX900-NEXT: s_waitcnt vmcnt(0)1570; GX900-NEXT: v_perm_b32 v1, v0, v0, s41571; GX900-NEXT: s_setpc_b64 s[30:31]1572;1573; GFX942-LABEL: shuffle_v4f16_2333:1574; GFX942: ; %bb.0:1575; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1576; GFX942-NEXT: global_load_dword v0, v[0:1], off offset:41577; GFX942-NEXT: s_mov_b32 s0, 0x70603021578; GFX942-NEXT: s_waitcnt vmcnt(0)1579; GFX942-NEXT: v_perm_b32 v1, v0, v0, s01580; GFX942-NEXT: s_setpc_b64 s[30:31]1581;1582; GFX10-LABEL: shuffle_v4f16_2333:1583; GFX10: ; %bb.0:1584; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1585; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:41586; GFX10-NEXT: s_waitcnt vmcnt(0)1587; GFX10-NEXT: v_perm_b32 v1, v0, v0, 0x70603021588; GFX10-NEXT: s_setpc_b64 s[30:31]1589;1590; GFX11-TRUE16-LABEL: shuffle_v4f16_2333:1591; GFX11-TRUE16: ; %bb.0:1592; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1593; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41594; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1595; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h1596; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.h1597; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1598;1599; GFX11-FAKE16-LABEL: shuffle_v4f16_2333:1600; GFX11-FAKE16: ; %bb.0:1601; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1602; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:41603; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1604; GFX11-FAKE16-NEXT: v_perm_b32 v1, v0, v0, 0x70603021605; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1606 %val0 = load <4 x half>, ptr addrspace(1) %arg01607 %val1 = load <4 x half>, ptr addrspace(1) %arg11608 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>1609 ret <4 x half> %shuffle1610}1611 1612define <4 x half> @shuffle_v4f16_6667(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1613; GX900-LABEL: shuffle_v4f16_6667:1614; GX900: ; %bb.0:1615; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1616; GX900-NEXT: global_load_dword v0, v[0:1], off offset:41617; GX900-NEXT: s_mov_b32 s4, 0x70603021618; GX900-NEXT: s_waitcnt vmcnt(0)1619; GX900-NEXT: v_perm_b32 v1, v0, v0, s41620; GX900-NEXT: s_setpc_b64 s[30:31]1621;1622; GFX942-LABEL: shuffle_v4f16_6667:1623; GFX942: ; %bb.0:1624; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1625; GFX942-NEXT: global_load_dword v0, v[0:1], off offset:41626; GFX942-NEXT: s_mov_b32 s0, 0x70603021627; GFX942-NEXT: s_waitcnt vmcnt(0)1628; GFX942-NEXT: v_perm_b32 v1, v0, v0, s01629; GFX942-NEXT: s_setpc_b64 s[30:31]1630;1631; GFX10-LABEL: shuffle_v4f16_6667:1632; GFX10: ; %bb.0:1633; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:41635; GFX10-NEXT: s_waitcnt vmcnt(0)1636; GFX10-NEXT: v_perm_b32 v1, v0, v0, 0x70603021637; GFX10-NEXT: s_setpc_b64 s[30:31]1638;1639; GFX11-TRUE16-LABEL: shuffle_v4f16_6667:1640; GFX11-TRUE16: ; %bb.0:1641; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1642; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:41643; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1644; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h1645; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.h1646; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1647;1648; GFX11-FAKE16-LABEL: shuffle_v4f16_6667:1649; GFX11-FAKE16: ; %bb.0:1650; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1651; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:41652; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1653; GFX11-FAKE16-NEXT: v_perm_b32 v1, v0, v0, 0x70603021654; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1655 %val0 = load <4 x half>, ptr addrspace(1) %arg01656 %val1 = load <4 x half>, ptr addrspace(1) %arg11657 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>1658 ret <4 x half> %shuffle1659}1660 1661define <4 x half> @shuffle_v8f16_0101(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1662; GFX9-LABEL: shuffle_v8f16_0101:1663; GFX9: ; %bb.0:1664; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1665; GFX9-NEXT: global_load_dword v0, v[0:1], off1666; GFX9-NEXT: s_waitcnt vmcnt(0)1667; GFX9-NEXT: v_mov_b32_e32 v1, v01668; GFX9-NEXT: s_setpc_b64 s[30:31]1669;1670; GFX10-LABEL: shuffle_v8f16_0101:1671; GFX10: ; %bb.0:1672; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1673; GFX10-NEXT: global_load_dword v0, v[0:1], off1674; GFX10-NEXT: s_waitcnt vmcnt(0)1675; GFX10-NEXT: v_mov_b32_e32 v1, v01676; GFX10-NEXT: s_setpc_b64 s[30:31]1677;1678; GFX11-LABEL: shuffle_v8f16_0101:1679; GFX11: ; %bb.0:1680; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1681; GFX11-NEXT: global_load_b32 v0, v[0:1], off1682; GFX11-NEXT: s_waitcnt vmcnt(0)1683; GFX11-NEXT: v_mov_b32_e32 v1, v01684; GFX11-NEXT: s_setpc_b64 s[30:31]1685 %val0 = load <8 x half>, ptr addrspace(1) %arg01686 %val1 = load <8 x half>, ptr addrspace(1) %arg11687 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <4 x i32> <i32 0, i32 1, i32 0, i32 1>1688 ret <4 x half> %shuffle1689}1690 1691define <4 x half> @shuffle_v8f16_0123(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1692; GFX9-LABEL: shuffle_v8f16_0123:1693; GFX9: ; %bb.0:1694; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1695; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1696; GFX9-NEXT: s_waitcnt vmcnt(0)1697; GFX9-NEXT: s_setpc_b64 s[30:31]1698;1699; GFX10-LABEL: shuffle_v8f16_0123:1700; GFX10: ; %bb.0:1701; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1702; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1703; GFX10-NEXT: s_waitcnt vmcnt(0)1704; GFX10-NEXT: s_setpc_b64 s[30:31]1705;1706; GFX11-LABEL: shuffle_v8f16_0123:1707; GFX11: ; %bb.0:1708; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1709; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off1710; GFX11-NEXT: s_waitcnt vmcnt(0)1711; GFX11-NEXT: s_setpc_b64 s[30:31]1712 %val0 = load <8 x half>, ptr addrspace(1) %arg01713 %val1 = load <8 x half>, ptr addrspace(1) %arg11714 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1715 ret <4 x half> %shuffle1716}1717 1718define <4 x half> @shuffle_v8f16_4589(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1719; GFX9-LABEL: shuffle_v8f16_4589:1720; GFX9: ; %bb.0:1721; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1722; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:81723; GFX9-NEXT: global_load_dword v5, v[2:3], off1724; GFX9-NEXT: s_waitcnt vmcnt(1)1725; GFX9-NEXT: v_mov_b32_e32 v0, v41726; GFX9-NEXT: s_waitcnt vmcnt(0)1727; GFX9-NEXT: v_mov_b32_e32 v1, v51728; GFX9-NEXT: s_setpc_b64 s[30:31]1729;1730; GFX10-LABEL: shuffle_v8f16_4589:1731; GFX10: ; %bb.0:1732; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1733; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:81734; GFX10-NEXT: global_load_dword v5, v[2:3], off1735; GFX10-NEXT: s_waitcnt vmcnt(1)1736; GFX10-NEXT: v_mov_b32_e32 v0, v41737; GFX10-NEXT: s_waitcnt vmcnt(0)1738; GFX10-NEXT: v_mov_b32_e32 v1, v51739; GFX10-NEXT: s_setpc_b64 s[30:31]1740;1741; GFX11-LABEL: shuffle_v8f16_4589:1742; GFX11: ; %bb.0:1743; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1744; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:81745; GFX11-NEXT: global_load_b32 v1, v[2:3], off1746; GFX11-NEXT: s_waitcnt vmcnt(0)1747; GFX11-NEXT: s_setpc_b64 s[30:31]1748 %val0 = load <8 x half>, ptr addrspace(1) %arg01749 %val1 = load <8 x half>, ptr addrspace(1) %arg11750 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <4 x i32> <i32 4, i32 5, i32 8, i32 9>1751 ret <4 x half> %shuffle1752}1753 1754define <4 x half> @shuffle_v8f16_10_11_2_3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1755; GFX9-LABEL: shuffle_v8f16_10_11_2_3:1756; GFX9: ; %bb.0:1757; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1758; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:41759; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:41760; GFX9-NEXT: s_waitcnt vmcnt(1)1761; GFX9-NEXT: v_mov_b32_e32 v0, v41762; GFX9-NEXT: s_waitcnt vmcnt(0)1763; GFX9-NEXT: v_mov_b32_e32 v1, v51764; GFX9-NEXT: s_setpc_b64 s[30:31]1765;1766; GFX10-LABEL: shuffle_v8f16_10_11_2_3:1767; GFX10: ; %bb.0:1768; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1769; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:41770; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:41771; GFX10-NEXT: s_waitcnt vmcnt(1)1772; GFX10-NEXT: v_mov_b32_e32 v0, v41773; GFX10-NEXT: s_waitcnt vmcnt(0)1774; GFX10-NEXT: v_mov_b32_e32 v1, v51775; GFX10-NEXT: s_setpc_b64 s[30:31]1776;1777; GFX11-LABEL: shuffle_v8f16_10_11_2_3:1778; GFX11: ; %bb.0:1779; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1780; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:41781; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:41782; GFX11-NEXT: s_waitcnt vmcnt(1)1783; GFX11-NEXT: v_mov_b32_e32 v0, v21784; GFX11-NEXT: s_waitcnt vmcnt(0)1785; GFX11-NEXT: s_setpc_b64 s[30:31]1786 %val0 = load <8 x half>, ptr addrspace(1) %arg01787 %val1 = load <8 x half>, ptr addrspace(1) %arg11788 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <4 x i32> <i32 10, i32 11, i32 2, i32 3>1789 ret <4 x half> %shuffle1790}1791 1792define <4 x half> @shuffle_v8f16_13_14_2_3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1793; GX900-LABEL: shuffle_v8f16_13_14_2_3:1794; GX900: ; %bb.0:1795; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1796; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off offset:81797; GX900-NEXT: global_load_dword v4, v[0:1], off offset:41798; GX900-NEXT: s_waitcnt vmcnt(1)1799; GX900-NEXT: v_alignbit_b32 v0, v6, v5, 161800; GX900-NEXT: s_waitcnt vmcnt(0)1801; GX900-NEXT: v_mov_b32_e32 v1, v41802; GX900-NEXT: s_setpc_b64 s[30:31]1803;1804; GFX942-LABEL: shuffle_v8f16_13_14_2_3:1805; GFX942: ; %bb.0:1806; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1807; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off offset:81808; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:41809; GFX942-NEXT: s_waitcnt vmcnt(1)1810; GFX942-NEXT: v_alignbit_b32 v0, v7, v6, 161811; GFX942-NEXT: s_waitcnt vmcnt(0)1812; GFX942-NEXT: v_mov_b32_e32 v1, v41813; GFX942-NEXT: s_setpc_b64 s[30:31]1814;1815; GFX10-LABEL: shuffle_v8f16_13_14_2_3:1816; GFX10: ; %bb.0:1817; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1818; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off offset:81819; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:41820; GFX10-NEXT: s_waitcnt vmcnt(1)1821; GFX10-NEXT: v_alignbit_b32 v0, v6, v5, 161822; GFX10-NEXT: s_waitcnt vmcnt(0)1823; GFX10-NEXT: v_mov_b32_e32 v1, v41824; GFX10-NEXT: s_setpc_b64 s[30:31]1825;1826; GFX11-TRUE16-LABEL: shuffle_v8f16_13_14_2_3:1827; GFX11-TRUE16: ; %bb.0:1828; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1829; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off offset:81830; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off offset:41831; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)1832; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h1833; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l1834; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1835; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1836;1837; GFX11-FAKE16-LABEL: shuffle_v8f16_13_14_2_3:1838; GFX11-FAKE16: ; %bb.0:1839; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1840; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off offset:81841; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:41842; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)1843; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 161844; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1845; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1846 %val0 = load <8 x half>, ptr addrspace(1) %arg01847 %val1 = load <8 x half>, ptr addrspace(1) %arg11848 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <4 x i32> <i32 13, i32 14, i32 2, i32 3>1849 ret <4 x half> %shuffle1850}1851 1852define <4 x half> @shuffle_v3f16_0122(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1853; GX900-LABEL: shuffle_v3f16_0122:1854; GX900: ; %bb.0:1855; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1856; GX900-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1857; GX900-NEXT: s_mov_b32 s4, 0x50401001858; GX900-NEXT: s_waitcnt vmcnt(0)1859; GX900-NEXT: v_perm_b32 v1, v1, v1, s41860; GX900-NEXT: s_setpc_b64 s[30:31]1861;1862; GFX942-LABEL: shuffle_v3f16_0122:1863; GFX942: ; %bb.0:1864; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1865; GFX942-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1866; GFX942-NEXT: s_mov_b32 s0, 0x50401001867; GFX942-NEXT: s_waitcnt vmcnt(0)1868; GFX942-NEXT: v_perm_b32 v1, v1, v1, s01869; GFX942-NEXT: s_setpc_b64 s[30:31]1870;1871; GFX10-LABEL: shuffle_v3f16_0122:1872; GFX10: ; %bb.0:1873; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1874; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off1875; GFX10-NEXT: s_waitcnt vmcnt(0)1876; GFX10-NEXT: v_perm_b32 v1, v1, v1, 0x50401001877; GFX10-NEXT: s_setpc_b64 s[30:31]1878;1879; GFX11-TRUE16-LABEL: shuffle_v3f16_0122:1880; GFX11-TRUE16: ; %bb.0:1881; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1882; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off1883; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1884; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v1.l1885; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1886;1887; GFX11-FAKE16-LABEL: shuffle_v3f16_0122:1888; GFX11-FAKE16: ; %bb.0:1889; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1890; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off1891; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1892; GFX11-FAKE16-NEXT: v_perm_b32 v1, v1, v1, 0x50401001893; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1894 %val0 = load <3 x half>, ptr addrspace(1) %arg01895 %val1 = load <3 x half>, ptr addrspace(1) %arg11896 %shuffle = shufflevector <3 x half> %val0, <3 x half> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 2>1897 ret <4 x half> %shuffle1898}1899 1900define <4 x half> @shuffle_v2f16_0122(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1901; GFX9-LABEL: shuffle_v2f16_0122:1902; GFX9: ; %bb.0:1903; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1904; GFX9-NEXT: global_load_dword v0, v[0:1], off1905; GFX9-NEXT: s_waitcnt vmcnt(0)1906; GFX9-NEXT: v_alignbit_b32 v1, v0, v0, 161907; GFX9-NEXT: s_setpc_b64 s[30:31]1908;1909; GFX10-LABEL: shuffle_v2f16_0122:1910; GFX10: ; %bb.0:1911; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; GFX10-NEXT: global_load_dword v0, v[0:1], off1913; GFX10-NEXT: s_waitcnt vmcnt(0)1914; GFX10-NEXT: v_alignbit_b32 v1, v0, v0, 161915; GFX10-NEXT: s_setpc_b64 s[30:31]1916;1917; GFX11-TRUE16-LABEL: shuffle_v2f16_0122:1918; GFX11-TRUE16: ; %bb.0:1919; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1920; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off1921; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)1922; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h1923; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l1924; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]1925;1926; GFX11-FAKE16-LABEL: shuffle_v2f16_0122:1927; GFX11-FAKE16: ; %bb.0:1928; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1929; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off1930; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)1931; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v0, v0, 161932; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]1933 %val0 = load <2 x half>, ptr addrspace(1) %arg01934 %val1 = load <2 x half>, ptr addrspace(1) %arg11935 %shuffle = shufflevector <2 x half> %val0, <2 x half> %val1, <4 x i32> <i32 0, i32 1, i32 1, i32 0>1936 ret <4 x half> %shuffle1937}1938 1939define <6 x half> @shuffle_v6f16_452367(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {1940; GX900-LABEL: shuffle_v6f16_452367:1941; GX900: ; %bb.0:1942; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1943; GX900-NEXT: v_mov_b32_e32 v6, v11944; GX900-NEXT: v_mov_b32_e32 v5, v01945; GX900-NEXT: v_mov_b32_e32 v4, v31946; GX900-NEXT: v_mov_b32_e32 v3, v21947; GX900-NEXT: global_load_dwordx3 v[0:2], v[5:6], off1948; GX900-NEXT: global_load_dword v7, v[3:4], off1949; GX900-NEXT: s_waitcnt vmcnt(1)1950; GX900-NEXT: v_mov_b32_e32 v0, v21951; GX900-NEXT: s_waitcnt vmcnt(0)1952; GX900-NEXT: v_mov_b32_e32 v2, v71953; GX900-NEXT: s_setpc_b64 s[30:31]1954;1955; GFX942-LABEL: shuffle_v6f16_452367:1956; GFX942: ; %bb.0:1957; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1958; GFX942-NEXT: global_load_dwordx3 v[4:6], v[0:1], off1959; GFX942-NEXT: global_load_dword v4, v[2:3], off1960; GFX942-NEXT: ; kill: killed $vgpr0 killed $vgpr11961; GFX942-NEXT: ; kill: killed $vgpr2 killed $vgpr31962; GFX942-NEXT: s_waitcnt vmcnt(1)1963; GFX942-NEXT: v_mov_b32_e32 v0, v61964; GFX942-NEXT: v_mov_b32_e32 v1, v51965; GFX942-NEXT: s_waitcnt vmcnt(0)1966; GFX942-NEXT: v_mov_b32_e32 v2, v41967; GFX942-NEXT: s_setpc_b64 s[30:31]1968;1969; GFX10-LABEL: shuffle_v6f16_452367:1970; GFX10: ; %bb.0:1971; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1972; GFX10-NEXT: v_mov_b32_e32 v6, v11973; GFX10-NEXT: v_mov_b32_e32 v5, v01974; GFX10-NEXT: v_mov_b32_e32 v4, v31975; GFX10-NEXT: v_mov_b32_e32 v3, v21976; GFX10-NEXT: global_load_dwordx3 v[0:2], v[5:6], off1977; GFX10-NEXT: global_load_dword v7, v[3:4], off1978; GFX10-NEXT: s_waitcnt vmcnt(1)1979; GFX10-NEXT: v_mov_b32_e32 v0, v21980; GFX10-NEXT: s_waitcnt vmcnt(0)1981; GFX10-NEXT: v_mov_b32_e32 v2, v71982; GFX10-NEXT: s_setpc_b64 s[30:31]1983;1984; GFX11-LABEL: shuffle_v6f16_452367:1985; GFX11: ; %bb.0:1986; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1987; GFX11-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v3, v21988; GFX11-NEXT: global_load_b96 v[0:2], v[0:1], off1989; GFX11-NEXT: global_load_b32 v3, v[3:4], off1990; GFX11-NEXT: s_waitcnt vmcnt(1)1991; GFX11-NEXT: v_mov_b32_e32 v0, v21992; GFX11-NEXT: s_waitcnt vmcnt(0)1993; GFX11-NEXT: v_mov_b32_e32 v2, v31994; GFX11-NEXT: s_setpc_b64 s[30:31]1995 %val0 = load <6 x half>, ptr addrspace(1) %arg01996 %val1 = load <6 x half>, ptr addrspace(1) %arg11997 %shuffle = shufflevector <6 x half> %val0, <6 x half> %val1, <6 x i32> <i32 4, i32 5, i32 2, i32 3, i32 6, i32 7>1998 ret <6 x half> %shuffle1999}2000 2001define amdgpu_kernel void @fma_shuffle_v2f16(ptr addrspace(1) nocapture readonly %A, ptr addrspace(1) nocapture readonly %B, ptr addrspace(1) nocapture %C) {2002; GX900-LABEL: fma_shuffle_v2f16:2003; GX900: ; %bb.0: ; %entry2004; GX900-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02005; GX900-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x102006; GX900-NEXT: v_lshlrev_b32_e32 v6, 3, v02007; GX900-NEXT: s_waitcnt lgkmcnt(0)2008; GX900-NEXT: global_load_dwordx2 v[0:1], v6, s[0:1]2009; GX900-NEXT: global_load_dwordx2 v[2:3], v6, s[2:3]2010; GX900-NEXT: global_load_dwordx2 v[4:5], v6, s[4:5]2011; GX900-NEXT: s_waitcnt vmcnt(0)2012; GX900-NEXT: v_pk_fma_f16 v4, v0, v2, v4 op_sel_hi:[0,1,1]2013; GX900-NEXT: v_pk_fma_f16 v2, v1, v2, v5 op_sel_hi:[0,1,1]2014; GX900-NEXT: v_pk_fma_f16 v0, v0, v3, v4 op_sel:[1,0,0]2015; GX900-NEXT: v_pk_fma_f16 v1, v1, v3, v2 op_sel:[1,0,0]2016; GX900-NEXT: global_store_dwordx2 v6, v[0:1], s[4:5]2017; GX900-NEXT: s_endpgm2018;2019; GFX942-LABEL: fma_shuffle_v2f16:2020; GFX942: ; %bb.0: ; %entry2021; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x02022; GFX942-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x102023; GFX942-NEXT: v_and_b32_e32 v0, 0x3ff, v02024; GFX942-NEXT: v_lshlrev_b32_e32 v6, 3, v02025; GFX942-NEXT: s_waitcnt lgkmcnt(0)2026; GFX942-NEXT: global_load_dwordx2 v[0:1], v6, s[0:1]2027; GFX942-NEXT: global_load_dwordx2 v[2:3], v6, s[2:3]2028; GFX942-NEXT: global_load_dwordx2 v[4:5], v6, s[6:7]2029; GFX942-NEXT: s_waitcnt vmcnt(0)2030; GFX942-NEXT: v_pk_fma_f16 v4, v0, v2, v4 op_sel_hi:[0,1,1]2031; GFX942-NEXT: v_pk_fma_f16 v2, v1, v2, v5 op_sel_hi:[0,1,1]2032; GFX942-NEXT: v_pk_fma_f16 v0, v0, v3, v4 op_sel:[1,0,0]2033; GFX942-NEXT: v_pk_fma_f16 v1, v1, v3, v2 op_sel:[1,0,0]2034; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[6:7]2035; GFX942-NEXT: s_endpgm2036;2037; GFX10-LABEL: fma_shuffle_v2f16:2038; GFX10: ; %bb.0: ; %entry2039; GFX10-NEXT: s_clause 0x12040; GFX10-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02041; GFX10-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x102042; GFX10-NEXT: v_lshlrev_b32_e32 v6, 3, v02043; GFX10-NEXT: s_waitcnt lgkmcnt(0)2044; GFX10-NEXT: s_clause 0x22045; GFX10-NEXT: global_load_dwordx2 v[0:1], v6, s[0:1]2046; GFX10-NEXT: global_load_dwordx2 v[2:3], v6, s[2:3]2047; GFX10-NEXT: global_load_dwordx2 v[4:5], v6, s[4:5]2048; GFX10-NEXT: s_waitcnt vmcnt(0)2049; GFX10-NEXT: v_pk_fma_f16 v4, v0, v2, v4 op_sel_hi:[0,1,1]2050; GFX10-NEXT: v_pk_fma_f16 v2, v1, v2, v5 op_sel_hi:[0,1,1]2051; GFX10-NEXT: v_pk_fma_f16 v0, v0, v3, v4 op_sel:[1,0,0]2052; GFX10-NEXT: v_pk_fma_f16 v1, v1, v3, v2 op_sel:[1,0,0]2053; GFX10-NEXT: global_store_dwordx2 v6, v[0:1], s[4:5]2054; GFX10-NEXT: s_endpgm2055;2056; GFX11-LABEL: fma_shuffle_v2f16:2057; GFX11: ; %bb.0: ; %entry2058; GFX11-NEXT: s_clause 0x12059; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x02060; GFX11-NEXT: s_load_b64 s[4:5], s[4:5], 0x102061; GFX11-NEXT: v_and_b32_e32 v0, 0x3ff, v02062; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)2063; GFX11-NEXT: v_lshlrev_b32_e32 v6, 3, v02064; GFX11-NEXT: s_waitcnt lgkmcnt(0)2065; GFX11-NEXT: s_clause 0x22066; GFX11-NEXT: global_load_b64 v[0:1], v6, s[0:1]2067; GFX11-NEXT: global_load_b64 v[2:3], v6, s[2:3]2068; GFX11-NEXT: global_load_b64 v[4:5], v6, s[4:5]2069; GFX11-NEXT: s_waitcnt vmcnt(0)2070; GFX11-NEXT: v_pk_fma_f16 v4, v0, v2, v4 op_sel_hi:[0,1,1]2071; GFX11-NEXT: v_pk_fma_f16 v2, v1, v2, v5 op_sel_hi:[0,1,1]2072; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2073; GFX11-NEXT: v_pk_fma_f16 v0, v0, v3, v4 op_sel:[1,0,0]2074; GFX11-NEXT: v_pk_fma_f16 v1, v1, v3, v2 op_sel:[1,0,0]2075; GFX11-NEXT: global_store_b64 v6, v[0:1], s[4:5]2076; GFX11-NEXT: s_endpgm2077entry:2078 %tmp1 = tail call i32 @llvm.amdgcn.workitem.id.x()2079 %tmp12 = zext i32 %tmp1 to i642080 %arrayidx = getelementptr inbounds <4 x half>, ptr addrspace(1) %A, i64 %tmp122081 %tmp14 = load <4 x half>, ptr addrspace(1) %arrayidx, align 82082 %arrayidx1 = getelementptr inbounds <4 x half>, ptr addrspace(1) %B, i64 %tmp122083 %tmp15 = load <4 x half>, ptr addrspace(1) %arrayidx1, align 82084 %arrayidx2 = getelementptr inbounds <4 x half>, ptr addrspace(1) %C, i64 %tmp122085 %tmp16 = load <4 x half>, ptr addrspace(1) %arrayidx2, align 82086 %tmp17 = shufflevector <4 x half> %tmp14, <4 x half> poison, <2 x i32> zeroinitializer2087 %tmp18 = shufflevector <4 x half> %tmp15, <4 x half> poison, <2 x i32> <i32 0, i32 1>2088 %tmp19 = shufflevector <4 x half> %tmp16, <4 x half> poison, <2 x i32> <i32 0, i32 1>2089 %tmp20 = tail call <2 x half> @llvm.fma.v2f16(<2 x half> %tmp17, <2 x half> %tmp18, <2 x half> %tmp19)2090 %tmp21 = shufflevector <4 x half> %tmp14, <4 x half> poison, <2 x i32> <i32 1, i32 1>2091 %tmp22 = shufflevector <4 x half> %tmp15, <4 x half> poison, <2 x i32> <i32 2, i32 3>2092 %tmp23 = tail call <2 x half> @llvm.fma.v2f16(<2 x half> %tmp21, <2 x half> %tmp22, <2 x half> %tmp20)2093 %tmp24 = shufflevector <2 x half> %tmp23, <2 x half> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>2094 %tmp25 = shufflevector <4 x half> %tmp24, <4 x half> %tmp16, <4 x i32> <i32 0, i32 1, i32 6, i32 7>2095 %tmp26 = shufflevector <4 x half> %tmp14, <4 x half> poison, <2 x i32> <i32 2, i32 2>2096 %tmp27 = shufflevector <4 x half> %tmp25, <4 x half> poison, <2 x i32> <i32 2, i32 3>2097 %tmp28 = tail call <2 x half> @llvm.fma.v2f16(<2 x half> %tmp26, <2 x half> %tmp18, <2 x half> %tmp27)2098 %tmp29 = shufflevector <4 x half> %tmp14, <4 x half> poison, <2 x i32> <i32 3, i32 3>2099 %tmp30 = tail call <2 x half> @llvm.fma.v2f16(<2 x half> %tmp29, <2 x half> %tmp22, <2 x half> %tmp28)2100 %tmp31 = shufflevector <2 x half> %tmp30, <2 x half> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>2101 %tmp32 = shufflevector <4 x half> %tmp25, <4 x half> %tmp31, <4 x i32> <i32 0, i32 1, i32 4, i32 5>2102 store <4 x half> %tmp32, ptr addrspace(1) %arrayidx2, align 82103 ret void2104}2105 2106define <4 x half> @shuffle_v4f16_0456(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {2107; GX900-LABEL: shuffle_v4f16_0456:2108; GX900: ; %bb.0:2109; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2110; GX900-NEXT: global_load_dwordx2 v[4:5], v[0:1], off2111; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off2112; GX900-NEXT: s_mov_b32 s4, 0x50401002113; GX900-NEXT: ; kill: killed $vgpr0 killed $vgpr12114; GX900-NEXT: ; kill: killed $vgpr2 killed $vgpr32115; GX900-NEXT: s_waitcnt vmcnt(0)2116; GX900-NEXT: v_perm_b32 v0, v5, v4, s42117; GX900-NEXT: v_alignbit_b32 v1, v6, v5, 162118; GX900-NEXT: s_setpc_b64 s[30:31]2119;2120; GFX942-LABEL: shuffle_v4f16_0456:2121; GFX942: ; %bb.0:2122; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; GFX942-NEXT: global_load_dwordx2 v[4:5], v[0:1], off2124; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off2125; GFX942-NEXT: s_mov_b32 s0, 0x50401002126; GFX942-NEXT: s_waitcnt vmcnt(0)2127; GFX942-NEXT: v_perm_b32 v0, v6, v4, s02128; GFX942-NEXT: v_alignbit_b32 v1, v7, v6, 162129; GFX942-NEXT: s_setpc_b64 s[30:31]2130;2131; GFX10-LABEL: shuffle_v4f16_0456:2132; GFX10: ; %bb.0:2133; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2134; GFX10-NEXT: global_load_dwordx2 v[4:5], v[0:1], off2135; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off2136; GFX10-NEXT: ; kill: killed $vgpr0 killed $vgpr12137; GFX10-NEXT: ; kill: killed $vgpr2 killed $vgpr32138; GFX10-NEXT: s_waitcnt vmcnt(0)2139; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x50401002140; GFX10-NEXT: v_alignbit_b32 v1, v6, v5, 162141; GFX10-NEXT: s_setpc_b64 s[30:31]2142;2143; GFX11-TRUE16-LABEL: shuffle_v4f16_0456:2144; GFX11-TRUE16: ; %bb.0:2145; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2146; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off2147; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off2148; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2149; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l2150; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h2151; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l2152; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2153;2154; GFX11-FAKE16-LABEL: shuffle_v4f16_0456:2155; GFX11-FAKE16: ; %bb.0:2156; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2157; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off2158; GFX11-FAKE16-NEXT: global_load_b64 v[1:2], v[2:3], off2159; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2160; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401002161; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 162162; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2163 %val0 = load <4 x half>, ptr addrspace(1) %arg02164 %val1 = load <4 x half>, ptr addrspace(1) %arg12165 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <4 x i32> <i32 0, i32 4, i32 5, i32 6>2166 ret <4 x half> %shuffle2167}2168 2169define amdgpu_kernel void @shuffle_scalar_load_v8i32_0123(ptr addrspace(4) %in, ptr addrspace(1) %out) {2170; GX900-LABEL: shuffle_scalar_load_v8i32_0123:2171; GX900: ; %bb.0:2172; GX900-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02173; GX900-NEXT: v_mov_b32_e32 v4, 02174; GX900-NEXT: s_waitcnt lgkmcnt(0)2175; GX900-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x02176; GX900-NEXT: s_waitcnt lgkmcnt(0)2177; GX900-NEXT: v_mov_b32_e32 v0, s42178; GX900-NEXT: v_mov_b32_e32 v1, s52179; GX900-NEXT: v_mov_b32_e32 v2, s62180; GX900-NEXT: v_mov_b32_e32 v3, s72181; GX900-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]2182; GX900-NEXT: s_endpgm2183;2184; GFX942-LABEL: shuffle_scalar_load_v8i32_0123:2185; GFX942: ; %bb.0:2186; GFX942-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x02187; GFX942-NEXT: v_mov_b32_e32 v0, 02188; GFX942-NEXT: s_waitcnt lgkmcnt(0)2189; GFX942-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x02190; GFX942-NEXT: s_waitcnt lgkmcnt(0)2191; GFX942-NEXT: v_mov_b64_e32 v[2:3], s[4:5]2192; GFX942-NEXT: v_mov_b64_e32 v[4:5], s[6:7]2193; GFX942-NEXT: global_store_dwordx4 v0, v[2:5], s[2:3]2194; GFX942-NEXT: s_endpgm2195;2196; GFX10-LABEL: shuffle_scalar_load_v8i32_0123:2197; GFX10: ; %bb.0:2198; GFX10-NEXT: s_load_dwordx4 s[0:3], s[8:9], 0x02199; GFX10-NEXT: v_mov_b32_e32 v4, 02200; GFX10-NEXT: s_waitcnt lgkmcnt(0)2201; GFX10-NEXT: s_load_dwordx4 s[4:7], s[0:1], 0x02202; GFX10-NEXT: s_waitcnt lgkmcnt(0)2203; GFX10-NEXT: v_mov_b32_e32 v0, s42204; GFX10-NEXT: v_mov_b32_e32 v1, s52205; GFX10-NEXT: v_mov_b32_e32 v2, s62206; GFX10-NEXT: v_mov_b32_e32 v3, s72207; GFX10-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]2208; GFX10-NEXT: s_endpgm2209;2210; GFX11-LABEL: shuffle_scalar_load_v8i32_0123:2211; GFX11: ; %bb.0:2212; GFX11-NEXT: s_load_b128 s[0:3], s[4:5], 0x02213; GFX11-NEXT: s_waitcnt lgkmcnt(0)2214; GFX11-NEXT: s_load_b128 s[4:7], s[0:1], 0x02215; GFX11-NEXT: v_mov_b32_e32 v4, 02216; GFX11-NEXT: s_waitcnt lgkmcnt(0)2217; GFX11-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v3, s72218; GFX11-NEXT: v_dual_mov_b32 v1, s5 :: v_dual_mov_b32 v2, s62219; GFX11-NEXT: global_store_b128 v4, v[0:3], s[2:3]2220; GFX11-NEXT: s_endpgm2221 %ld8 = load <8 x i32>, ptr addrspace(4) %in, align 162222 %id = shufflevector <8 x i32> %ld8, <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2223 store <4 x i32> %id, ptr addrspace(1) %out, align 82224 ret void2225}2226 2227define <2 x half> @low16bits_v2f16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2228; GX900-LABEL: low16bits_v2f16:2229; GX900: ; %bb.0: ; %entry2230; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2231; GX900-NEXT: global_load_dword v4, v[0:1], off2232; GX900-NEXT: global_load_dword v5, v[2:3], off2233; GX900-NEXT: s_mov_b32 s4, 0x50401002234; GX900-NEXT: s_waitcnt vmcnt(0)2235; GX900-NEXT: v_perm_b32 v0, v5, v4, s42236; GX900-NEXT: s_setpc_b64 s[30:31]2237;2238; GFX942-LABEL: low16bits_v2f16:2239; GFX942: ; %bb.0: ; %entry2240; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2241; GFX942-NEXT: global_load_dword v4, v[0:1], off2242; GFX942-NEXT: global_load_dword v5, v[2:3], off2243; GFX942-NEXT: s_mov_b32 s0, 0x50401002244; GFX942-NEXT: s_waitcnt vmcnt(0)2245; GFX942-NEXT: v_perm_b32 v0, v5, v4, s02246; GFX942-NEXT: s_setpc_b64 s[30:31]2247;2248; GFX10-LABEL: low16bits_v2f16:2249; GFX10: ; %bb.0: ; %entry2250; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2251; GFX10-NEXT: global_load_dword v4, v[0:1], off2252; GFX10-NEXT: global_load_dword v5, v[2:3], off2253; GFX10-NEXT: s_waitcnt vmcnt(0)2254; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x50401002255; GFX10-NEXT: s_setpc_b64 s[30:31]2256;2257; GFX11-TRUE16-LABEL: low16bits_v2f16:2258; GFX11-TRUE16: ; %bb.0: ; %entry2259; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2260; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off2261; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2262; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2263; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l2264; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2265;2266; GFX11-FAKE16-LABEL: low16bits_v2f16:2267; GFX11-FAKE16: ; %bb.0: ; %entry2268; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2269; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2270; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2271; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2272; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401002273; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2274entry:2275 %0 = load <2 x half>, ptr addrspace(1) %x0, align 42276 %1 = load <2 x half>, ptr addrspace(1) %x1, align 42277 %vy1.0.vec.insert = shufflevector <2 x half> %0, <2 x half> poison, <2 x i32> <i32 0, i32 poison>2278 %vy1.2.vec.insert = shufflevector <2 x half> %vy1.0.vec.insert, <2 x half> %1, <2 x i32> <i32 0, i32 2>2279 ret <2 x half> %vy1.2.vec.insert2280}2281 2282define <2 x half> @hi16bits_v2f16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2283; GX900-LABEL: hi16bits_v2f16:2284; GX900: ; %bb.0: ; %entry2285; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2286; GX900-NEXT: global_load_dword v4, v[0:1], off2287; GX900-NEXT: global_load_dword v5, v[2:3], off2288; GX900-NEXT: s_mov_b32 s4, 0x70603022289; GX900-NEXT: s_waitcnt vmcnt(0)2290; GX900-NEXT: v_perm_b32 v0, v5, v4, s42291; GX900-NEXT: s_setpc_b64 s[30:31]2292;2293; GFX942-LABEL: hi16bits_v2f16:2294; GFX942: ; %bb.0: ; %entry2295; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2296; GFX942-NEXT: global_load_dword v4, v[0:1], off2297; GFX942-NEXT: global_load_dword v5, v[2:3], off2298; GFX942-NEXT: s_mov_b32 s0, 0x70603022299; GFX942-NEXT: s_waitcnt vmcnt(0)2300; GFX942-NEXT: v_perm_b32 v0, v5, v4, s02301; GFX942-NEXT: s_setpc_b64 s[30:31]2302;2303; GFX10-LABEL: hi16bits_v2f16:2304; GFX10: ; %bb.0: ; %entry2305; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2306; GFX10-NEXT: global_load_dword v4, v[0:1], off2307; GFX10-NEXT: global_load_dword v5, v[2:3], off2308; GFX10-NEXT: s_waitcnt vmcnt(0)2309; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x70603022310; GFX10-NEXT: s_setpc_b64 s[30:31]2311;2312; GFX11-TRUE16-LABEL: hi16bits_v2f16:2313; GFX11-TRUE16: ; %bb.0: ; %entry2314; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2315; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off2316; GFX11-TRUE16-NEXT: global_load_b32 v0, v[2:3], off2317; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2318; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.h2319; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2320;2321; GFX11-FAKE16-LABEL: hi16bits_v2f16:2322; GFX11-FAKE16: ; %bb.0: ; %entry2323; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2324; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2325; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2326; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2327; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x70603022328; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2329entry:2330 %0 = load <2 x half>, ptr addrspace(1) %x0, align 42331 %1 = load <2 x half>, ptr addrspace(1) %x1, align 42332 %vy1.0.vec.insert = shufflevector <2 x half> %0, <2 x half> poison, <2 x i32> <i32 1, i32 poison>2333 %vy1.2.vec.insert = shufflevector <2 x half> %vy1.0.vec.insert, <2 x half> %1, <2 x i32> <i32 0, i32 3>2334 ret <2 x half> %vy1.2.vec.insert2335}2336 2337define <2 x half> @low16hi16bits_v2f16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2338; GX900-LABEL: low16hi16bits_v2f16:2339; GX900: ; %bb.0: ; %entry2340; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2341; GX900-NEXT: global_load_dword v4, v[0:1], off2342; GX900-NEXT: global_load_dword v5, v[2:3], off2343; GX900-NEXT: s_mov_b32 s4, 0xffff2344; GX900-NEXT: s_waitcnt vmcnt(0)2345; GX900-NEXT: v_bfi_b32 v0, s4, v4, v52346; GX900-NEXT: s_setpc_b64 s[30:31]2347;2348; GFX942-LABEL: low16hi16bits_v2f16:2349; GFX942: ; %bb.0: ; %entry2350; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2351; GFX942-NEXT: global_load_dword v4, v[0:1], off2352; GFX942-NEXT: global_load_dword v5, v[2:3], off2353; GFX942-NEXT: s_mov_b32 s0, 0xffff2354; GFX942-NEXT: s_waitcnt vmcnt(0)2355; GFX942-NEXT: v_bfi_b32 v0, s0, v4, v52356; GFX942-NEXT: s_setpc_b64 s[30:31]2357;2358; GFX10-LABEL: low16hi16bits_v2f16:2359; GFX10: ; %bb.0: ; %entry2360; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX10-NEXT: global_load_dword v4, v[0:1], off2362; GFX10-NEXT: global_load_dword v5, v[2:3], off2363; GFX10-NEXT: s_waitcnt vmcnt(0)2364; GFX10-NEXT: v_bfi_b32 v0, 0xffff, v4, v52365; GFX10-NEXT: s_setpc_b64 s[30:31]2366;2367; GFX11-TRUE16-LABEL: low16hi16bits_v2f16:2368; GFX11-TRUE16: ; %bb.0: ; %entry2369; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2370; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off2371; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2372; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2373; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.h2374; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2375;2376; GFX11-FAKE16-LABEL: low16hi16bits_v2f16:2377; GFX11-FAKE16: ; %bb.0: ; %entry2378; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2379; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2380; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2381; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2382; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v0, v12383; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2384entry:2385 %0 = load <2 x half>, ptr addrspace(1) %x0, align 42386 %1 = load <2 x half>, ptr addrspace(1) %x1, align 42387 %vy1.0.vec.insert = shufflevector <2 x half> %0, <2 x half> poison, <2 x i32> <i32 0, i32 poison>2388 %vy1.2.vec.insert = shufflevector <2 x half> %vy1.0.vec.insert, <2 x half> %1, <2 x i32> <i32 0, i32 3>2389 ret <2 x half> %vy1.2.vec.insert2390}2391 2392define <2 x half> @hi16low16bits_v2bf16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2393; GFX9-LABEL: hi16low16bits_v2bf16:2394; GFX9: ; %bb.0: ; %entry2395; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2396; GFX9-NEXT: global_load_dword v4, v[0:1], off2397; GFX9-NEXT: global_load_dword v5, v[2:3], off2398; GFX9-NEXT: s_waitcnt vmcnt(0)2399; GFX9-NEXT: v_alignbit_b32 v0, v5, v4, 162400; GFX9-NEXT: s_setpc_b64 s[30:31]2401;2402; GFX10-LABEL: hi16low16bits_v2bf16:2403; GFX10: ; %bb.0: ; %entry2404; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2405; GFX10-NEXT: global_load_dword v4, v[0:1], off2406; GFX10-NEXT: global_load_dword v5, v[2:3], off2407; GFX10-NEXT: s_waitcnt vmcnt(0)2408; GFX10-NEXT: v_alignbit_b32 v0, v5, v4, 162409; GFX10-NEXT: s_setpc_b64 s[30:31]2410;2411; GFX11-TRUE16-LABEL: hi16low16bits_v2bf16:2412; GFX11-TRUE16: ; %bb.0: ; %entry2413; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2414; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2415; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off2416; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)2417; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h2418; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2419; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l2420; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2421;2422; GFX11-FAKE16-LABEL: hi16low16bits_v2bf16:2423; GFX11-FAKE16: ; %bb.0: ; %entry2424; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2425; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2426; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2427; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2428; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v1, v0, 162429; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2430entry:2431 %0 = load <2 x half>, ptr addrspace(1) %x0, align 42432 %1 = load <2 x half>, ptr addrspace(1) %x1, align 42433 %vy1.0.vec.insert = shufflevector <2 x half> %0, <2 x half> poison, <2 x i32> <i32 1, i32 poison>2434 %vy1.2.vec.insert = shufflevector <2 x half> %vy1.0.vec.insert, <2 x half> %1, <2 x i32> <i32 0, i32 2>2435 ret <2 x half> %vy1.2.vec.insert2436}2437 2438define <2 x i16> @i16_low16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2439; GX900-LABEL: i16_low16bits:2440; GX900: ; %bb.0: ; %entry2441; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2442; GX900-NEXT: global_load_dword v4, v[0:1], off2443; GX900-NEXT: global_load_dword v5, v[2:3], off2444; GX900-NEXT: s_mov_b32 s4, 0x50401002445; GX900-NEXT: s_waitcnt vmcnt(0)2446; GX900-NEXT: v_perm_b32 v0, v5, v4, s42447; GX900-NEXT: s_setpc_b64 s[30:31]2448;2449; GFX942-LABEL: i16_low16bits:2450; GFX942: ; %bb.0: ; %entry2451; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX942-NEXT: global_load_dword v4, v[0:1], off2453; GFX942-NEXT: global_load_dword v5, v[2:3], off2454; GFX942-NEXT: s_mov_b32 s0, 0x50401002455; GFX942-NEXT: s_waitcnt vmcnt(0)2456; GFX942-NEXT: v_perm_b32 v0, v5, v4, s02457; GFX942-NEXT: s_setpc_b64 s[30:31]2458;2459; GFX10-LABEL: i16_low16bits:2460; GFX10: ; %bb.0: ; %entry2461; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2462; GFX10-NEXT: global_load_dword v4, v[0:1], off2463; GFX10-NEXT: global_load_dword v5, v[2:3], off2464; GFX10-NEXT: s_waitcnt vmcnt(0)2465; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x50401002466; GFX10-NEXT: s_setpc_b64 s[30:31]2467;2468; GFX11-TRUE16-LABEL: i16_low16bits:2469; GFX11-TRUE16: ; %bb.0: ; %entry2470; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2471; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off2472; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2473; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2474; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l2475; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2476;2477; GFX11-FAKE16-LABEL: i16_low16bits:2478; GFX11-FAKE16: ; %bb.0: ; %entry2479; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2480; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2481; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2482; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2483; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401002484; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2485entry:2486 %0 = load <2 x i16>, ptr addrspace(1) %x0, align 42487 %1 = load <2 x i16>, ptr addrspace(1) %x1, align 42488 %vy1.0.vec.insert = shufflevector <2 x i16> %0, <2 x i16> poison, <2 x i32> <i32 0, i32 poison>2489 %vy1.2.vec.insert = shufflevector <2 x i16> %vy1.0.vec.insert, <2 x i16> %1, <2 x i32> <i32 0, i32 2>2490 ret <2 x i16> %vy1.2.vec.insert2491}2492 2493define <2 x i16> @i16_low16hi16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2494; GX900-LABEL: i16_low16hi16bits:2495; GX900: ; %bb.0: ; %entry2496; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2497; GX900-NEXT: global_load_dword v4, v[0:1], off2498; GX900-NEXT: global_load_dword v5, v[2:3], off2499; GX900-NEXT: s_mov_b32 s4, 0xffff2500; GX900-NEXT: s_waitcnt vmcnt(0)2501; GX900-NEXT: v_bfi_b32 v0, s4, v4, v52502; GX900-NEXT: s_setpc_b64 s[30:31]2503;2504; GFX942-LABEL: i16_low16hi16bits:2505; GFX942: ; %bb.0: ; %entry2506; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2507; GFX942-NEXT: global_load_dword v4, v[0:1], off2508; GFX942-NEXT: global_load_dword v5, v[2:3], off2509; GFX942-NEXT: s_mov_b32 s0, 0xffff2510; GFX942-NEXT: s_waitcnt vmcnt(0)2511; GFX942-NEXT: v_bfi_b32 v0, s0, v4, v52512; GFX942-NEXT: s_setpc_b64 s[30:31]2513;2514; GFX10-LABEL: i16_low16hi16bits:2515; GFX10: ; %bb.0: ; %entry2516; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2517; GFX10-NEXT: global_load_dword v4, v[0:1], off2518; GFX10-NEXT: global_load_dword v5, v[2:3], off2519; GFX10-NEXT: s_waitcnt vmcnt(0)2520; GFX10-NEXT: v_bfi_b32 v0, 0xffff, v4, v52521; GFX10-NEXT: s_setpc_b64 s[30:31]2522;2523; GFX11-TRUE16-LABEL: i16_low16hi16bits:2524; GFX11-TRUE16: ; %bb.0: ; %entry2525; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2526; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off2527; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2528; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2529; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.h2530; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2531;2532; GFX11-FAKE16-LABEL: i16_low16hi16bits:2533; GFX11-FAKE16: ; %bb.0: ; %entry2534; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2535; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2536; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2537; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2538; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v0, v12539; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2540entry:2541 %0 = load <2 x i16>, ptr addrspace(1) %x0, align 42542 %1 = load <2 x i16>, ptr addrspace(1) %x1, align 42543 %vy1.0.vec.insert = shufflevector <2 x i16> %0, <2 x i16> poison, <2 x i32> <i32 0, i32 poison>2544 %vy1.2.vec.insert = shufflevector <2 x i16> %vy1.0.vec.insert, <2 x i16> %1, <2 x i32> <i32 0, i32 3>2545 ret <2 x i16> %vy1.2.vec.insert2546}2547 2548define <2 x i16> @i16_hi16low16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2549; GFX9-LABEL: i16_hi16low16bits:2550; GFX9: ; %bb.0: ; %entry2551; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2552; GFX9-NEXT: global_load_dword v4, v[0:1], off2553; GFX9-NEXT: global_load_dword v5, v[2:3], off2554; GFX9-NEXT: s_waitcnt vmcnt(0)2555; GFX9-NEXT: v_alignbit_b32 v0, v5, v4, 162556; GFX9-NEXT: s_setpc_b64 s[30:31]2557;2558; GFX10-LABEL: i16_hi16low16bits:2559; GFX10: ; %bb.0: ; %entry2560; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2561; GFX10-NEXT: global_load_dword v4, v[0:1], off2562; GFX10-NEXT: global_load_dword v5, v[2:3], off2563; GFX10-NEXT: s_waitcnt vmcnt(0)2564; GFX10-NEXT: v_alignbit_b32 v0, v5, v4, 162565; GFX10-NEXT: s_setpc_b64 s[30:31]2566;2567; GFX11-TRUE16-LABEL: i16_hi16low16bits:2568; GFX11-TRUE16: ; %bb.0: ; %entry2569; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2570; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off2571; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off2572; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)2573; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h2574; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2575; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l2576; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2577;2578; GFX11-FAKE16-LABEL: i16_hi16low16bits:2579; GFX11-FAKE16: ; %bb.0: ; %entry2580; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2581; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2582; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2583; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2584; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v1, v0, 162585; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2586entry:2587 %0 = load <2 x i16>, ptr addrspace(1) %x0, align 42588 %1 = load <2 x i16>, ptr addrspace(1) %x1, align 42589 %vy1.0.vec.insert = shufflevector <2 x i16> %0, <2 x i16> poison, <2 x i32> <i32 1, i32 poison>2590 %vy1.2.vec.insert = shufflevector <2 x i16> %vy1.0.vec.insert, <2 x i16> %1, <2 x i32> <i32 0, i32 2>2591 ret <2 x i16> %vy1.2.vec.insert2592}2593 2594define <2 x i16> @i16_hi16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {2595; GX900-LABEL: i16_hi16bits:2596; GX900: ; %bb.0: ; %entry2597; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2598; GX900-NEXT: global_load_dword v4, v[0:1], off2599; GX900-NEXT: global_load_dword v5, v[2:3], off2600; GX900-NEXT: s_mov_b32 s4, 0x70603022601; GX900-NEXT: s_waitcnt vmcnt(0)2602; GX900-NEXT: v_perm_b32 v0, v5, v4, s42603; GX900-NEXT: s_setpc_b64 s[30:31]2604;2605; GFX942-LABEL: i16_hi16bits:2606; GFX942: ; %bb.0: ; %entry2607; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2608; GFX942-NEXT: global_load_dword v4, v[0:1], off2609; GFX942-NEXT: global_load_dword v5, v[2:3], off2610; GFX942-NEXT: s_mov_b32 s0, 0x70603022611; GFX942-NEXT: s_waitcnt vmcnt(0)2612; GFX942-NEXT: v_perm_b32 v0, v5, v4, s02613; GFX942-NEXT: s_setpc_b64 s[30:31]2614;2615; GFX10-LABEL: i16_hi16bits:2616; GFX10: ; %bb.0: ; %entry2617; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2618; GFX10-NEXT: global_load_dword v4, v[0:1], off2619; GFX10-NEXT: global_load_dword v5, v[2:3], off2620; GFX10-NEXT: s_waitcnt vmcnt(0)2621; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x70603022622; GFX10-NEXT: s_setpc_b64 s[30:31]2623;2624; GFX11-TRUE16-LABEL: i16_hi16bits:2625; GFX11-TRUE16: ; %bb.0: ; %entry2626; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2627; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off2628; GFX11-TRUE16-NEXT: global_load_b32 v0, v[2:3], off2629; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)2630; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.h2631; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]2632;2633; GFX11-FAKE16-LABEL: i16_hi16bits:2634; GFX11-FAKE16: ; %bb.0: ; %entry2635; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off2637; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off2638; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)2639; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x70603022640; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]2641entry:2642 %0 = load <2 x i16>, ptr addrspace(1) %x0, align 42643 %1 = load <2 x i16>, ptr addrspace(1) %x1, align 42644 %vy1.0.vec.insert = shufflevector <2 x i16> %0, <2 x i16> poison, <2 x i32> <i32 1, i32 poison>2645 %vy1.2.vec.insert = shufflevector <2 x i16> %vy1.0.vec.insert, <2 x i16> %1, <2 x i32> <i32 0, i32 3>2646 ret <2 x i16> %vy1.2.vec.insert2647}2648 2649define <2 x i16> @v2i16_hi16bits(ptr addrspace(1) %x0) {2650; GFX9-LABEL: v2i16_hi16bits:2651; GFX9: ; %bb.0: ; %entry2652; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2653; GFX9-NEXT: global_load_dword v0, v[0:1], off2654; GFX9-NEXT: s_waitcnt vmcnt(0)2655; GFX9-NEXT: v_and_b32_e32 v0, 0xffff0000, v02656; GFX9-NEXT: s_setpc_b64 s[30:31]2657;2658; GFX10-LABEL: v2i16_hi16bits:2659; GFX10: ; %bb.0: ; %entry2660; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2661; GFX10-NEXT: global_load_dword v0, v[0:1], off2662; GFX10-NEXT: s_waitcnt vmcnt(0)2663; GFX10-NEXT: v_and_b32_e32 v0, 0xffff0000, v02664; GFX10-NEXT: s_setpc_b64 s[30:31]2665;2666; GFX11-LABEL: v2i16_hi16bits:2667; GFX11: ; %bb.0: ; %entry2668; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2669; GFX11-NEXT: global_load_b32 v0, v[0:1], off2670; GFX11-NEXT: s_waitcnt vmcnt(0)2671; GFX11-NEXT: v_and_b32_e32 v0, 0xffff0000, v02672; GFX11-NEXT: s_setpc_b64 s[30:31]2673entry:2674 %load0 = load <2 x i16>, ptr addrspace(1) %x0, align 42675 %insert1 = insertelement <2 x i16> poison, i16 0, i32 02676 %insert2 = insertelement <2 x i16> %insert1, i16 0, i32 12677 %vec.ret = shufflevector <2 x i16> %insert2, <2 x i16> %load0, <2 x i32> <i32 0, i32 3>2678 ret <2 x i16> %vec.ret2679}2680 2681define <2 x half> @v2half_hi16bits(ptr addrspace(1) %x0) {2682; GFX9-LABEL: v2half_hi16bits:2683; GFX9: ; %bb.0: ; %entry2684; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2685; GFX9-NEXT: global_load_dword v0, v[0:1], off2686; GFX9-NEXT: s_waitcnt vmcnt(0)2687; GFX9-NEXT: v_and_b32_e32 v0, 0xffff0000, v02688; GFX9-NEXT: s_setpc_b64 s[30:31]2689;2690; GFX10-LABEL: v2half_hi16bits:2691; GFX10: ; %bb.0: ; %entry2692; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2693; GFX10-NEXT: global_load_dword v0, v[0:1], off2694; GFX10-NEXT: s_waitcnt vmcnt(0)2695; GFX10-NEXT: v_and_b32_e32 v0, 0xffff0000, v02696; GFX10-NEXT: s_setpc_b64 s[30:31]2697;2698; GFX11-LABEL: v2half_hi16bits:2699; GFX11: ; %bb.0: ; %entry2700; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2701; GFX11-NEXT: global_load_b32 v0, v[0:1], off2702; GFX11-NEXT: s_waitcnt vmcnt(0)2703; GFX11-NEXT: v_and_b32_e32 v0, 0xffff0000, v02704; GFX11-NEXT: s_setpc_b64 s[30:31]2705entry:2706 %load0 = load <2 x half>, ptr addrspace(1) %x0, align 42707 %insert1 = insertelement <2 x half> poison, half 0.0, i32 02708 %insert2 = insertelement <2 x half> %insert1, half 0.0, i32 12709 %vec.ret = shufflevector <2 x half> %insert2, <2 x half> %load0, <2 x i32> <i32 0, i32 3>2710 ret <2 x half> %vec.ret2711}2712 2713define void @shuffle_v8f16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2714; GFX9-LABEL: shuffle_v8f16_concat:2715; GFX9: ; %bb.0:2716; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2717; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2718; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2719; GFX9-NEXT: s_waitcnt vmcnt(0)2720; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off2721; GFX9-NEXT: s_waitcnt vmcnt(0)2722; GFX9-NEXT: s_setpc_b64 s[30:31]2723;2724; GFX10-LABEL: shuffle_v8f16_concat:2725; GFX10: ; %bb.0:2726; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2728; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2729; GFX10-NEXT: s_waitcnt vmcnt(0)2730; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off2731; GFX10-NEXT: s_setpc_b64 s[30:31]2732;2733; GFX11-LABEL: shuffle_v8f16_concat:2734; GFX11: ; %bb.0:2735; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2736; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2737; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off2738; GFX11-NEXT: s_waitcnt vmcnt(0)2739; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2740; GFX11-NEXT: s_setpc_b64 s[30:31]2741 %val0 = load <4 x half>, ptr addrspace(1) %arg02742 %val1 = load <4 x half>, ptr addrspace(1) %arg12743 %shuffle = shufflevector <4 x half> %val0, <4 x half> %val1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2744 store <8 x half> %shuffle, ptr addrspace(1) %out2745 ret void2746}2747 2748define void @shuffle_v16f16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2749; GFX9-LABEL: shuffle_v16f16_concat:2750; GFX9: ; %bb.0:2751; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2752; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2753; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off2754; GFX9-NEXT: s_waitcnt vmcnt(1)2755; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:162756; GFX9-NEXT: s_waitcnt vmcnt(1)2757; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off2758; GFX9-NEXT: s_waitcnt vmcnt(0)2759; GFX9-NEXT: s_setpc_b64 s[30:31]2760;2761; GFX10-LABEL: shuffle_v16f16_concat:2762; GFX10: ; %bb.0:2763; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2764; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2765; GFX10-NEXT: global_load_dwordx4 v[10:13], v[0:1], off2766; GFX10-NEXT: s_waitcnt vmcnt(1)2767; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:162768; GFX10-NEXT: s_waitcnt vmcnt(0)2769; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off2770; GFX10-NEXT: s_setpc_b64 s[30:31]2771;2772; GFX11-LABEL: shuffle_v16f16_concat:2773; GFX11: ; %bb.0:2774; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2775; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off2776; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off2777; GFX11-NEXT: s_waitcnt vmcnt(1)2778; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:162779; GFX11-NEXT: s_waitcnt vmcnt(0)2780; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2781; GFX11-NEXT: s_setpc_b64 s[30:31]2782 %val0 = load <8 x half>, ptr addrspace(1) %arg02783 %val1 = load <8 x half>, ptr addrspace(1) %arg12784 %shuffle = shufflevector <8 x half> %val0, <8 x half> %val1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2785 store <16 x half> %shuffle, ptr addrspace(1) %out2786 ret void2787}2788 2789define void @shuffle_v32f16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2790; GFX9-LABEL: shuffle_v32f16_concat:2791; GFX9: ; %bb.0:2792; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2793; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2794; GFX9-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:162795; GFX9-NEXT: global_load_dwordx4 v[14:17], v[0:1], off2796; GFX9-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:162797; GFX9-NEXT: s_waitcnt vmcnt(3)2798; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:322799; GFX9-NEXT: s_waitcnt vmcnt(3)2800; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:482801; GFX9-NEXT: s_waitcnt vmcnt(3)2802; GFX9-NEXT: global_store_dwordx4 v[4:5], v[14:17], off2803; GFX9-NEXT: s_waitcnt vmcnt(3)2804; GFX9-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:162805; GFX9-NEXT: s_waitcnt vmcnt(0)2806; GFX9-NEXT: s_setpc_b64 s[30:31]2807;2808; GFX10-LABEL: shuffle_v32f16_concat:2809; GFX10: ; %bb.0:2810; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2811; GFX10-NEXT: s_clause 0x12812; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2813; GFX10-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:162814; GFX10-NEXT: s_clause 0x12815; GFX10-NEXT: global_load_dwordx4 v[14:17], v[0:1], off2816; GFX10-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:162817; GFX10-NEXT: s_waitcnt vmcnt(3)2818; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:322819; GFX10-NEXT: s_waitcnt vmcnt(2)2820; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:482821; GFX10-NEXT: s_waitcnt vmcnt(1)2822; GFX10-NEXT: global_store_dwordx4 v[4:5], v[14:17], off2823; GFX10-NEXT: s_waitcnt vmcnt(0)2824; GFX10-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:162825; GFX10-NEXT: s_setpc_b64 s[30:31]2826;2827; GFX11-LABEL: shuffle_v32f16_concat:2828; GFX11: ; %bb.0:2829; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2830; GFX11-NEXT: s_clause 0x12831; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off2832; GFX11-NEXT: global_load_b128 v[10:13], v[2:3], off offset:162833; GFX11-NEXT: s_clause 0x12834; GFX11-NEXT: global_load_b128 v[14:17], v[0:1], off2835; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off offset:162836; GFX11-NEXT: s_waitcnt vmcnt(3)2837; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:322838; GFX11-NEXT: s_waitcnt vmcnt(2)2839; GFX11-NEXT: global_store_b128 v[4:5], v[10:13], off offset:482840; GFX11-NEXT: s_waitcnt vmcnt(1)2841; GFX11-NEXT: global_store_b128 v[4:5], v[14:17], off2842; GFX11-NEXT: s_waitcnt vmcnt(0)2843; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off offset:162844; GFX11-NEXT: s_setpc_b64 s[30:31]2845 %val0 = load <16 x half>, ptr addrspace(1) %arg02846 %val1 = load <16 x half>, ptr addrspace(1) %arg12847 %shuffle = shufflevector <16 x half> %val0, <16 x half> %val1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>2848 store <32 x half> %shuffle, ptr addrspace(1) %out2849 ret void2850}2851 2852define void @shuffle_v8i16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2853; GFX9-LABEL: shuffle_v8i16_concat:2854; GFX9: ; %bb.0:2855; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2856; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2857; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2858; GFX9-NEXT: s_waitcnt vmcnt(0)2859; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off2860; GFX9-NEXT: s_waitcnt vmcnt(0)2861; GFX9-NEXT: s_setpc_b64 s[30:31]2862;2863; GFX10-LABEL: shuffle_v8i16_concat:2864; GFX10: ; %bb.0:2865; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2866; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off2867; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off2868; GFX10-NEXT: s_waitcnt vmcnt(0)2869; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off2870; GFX10-NEXT: s_setpc_b64 s[30:31]2871;2872; GFX11-LABEL: shuffle_v8i16_concat:2873; GFX11: ; %bb.0:2874; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2875; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off2876; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off2877; GFX11-NEXT: s_waitcnt vmcnt(0)2878; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2879; GFX11-NEXT: s_setpc_b64 s[30:31]2880 %val0 = load <4 x i16>, ptr addrspace(1) %arg02881 %val1 = load <4 x i16>, ptr addrspace(1) %arg12882 %shuffle = shufflevector <4 x i16> %val0, <4 x i16> %val1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2883 store <8 x i16> %shuffle, ptr addrspace(1) %out2884 ret void2885}2886 2887define void @shuffle_v16i16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2888; GFX9-LABEL: shuffle_v16i16_concat:2889; GFX9: ; %bb.0:2890; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2892; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off2893; GFX9-NEXT: s_waitcnt vmcnt(1)2894; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:162895; GFX9-NEXT: s_waitcnt vmcnt(1)2896; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off2897; GFX9-NEXT: s_waitcnt vmcnt(0)2898; GFX9-NEXT: s_setpc_b64 s[30:31]2899;2900; GFX10-LABEL: shuffle_v16i16_concat:2901; GFX10: ; %bb.0:2902; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2903; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2904; GFX10-NEXT: global_load_dwordx4 v[10:13], v[0:1], off2905; GFX10-NEXT: s_waitcnt vmcnt(1)2906; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:162907; GFX10-NEXT: s_waitcnt vmcnt(0)2908; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off2909; GFX10-NEXT: s_setpc_b64 s[30:31]2910;2911; GFX11-LABEL: shuffle_v16i16_concat:2912; GFX11: ; %bb.0:2913; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2914; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off2915; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off2916; GFX11-NEXT: s_waitcnt vmcnt(1)2917; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:162918; GFX11-NEXT: s_waitcnt vmcnt(0)2919; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off2920; GFX11-NEXT: s_setpc_b64 s[30:31]2921 %val0 = load <8 x i16>, ptr addrspace(1) %arg02922 %val1 = load <8 x i16>, ptr addrspace(1) %arg12923 %shuffle = shufflevector <8 x i16> %val0, <8 x i16> %val1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2924 store <16 x i16> %shuffle, ptr addrspace(1) %out2925 ret void2926}2927 2928define void @shuffle_v32i16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2929; GFX9-LABEL: shuffle_v32i16_concat:2930; GFX9: ; %bb.0:2931; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2932; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2933; GFX9-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:162934; GFX9-NEXT: global_load_dwordx4 v[14:17], v[0:1], off2935; GFX9-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:162936; GFX9-NEXT: s_waitcnt vmcnt(3)2937; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:322938; GFX9-NEXT: s_waitcnt vmcnt(3)2939; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:482940; GFX9-NEXT: s_waitcnt vmcnt(3)2941; GFX9-NEXT: global_store_dwordx4 v[4:5], v[14:17], off2942; GFX9-NEXT: s_waitcnt vmcnt(3)2943; GFX9-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:162944; GFX9-NEXT: s_waitcnt vmcnt(0)2945; GFX9-NEXT: s_setpc_b64 s[30:31]2946;2947; GFX10-LABEL: shuffle_v32i16_concat:2948; GFX10: ; %bb.0:2949; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2950; GFX10-NEXT: s_clause 0x12951; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off2952; GFX10-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:162953; GFX10-NEXT: s_clause 0x12954; GFX10-NEXT: global_load_dwordx4 v[14:17], v[0:1], off2955; GFX10-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:162956; GFX10-NEXT: s_waitcnt vmcnt(3)2957; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:322958; GFX10-NEXT: s_waitcnt vmcnt(2)2959; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:482960; GFX10-NEXT: s_waitcnt vmcnt(1)2961; GFX10-NEXT: global_store_dwordx4 v[4:5], v[14:17], off2962; GFX10-NEXT: s_waitcnt vmcnt(0)2963; GFX10-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:162964; GFX10-NEXT: s_setpc_b64 s[30:31]2965;2966; GFX11-LABEL: shuffle_v32i16_concat:2967; GFX11: ; %bb.0:2968; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2969; GFX11-NEXT: s_clause 0x12970; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off2971; GFX11-NEXT: global_load_b128 v[10:13], v[2:3], off offset:162972; GFX11-NEXT: s_clause 0x12973; GFX11-NEXT: global_load_b128 v[14:17], v[0:1], off2974; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off offset:162975; GFX11-NEXT: s_waitcnt vmcnt(3)2976; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:322977; GFX11-NEXT: s_waitcnt vmcnt(2)2978; GFX11-NEXT: global_store_b128 v[4:5], v[10:13], off offset:482979; GFX11-NEXT: s_waitcnt vmcnt(1)2980; GFX11-NEXT: global_store_b128 v[4:5], v[14:17], off2981; GFX11-NEXT: s_waitcnt vmcnt(0)2982; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off offset:162983; GFX11-NEXT: s_setpc_b64 s[30:31]2984 %val0 = load <16 x i16>, ptr addrspace(1) %arg02985 %val1 = load <16 x i16>, ptr addrspace(1) %arg12986 %shuffle = shufflevector <16 x i16> %val0, <16 x i16> %val1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>2987 store <32 x i16> %shuffle, ptr addrspace(1) %out2988 ret void2989}2990 2991define void @shuffle_v4i8_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {2992; GX900-LABEL: shuffle_v4i8_concat:2993; GX900: ; %bb.0:2994; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2995; GX900-NEXT: global_load_ushort v0, v[0:1], off2996; GX900-NEXT: s_nop 02997; GX900-NEXT: global_load_short_d16_hi v0, v[2:3], off2998; GX900-NEXT: s_waitcnt vmcnt(0)2999; GX900-NEXT: global_store_dword v[4:5], v0, off3000; GX900-NEXT: s_waitcnt vmcnt(0)3001; GX900-NEXT: s_setpc_b64 s[30:31]3002;3003; GFX942-LABEL: shuffle_v4i8_concat:3004; GFX942: ; %bb.0:3005; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3006; GFX942-NEXT: global_load_ushort v6, v[0:1], off3007; GFX942-NEXT: global_load_ushort v7, v[2:3], off3008; GFX942-NEXT: s_mov_b32 s0, 0x50401003009; GFX942-NEXT: s_waitcnt vmcnt(0)3010; GFX942-NEXT: v_perm_b32 v0, v7, v6, s03011; GFX942-NEXT: global_store_dword v[4:5], v0, off3012; GFX942-NEXT: s_waitcnt vmcnt(0)3013; GFX942-NEXT: s_setpc_b64 s[30:31]3014;3015; GFX10-LABEL: shuffle_v4i8_concat:3016; GFX10: ; %bb.0:3017; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3018; GFX10-NEXT: global_load_ushort v0, v[0:1], off3019; GFX10-NEXT: global_load_short_d16_hi v0, v[2:3], off3020; GFX10-NEXT: s_waitcnt vmcnt(0)3021; GFX10-NEXT: global_store_dword v[4:5], v0, off3022; GFX10-NEXT: s_setpc_b64 s[30:31]3023;3024; GFX11-TRUE16-LABEL: shuffle_v4i8_concat:3025; GFX11-TRUE16: ; %bb.0:3026; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3027; GFX11-TRUE16-NEXT: global_load_d16_b16 v0, v[0:1], off3028; GFX11-TRUE16-NEXT: global_load_d16_hi_b16 v0, v[2:3], off3029; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3030; GFX11-TRUE16-NEXT: global_store_b32 v[4:5], v0, off3031; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3032;3033; GFX11-FAKE16-LABEL: shuffle_v4i8_concat:3034; GFX11-FAKE16: ; %bb.0:3035; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3036; GFX11-FAKE16-NEXT: global_load_u16 v0, v[0:1], off3037; GFX11-FAKE16-NEXT: global_load_d16_hi_b16 v0, v[2:3], off3038; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3039; GFX11-FAKE16-NEXT: global_store_b32 v[4:5], v0, off3040; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3041 %val0 = load <2 x i8>, ptr addrspace(1) %arg03042 %val1 = load <2 x i8>, ptr addrspace(1) %arg13043 %shuffle = shufflevector <2 x i8> %val0, <2 x i8> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3044 store <4 x i8> %shuffle, ptr addrspace(1) %out3045 ret void3046}3047 3048define void @shuffle_v8i8_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3049; GFX9-LABEL: shuffle_v8i8_concat:3050; GFX9: ; %bb.0:3051; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3052; GFX9-NEXT: global_load_dword v6, v[0:1], off3053; GFX9-NEXT: global_load_dword v7, v[2:3], off3054; GFX9-NEXT: s_waitcnt vmcnt(0)3055; GFX9-NEXT: global_store_dwordx2 v[4:5], v[6:7], off3056; GFX9-NEXT: s_waitcnt vmcnt(0)3057; GFX9-NEXT: s_setpc_b64 s[30:31]3058;3059; GFX10-LABEL: shuffle_v8i8_concat:3060; GFX10: ; %bb.0:3061; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3062; GFX10-NEXT: global_load_dword v6, v[0:1], off3063; GFX10-NEXT: global_load_dword v7, v[2:3], off3064; GFX10-NEXT: s_waitcnt vmcnt(0)3065; GFX10-NEXT: global_store_dwordx2 v[4:5], v[6:7], off3066; GFX10-NEXT: s_setpc_b64 s[30:31]3067;3068; GFX11-LABEL: shuffle_v8i8_concat:3069; GFX11: ; %bb.0:3070; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3071; GFX11-NEXT: global_load_b32 v0, v[0:1], off3072; GFX11-NEXT: global_load_b32 v1, v[2:3], off3073; GFX11-NEXT: s_waitcnt vmcnt(0)3074; GFX11-NEXT: global_store_b64 v[4:5], v[0:1], off3075; GFX11-NEXT: s_setpc_b64 s[30:31]3076 %val0 = load <4 x i8>, ptr addrspace(1) %arg03077 %val1 = load <4 x i8>, ptr addrspace(1) %arg13078 %shuffle = shufflevector <4 x i8> %val0, <4 x i8> %val1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3079 store <8 x i8> %shuffle, ptr addrspace(1) %out3080 ret void3081}3082 3083define void @shuffle_v16i8_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3084; GFX9-LABEL: shuffle_v16i8_concat:3085; GFX9: ; %bb.0:3086; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3087; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off3088; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off3089; GFX9-NEXT: s_waitcnt vmcnt(0)3090; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off3091; GFX9-NEXT: s_waitcnt vmcnt(0)3092; GFX9-NEXT: s_setpc_b64 s[30:31]3093;3094; GFX10-LABEL: shuffle_v16i8_concat:3095; GFX10: ; %bb.0:3096; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3097; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off3098; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off3099; GFX10-NEXT: s_waitcnt vmcnt(0)3100; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off3101; GFX10-NEXT: s_setpc_b64 s[30:31]3102;3103; GFX11-LABEL: shuffle_v16i8_concat:3104; GFX11: ; %bb.0:3105; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3106; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off3107; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off3108; GFX11-NEXT: s_waitcnt vmcnt(0)3109; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3110; GFX11-NEXT: s_setpc_b64 s[30:31]3111 %val0 = load <8 x i8>, ptr addrspace(1) %arg03112 %val1 = load <8 x i8>, ptr addrspace(1) %arg13113 %shuffle = shufflevector <8 x i8> %val0, <8 x i8> %val1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3114 store <16 x i8> %shuffle, ptr addrspace(1) %out3115 ret void3116}3117 3118define void @shuffle_v32i8_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3119; GFX9-LABEL: shuffle_v32i8_concat:3120; GFX9: ; %bb.0:3121; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3123; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off3124; GFX9-NEXT: s_waitcnt vmcnt(1)3125; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:163126; GFX9-NEXT: s_waitcnt vmcnt(1)3127; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off3128; GFX9-NEXT: s_waitcnt vmcnt(0)3129; GFX9-NEXT: s_setpc_b64 s[30:31]3130;3131; GFX10-LABEL: shuffle_v32i8_concat:3132; GFX10: ; %bb.0:3133; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3134; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3135; GFX10-NEXT: global_load_dwordx4 v[10:13], v[0:1], off3136; GFX10-NEXT: s_waitcnt vmcnt(1)3137; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:163138; GFX10-NEXT: s_waitcnt vmcnt(0)3139; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off3140; GFX10-NEXT: s_setpc_b64 s[30:31]3141;3142; GFX11-LABEL: shuffle_v32i8_concat:3143; GFX11: ; %bb.0:3144; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3145; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off3146; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off3147; GFX11-NEXT: s_waitcnt vmcnt(1)3148; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:163149; GFX11-NEXT: s_waitcnt vmcnt(0)3150; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3151; GFX11-NEXT: s_setpc_b64 s[30:31]3152 %val0 = load <16 x i8>, ptr addrspace(1) %arg03153 %val1 = load <16 x i8>, ptr addrspace(1) %arg13154 %shuffle = shufflevector <16 x i8> %val0, <16 x i8> %val1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>3155 store <32 x i8> %shuffle, ptr addrspace(1) %out3156 ret void3157}3158 3159define void @shuffle_v4i32_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3160; GFX9-LABEL: shuffle_v4i32_concat:3161; GFX9: ; %bb.0:3162; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3163; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off3164; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off3165; GFX9-NEXT: s_waitcnt vmcnt(0)3166; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off3167; GFX9-NEXT: s_waitcnt vmcnt(0)3168; GFX9-NEXT: s_setpc_b64 s[30:31]3169;3170; GFX10-LABEL: shuffle_v4i32_concat:3171; GFX10: ; %bb.0:3172; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3173; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off3174; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off3175; GFX10-NEXT: s_waitcnt vmcnt(0)3176; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off3177; GFX10-NEXT: s_setpc_b64 s[30:31]3178;3179; GFX11-LABEL: shuffle_v4i32_concat:3180; GFX11: ; %bb.0:3181; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3182; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off3183; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off3184; GFX11-NEXT: s_waitcnt vmcnt(0)3185; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3186; GFX11-NEXT: s_setpc_b64 s[30:31]3187 %val0 = load <2 x i32>, ptr addrspace(1) %arg03188 %val1 = load <2 x i32>, ptr addrspace(1) %arg13189 %shuffle = shufflevector <2 x i32> %val0, <2 x i32> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3190 store <4 x i32> %shuffle, ptr addrspace(1) %out3191 ret void3192}3193 3194define void @shuffle_v8i32_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3195; GFX9-LABEL: shuffle_v8i32_concat:3196; GFX9: ; %bb.0:3197; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3198; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3199; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off3200; GFX9-NEXT: s_waitcnt vmcnt(1)3201; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:163202; GFX9-NEXT: s_waitcnt vmcnt(1)3203; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off3204; GFX9-NEXT: s_waitcnt vmcnt(0)3205; GFX9-NEXT: s_setpc_b64 s[30:31]3206;3207; GFX10-LABEL: shuffle_v8i32_concat:3208; GFX10: ; %bb.0:3209; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3210; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3211; GFX10-NEXT: global_load_dwordx4 v[10:13], v[0:1], off3212; GFX10-NEXT: s_waitcnt vmcnt(1)3213; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:163214; GFX10-NEXT: s_waitcnt vmcnt(0)3215; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off3216; GFX10-NEXT: s_setpc_b64 s[30:31]3217;3218; GFX11-LABEL: shuffle_v8i32_concat:3219; GFX11: ; %bb.0:3220; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3221; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off3222; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off3223; GFX11-NEXT: s_waitcnt vmcnt(1)3224; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:163225; GFX11-NEXT: s_waitcnt vmcnt(0)3226; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off3227; GFX11-NEXT: s_setpc_b64 s[30:31]3228 %val0 = load <4 x i32>, ptr addrspace(1) %arg03229 %val1 = load <4 x i32>, ptr addrspace(1) %arg13230 %shuffle = shufflevector <4 x i32> %val0, <4 x i32> %val1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3231 store <8 x i32> %shuffle, ptr addrspace(1) %out3232 ret void3233}3234 3235define void @shuffle_v16i32_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {3236; GFX9-LABEL: shuffle_v16i32_concat:3237; GFX9: ; %bb.0:3238; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3239; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3240; GFX9-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:163241; GFX9-NEXT: global_load_dwordx4 v[14:17], v[0:1], off3242; GFX9-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:163243; GFX9-NEXT: s_waitcnt vmcnt(3)3244; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:323245; GFX9-NEXT: s_waitcnt vmcnt(3)3246; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:483247; GFX9-NEXT: s_waitcnt vmcnt(3)3248; GFX9-NEXT: global_store_dwordx4 v[4:5], v[14:17], off3249; GFX9-NEXT: s_waitcnt vmcnt(3)3250; GFX9-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:163251; GFX9-NEXT: s_waitcnt vmcnt(0)3252; GFX9-NEXT: s_setpc_b64 s[30:31]3253;3254; GFX10-LABEL: shuffle_v16i32_concat:3255; GFX10: ; %bb.0:3256; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3257; GFX10-NEXT: s_clause 0x13258; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off3259; GFX10-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:163260; GFX10-NEXT: s_clause 0x13261; GFX10-NEXT: global_load_dwordx4 v[14:17], v[0:1], off3262; GFX10-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:163263; GFX10-NEXT: s_waitcnt vmcnt(3)3264; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:323265; GFX10-NEXT: s_waitcnt vmcnt(2)3266; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:483267; GFX10-NEXT: s_waitcnt vmcnt(1)3268; GFX10-NEXT: global_store_dwordx4 v[4:5], v[14:17], off3269; GFX10-NEXT: s_waitcnt vmcnt(0)3270; GFX10-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:163271; GFX10-NEXT: s_setpc_b64 s[30:31]3272;3273; GFX11-LABEL: shuffle_v16i32_concat:3274; GFX11: ; %bb.0:3275; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3276; GFX11-NEXT: s_clause 0x13277; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off3278; GFX11-NEXT: global_load_b128 v[10:13], v[2:3], off offset:163279; GFX11-NEXT: s_clause 0x13280; GFX11-NEXT: global_load_b128 v[14:17], v[0:1], off3281; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off offset:163282; GFX11-NEXT: s_waitcnt vmcnt(3)3283; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:323284; GFX11-NEXT: s_waitcnt vmcnt(2)3285; GFX11-NEXT: global_store_b128 v[4:5], v[10:13], off offset:483286; GFX11-NEXT: s_waitcnt vmcnt(1)3287; GFX11-NEXT: global_store_b128 v[4:5], v[14:17], off3288; GFX11-NEXT: s_waitcnt vmcnt(0)3289; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off offset:163290; GFX11-NEXT: s_setpc_b64 s[30:31]3291 %val0 = load <8 x i32>, ptr addrspace(1) %arg03292 %val1 = load <8 x i32>, ptr addrspace(1) %arg13293 %shuffle = shufflevector <8 x i32> %val0, <8 x i32> %val1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3294 store <16 x i32> %shuffle, ptr addrspace(1) %out3295 ret void3296}3297 3298define <4 x bfloat> @shuffle_v4bf16_23uu(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3299; GFX9-LABEL: shuffle_v4bf16_23uu:3300; GFX9: ; %bb.0:3301; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3302; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:43303; GFX9-NEXT: s_waitcnt vmcnt(0)3304; GFX9-NEXT: s_setpc_b64 s[30:31]3305;3306; GFX10-LABEL: shuffle_v4bf16_23uu:3307; GFX10: ; %bb.0:3308; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3309; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:43310; GFX10-NEXT: s_waitcnt vmcnt(0)3311; GFX10-NEXT: s_setpc_b64 s[30:31]3312;3313; GFX11-LABEL: shuffle_v4bf16_23uu:3314; GFX11: ; %bb.0:3315; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3316; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43317; GFX11-NEXT: s_waitcnt vmcnt(0)3318; GFX11-NEXT: s_setpc_b64 s[30:31]3319 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03320 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13321 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 poison, i32 poison>3322 ret <4 x bfloat> %shuffle3323}3324 3325define <4 x bfloat> @shuffle_v4bf16_234u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3326; GX900-LABEL: shuffle_v4bf16_234u:3327; GX900: ; %bb.0:3328; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3329; GX900-NEXT: global_load_dword v6, v[0:1], off offset:43330; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off3331; GX900-NEXT: s_waitcnt vmcnt(1)3332; GX900-NEXT: v_mov_b32_e32 v0, v63333; GX900-NEXT: s_waitcnt vmcnt(0)3334; GX900-NEXT: v_mov_b32_e32 v1, v43335; GX900-NEXT: s_setpc_b64 s[30:31]3336;3337; GFX942-LABEL: shuffle_v4bf16_234u:3338; GFX942: ; %bb.0:3339; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:43341; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off3342; GFX942-NEXT: s_waitcnt vmcnt(1)3343; GFX942-NEXT: v_mov_b32_e32 v0, v43344; GFX942-NEXT: s_waitcnt vmcnt(0)3345; GFX942-NEXT: v_mov_b32_e32 v1, v63346; GFX942-NEXT: s_setpc_b64 s[30:31]3347;3348; GFX10-LABEL: shuffle_v4bf16_234u:3349; GFX10: ; %bb.0:3350; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3351; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:43352; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off3353; GFX10-NEXT: s_waitcnt vmcnt(1)3354; GFX10-NEXT: v_mov_b32_e32 v0, v63355; GFX10-NEXT: s_waitcnt vmcnt(0)3356; GFX10-NEXT: v_mov_b32_e32 v1, v43357; GFX10-NEXT: s_setpc_b64 s[30:31]3358;3359; GFX11-LABEL: shuffle_v4bf16_234u:3360; GFX11: ; %bb.0:3361; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3362; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43363; GFX11-NEXT: global_load_b64 v[1:2], v[2:3], off3364; GFX11-NEXT: s_waitcnt vmcnt(0)3365; GFX11-NEXT: s_setpc_b64 s[30:31]3366 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03367 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13368 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 4, i32 poison>3369 ret <4 x bfloat> %shuffle3370}3371 3372define <4 x bfloat> @shuffle_v4bf16_u1u3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3373; GFX9-LABEL: shuffle_v4bf16_u1u3:3374; GFX9: ; %bb.0:3375; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3376; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off3377; GFX9-NEXT: s_waitcnt vmcnt(0)3378; GFX9-NEXT: s_setpc_b64 s[30:31]3379;3380; GFX10-LABEL: shuffle_v4bf16_u1u3:3381; GFX10: ; %bb.0:3382; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3383; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off3384; GFX10-NEXT: s_waitcnt vmcnt(0)3385; GFX10-NEXT: s_setpc_b64 s[30:31]3386;3387; GFX11-LABEL: shuffle_v4bf16_u1u3:3388; GFX11: ; %bb.0:3389; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3390; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off3391; GFX11-NEXT: s_waitcnt vmcnt(0)3392; GFX11-NEXT: s_setpc_b64 s[30:31]3393 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03394 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13395 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 poison, i32 1, i32 poison, i32 3>3396 ret <4 x bfloat> %shuffle3397}3398 3399define <4 x bfloat> @shuffle_v4bf16_u3u1(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3400; GX900-LABEL: shuffle_v4bf16_u3u1:3401; GX900: ; %bb.0:3402; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3403; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off3404; GX900-NEXT: s_waitcnt vmcnt(0)3405; GX900-NEXT: v_mov_b32_e32 v0, v23406; GX900-NEXT: s_setpc_b64 s[30:31]3407;3408; GFX942-LABEL: shuffle_v4bf16_u3u1:3409; GFX942: ; %bb.0:3410; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3411; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off3412; GFX942-NEXT: s_waitcnt vmcnt(0)3413; GFX942-NEXT: v_mov_b32_e32 v0, v33414; GFX942-NEXT: v_mov_b32_e32 v1, v23415; GFX942-NEXT: s_setpc_b64 s[30:31]3416;3417; GFX10-LABEL: shuffle_v4bf16_u3u1:3418; GFX10: ; %bb.0:3419; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3420; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off3421; GFX10-NEXT: s_waitcnt vmcnt(0)3422; GFX10-NEXT: v_mov_b32_e32 v0, v23423; GFX10-NEXT: s_setpc_b64 s[30:31]3424;3425; GFX11-LABEL: shuffle_v4bf16_u3u1:3426; GFX11: ; %bb.0:3427; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX11-NEXT: global_load_b64 v[1:2], v[0:1], off3429; GFX11-NEXT: s_waitcnt vmcnt(0)3430; GFX11-NEXT: v_mov_b32_e32 v0, v23431; GFX11-NEXT: s_setpc_b64 s[30:31]3432 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03433 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13434 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 poison, i32 3, i32 poison, i32 1>3435 ret <4 x bfloat> %shuffle3436}3437 3438define <4 x bfloat> @shuffle_v4bf16_u3uu(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3439; GFX9-LABEL: shuffle_v4bf16_u3uu:3440; GFX9: ; %bb.0:3441; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3442; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:43443; GFX9-NEXT: s_waitcnt vmcnt(0)3444; GFX9-NEXT: s_setpc_b64 s[30:31]3445;3446; GFX10-LABEL: shuffle_v4bf16_u3uu:3447; GFX10: ; %bb.0:3448; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3449; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:43450; GFX10-NEXT: s_waitcnt vmcnt(0)3451; GFX10-NEXT: s_setpc_b64 s[30:31]3452;3453; GFX11-LABEL: shuffle_v4bf16_u3uu:3454; GFX11: ; %bb.0:3455; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3456; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43457; GFX11-NEXT: s_waitcnt vmcnt(0)3458; GFX11-NEXT: s_setpc_b64 s[30:31]3459 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03460 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13461 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 poison, i32 3, i32 poison, i32 poison>3462 ret <4 x bfloat> %shuffle3463}3464 3465define <4 x bfloat> @shuffle_v4bf16_3u6u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3466; GX900-LABEL: shuffle_v4bf16_3u6u:3467; GX900: ; %bb.0:3468; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3469; GX900-NEXT: global_load_dword v5, v[0:1], off offset:43470; GX900-NEXT: global_load_dword v4, v[2:3], off offset:43471; GX900-NEXT: s_waitcnt vmcnt(1)3472; GX900-NEXT: v_alignbit_b32 v0, s4, v5, 163473; GX900-NEXT: s_waitcnt vmcnt(0)3474; GX900-NEXT: v_mov_b32_e32 v1, v43475; GX900-NEXT: s_setpc_b64 s[30:31]3476;3477; GFX942-LABEL: shuffle_v4bf16_3u6u:3478; GFX942: ; %bb.0:3479; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3480; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:43481; GFX942-NEXT: global_load_dword v4, v[2:3], off offset:43482; GFX942-NEXT: s_waitcnt vmcnt(1)3483; GFX942-NEXT: v_alignbit_b32 v0, s0, v5, 163484; GFX942-NEXT: s_waitcnt vmcnt(0)3485; GFX942-NEXT: v_mov_b32_e32 v1, v43486; GFX942-NEXT: s_setpc_b64 s[30:31]3487;3488; GFX10-LABEL: shuffle_v4bf16_3u6u:3489; GFX10: ; %bb.0:3490; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3491; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:43492; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:43493; GFX10-NEXT: s_waitcnt vmcnt(1)3494; GFX10-NEXT: v_alignbit_b32 v0, s4, v5, 163495; GFX10-NEXT: s_waitcnt vmcnt(0)3496; GFX10-NEXT: v_mov_b32_e32 v1, v43497; GFX10-NEXT: s_setpc_b64 s[30:31]3498;3499; GFX11-TRUE16-LABEL: shuffle_v4bf16_3u6u:3500; GFX11-TRUE16: ; %bb.0:3501; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3502; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:43503; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off offset:43504; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)3505; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h3506; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3507; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3508;3509; GFX11-FAKE16-LABEL: shuffle_v4bf16_3u6u:3510; GFX11-FAKE16: ; %bb.0:3511; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3512; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:43513; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:43514; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3515; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, s0, v0, 163516; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3517; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3518 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03519 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13520 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 3, i32 poison, i32 6, i32 poison>3521 ret <4 x bfloat> %shuffle3522}3523 3524define <4 x bfloat> @shuffle_v4bf16_3uu7(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3525; GX900-LABEL: shuffle_v4bf16_3uu7:3526; GX900: ; %bb.0:3527; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3528; GX900-NEXT: global_load_dword v5, v[0:1], off offset:43529; GX900-NEXT: global_load_dword v4, v[2:3], off offset:43530; GX900-NEXT: s_waitcnt vmcnt(1)3531; GX900-NEXT: v_alignbit_b32 v0, s4, v5, 163532; GX900-NEXT: s_waitcnt vmcnt(0)3533; GX900-NEXT: v_mov_b32_e32 v1, v43534; GX900-NEXT: s_setpc_b64 s[30:31]3535;3536; GFX942-LABEL: shuffle_v4bf16_3uu7:3537; GFX942: ; %bb.0:3538; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3539; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:43540; GFX942-NEXT: global_load_dword v4, v[2:3], off offset:43541; GFX942-NEXT: s_waitcnt vmcnt(1)3542; GFX942-NEXT: v_alignbit_b32 v0, s0, v5, 163543; GFX942-NEXT: s_waitcnt vmcnt(0)3544; GFX942-NEXT: v_mov_b32_e32 v1, v43545; GFX942-NEXT: s_setpc_b64 s[30:31]3546;3547; GFX10-LABEL: shuffle_v4bf16_3uu7:3548; GFX10: ; %bb.0:3549; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3550; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:43551; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:43552; GFX10-NEXT: s_waitcnt vmcnt(1)3553; GFX10-NEXT: v_alignbit_b32 v0, s4, v5, 163554; GFX10-NEXT: s_waitcnt vmcnt(0)3555; GFX10-NEXT: v_mov_b32_e32 v1, v43556; GFX10-NEXT: s_setpc_b64 s[30:31]3557;3558; GFX11-TRUE16-LABEL: shuffle_v4bf16_3uu7:3559; GFX11-TRUE16: ; %bb.0:3560; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3561; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:43562; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off offset:43563; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)3564; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h3565; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3566; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3567;3568; GFX11-FAKE16-LABEL: shuffle_v4bf16_3uu7:3569; GFX11-FAKE16: ; %bb.0:3570; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3571; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:43572; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:43573; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3574; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, s0, v0, 163575; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3576; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3577 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03578 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13579 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 7>3580 ret <4 x bfloat> %shuffle3581}3582 3583define <4 x bfloat> @shuffle_v4bf16_35u5(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3584; GX900-LABEL: shuffle_v4bf16_35u5:3585; GX900: ; %bb.0:3586; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3587; GX900-NEXT: global_load_dword v5, v[0:1], off offset:43588; GX900-NEXT: global_load_dword v4, v[2:3], off3589; GX900-NEXT: s_mov_b32 s4, 0x70603023590; GX900-NEXT: s_waitcnt vmcnt(0)3591; GX900-NEXT: v_perm_b32 v0, v4, v5, s43592; GX900-NEXT: v_mov_b32_e32 v1, v43593; GX900-NEXT: s_setpc_b64 s[30:31]3594;3595; GFX942-LABEL: shuffle_v4bf16_35u5:3596; GFX942: ; %bb.0:3597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3598; GFX942-NEXT: global_load_dword v5, v[0:1], off offset:43599; GFX942-NEXT: global_load_dword v4, v[2:3], off3600; GFX942-NEXT: s_mov_b32 s0, 0x70603023601; GFX942-NEXT: s_waitcnt vmcnt(0)3602; GFX942-NEXT: v_perm_b32 v0, v4, v5, s03603; GFX942-NEXT: v_mov_b32_e32 v1, v43604; GFX942-NEXT: s_setpc_b64 s[30:31]3605;3606; GFX10-LABEL: shuffle_v4bf16_35u5:3607; GFX10: ; %bb.0:3608; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3609; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:43610; GFX10-NEXT: global_load_dword v4, v[2:3], off3611; GFX10-NEXT: s_waitcnt vmcnt(0)3612; GFX10-NEXT: v_perm_b32 v0, v4, v5, 0x70603023613; GFX10-NEXT: v_mov_b32_e32 v1, v43614; GFX10-NEXT: s_setpc_b64 s[30:31]3615;3616; GFX11-TRUE16-LABEL: shuffle_v4bf16_35u5:3617; GFX11-TRUE16: ; %bb.0:3618; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3619; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:43620; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off3621; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)3622; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h3623; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3624; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.h3625; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3626;3627; GFX11-FAKE16-LABEL: shuffle_v4bf16_35u5:3628; GFX11-FAKE16: ; %bb.0:3629; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3630; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:43631; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off3632; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3633; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x70603023634; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3635 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03636 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13637 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 3, i32 5, i32 poison, i32 5>3638 ret <4 x bfloat> %shuffle3639}3640 3641define <4 x bfloat> @shuffle_v4bf16_357u(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3642; GX900-LABEL: shuffle_v4bf16_357u:3643; GX900: ; %bb.0:3644; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3645; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off3646; GX900-NEXT: global_load_dword v6, v[0:1], off offset:43647; GX900-NEXT: s_mov_b32 s4, 0x70603023648; GX900-NEXT: s_waitcnt vmcnt(1)3649; GX900-NEXT: v_alignbit_b32 v1, s4, v5, 163650; GX900-NEXT: s_waitcnt vmcnt(0)3651; GX900-NEXT: v_perm_b32 v0, v4, v6, s43652; GX900-NEXT: s_setpc_b64 s[30:31]3653;3654; GFX942-LABEL: shuffle_v4bf16_357u:3655; GFX942: ; %bb.0:3656; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3657; GFX942-NEXT: global_load_dwordx2 v[4:5], v[2:3], off3658; GFX942-NEXT: global_load_dword v6, v[0:1], off offset:43659; GFX942-NEXT: s_mov_b32 s0, 0x70603023660; GFX942-NEXT: s_waitcnt vmcnt(1)3661; GFX942-NEXT: v_alignbit_b32 v1, s0, v5, 163662; GFX942-NEXT: s_waitcnt vmcnt(0)3663; GFX942-NEXT: v_perm_b32 v0, v4, v6, s03664; GFX942-NEXT: s_setpc_b64 s[30:31]3665;3666; GFX10-LABEL: shuffle_v4bf16_357u:3667; GFX10: ; %bb.0:3668; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3669; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off3670; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:43671; GFX10-NEXT: s_waitcnt vmcnt(1)3672; GFX10-NEXT: v_alignbit_b32 v1, s4, v5, 163673; GFX10-NEXT: s_waitcnt vmcnt(0)3674; GFX10-NEXT: v_perm_b32 v0, v4, v6, 0x70603023675; GFX10-NEXT: s_setpc_b64 s[30:31]3676;3677; GFX11-TRUE16-LABEL: shuffle_v4bf16_357u:3678; GFX11-TRUE16: ; %bb.0:3679; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3680; GFX11-TRUE16-NEXT: global_load_b32 v4, v[0:1], off offset:43681; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[2:3], off3682; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)3683; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v4.h3684; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v1.h3685; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]3686;3687; GFX11-FAKE16-LABEL: shuffle_v4bf16_357u:3688; GFX11-FAKE16: ; %bb.0:3689; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3690; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off3691; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:43692; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)3693; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, s0, v3, 163694; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)3695; GFX11-FAKE16-NEXT: v_perm_b32 v0, v2, v0, 0x70603023696; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]3697 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03698 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13699 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 3, i32 5, i32 7, i32 poison>3700 ret <4 x bfloat> %shuffle3701}3702 3703define <4 x bfloat> @shuffle_v4bf16_0101(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3704; GFX9-LABEL: shuffle_v4bf16_0101:3705; GFX9: ; %bb.0:3706; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3707; GFX9-NEXT: global_load_dword v0, v[0:1], off3708; GFX9-NEXT: s_waitcnt vmcnt(0)3709; GFX9-NEXT: v_mov_b32_e32 v1, v03710; GFX9-NEXT: s_setpc_b64 s[30:31]3711;3712; GFX10-LABEL: shuffle_v4bf16_0101:3713; GFX10: ; %bb.0:3714; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3715; GFX10-NEXT: global_load_dword v0, v[0:1], off3716; GFX10-NEXT: s_waitcnt vmcnt(0)3717; GFX10-NEXT: v_mov_b32_e32 v1, v03718; GFX10-NEXT: s_setpc_b64 s[30:31]3719;3720; GFX11-LABEL: shuffle_v4bf16_0101:3721; GFX11: ; %bb.0:3722; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3723; GFX11-NEXT: global_load_b32 v0, v[0:1], off3724; GFX11-NEXT: s_waitcnt vmcnt(0)3725; GFX11-NEXT: v_mov_b32_e32 v1, v03726; GFX11-NEXT: s_setpc_b64 s[30:31]3727 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03728 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13729 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 0, i32 1>3730 ret <4 x bfloat> %shuffle3731}3732 3733define <4 x bfloat> @shuffle_v4bf16_0123(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3734; GFX9-LABEL: shuffle_v4bf16_0123:3735; GFX9: ; %bb.0:3736; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3737; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off3738; GFX9-NEXT: s_waitcnt vmcnt(0)3739; GFX9-NEXT: s_setpc_b64 s[30:31]3740;3741; GFX10-LABEL: shuffle_v4bf16_0123:3742; GFX10: ; %bb.0:3743; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3744; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off3745; GFX10-NEXT: s_waitcnt vmcnt(0)3746; GFX10-NEXT: s_setpc_b64 s[30:31]3747;3748; GFX11-LABEL: shuffle_v4bf16_0123:3749; GFX11: ; %bb.0:3750; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3751; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off3752; GFX11-NEXT: s_waitcnt vmcnt(0)3753; GFX11-NEXT: s_setpc_b64 s[30:31]3754 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03755 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13756 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3757 ret <4 x bfloat> %shuffle3758}3759 3760define <4 x bfloat> @shuffle_v4bf16_0145(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3761; GFX9-LABEL: shuffle_v4bf16_0145:3762; GFX9: ; %bb.0:3763; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3764; GFX9-NEXT: global_load_dword v4, v[0:1], off3765; GFX9-NEXT: global_load_dword v5, v[2:3], off3766; GFX9-NEXT: s_waitcnt vmcnt(1)3767; GFX9-NEXT: v_mov_b32_e32 v0, v43768; GFX9-NEXT: s_waitcnt vmcnt(0)3769; GFX9-NEXT: v_mov_b32_e32 v1, v53770; GFX9-NEXT: s_setpc_b64 s[30:31]3771;3772; GFX10-LABEL: shuffle_v4bf16_0145:3773; GFX10: ; %bb.0:3774; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3775; GFX10-NEXT: global_load_dword v4, v[0:1], off3776; GFX10-NEXT: global_load_dword v5, v[2:3], off3777; GFX10-NEXT: s_waitcnt vmcnt(1)3778; GFX10-NEXT: v_mov_b32_e32 v0, v43779; GFX10-NEXT: s_waitcnt vmcnt(0)3780; GFX10-NEXT: v_mov_b32_e32 v1, v53781; GFX10-NEXT: s_setpc_b64 s[30:31]3782;3783; GFX11-LABEL: shuffle_v4bf16_0145:3784; GFX11: ; %bb.0:3785; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3786; GFX11-NEXT: global_load_b32 v0, v[0:1], off3787; GFX11-NEXT: global_load_b32 v1, v[2:3], off3788; GFX11-NEXT: s_waitcnt vmcnt(0)3789; GFX11-NEXT: s_setpc_b64 s[30:31]3790 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03791 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13792 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>3793 ret <4 x bfloat> %shuffle3794}3795 3796define <4 x bfloat> @shuffle_v4bf16_0167(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3797; GFX9-LABEL: shuffle_v4bf16_0167:3798; GFX9: ; %bb.0:3799; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3800; GFX9-NEXT: global_load_dword v4, v[0:1], off3801; GFX9-NEXT: global_load_dword v5, v[2:3], off offset:43802; GFX9-NEXT: s_waitcnt vmcnt(1)3803; GFX9-NEXT: v_mov_b32_e32 v0, v43804; GFX9-NEXT: s_waitcnt vmcnt(0)3805; GFX9-NEXT: v_mov_b32_e32 v1, v53806; GFX9-NEXT: s_setpc_b64 s[30:31]3807;3808; GFX10-LABEL: shuffle_v4bf16_0167:3809; GFX10: ; %bb.0:3810; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3811; GFX10-NEXT: global_load_dword v4, v[0:1], off3812; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:43813; GFX10-NEXT: s_waitcnt vmcnt(1)3814; GFX10-NEXT: v_mov_b32_e32 v0, v43815; GFX10-NEXT: s_waitcnt vmcnt(0)3816; GFX10-NEXT: v_mov_b32_e32 v1, v53817; GFX10-NEXT: s_setpc_b64 s[30:31]3818;3819; GFX11-LABEL: shuffle_v4bf16_0167:3820; GFX11: ; %bb.0:3821; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3822; GFX11-NEXT: global_load_b32 v0, v[0:1], off3823; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:43824; GFX11-NEXT: s_waitcnt vmcnt(0)3825; GFX11-NEXT: s_setpc_b64 s[30:31]3826 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03827 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13828 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 6, i32 7>3829 ret <4 x bfloat> %shuffle3830}3831 3832define <4 x bfloat> @shuffle_v4bf16_2301(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3833; GX900-LABEL: shuffle_v4bf16_2301:3834; GX900: ; %bb.0:3835; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3836; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off3837; GX900-NEXT: s_waitcnt vmcnt(0)3838; GX900-NEXT: v_mov_b32_e32 v0, v23839; GX900-NEXT: s_setpc_b64 s[30:31]3840;3841; GFX942-LABEL: shuffle_v4bf16_2301:3842; GFX942: ; %bb.0:3843; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3844; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off3845; GFX942-NEXT: s_waitcnt vmcnt(0)3846; GFX942-NEXT: v_mov_b32_e32 v0, v33847; GFX942-NEXT: v_mov_b32_e32 v1, v23848; GFX942-NEXT: s_setpc_b64 s[30:31]3849;3850; GFX10-LABEL: shuffle_v4bf16_2301:3851; GFX10: ; %bb.0:3852; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3853; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off3854; GFX10-NEXT: s_waitcnt vmcnt(0)3855; GFX10-NEXT: v_mov_b32_e32 v0, v23856; GFX10-NEXT: s_setpc_b64 s[30:31]3857;3858; GFX11-LABEL: shuffle_v4bf16_2301:3859; GFX11: ; %bb.0:3860; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3861; GFX11-NEXT: global_load_b64 v[1:2], v[0:1], off3862; GFX11-NEXT: s_waitcnt vmcnt(0)3863; GFX11-NEXT: v_mov_b32_e32 v0, v23864; GFX11-NEXT: s_setpc_b64 s[30:31]3865 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03866 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13867 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 0, i32 1>3868 ret <4 x bfloat> %shuffle3869}3870 3871define <4 x bfloat> @shuffle_v4bf16_2323(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3872; GFX9-LABEL: shuffle_v4bf16_2323:3873; GFX9: ; %bb.0:3874; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3875; GFX9-NEXT: global_load_dword v0, v[0:1], off offset:43876; GFX9-NEXT: s_waitcnt vmcnt(0)3877; GFX9-NEXT: v_mov_b32_e32 v1, v03878; GFX9-NEXT: s_setpc_b64 s[30:31]3879;3880; GFX10-LABEL: shuffle_v4bf16_2323:3881; GFX10: ; %bb.0:3882; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3883; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:43884; GFX10-NEXT: s_waitcnt vmcnt(0)3885; GFX10-NEXT: v_mov_b32_e32 v1, v03886; GFX10-NEXT: s_setpc_b64 s[30:31]3887;3888; GFX11-LABEL: shuffle_v4bf16_2323:3889; GFX11: ; %bb.0:3890; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3891; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43892; GFX11-NEXT: s_waitcnt vmcnt(0)3893; GFX11-NEXT: v_mov_b32_e32 v1, v03894; GFX11-NEXT: s_setpc_b64 s[30:31]3895 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03896 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13897 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 2, i32 3>3898 ret <4 x bfloat> %shuffle3899}3900 3901define <4 x bfloat> @shuffle_v4bf16_2345(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3902; GFX9-LABEL: shuffle_v4bf16_2345:3903; GFX9: ; %bb.0:3904; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3905; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:43906; GFX9-NEXT: global_load_dword v5, v[2:3], off3907; GFX9-NEXT: s_waitcnt vmcnt(1)3908; GFX9-NEXT: v_mov_b32_e32 v0, v43909; GFX9-NEXT: s_waitcnt vmcnt(0)3910; GFX9-NEXT: v_mov_b32_e32 v1, v53911; GFX9-NEXT: s_setpc_b64 s[30:31]3912;3913; GFX10-LABEL: shuffle_v4bf16_2345:3914; GFX10: ; %bb.0:3915; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3916; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:43917; GFX10-NEXT: global_load_dword v5, v[2:3], off3918; GFX10-NEXT: s_waitcnt vmcnt(1)3919; GFX10-NEXT: v_mov_b32_e32 v0, v43920; GFX10-NEXT: s_waitcnt vmcnt(0)3921; GFX10-NEXT: v_mov_b32_e32 v1, v53922; GFX10-NEXT: s_setpc_b64 s[30:31]3923;3924; GFX11-LABEL: shuffle_v4bf16_2345:3925; GFX11: ; %bb.0:3926; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3927; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43928; GFX11-NEXT: global_load_b32 v1, v[2:3], off3929; GFX11-NEXT: s_waitcnt vmcnt(0)3930; GFX11-NEXT: s_setpc_b64 s[30:31]3931 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03932 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13933 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 4, i32 5>3934 ret <4 x bfloat> %shuffle3935}3936 3937define <4 x bfloat> @shuffle_v4bf16_2367(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3938; GFX9-LABEL: shuffle_v4bf16_2367:3939; GFX9: ; %bb.0:3940; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3941; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:43942; GFX9-NEXT: global_load_dword v5, v[2:3], off offset:43943; GFX9-NEXT: s_waitcnt vmcnt(1)3944; GFX9-NEXT: v_mov_b32_e32 v0, v43945; GFX9-NEXT: s_waitcnt vmcnt(0)3946; GFX9-NEXT: v_mov_b32_e32 v1, v53947; GFX9-NEXT: s_setpc_b64 s[30:31]3948;3949; GFX10-LABEL: shuffle_v4bf16_2367:3950; GFX10: ; %bb.0:3951; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3952; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:43953; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:43954; GFX10-NEXT: s_waitcnt vmcnt(1)3955; GFX10-NEXT: v_mov_b32_e32 v0, v43956; GFX10-NEXT: s_waitcnt vmcnt(0)3957; GFX10-NEXT: v_mov_b32_e32 v1, v53958; GFX10-NEXT: s_setpc_b64 s[30:31]3959;3960; GFX11-LABEL: shuffle_v4bf16_2367:3961; GFX11: ; %bb.0:3962; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3963; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:43964; GFX11-NEXT: global_load_b32 v1, v[2:3], off offset:43965; GFX11-NEXT: s_waitcnt vmcnt(0)3966; GFX11-NEXT: s_setpc_b64 s[30:31]3967 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg03968 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg13969 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 6, i32 7>3970 ret <4 x bfloat> %shuffle3971}3972 3973define <4 x bfloat> @shuffle_v4bf16_4501(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {3974; GFX9-LABEL: shuffle_v4bf16_4501:3975; GFX9: ; %bb.0:3976; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3977; GFX9-NEXT: global_load_dword v4, v[2:3], off3978; GFX9-NEXT: global_load_dword v5, v[0:1], off3979; GFX9-NEXT: s_waitcnt vmcnt(1)3980; GFX9-NEXT: v_mov_b32_e32 v0, v43981; GFX9-NEXT: s_waitcnt vmcnt(0)3982; GFX9-NEXT: v_mov_b32_e32 v1, v53983; GFX9-NEXT: s_setpc_b64 s[30:31]3984;3985; GFX10-LABEL: shuffle_v4bf16_4501:3986; GFX10: ; %bb.0:3987; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3988; GFX10-NEXT: global_load_dword v4, v[2:3], off3989; GFX10-NEXT: global_load_dword v5, v[0:1], off3990; GFX10-NEXT: s_waitcnt vmcnt(1)3991; GFX10-NEXT: v_mov_b32_e32 v0, v43992; GFX10-NEXT: s_waitcnt vmcnt(0)3993; GFX10-NEXT: v_mov_b32_e32 v1, v53994; GFX10-NEXT: s_setpc_b64 s[30:31]3995;3996; GFX11-LABEL: shuffle_v4bf16_4501:3997; GFX11: ; %bb.0:3998; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3999; GFX11-NEXT: global_load_b32 v2, v[2:3], off4000; GFX11-NEXT: global_load_b32 v1, v[0:1], off4001; GFX11-NEXT: s_waitcnt vmcnt(1)4002; GFX11-NEXT: v_mov_b32_e32 v0, v24003; GFX11-NEXT: s_waitcnt vmcnt(0)4004; GFX11-NEXT: s_setpc_b64 s[30:31]4005 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04006 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14007 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 4, i32 5, i32 0, i32 1>4008 ret <4 x bfloat> %shuffle4009}4010 4011define <4 x bfloat> @shuffle_v4bf16_4523(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4012; GFX9-LABEL: shuffle_v4bf16_4523:4013; GFX9: ; %bb.0:4014; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4015; GFX9-NEXT: global_load_dword v4, v[2:3], off4016; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:44017; GFX9-NEXT: s_waitcnt vmcnt(1)4018; GFX9-NEXT: v_mov_b32_e32 v0, v44019; GFX9-NEXT: s_waitcnt vmcnt(0)4020; GFX9-NEXT: v_mov_b32_e32 v1, v54021; GFX9-NEXT: s_setpc_b64 s[30:31]4022;4023; GFX10-LABEL: shuffle_v4bf16_4523:4024; GFX10: ; %bb.0:4025; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4026; GFX10-NEXT: global_load_dword v4, v[2:3], off4027; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:44028; GFX10-NEXT: s_waitcnt vmcnt(1)4029; GFX10-NEXT: v_mov_b32_e32 v0, v44030; GFX10-NEXT: s_waitcnt vmcnt(0)4031; GFX10-NEXT: v_mov_b32_e32 v1, v54032; GFX10-NEXT: s_setpc_b64 s[30:31]4033;4034; GFX11-LABEL: shuffle_v4bf16_4523:4035; GFX11: ; %bb.0:4036; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4037; GFX11-NEXT: global_load_b32 v2, v[2:3], off4038; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:44039; GFX11-NEXT: s_waitcnt vmcnt(1)4040; GFX11-NEXT: v_mov_b32_e32 v0, v24041; GFX11-NEXT: s_waitcnt vmcnt(0)4042; GFX11-NEXT: s_setpc_b64 s[30:31]4043 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04044 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14045 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 4, i32 5, i32 2, i32 3>4046 ret <4 x bfloat> %shuffle4047}4048 4049define <4 x bfloat> @shuffle_v4bf16_4545(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4050; GFX9-LABEL: shuffle_v4bf16_4545:4051; GFX9: ; %bb.0:4052; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4053; GFX9-NEXT: global_load_dword v0, v[2:3], off4054; GFX9-NEXT: s_waitcnt vmcnt(0)4055; GFX9-NEXT: v_mov_b32_e32 v1, v04056; GFX9-NEXT: s_setpc_b64 s[30:31]4057;4058; GFX10-LABEL: shuffle_v4bf16_4545:4059; GFX10: ; %bb.0:4060; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4061; GFX10-NEXT: global_load_dword v0, v[2:3], off4062; GFX10-NEXT: s_waitcnt vmcnt(0)4063; GFX10-NEXT: v_mov_b32_e32 v1, v04064; GFX10-NEXT: s_setpc_b64 s[30:31]4065;4066; GFX11-LABEL: shuffle_v4bf16_4545:4067; GFX11: ; %bb.0:4068; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4069; GFX11-NEXT: global_load_b32 v0, v[2:3], off4070; GFX11-NEXT: s_waitcnt vmcnt(0)4071; GFX11-NEXT: v_mov_b32_e32 v1, v04072; GFX11-NEXT: s_setpc_b64 s[30:31]4073 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04074 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14075 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 4, i32 5, i32 4, i32 5>4076 ret <4 x bfloat> %shuffle4077}4078 4079define <4 x bfloat> @shuffle_v4bf16_4567(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4080; GFX9-LABEL: shuffle_v4bf16_4567:4081; GFX9: ; %bb.0:4082; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4083; GFX9-NEXT: global_load_dwordx2 v[0:1], v[2:3], off4084; GFX9-NEXT: s_waitcnt vmcnt(0)4085; GFX9-NEXT: s_setpc_b64 s[30:31]4086;4087; GFX10-LABEL: shuffle_v4bf16_4567:4088; GFX10: ; %bb.0:4089; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4090; GFX10-NEXT: global_load_dwordx2 v[0:1], v[2:3], off4091; GFX10-NEXT: s_waitcnt vmcnt(0)4092; GFX10-NEXT: s_setpc_b64 s[30:31]4093;4094; GFX11-LABEL: shuffle_v4bf16_4567:4095; GFX11: ; %bb.0:4096; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4097; GFX11-NEXT: global_load_b64 v[0:1], v[2:3], off4098; GFX11-NEXT: s_waitcnt vmcnt(0)4099; GFX11-NEXT: s_setpc_b64 s[30:31]4100 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04101 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14102 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 4, i32 5, i32 6, i32 7>4103 ret <4 x bfloat> %shuffle4104}4105 4106define <4 x bfloat> @shuffle_v4bf16_6701(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4107; GFX9-LABEL: shuffle_v4bf16_6701:4108; GFX9: ; %bb.0:4109; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4110; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:44111; GFX9-NEXT: global_load_dword v5, v[0:1], off4112; GFX9-NEXT: s_waitcnt vmcnt(1)4113; GFX9-NEXT: v_mov_b32_e32 v0, v44114; GFX9-NEXT: s_waitcnt vmcnt(0)4115; GFX9-NEXT: v_mov_b32_e32 v1, v54116; GFX9-NEXT: s_setpc_b64 s[30:31]4117;4118; GFX10-LABEL: shuffle_v4bf16_6701:4119; GFX10: ; %bb.0:4120; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4121; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:44122; GFX10-NEXT: global_load_dword v5, v[0:1], off4123; GFX10-NEXT: s_waitcnt vmcnt(1)4124; GFX10-NEXT: v_mov_b32_e32 v0, v44125; GFX10-NEXT: s_waitcnt vmcnt(0)4126; GFX10-NEXT: v_mov_b32_e32 v1, v54127; GFX10-NEXT: s_setpc_b64 s[30:31]4128;4129; GFX11-LABEL: shuffle_v4bf16_6701:4130; GFX11: ; %bb.0:4131; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4132; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:44133; GFX11-NEXT: global_load_b32 v1, v[0:1], off4134; GFX11-NEXT: s_waitcnt vmcnt(1)4135; GFX11-NEXT: v_mov_b32_e32 v0, v24136; GFX11-NEXT: s_waitcnt vmcnt(0)4137; GFX11-NEXT: s_setpc_b64 s[30:31]4138 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04139 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14140 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 6, i32 7, i32 0, i32 1>4141 ret <4 x bfloat> %shuffle4142}4143 4144define <4 x bfloat> @shuffle_v4bf16_6723(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4145; GFX9-LABEL: shuffle_v4bf16_6723:4146; GFX9: ; %bb.0:4147; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4148; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:44149; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:44150; GFX9-NEXT: s_waitcnt vmcnt(1)4151; GFX9-NEXT: v_mov_b32_e32 v0, v44152; GFX9-NEXT: s_waitcnt vmcnt(0)4153; GFX9-NEXT: v_mov_b32_e32 v1, v54154; GFX9-NEXT: s_setpc_b64 s[30:31]4155;4156; GFX10-LABEL: shuffle_v4bf16_6723:4157; GFX10: ; %bb.0:4158; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4159; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:44160; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:44161; GFX10-NEXT: s_waitcnt vmcnt(1)4162; GFX10-NEXT: v_mov_b32_e32 v0, v44163; GFX10-NEXT: s_waitcnt vmcnt(0)4164; GFX10-NEXT: v_mov_b32_e32 v1, v54165; GFX10-NEXT: s_setpc_b64 s[30:31]4166;4167; GFX11-LABEL: shuffle_v4bf16_6723:4168; GFX11: ; %bb.0:4169; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4170; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:44171; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:44172; GFX11-NEXT: s_waitcnt vmcnt(1)4173; GFX11-NEXT: v_mov_b32_e32 v0, v24174; GFX11-NEXT: s_waitcnt vmcnt(0)4175; GFX11-NEXT: s_setpc_b64 s[30:31]4176 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04177 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14178 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>4179 ret <4 x bfloat> %shuffle4180}4181 4182define <4 x bfloat> @shuffle_v4bf16_6745(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4183; GX900-LABEL: shuffle_v4bf16_6745:4184; GX900: ; %bb.0:4185; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4186; GX900-NEXT: global_load_dwordx2 v[1:2], v[2:3], off4187; GX900-NEXT: s_waitcnt vmcnt(0)4188; GX900-NEXT: v_mov_b32_e32 v0, v24189; GX900-NEXT: s_setpc_b64 s[30:31]4190;4191; GFX942-LABEL: shuffle_v4bf16_6745:4192; GFX942: ; %bb.0:4193; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4194; GFX942-NEXT: global_load_dwordx2 v[2:3], v[2:3], off4195; GFX942-NEXT: s_waitcnt vmcnt(0)4196; GFX942-NEXT: v_mov_b32_e32 v0, v34197; GFX942-NEXT: v_mov_b32_e32 v1, v24198; GFX942-NEXT: s_setpc_b64 s[30:31]4199;4200; GFX10-LABEL: shuffle_v4bf16_6745:4201; GFX10: ; %bb.0:4202; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4203; GFX10-NEXT: global_load_dwordx2 v[1:2], v[2:3], off4204; GFX10-NEXT: s_waitcnt vmcnt(0)4205; GFX10-NEXT: v_mov_b32_e32 v0, v24206; GFX10-NEXT: s_setpc_b64 s[30:31]4207;4208; GFX11-LABEL: shuffle_v4bf16_6745:4209; GFX11: ; %bb.0:4210; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4211; GFX11-NEXT: global_load_b64 v[1:2], v[2:3], off4212; GFX11-NEXT: s_waitcnt vmcnt(0)4213; GFX11-NEXT: v_mov_b32_e32 v0, v24214; GFX11-NEXT: s_setpc_b64 s[30:31]4215 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04216 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14217 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 6, i32 7, i32 4, i32 5>4218 ret <4 x bfloat> %shuffle4219}4220 4221define <4 x bfloat> @shuffle_v4bf16_6767(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4222; GFX9-LABEL: shuffle_v4bf16_6767:4223; GFX9: ; %bb.0:4224; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4225; GFX9-NEXT: global_load_dword v0, v[2:3], off offset:44226; GFX9-NEXT: s_waitcnt vmcnt(0)4227; GFX9-NEXT: v_mov_b32_e32 v1, v04228; GFX9-NEXT: s_setpc_b64 s[30:31]4229;4230; GFX10-LABEL: shuffle_v4bf16_6767:4231; GFX10: ; %bb.0:4232; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4233; GFX10-NEXT: global_load_dword v0, v[2:3], off offset:44234; GFX10-NEXT: s_waitcnt vmcnt(0)4235; GFX10-NEXT: v_mov_b32_e32 v1, v04236; GFX10-NEXT: s_setpc_b64 s[30:31]4237;4238; GFX11-LABEL: shuffle_v4bf16_6767:4239; GFX11: ; %bb.0:4240; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4241; GFX11-NEXT: global_load_b32 v0, v[2:3], off offset:44242; GFX11-NEXT: s_waitcnt vmcnt(0)4243; GFX11-NEXT: v_mov_b32_e32 v1, v04244; GFX11-NEXT: s_setpc_b64 s[30:31]4245 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04246 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14247 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 6, i32 7, i32 6, i32 7>4248 ret <4 x bfloat> %shuffle4249}4250 4251define <4 x bfloat> @shuffle_v4bf16_2356(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4252; GX900-LABEL: shuffle_v4bf16_2356:4253; GX900: ; %bb.0:4254; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4255; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off4256; GX900-NEXT: global_load_dword v4, v[0:1], off offset:44257; GX900-NEXT: s_waitcnt vmcnt(1)4258; GX900-NEXT: v_alignbit_b32 v1, v6, v5, 164259; GX900-NEXT: s_waitcnt vmcnt(0)4260; GX900-NEXT: v_mov_b32_e32 v0, v44261; GX900-NEXT: s_setpc_b64 s[30:31]4262;4263; GFX942-LABEL: shuffle_v4bf16_2356:4264; GFX942: ; %bb.0:4265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4266; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off4267; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:44268; GFX942-NEXT: s_waitcnt vmcnt(1)4269; GFX942-NEXT: v_alignbit_b32 v1, v7, v6, 164270; GFX942-NEXT: s_waitcnt vmcnt(0)4271; GFX942-NEXT: v_mov_b32_e32 v0, v44272; GFX942-NEXT: s_setpc_b64 s[30:31]4273;4274; GFX10-LABEL: shuffle_v4bf16_2356:4275; GFX10: ; %bb.0:4276; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4277; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off4278; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:44279; GFX10-NEXT: s_waitcnt vmcnt(1)4280; GFX10-NEXT: v_alignbit_b32 v1, v6, v5, 164281; GFX10-NEXT: s_waitcnt vmcnt(0)4282; GFX10-NEXT: v_mov_b32_e32 v0, v44283; GFX10-NEXT: s_setpc_b64 s[30:31]4284;4285; GFX11-TRUE16-LABEL: shuffle_v4bf16_2356:4286; GFX11-TRUE16: ; %bb.0:4287; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4288; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off4289; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44290; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)4291; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h4292; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l4293; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4294; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4295;4296; GFX11-FAKE16-LABEL: shuffle_v4bf16_2356:4297; GFX11-FAKE16: ; %bb.0:4298; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4299; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off4300; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:44301; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)4302; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v3, v2, 164303; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4304; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4305 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04306 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14307 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 5, i32 6>4308 ret <4 x bfloat> %shuffle4309}4310 4311define <4 x bfloat> @shuffle_v4bf16_5623(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4312; GX900-LABEL: shuffle_v4bf16_5623:4313; GX900: ; %bb.0:4314; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4315; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off4316; GX900-NEXT: global_load_dword v4, v[0:1], off offset:44317; GX900-NEXT: s_waitcnt vmcnt(1)4318; GX900-NEXT: v_alignbit_b32 v0, v6, v5, 164319; GX900-NEXT: s_waitcnt vmcnt(0)4320; GX900-NEXT: v_mov_b32_e32 v1, v44321; GX900-NEXT: s_setpc_b64 s[30:31]4322;4323; GFX942-LABEL: shuffle_v4bf16_5623:4324; GFX942: ; %bb.0:4325; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4326; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off4327; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:44328; GFX942-NEXT: s_waitcnt vmcnt(1)4329; GFX942-NEXT: v_alignbit_b32 v0, v7, v6, 164330; GFX942-NEXT: s_waitcnt vmcnt(0)4331; GFX942-NEXT: v_mov_b32_e32 v1, v44332; GFX942-NEXT: s_setpc_b64 s[30:31]4333;4334; GFX10-LABEL: shuffle_v4bf16_5623:4335; GFX10: ; %bb.0:4336; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4337; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off4338; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:44339; GFX10-NEXT: s_waitcnt vmcnt(1)4340; GFX10-NEXT: v_alignbit_b32 v0, v6, v5, 164341; GFX10-NEXT: s_waitcnt vmcnt(0)4342; GFX10-NEXT: v_mov_b32_e32 v1, v44343; GFX10-NEXT: s_setpc_b64 s[30:31]4344;4345; GFX11-TRUE16-LABEL: shuffle_v4bf16_5623:4346; GFX11-TRUE16: ; %bb.0:4347; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4348; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off4349; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off offset:44350; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)4351; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h4352; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l4353; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4354; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4355;4356; GFX11-FAKE16-LABEL: shuffle_v4bf16_5623:4357; GFX11-FAKE16: ; %bb.0:4358; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4359; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off4360; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:44361; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)4362; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 164363; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4364; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4365 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04366 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14367 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 5, i32 6, i32 2, i32 3>4368 ret <4 x bfloat> %shuffle4369}4370 4371define <4 x bfloat> @shuffle_v4bf16_3456(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4372; GFX9-LABEL: shuffle_v4bf16_3456:4373; GFX9: ; %bb.0:4374; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4375; GFX9-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4376; GFX9-NEXT: global_load_dword v6, v[0:1], off offset:44377; GFX9-NEXT: s_waitcnt vmcnt(1)4378; GFX9-NEXT: v_alignbit_b32 v1, v5, v4, 164379; GFX9-NEXT: s_waitcnt vmcnt(0)4380; GFX9-NEXT: v_alignbit_b32 v0, v4, v6, 164381; GFX9-NEXT: s_setpc_b64 s[30:31]4382;4383; GFX10-LABEL: shuffle_v4bf16_3456:4384; GFX10: ; %bb.0:4385; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4386; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4387; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:44388; GFX10-NEXT: s_waitcnt vmcnt(1)4389; GFX10-NEXT: v_alignbit_b32 v1, v5, v4, 164390; GFX10-NEXT: s_waitcnt vmcnt(0)4391; GFX10-NEXT: v_alignbit_b32 v0, v4, v6, 164392; GFX10-NEXT: s_setpc_b64 s[30:31]4393;4394; GFX11-TRUE16-LABEL: shuffle_v4bf16_3456:4395; GFX11-TRUE16: ; %bb.0:4396; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4397; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44398; GFX11-TRUE16-NEXT: global_load_b64 v[1:2], v[2:3], off4399; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)4400; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h4401; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4402; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l4403; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v1.h4404; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l4405; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4406;4407; GFX11-FAKE16-LABEL: shuffle_v4bf16_3456:4408; GFX11-FAKE16: ; %bb.0:4409; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4410; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off4411; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:44412; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)4413; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v3, v2, 164414; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4415; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v2, v0, 164416; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4417 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04418 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14419 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 3, i32 4, i32 5, i32 6>4420 ret <4 x bfloat> %shuffle4421}4422 4423define <4 x bfloat> @shuffle_v4bf16_5634(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4424; GFX9-LABEL: shuffle_v4bf16_5634:4425; GFX9: ; %bb.0:4426; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4427; GFX9-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4428; GFX9-NEXT: global_load_dword v6, v[0:1], off offset:44429; GFX9-NEXT: s_waitcnt vmcnt(1)4430; GFX9-NEXT: v_alignbit_b32 v0, v5, v4, 164431; GFX9-NEXT: s_waitcnt vmcnt(0)4432; GFX9-NEXT: v_alignbit_b32 v1, v4, v6, 164433; GFX9-NEXT: s_setpc_b64 s[30:31]4434;4435; GFX10-LABEL: shuffle_v4bf16_5634:4436; GFX10: ; %bb.0:4437; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4438; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4439; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:44440; GFX10-NEXT: s_waitcnt vmcnt(1)4441; GFX10-NEXT: v_alignbit_b32 v0, v5, v4, 164442; GFX10-NEXT: s_waitcnt vmcnt(0)4443; GFX10-NEXT: v_alignbit_b32 v1, v4, v6, 164444; GFX10-NEXT: s_setpc_b64 s[30:31]4445;4446; GFX11-TRUE16-LABEL: shuffle_v4bf16_5634:4447; GFX11-TRUE16: ; %bb.0:4448; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4449; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44450; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off4451; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)4452; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h4453; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4454; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h4455; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l4456; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l4457; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4458;4459; GFX11-FAKE16-LABEL: shuffle_v4bf16_5634:4460; GFX11-FAKE16: ; %bb.0:4461; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4462; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off4463; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:44464; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)4465; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 164466; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4467; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 164468; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4469 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04470 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14471 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 5, i32 6, i32 3, i32 4>4472 ret <4 x bfloat> %shuffle4473}4474 4475define <4 x bfloat> @shuffle_v4bf16_5734(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4476; GX900-LABEL: shuffle_v4bf16_5734:4477; GX900: ; %bb.0:4478; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4479; GX900-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4480; GX900-NEXT: global_load_dword v6, v[0:1], off offset:44481; GX900-NEXT: s_mov_b32 s4, 0x70603024482; GX900-NEXT: s_waitcnt vmcnt(1)4483; GX900-NEXT: v_perm_b32 v0, v5, v4, s44484; GX900-NEXT: s_waitcnt vmcnt(0)4485; GX900-NEXT: v_alignbit_b32 v1, v4, v6, 164486; GX900-NEXT: s_setpc_b64 s[30:31]4487;4488; GFX942-LABEL: shuffle_v4bf16_5734:4489; GFX942: ; %bb.0:4490; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4491; GFX942-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4492; GFX942-NEXT: global_load_dword v6, v[0:1], off offset:44493; GFX942-NEXT: s_mov_b32 s0, 0x70603024494; GFX942-NEXT: s_waitcnt vmcnt(1)4495; GFX942-NEXT: v_perm_b32 v0, v5, v4, s04496; GFX942-NEXT: s_waitcnt vmcnt(0)4497; GFX942-NEXT: v_alignbit_b32 v1, v4, v6, 164498; GFX942-NEXT: s_setpc_b64 s[30:31]4499;4500; GFX10-LABEL: shuffle_v4bf16_5734:4501; GFX10: ; %bb.0:4502; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4503; GFX10-NEXT: global_load_dwordx2 v[4:5], v[2:3], off4504; GFX10-NEXT: global_load_dword v6, v[0:1], off offset:44505; GFX10-NEXT: s_waitcnt vmcnt(1)4506; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x70603024507; GFX10-NEXT: s_waitcnt vmcnt(0)4508; GFX10-NEXT: v_alignbit_b32 v1, v4, v6, 164509; GFX10-NEXT: s_setpc_b64 s[30:31]4510;4511; GFX11-TRUE16-LABEL: shuffle_v4bf16_5734:4512; GFX11-TRUE16: ; %bb.0:4513; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4514; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44515; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off4516; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)4517; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h4518; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4519; GFX11-TRUE16-NEXT: v_mov_b16_e32 v3.l, v2.h4520; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v2.l4521; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)4522; GFX11-TRUE16-NEXT: v_mov_b32_e32 v0, v34523; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4524;4525; GFX11-FAKE16-LABEL: shuffle_v4bf16_5734:4526; GFX11-FAKE16: ; %bb.0:4527; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4528; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off4529; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:44530; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)4531; GFX11-FAKE16-NEXT: v_perm_b32 v0, v3, v2, 0x70603024532; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4533; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 164534; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4535 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04536 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14537 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 5, i32 7, i32 3, i32 4>4538 ret <4 x bfloat> %shuffle4539}4540 4541define <4 x bfloat> @shuffle_v4bf16_0000(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4542; GX900-LABEL: shuffle_v4bf16_0000:4543; GX900: ; %bb.0:4544; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4545; GX900-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4546; GX900-NEXT: s_mov_b32 s4, 0x50401004547; GX900-NEXT: s_waitcnt vmcnt(0)4548; GX900-NEXT: v_perm_b32 v0, v0, v0, s44549; GX900-NEXT: v_mov_b32_e32 v1, v04550; GX900-NEXT: s_setpc_b64 s[30:31]4551;4552; GFX942-LABEL: shuffle_v4bf16_0000:4553; GFX942: ; %bb.0:4554; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4555; GFX942-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4556; GFX942-NEXT: s_mov_b32 s0, 0x50401004557; GFX942-NEXT: s_waitcnt vmcnt(0)4558; GFX942-NEXT: v_perm_b32 v0, v0, v0, s04559; GFX942-NEXT: v_mov_b32_e32 v1, v04560; GFX942-NEXT: s_setpc_b64 s[30:31]4561;4562; GFX10-LABEL: shuffle_v4bf16_0000:4563; GFX10: ; %bb.0:4564; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4565; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4566; GFX10-NEXT: s_waitcnt vmcnt(0)4567; GFX10-NEXT: v_perm_b32 v0, v0, v0, 0x50401004568; GFX10-NEXT: v_mov_b32_e32 v1, v04569; GFX10-NEXT: s_setpc_b64 s[30:31]4570;4571; GFX11-TRUE16-LABEL: shuffle_v4bf16_0000:4572; GFX11-TRUE16: ; %bb.0:4573; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4574; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off4575; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4576; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v0.l4577; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4578; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v04579; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4580;4581; GFX11-FAKE16-LABEL: shuffle_v4bf16_0000:4582; GFX11-FAKE16: ; %bb.0:4583; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4584; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off4585; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4586; GFX11-FAKE16-NEXT: v_perm_b32 v0, v0, v0, 0x50401004587; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4588; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v04589; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4590 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04591 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14592 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> zeroinitializer4593 ret <4 x bfloat> %shuffle4594}4595 4596define <4 x bfloat> @shuffle_v4bf16_1010(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4597; GFX9-LABEL: shuffle_v4bf16_1010:4598; GFX9: ; %bb.0:4599; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4600; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4601; GFX9-NEXT: s_waitcnt vmcnt(0)4602; GFX9-NEXT: v_alignbit_b32 v0, v0, v0, 164603; GFX9-NEXT: v_mov_b32_e32 v1, v04604; GFX9-NEXT: s_setpc_b64 s[30:31]4605;4606; GFX10-LABEL: shuffle_v4bf16_1010:4607; GFX10: ; %bb.0:4608; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4609; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4610; GFX10-NEXT: s_waitcnt vmcnt(0)4611; GFX10-NEXT: v_alignbit_b32 v0, v0, v0, 164612; GFX10-NEXT: v_mov_b32_e32 v1, v04613; GFX10-NEXT: s_setpc_b64 s[30:31]4614;4615; GFX11-TRUE16-LABEL: shuffle_v4bf16_1010:4616; GFX11-TRUE16: ; %bb.0:4617; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4618; GFX11-TRUE16-NEXT: global_load_b64 v[1:2], v[0:1], off4619; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4620; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.h4621; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l4622; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4623; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v04624; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4625;4626; GFX11-FAKE16-LABEL: shuffle_v4bf16_1010:4627; GFX11-FAKE16: ; %bb.0:4628; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4629; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off4630; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4631; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v0, v0, 164632; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4633; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v04634; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4635 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04636 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14637 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 1, i32 0, i32 1, i32 0>4638 ret <4 x bfloat> %shuffle4639}4640 4641define <4 x bfloat> @shuffle_v4bf16_1100(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4642; GX900-LABEL: shuffle_v4bf16_1100:4643; GX900: ; %bb.0:4644; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4645; GX900-NEXT: global_load_dwordx2 v[1:2], v[0:1], off4646; GX900-NEXT: s_mov_b32 s4, 0x70603024647; GX900-NEXT: s_mov_b32 s5, 0x50401004648; GX900-NEXT: s_waitcnt vmcnt(0)4649; GX900-NEXT: v_perm_b32 v0, v1, v1, s44650; GX900-NEXT: v_perm_b32 v1, v1, v1, s54651; GX900-NEXT: s_setpc_b64 s[30:31]4652;4653; GFX942-LABEL: shuffle_v4bf16_1100:4654; GFX942: ; %bb.0:4655; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4656; GFX942-NEXT: global_load_dwordx2 v[2:3], v[0:1], off4657; GFX942-NEXT: s_mov_b32 s0, 0x70603024658; GFX942-NEXT: s_mov_b32 s1, 0x50401004659; GFX942-NEXT: s_waitcnt vmcnt(0)4660; GFX942-NEXT: v_perm_b32 v0, v2, v2, s04661; GFX942-NEXT: v_perm_b32 v1, v2, v2, s14662; GFX942-NEXT: s_setpc_b64 s[30:31]4663;4664; GFX10-LABEL: shuffle_v4bf16_1100:4665; GFX10: ; %bb.0:4666; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4667; GFX10-NEXT: global_load_dwordx2 v[1:2], v[0:1], off4668; GFX10-NEXT: s_waitcnt vmcnt(0)4669; GFX10-NEXT: v_perm_b32 v0, v1, v1, 0x70603024670; GFX10-NEXT: v_perm_b32 v1, v1, v1, 0x50401004671; GFX10-NEXT: s_setpc_b64 s[30:31]4672;4673; GFX11-TRUE16-LABEL: shuffle_v4bf16_1100:4674; GFX11-TRUE16: ; %bb.0:4675; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4676; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off4677; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4678; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.l4679; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l4680; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h4681; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4682;4683; GFX11-FAKE16-LABEL: shuffle_v4bf16_1100:4684; GFX11-FAKE16: ; %bb.0:4685; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4686; GFX11-FAKE16-NEXT: global_load_b64 v[1:2], v[0:1], off4687; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4688; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v1, 0x70603024689; GFX11-FAKE16-NEXT: v_perm_b32 v1, v1, v1, 0x50401004690; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4691 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04692 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14693 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 1, i32 1, i32 0, i32 0>4694 ret <4 x bfloat> %shuffle4695}4696 4697define <4 x bfloat> @shuffle_v4bf16_6161(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4698; GX900-LABEL: shuffle_v4bf16_6161:4699; GX900: ; %bb.0:4700; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4701; GX900-NEXT: global_load_dword v4, v[0:1], off4702; GX900-NEXT: global_load_dword v5, v[2:3], off offset:44703; GX900-NEXT: s_mov_b32 s4, 0xffff4704; GX900-NEXT: s_waitcnt vmcnt(0)4705; GX900-NEXT: v_bfi_b32 v0, s4, v5, v44706; GX900-NEXT: v_mov_b32_e32 v1, v04707; GX900-NEXT: s_setpc_b64 s[30:31]4708;4709; GFX942-LABEL: shuffle_v4bf16_6161:4710; GFX942: ; %bb.0:4711; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4712; GFX942-NEXT: global_load_dword v4, v[0:1], off4713; GFX942-NEXT: global_load_dword v5, v[2:3], off offset:44714; GFX942-NEXT: s_mov_b32 s0, 0xffff4715; GFX942-NEXT: s_waitcnt vmcnt(0)4716; GFX942-NEXT: v_bfi_b32 v0, s0, v5, v44717; GFX942-NEXT: v_mov_b32_e32 v1, v04718; GFX942-NEXT: s_setpc_b64 s[30:31]4719;4720; GFX10-LABEL: shuffle_v4bf16_6161:4721; GFX10: ; %bb.0:4722; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4723; GFX10-NEXT: global_load_dword v4, v[0:1], off4724; GFX10-NEXT: global_load_dword v5, v[2:3], off offset:44725; GFX10-NEXT: s_waitcnt vmcnt(0)4726; GFX10-NEXT: v_bfi_b32 v0, 0xffff, v5, v44727; GFX10-NEXT: v_mov_b32_e32 v1, v04728; GFX10-NEXT: s_setpc_b64 s[30:31]4729;4730; GFX11-TRUE16-LABEL: shuffle_v4bf16_6161:4731; GFX11-TRUE16: ; %bb.0:4732; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4733; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off4734; GFX11-TRUE16-NEXT: global_load_b32 v0, v[2:3], off offset:44735; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4736; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.h4737; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4738; GFX11-TRUE16-NEXT: v_mov_b32_e32 v1, v04739; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4740;4741; GFX11-FAKE16-LABEL: shuffle_v4bf16_6161:4742; GFX11-FAKE16: ; %bb.0:4743; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4744; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off4745; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off offset:44746; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4747; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v1, v04748; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4749; GFX11-FAKE16-NEXT: v_mov_b32_e32 v1, v04750; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4751 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04752 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14753 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 6, i32 1, i32 6, i32 1>4754 ret <4 x bfloat> %shuffle4755}4756 4757define <4 x bfloat> @shuffle_v4bf16_2333(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4758; GX900-LABEL: shuffle_v4bf16_2333:4759; GX900: ; %bb.0:4760; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4761; GX900-NEXT: global_load_dword v0, v[0:1], off offset:44762; GX900-NEXT: s_mov_b32 s4, 0x70603024763; GX900-NEXT: s_waitcnt vmcnt(0)4764; GX900-NEXT: v_perm_b32 v1, v0, v0, s44765; GX900-NEXT: s_setpc_b64 s[30:31]4766;4767; GFX942-LABEL: shuffle_v4bf16_2333:4768; GFX942: ; %bb.0:4769; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4770; GFX942-NEXT: global_load_dword v0, v[0:1], off offset:44771; GFX942-NEXT: s_mov_b32 s0, 0x70603024772; GFX942-NEXT: s_waitcnt vmcnt(0)4773; GFX942-NEXT: v_perm_b32 v1, v0, v0, s04774; GFX942-NEXT: s_setpc_b64 s[30:31]4775;4776; GFX10-LABEL: shuffle_v4bf16_2333:4777; GFX10: ; %bb.0:4778; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4779; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:44780; GFX10-NEXT: s_waitcnt vmcnt(0)4781; GFX10-NEXT: v_perm_b32 v1, v0, v0, 0x70603024782; GFX10-NEXT: s_setpc_b64 s[30:31]4783;4784; GFX11-TRUE16-LABEL: shuffle_v4bf16_2333:4785; GFX11-TRUE16: ; %bb.0:4786; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4787; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44788; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4789; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h4790; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.h4791; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4792;4793; GFX11-FAKE16-LABEL: shuffle_v4bf16_2333:4794; GFX11-FAKE16: ; %bb.0:4795; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4796; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:44797; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4798; GFX11-FAKE16-NEXT: v_perm_b32 v1, v0, v0, 0x70603024799; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4800 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04801 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14802 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>4803 ret <4 x bfloat> %shuffle4804}4805 4806define <4 x bfloat> @shuffle_v4bf16_6667(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4807; GX900-LABEL: shuffle_v4bf16_6667:4808; GX900: ; %bb.0:4809; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4810; GX900-NEXT: global_load_dword v0, v[0:1], off offset:44811; GX900-NEXT: s_mov_b32 s4, 0x70603024812; GX900-NEXT: s_waitcnt vmcnt(0)4813; GX900-NEXT: v_perm_b32 v1, v0, v0, s44814; GX900-NEXT: s_setpc_b64 s[30:31]4815;4816; GFX942-LABEL: shuffle_v4bf16_6667:4817; GFX942: ; %bb.0:4818; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4819; GFX942-NEXT: global_load_dword v0, v[0:1], off offset:44820; GFX942-NEXT: s_mov_b32 s0, 0x70603024821; GFX942-NEXT: s_waitcnt vmcnt(0)4822; GFX942-NEXT: v_perm_b32 v1, v0, v0, s04823; GFX942-NEXT: s_setpc_b64 s[30:31]4824;4825; GFX10-LABEL: shuffle_v4bf16_6667:4826; GFX10: ; %bb.0:4827; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4828; GFX10-NEXT: global_load_dword v0, v[0:1], off offset:44829; GFX10-NEXT: s_waitcnt vmcnt(0)4830; GFX10-NEXT: v_perm_b32 v1, v0, v0, 0x70603024831; GFX10-NEXT: s_setpc_b64 s[30:31]4832;4833; GFX11-TRUE16-LABEL: shuffle_v4bf16_6667:4834; GFX11-TRUE16: ; %bb.0:4835; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4836; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off offset:44837; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)4838; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h4839; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.h4840; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]4841;4842; GFX11-FAKE16-LABEL: shuffle_v4bf16_6667:4843; GFX11-FAKE16: ; %bb.0:4844; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4845; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off offset:44846; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)4847; GFX11-FAKE16-NEXT: v_perm_b32 v1, v0, v0, 0x70603024848; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]4849 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg04850 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg14851 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>4852 ret <4 x bfloat> %shuffle4853}4854 4855define <4 x bfloat> @shuffle_v8bf16_0101(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4856; GFX9-LABEL: shuffle_v8bf16_0101:4857; GFX9: ; %bb.0:4858; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4859; GFX9-NEXT: global_load_dword v0, v[0:1], off4860; GFX9-NEXT: s_waitcnt vmcnt(0)4861; GFX9-NEXT: v_mov_b32_e32 v1, v04862; GFX9-NEXT: s_setpc_b64 s[30:31]4863;4864; GFX10-LABEL: shuffle_v8bf16_0101:4865; GFX10: ; %bb.0:4866; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4867; GFX10-NEXT: global_load_dword v0, v[0:1], off4868; GFX10-NEXT: s_waitcnt vmcnt(0)4869; GFX10-NEXT: v_mov_b32_e32 v1, v04870; GFX10-NEXT: s_setpc_b64 s[30:31]4871;4872; GFX11-LABEL: shuffle_v8bf16_0101:4873; GFX11: ; %bb.0:4874; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4875; GFX11-NEXT: global_load_b32 v0, v[0:1], off4876; GFX11-NEXT: s_waitcnt vmcnt(0)4877; GFX11-NEXT: v_mov_b32_e32 v1, v04878; GFX11-NEXT: s_setpc_b64 s[30:31]4879 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg04880 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg14881 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 0, i32 1>4882 ret <4 x bfloat> %shuffle4883}4884 4885define <4 x bfloat> @shuffle_v8bf16_0123(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4886; GFX9-LABEL: shuffle_v8bf16_0123:4887; GFX9: ; %bb.0:4888; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4889; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4890; GFX9-NEXT: s_waitcnt vmcnt(0)4891; GFX9-NEXT: s_setpc_b64 s[30:31]4892;4893; GFX10-LABEL: shuffle_v8bf16_0123:4894; GFX10: ; %bb.0:4895; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4896; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off4897; GFX10-NEXT: s_waitcnt vmcnt(0)4898; GFX10-NEXT: s_setpc_b64 s[30:31]4899;4900; GFX11-LABEL: shuffle_v8bf16_0123:4901; GFX11: ; %bb.0:4902; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4903; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off4904; GFX11-NEXT: s_waitcnt vmcnt(0)4905; GFX11-NEXT: s_setpc_b64 s[30:31]4906 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg04907 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg14908 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4909 ret <4 x bfloat> %shuffle4910}4911 4912define <4 x bfloat> @shuffle_v8bf16_4589(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4913; GFX9-LABEL: shuffle_v8bf16_4589:4914; GFX9: ; %bb.0:4915; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4916; GFX9-NEXT: global_load_dword v4, v[0:1], off offset:84917; GFX9-NEXT: global_load_dword v5, v[2:3], off4918; GFX9-NEXT: s_waitcnt vmcnt(1)4919; GFX9-NEXT: v_mov_b32_e32 v0, v44920; GFX9-NEXT: s_waitcnt vmcnt(0)4921; GFX9-NEXT: v_mov_b32_e32 v1, v54922; GFX9-NEXT: s_setpc_b64 s[30:31]4923;4924; GFX10-LABEL: shuffle_v8bf16_4589:4925; GFX10: ; %bb.0:4926; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4927; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:84928; GFX10-NEXT: global_load_dword v5, v[2:3], off4929; GFX10-NEXT: s_waitcnt vmcnt(1)4930; GFX10-NEXT: v_mov_b32_e32 v0, v44931; GFX10-NEXT: s_waitcnt vmcnt(0)4932; GFX10-NEXT: v_mov_b32_e32 v1, v54933; GFX10-NEXT: s_setpc_b64 s[30:31]4934;4935; GFX11-LABEL: shuffle_v8bf16_4589:4936; GFX11: ; %bb.0:4937; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4938; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:84939; GFX11-NEXT: global_load_b32 v1, v[2:3], off4940; GFX11-NEXT: s_waitcnt vmcnt(0)4941; GFX11-NEXT: s_setpc_b64 s[30:31]4942 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg04943 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg14944 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <4 x i32> <i32 4, i32 5, i32 8, i32 9>4945 ret <4 x bfloat> %shuffle4946}4947 4948define <4 x bfloat> @shuffle_v8bf16_10_11_2_3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4949; GFX9-LABEL: shuffle_v8bf16_10_11_2_3:4950; GFX9: ; %bb.0:4951; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4952; GFX9-NEXT: global_load_dword v4, v[2:3], off offset:44953; GFX9-NEXT: global_load_dword v5, v[0:1], off offset:44954; GFX9-NEXT: s_waitcnt vmcnt(1)4955; GFX9-NEXT: v_mov_b32_e32 v0, v44956; GFX9-NEXT: s_waitcnt vmcnt(0)4957; GFX9-NEXT: v_mov_b32_e32 v1, v54958; GFX9-NEXT: s_setpc_b64 s[30:31]4959;4960; GFX10-LABEL: shuffle_v8bf16_10_11_2_3:4961; GFX10: ; %bb.0:4962; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4963; GFX10-NEXT: global_load_dword v4, v[2:3], off offset:44964; GFX10-NEXT: global_load_dword v5, v[0:1], off offset:44965; GFX10-NEXT: s_waitcnt vmcnt(1)4966; GFX10-NEXT: v_mov_b32_e32 v0, v44967; GFX10-NEXT: s_waitcnt vmcnt(0)4968; GFX10-NEXT: v_mov_b32_e32 v1, v54969; GFX10-NEXT: s_setpc_b64 s[30:31]4970;4971; GFX11-LABEL: shuffle_v8bf16_10_11_2_3:4972; GFX11: ; %bb.0:4973; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4974; GFX11-NEXT: global_load_b32 v2, v[2:3], off offset:44975; GFX11-NEXT: global_load_b32 v1, v[0:1], off offset:44976; GFX11-NEXT: s_waitcnt vmcnt(1)4977; GFX11-NEXT: v_mov_b32_e32 v0, v24978; GFX11-NEXT: s_waitcnt vmcnt(0)4979; GFX11-NEXT: s_setpc_b64 s[30:31]4980 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg04981 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg14982 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <4 x i32> <i32 10, i32 11, i32 2, i32 3>4983 ret <4 x bfloat> %shuffle4984}4985 4986define <4 x bfloat> @shuffle_v8bf16_13_14_2_3(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {4987; GX900-LABEL: shuffle_v8bf16_13_14_2_3:4988; GX900: ; %bb.0:4989; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4990; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off offset:84991; GX900-NEXT: global_load_dword v4, v[0:1], off offset:44992; GX900-NEXT: s_waitcnt vmcnt(1)4993; GX900-NEXT: v_alignbit_b32 v0, v6, v5, 164994; GX900-NEXT: s_waitcnt vmcnt(0)4995; GX900-NEXT: v_mov_b32_e32 v1, v44996; GX900-NEXT: s_setpc_b64 s[30:31]4997;4998; GFX942-LABEL: shuffle_v8bf16_13_14_2_3:4999; GFX942: ; %bb.0:5000; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5001; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off offset:85002; GFX942-NEXT: global_load_dword v4, v[0:1], off offset:45003; GFX942-NEXT: s_waitcnt vmcnt(1)5004; GFX942-NEXT: v_alignbit_b32 v0, v7, v6, 165005; GFX942-NEXT: s_waitcnt vmcnt(0)5006; GFX942-NEXT: v_mov_b32_e32 v1, v45007; GFX942-NEXT: s_setpc_b64 s[30:31]5008;5009; GFX10-LABEL: shuffle_v8bf16_13_14_2_3:5010; GFX10: ; %bb.0:5011; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5012; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off offset:85013; GFX10-NEXT: global_load_dword v4, v[0:1], off offset:45014; GFX10-NEXT: s_waitcnt vmcnt(1)5015; GFX10-NEXT: v_alignbit_b32 v0, v6, v5, 165016; GFX10-NEXT: s_waitcnt vmcnt(0)5017; GFX10-NEXT: v_mov_b32_e32 v1, v45018; GFX10-NEXT: s_setpc_b64 s[30:31]5019;5020; GFX11-TRUE16-LABEL: shuffle_v8bf16_13_14_2_3:5021; GFX11-TRUE16: ; %bb.0:5022; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5023; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off offset:85024; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off offset:45025; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)5026; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v2.h5027; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v3.l5028; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5029; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5030;5031; GFX11-FAKE16-LABEL: shuffle_v8bf16_13_14_2_3:5032; GFX11-FAKE16: ; %bb.0:5033; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5034; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v[2:3], off offset:85035; GFX11-FAKE16-NEXT: global_load_b32 v1, v[0:1], off offset:45036; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(1)5037; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v3, v2, 165038; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5039; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5040 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg05041 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg15042 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <4 x i32> <i32 13, i32 14, i32 2, i32 3>5043 ret <4 x bfloat> %shuffle5044}5045 5046define <4 x bfloat> @shuffle_v3bf16_0122(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {5047; GX900-LABEL: shuffle_v3bf16_0122:5048; GX900: ; %bb.0:5049; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5050; GX900-NEXT: global_load_dwordx2 v[0:1], v[0:1], off5051; GX900-NEXT: s_mov_b32 s4, 0x50401005052; GX900-NEXT: s_waitcnt vmcnt(0)5053; GX900-NEXT: v_perm_b32 v1, v1, v1, s45054; GX900-NEXT: s_setpc_b64 s[30:31]5055;5056; GFX942-LABEL: shuffle_v3bf16_0122:5057; GFX942: ; %bb.0:5058; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5059; GFX942-NEXT: global_load_dwordx2 v[0:1], v[0:1], off5060; GFX942-NEXT: s_mov_b32 s0, 0x50401005061; GFX942-NEXT: s_waitcnt vmcnt(0)5062; GFX942-NEXT: v_perm_b32 v1, v1, v1, s05063; GFX942-NEXT: s_setpc_b64 s[30:31]5064;5065; GFX10-LABEL: shuffle_v3bf16_0122:5066; GFX10: ; %bb.0:5067; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5068; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off5069; GFX10-NEXT: s_waitcnt vmcnt(0)5070; GFX10-NEXT: v_perm_b32 v1, v1, v1, 0x50401005071; GFX10-NEXT: s_setpc_b64 s[30:31]5072;5073; GFX11-TRUE16-LABEL: shuffle_v3bf16_0122:5074; GFX11-TRUE16: ; %bb.0:5075; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5076; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off5077; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5078; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v1.l5079; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5080;5081; GFX11-FAKE16-LABEL: shuffle_v3bf16_0122:5082; GFX11-FAKE16: ; %bb.0:5083; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5084; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off5085; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5086; GFX11-FAKE16-NEXT: v_perm_b32 v1, v1, v1, 0x50401005087; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5088 %val0 = load <3 x bfloat>, ptr addrspace(1) %arg05089 %val1 = load <3 x bfloat>, ptr addrspace(1) %arg15090 %shuffle = shufflevector <3 x bfloat> %val0, <3 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 2, i32 2>5091 ret <4 x bfloat> %shuffle5092}5093 5094define <4 x bfloat> @shuffle_v2bf16_0122(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {5095; GFX9-LABEL: shuffle_v2bf16_0122:5096; GFX9: ; %bb.0:5097; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5098; GFX9-NEXT: global_load_dword v0, v[0:1], off5099; GFX9-NEXT: s_waitcnt vmcnt(0)5100; GFX9-NEXT: v_alignbit_b32 v1, v0, v0, 165101; GFX9-NEXT: s_setpc_b64 s[30:31]5102;5103; GFX10-LABEL: shuffle_v2bf16_0122:5104; GFX10: ; %bb.0:5105; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5106; GFX10-NEXT: global_load_dword v0, v[0:1], off5107; GFX10-NEXT: s_waitcnt vmcnt(0)5108; GFX10-NEXT: v_alignbit_b32 v1, v0, v0, 165109; GFX10-NEXT: s_setpc_b64 s[30:31]5110;5111; GFX11-TRUE16-LABEL: shuffle_v2bf16_0122:5112; GFX11-TRUE16: ; %bb.0:5113; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5114; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off5115; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5116; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v0.h5117; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l5118; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5119;5120; GFX11-FAKE16-LABEL: shuffle_v2bf16_0122:5121; GFX11-FAKE16: ; %bb.0:5122; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5123; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off5124; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5125; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v0, v0, 165126; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5127 %val0 = load <2 x bfloat>, ptr addrspace(1) %arg05128 %val1 = load <2 x bfloat>, ptr addrspace(1) %arg15129 %shuffle = shufflevector <2 x bfloat> %val0, <2 x bfloat> %val1, <4 x i32> <i32 0, i32 1, i32 1, i32 0>5130 ret <4 x bfloat> %shuffle5131}5132 5133define <6 x bfloat> @shuffle_v6bf16_452367(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {5134; GX900-LABEL: shuffle_v6bf16_452367:5135; GX900: ; %bb.0:5136; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5137; GX900-NEXT: v_mov_b32_e32 v6, v15138; GX900-NEXT: v_mov_b32_e32 v5, v05139; GX900-NEXT: v_mov_b32_e32 v4, v35140; GX900-NEXT: v_mov_b32_e32 v3, v25141; GX900-NEXT: global_load_dwordx3 v[0:2], v[5:6], off5142; GX900-NEXT: global_load_dword v7, v[3:4], off5143; GX900-NEXT: s_waitcnt vmcnt(1)5144; GX900-NEXT: v_mov_b32_e32 v0, v25145; GX900-NEXT: s_waitcnt vmcnt(0)5146; GX900-NEXT: v_mov_b32_e32 v2, v75147; GX900-NEXT: s_setpc_b64 s[30:31]5148;5149; GFX942-LABEL: shuffle_v6bf16_452367:5150; GFX942: ; %bb.0:5151; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5152; GFX942-NEXT: global_load_dwordx3 v[4:6], v[0:1], off5153; GFX942-NEXT: global_load_dword v4, v[2:3], off5154; GFX942-NEXT: ; kill: killed $vgpr0 killed $vgpr15155; GFX942-NEXT: ; kill: killed $vgpr2 killed $vgpr35156; GFX942-NEXT: s_waitcnt vmcnt(1)5157; GFX942-NEXT: v_mov_b32_e32 v0, v65158; GFX942-NEXT: v_mov_b32_e32 v1, v55159; GFX942-NEXT: s_waitcnt vmcnt(0)5160; GFX942-NEXT: v_mov_b32_e32 v2, v45161; GFX942-NEXT: s_setpc_b64 s[30:31]5162;5163; GFX10-LABEL: shuffle_v6bf16_452367:5164; GFX10: ; %bb.0:5165; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5166; GFX10-NEXT: v_mov_b32_e32 v6, v15167; GFX10-NEXT: v_mov_b32_e32 v5, v05168; GFX10-NEXT: v_mov_b32_e32 v4, v35169; GFX10-NEXT: v_mov_b32_e32 v3, v25170; GFX10-NEXT: global_load_dwordx3 v[0:2], v[5:6], off5171; GFX10-NEXT: global_load_dword v7, v[3:4], off5172; GFX10-NEXT: s_waitcnt vmcnt(1)5173; GFX10-NEXT: v_mov_b32_e32 v0, v25174; GFX10-NEXT: s_waitcnt vmcnt(0)5175; GFX10-NEXT: v_mov_b32_e32 v2, v75176; GFX10-NEXT: s_setpc_b64 s[30:31]5177;5178; GFX11-LABEL: shuffle_v6bf16_452367:5179; GFX11: ; %bb.0:5180; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5181; GFX11-NEXT: v_dual_mov_b32 v4, v3 :: v_dual_mov_b32 v3, v25182; GFX11-NEXT: global_load_b96 v[0:2], v[0:1], off5183; GFX11-NEXT: global_load_b32 v3, v[3:4], off5184; GFX11-NEXT: s_waitcnt vmcnt(1)5185; GFX11-NEXT: v_mov_b32_e32 v0, v25186; GFX11-NEXT: s_waitcnt vmcnt(0)5187; GFX11-NEXT: v_mov_b32_e32 v2, v35188; GFX11-NEXT: s_setpc_b64 s[30:31]5189 %val0 = load <6 x bfloat>, ptr addrspace(1) %arg05190 %val1 = load <6 x bfloat>, ptr addrspace(1) %arg15191 %shuffle = shufflevector <6 x bfloat> %val0, <6 x bfloat> %val1, <6 x i32> <i32 4, i32 5, i32 2, i32 3, i32 6, i32 7>5192 ret <6 x bfloat> %shuffle5193}5194 5195define amdgpu_kernel void @fma_shuffle_v2bf16(ptr addrspace(1) nocapture readonly %A, ptr addrspace(1) nocapture readonly %B, ptr addrspace(1) nocapture %C) {5196; GX900-LABEL: fma_shuffle_v2bf16:5197; GX900: ; %bb.0: ; %entry5198; GX900-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x105199; GX900-NEXT: s_load_dwordx4 s[4:7], s[8:9], 0x05200; GX900-NEXT: v_lshlrev_b32_e32 v0, 3, v05201; GX900-NEXT: s_movk_i32 s2, 0x7fff5202; GX900-NEXT: s_mov_b32 s3, 0x70603025203; GX900-NEXT: s_waitcnt lgkmcnt(0)5204; GX900-NEXT: global_load_dwordx2 v[1:2], v0, s[0:1]5205; GX900-NEXT: global_load_dwordx2 v[3:4], v0, s[4:5]5206; GX900-NEXT: global_load_dwordx2 v[5:6], v0, s[6:7]5207; GX900-NEXT: s_waitcnt vmcnt(2)5208; GX900-NEXT: v_and_b32_e32 v7, 0xffff0000, v15209; GX900-NEXT: s_waitcnt vmcnt(1)5210; GX900-NEXT: v_lshlrev_b32_e32 v8, 16, v35211; GX900-NEXT: s_waitcnt vmcnt(0)5212; GX900-NEXT: v_and_b32_e32 v9, 0xffff0000, v55213; GX900-NEXT: v_lshlrev_b32_e32 v1, 16, v15214; GX900-NEXT: v_lshlrev_b32_e32 v5, 16, v55215; GX900-NEXT: v_and_b32_e32 v11, 0xffff0000, v25216; GX900-NEXT: v_lshlrev_b32_e32 v12, 16, v45217; GX900-NEXT: v_lshlrev_b32_e32 v2, 16, v25218; GX900-NEXT: v_fma_f32 v7, v8, v9, v75219; GX900-NEXT: v_fma_f32 v1, v8, v5, v15220; GX900-NEXT: v_fma_f32 v2, v12, v5, v25221; GX900-NEXT: v_bfe_u32 v5, v7, 16, 15222; GX900-NEXT: v_fma_f32 v8, v12, v9, v115223; GX900-NEXT: v_or_b32_e32 v9, 0x400000, v75224; GX900-NEXT: v_bfe_u32 v11, v1, 16, 15225; GX900-NEXT: v_add3_u32 v5, v5, v7, s25226; GX900-NEXT: v_cmp_u_f32_e32 vcc, v7, v75227; GX900-NEXT: v_or_b32_e32 v12, 0x400000, v15228; GX900-NEXT: v_bfe_u32 v13, v8, 16, 15229; GX900-NEXT: v_add3_u32 v11, v11, v1, s25230; GX900-NEXT: v_cndmask_b32_e32 v5, v5, v9, vcc5231; GX900-NEXT: v_cmp_u_f32_e32 vcc, v1, v15232; GX900-NEXT: v_or_b32_e32 v14, 0x400000, v85233; GX900-NEXT: v_bfe_u32 v15, v2, 16, 15234; GX900-NEXT: v_add3_u32 v13, v13, v8, s25235; GX900-NEXT: v_cndmask_b32_e32 v1, v11, v12, vcc5236; GX900-NEXT: v_cmp_u_f32_e32 vcc, v8, v85237; GX900-NEXT: v_and_b32_e32 v3, 0xffff0000, v35238; GX900-NEXT: v_lshlrev_b32_e32 v10, 16, v65239; GX900-NEXT: v_or_b32_e32 v16, 0x400000, v25240; GX900-NEXT: v_add3_u32 v15, v15, v2, s25241; GX900-NEXT: v_cndmask_b32_e32 v7, v13, v14, vcc5242; GX900-NEXT: v_cmp_u_f32_e32 vcc, v2, v25243; GX900-NEXT: v_and_b32_e32 v1, 0xffff0000, v15244; GX900-NEXT: v_and_b32_e32 v6, 0xffff0000, v65245; GX900-NEXT: v_cndmask_b32_e32 v2, v15, v16, vcc5246; GX900-NEXT: v_and_b32_e32 v5, 0xffff0000, v55247; GX900-NEXT: v_fma_f32 v1, v3, v10, v15248; GX900-NEXT: v_and_b32_e32 v4, 0xffff0000, v45249; GX900-NEXT: v_and_b32_e32 v2, 0xffff0000, v25250; GX900-NEXT: v_and_b32_e32 v7, 0xffff0000, v75251; GX900-NEXT: v_fma_f32 v3, v3, v6, v55252; GX900-NEXT: v_bfe_u32 v5, v1, 16, 15253; GX900-NEXT: v_fma_f32 v2, v4, v10, v25254; GX900-NEXT: v_fma_f32 v4, v4, v6, v75255; GX900-NEXT: v_or_b32_e32 v6, 0x400000, v15256; GX900-NEXT: v_bfe_u32 v7, v3, 16, 15257; GX900-NEXT: v_add3_u32 v5, v5, v1, s25258; GX900-NEXT: v_cmp_u_f32_e32 vcc, v1, v15259; GX900-NEXT: v_or_b32_e32 v8, 0x400000, v35260; GX900-NEXT: v_bfe_u32 v9, v2, 16, 15261; GX900-NEXT: v_add3_u32 v7, v7, v3, s25262; GX900-NEXT: v_cndmask_b32_e32 v1, v5, v6, vcc5263; GX900-NEXT: v_cmp_u_f32_e32 vcc, v3, v35264; GX900-NEXT: v_or_b32_e32 v10, 0x400000, v25265; GX900-NEXT: v_bfe_u32 v11, v4, 16, 15266; GX900-NEXT: v_add3_u32 v9, v9, v2, s25267; GX900-NEXT: v_cndmask_b32_e32 v3, v7, v8, vcc5268; GX900-NEXT: v_cmp_u_f32_e32 vcc, v2, v25269; GX900-NEXT: v_or_b32_e32 v12, 0x400000, v45270; GX900-NEXT: v_add3_u32 v11, v11, v4, s25271; GX900-NEXT: v_cndmask_b32_e32 v2, v9, v10, vcc5272; GX900-NEXT: v_cmp_u_f32_e32 vcc, v4, v45273; GX900-NEXT: v_cndmask_b32_e32 v4, v11, v12, vcc5274; GX900-NEXT: v_perm_b32 v2, v4, v2, s35275; GX900-NEXT: v_perm_b32 v1, v3, v1, s35276; GX900-NEXT: global_store_dwordx2 v0, v[1:2], s[0:1]5277; GX900-NEXT: s_endpgm5278;5279; GFX942-LABEL: fma_shuffle_v2bf16:5280; GFX942: ; %bb.0: ; %entry5281; GFX942-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x05282; GFX942-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x105283; GFX942-NEXT: v_and_b32_e32 v0, 0x3ff, v05284; GFX942-NEXT: v_lshlrev_b32_e32 v6, 3, v05285; GFX942-NEXT: s_movk_i32 s2, 0x7fff5286; GFX942-NEXT: s_mov_b32 s3, 0x70603025287; GFX942-NEXT: s_waitcnt lgkmcnt(0)5288; GFX942-NEXT: global_load_dwordx2 v[0:1], v6, s[8:9]5289; GFX942-NEXT: global_load_dwordx2 v[2:3], v6, s[0:1]5290; GFX942-NEXT: global_load_dwordx2 v[4:5], v6, s[10:11]5291; GFX942-NEXT: s_waitcnt vmcnt(2)5292; GFX942-NEXT: v_lshlrev_b32_e32 v7, 16, v05293; GFX942-NEXT: s_waitcnt vmcnt(1)5294; GFX942-NEXT: v_and_b32_e32 v8, 0xffff0000, v25295; GFX942-NEXT: s_waitcnt vmcnt(0)5296; GFX942-NEXT: v_and_b32_e32 v9, 0xffff0000, v45297; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v25298; GFX942-NEXT: v_lshlrev_b32_e32 v4, 16, v45299; GFX942-NEXT: v_lshlrev_b32_e32 v11, 16, v15300; GFX942-NEXT: v_and_b32_e32 v12, 0xffff0000, v35301; GFX942-NEXT: v_lshlrev_b32_e32 v3, 16, v35302; GFX942-NEXT: v_fmac_f32_e32 v8, v7, v95303; GFX942-NEXT: v_fmac_f32_e32 v2, v7, v45304; GFX942-NEXT: v_fmac_f32_e32 v3, v11, v45305; GFX942-NEXT: v_bfe_u32 v4, v8, 16, 15306; GFX942-NEXT: v_fmac_f32_e32 v12, v11, v95307; GFX942-NEXT: v_or_b32_e32 v7, 0x400000, v85308; GFX942-NEXT: v_bfe_u32 v9, v2, 16, 15309; GFX942-NEXT: v_add3_u32 v4, v4, v8, s25310; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v8, v85311; GFX942-NEXT: v_or_b32_e32 v11, 0x400000, v25312; GFX942-NEXT: v_bfe_u32 v13, v12, 16, 15313; GFX942-NEXT: v_add3_u32 v9, v9, v2, s25314; GFX942-NEXT: v_cndmask_b32_e32 v4, v4, v7, vcc5315; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v2, v25316; GFX942-NEXT: v_or_b32_e32 v14, 0x400000, v125317; GFX942-NEXT: v_bfe_u32 v15, v3, 16, 15318; GFX942-NEXT: v_add3_u32 v13, v13, v12, s25319; GFX942-NEXT: v_cndmask_b32_e32 v2, v9, v11, vcc5320; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v12, v125321; GFX942-NEXT: v_and_b32_e32 v0, 0xffff0000, v05322; GFX942-NEXT: v_lshlrev_b32_e32 v10, 16, v55323; GFX942-NEXT: v_or_b32_e32 v16, 0x400000, v35324; GFX942-NEXT: v_add3_u32 v15, v15, v3, s25325; GFX942-NEXT: v_cndmask_b32_e32 v7, v13, v14, vcc5326; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v3, v35327; GFX942-NEXT: v_and_b32_e32 v2, 0xffff0000, v25328; GFX942-NEXT: v_and_b32_e32 v5, 0xffff0000, v55329; GFX942-NEXT: v_cndmask_b32_e32 v3, v15, v16, vcc5330; GFX942-NEXT: v_and_b32_e32 v4, 0xffff0000, v45331; GFX942-NEXT: v_fmac_f32_e32 v2, v0, v105332; GFX942-NEXT: v_and_b32_e32 v1, 0xffff0000, v15333; GFX942-NEXT: v_and_b32_e32 v3, 0xffff0000, v35334; GFX942-NEXT: v_and_b32_e32 v7, 0xffff0000, v75335; GFX942-NEXT: v_fmac_f32_e32 v4, v0, v55336; GFX942-NEXT: v_bfe_u32 v0, v2, 16, 15337; GFX942-NEXT: v_fmac_f32_e32 v3, v1, v105338; GFX942-NEXT: v_fmac_f32_e32 v7, v1, v55339; GFX942-NEXT: v_or_b32_e32 v1, 0x400000, v25340; GFX942-NEXT: v_bfe_u32 v5, v4, 16, 15341; GFX942-NEXT: v_add3_u32 v0, v0, v2, s25342; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v2, v25343; GFX942-NEXT: v_or_b32_e32 v8, 0x400000, v45344; GFX942-NEXT: v_bfe_u32 v9, v3, 16, 15345; GFX942-NEXT: v_add3_u32 v5, v5, v4, s25346; GFX942-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc5347; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v4, v45348; GFX942-NEXT: v_or_b32_e32 v10, 0x400000, v35349; GFX942-NEXT: v_bfe_u32 v11, v7, 16, 15350; GFX942-NEXT: v_add3_u32 v9, v9, v3, s25351; GFX942-NEXT: v_cndmask_b32_e32 v2, v5, v8, vcc5352; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v3, v35353; GFX942-NEXT: v_or_b32_e32 v12, 0x400000, v75354; GFX942-NEXT: v_add3_u32 v11, v11, v7, s25355; GFX942-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc5356; GFX942-NEXT: v_cmp_u_f32_e32 vcc, v7, v75357; GFX942-NEXT: v_perm_b32 v0, v2, v0, s35358; GFX942-NEXT: s_nop 05359; GFX942-NEXT: v_cndmask_b32_e32 v3, v11, v12, vcc5360; GFX942-NEXT: v_perm_b32 v1, v3, v1, s35361; GFX942-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]5362; GFX942-NEXT: s_endpgm5363;5364; GFX10-LABEL: fma_shuffle_v2bf16:5365; GFX10: ; %bb.0: ; %entry5366; GFX10-NEXT: s_clause 0x15367; GFX10-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0x105368; GFX10-NEXT: s_load_dwordx4 s[4:7], s[8:9], 0x05369; GFX10-NEXT: v_lshlrev_b32_e32 v6, 3, v05370; GFX10-NEXT: s_waitcnt lgkmcnt(0)5371; GFX10-NEXT: s_clause 0x25372; GFX10-NEXT: global_load_dwordx2 v[0:1], v6, s[0:1]5373; GFX10-NEXT: global_load_dwordx2 v[2:3], v6, s[4:5]5374; GFX10-NEXT: global_load_dwordx2 v[4:5], v6, s[6:7]5375; GFX10-NEXT: s_waitcnt vmcnt(2)5376; GFX10-NEXT: v_and_b32_e32 v7, 0xffff0000, v05377; GFX10-NEXT: s_waitcnt vmcnt(1)5378; GFX10-NEXT: v_lshlrev_b32_e32 v8, 16, v25379; GFX10-NEXT: s_waitcnt vmcnt(0)5380; GFX10-NEXT: v_and_b32_e32 v9, 0xffff0000, v45381; GFX10-NEXT: v_lshlrev_b32_e32 v0, 16, v05382; GFX10-NEXT: v_lshlrev_b32_e32 v4, 16, v45383; GFX10-NEXT: v_and_b32_e32 v11, 0xffff0000, v15384; GFX10-NEXT: v_lshlrev_b32_e32 v12, 16, v35385; GFX10-NEXT: v_lshlrev_b32_e32 v1, 16, v15386; GFX10-NEXT: v_fmac_f32_e32 v7, v8, v95387; GFX10-NEXT: v_fmac_f32_e32 v0, v8, v45388; GFX10-NEXT: v_and_b32_e32 v2, 0xffff0000, v25389; GFX10-NEXT: v_fmac_f32_e32 v11, v12, v95390; GFX10-NEXT: v_fmac_f32_e32 v1, v12, v45391; GFX10-NEXT: v_bfe_u32 v4, v7, 16, 15392; GFX10-NEXT: v_or_b32_e32 v8, 0x400000, v75393; GFX10-NEXT: v_bfe_u32 v9, v0, 16, 15394; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75395; GFX10-NEXT: v_or_b32_e32 v12, 0x400000, v05396; GFX10-NEXT: v_add3_u32 v4, v4, v7, 0x7fff5397; GFX10-NEXT: v_bfe_u32 v15, v1, 16, 15398; GFX10-NEXT: v_add3_u32 v9, v9, v0, 0x7fff5399; GFX10-NEXT: v_bfe_u32 v13, v11, 16, 15400; GFX10-NEXT: v_or_b32_e32 v16, 0x400000, v15401; GFX10-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc_lo5402; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05403; GFX10-NEXT: v_add3_u32 v15, v15, v1, 0x7fff5404; GFX10-NEXT: v_lshlrev_b32_e32 v10, 16, v55405; GFX10-NEXT: v_or_b32_e32 v14, 0x400000, v115406; GFX10-NEXT: v_add3_u32 v13, v13, v11, 0x7fff5407; GFX10-NEXT: v_cndmask_b32_e32 v0, v9, v12, vcc_lo5408; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15409; GFX10-NEXT: v_and_b32_e32 v5, 0xffff0000, v55410; GFX10-NEXT: v_and_b32_e32 v3, 0xffff0000, v35411; GFX10-NEXT: v_and_b32_e32 v4, 0xffff0000, v45412; GFX10-NEXT: v_and_b32_e32 v0, 0xffff0000, v05413; GFX10-NEXT: v_cndmask_b32_e32 v1, v15, v16, vcc_lo5414; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v11, v115415; GFX10-NEXT: v_fmac_f32_e32 v4, v2, v55416; GFX10-NEXT: v_fmac_f32_e32 v0, v2, v105417; GFX10-NEXT: v_and_b32_e32 v1, 0xffff0000, v15418; GFX10-NEXT: v_cndmask_b32_e32 v7, v13, v14, vcc_lo5419; GFX10-NEXT: v_or_b32_e32 v8, 0x400000, v45420; GFX10-NEXT: v_bfe_u32 v2, v0, 16, 15421; GFX10-NEXT: v_fmac_f32_e32 v1, v3, v105422; GFX10-NEXT: v_and_b32_e32 v7, 0xffff0000, v75423; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05424; GFX10-NEXT: v_add3_u32 v2, v2, v0, 0x7fff5425; GFX10-NEXT: v_bfe_u32 v9, v1, 16, 15426; GFX10-NEXT: v_fmac_f32_e32 v7, v3, v55427; GFX10-NEXT: v_or_b32_e32 v3, 0x400000, v05428; GFX10-NEXT: v_or_b32_e32 v10, 0x400000, v15429; GFX10-NEXT: v_bfe_u32 v5, v4, 16, 15430; GFX10-NEXT: v_add3_u32 v9, v9, v1, 0x7fff5431; GFX10-NEXT: v_bfe_u32 v11, v7, 16, 15432; GFX10-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc_lo5433; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15434; GFX10-NEXT: v_or_b32_e32 v12, 0x400000, v75435; GFX10-NEXT: v_add3_u32 v5, v5, v4, 0x7fff5436; GFX10-NEXT: v_add3_u32 v11, v11, v7, 0x7fff5437; GFX10-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc_lo5438; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75439; GFX10-NEXT: v_cndmask_b32_e32 v2, v11, v12, vcc_lo5440; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v4, v45441; GFX10-NEXT: v_perm_b32 v1, v2, v1, 0x70603025442; GFX10-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc_lo5443; GFX10-NEXT: v_perm_b32 v0, v3, v0, 0x70603025444; GFX10-NEXT: global_store_dwordx2 v6, v[0:1], s[0:1]5445; GFX10-NEXT: s_endpgm5446;5447; GFX11-TRUE16-LABEL: fma_shuffle_v2bf16:5448; GFX11-TRUE16: ; %bb.0: ; %entry5449; GFX11-TRUE16-NEXT: s_clause 0x15450; GFX11-TRUE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x105451; GFX11-TRUE16-NEXT: s_load_b128 s[4:7], s[4:5], 0x05452; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v05453; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5454; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v6, 3, v05455; GFX11-TRUE16-NEXT: s_waitcnt lgkmcnt(0)5456; GFX11-TRUE16-NEXT: s_clause 0x25457; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v6, s[0:1]5458; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v6, s[4:5]5459; GFX11-TRUE16-NEXT: global_load_b64 v[4:5], v6, s[6:7]5460; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5461; GFX11-TRUE16-NEXT: v_and_b32_e32 v10, 0xffff0000, v55462; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v5, 16, v55463; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v9, 16, v45464; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v12, 16, v35465; GFX11-TRUE16-NEXT: v_and_b32_e32 v3, 0xffff0000, v35466; GFX11-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff0000, v45467; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v11, 16, v15468; GFX11-TRUE16-NEXT: v_and_b32_e32 v1, 0xffff0000, v15469; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)5470; GFX11-TRUE16-NEXT: v_dual_fmac_f32 v1, v12, v4 :: v_dual_lshlrev_b32 v8, 16, v25471; GFX11-TRUE16-NEXT: v_bfe_u32 v15, v1, 16, 15472; GFX11-TRUE16-NEXT: v_or_b32_e32 v16, 0x400000, v15473; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)5474; GFX11-TRUE16-NEXT: v_add3_u32 v15, v15, v1, 0x7fff5475; GFX11-TRUE16-NEXT: v_and_b32_e32 v2, 0xffff0000, v25476; GFX11-TRUE16-NEXT: v_lshlrev_b32_e32 v7, 16, v05477; GFX11-TRUE16-NEXT: v_dual_fmac_f32 v7, v8, v9 :: v_dual_and_b32 v0, 0xffff0000, v05478; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5479; GFX11-TRUE16-NEXT: v_fmac_f32_e32 v0, v8, v45480; GFX11-TRUE16-NEXT: v_bfe_u32 v4, v7, 16, 15481; GFX11-TRUE16-NEXT: v_or_b32_e32 v8, 0x400000, v75482; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75483; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)5484; GFX11-TRUE16-NEXT: v_add3_u32 v4, v4, v7, 0x7fff5485; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc_lo5486; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05487; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5488; GFX11-TRUE16-NEXT: v_and_b32_e32 v4, 0xffff0000, v45489; GFX11-TRUE16-NEXT: v_fmac_f32_e32 v4, v2, v55490; GFX11-TRUE16-NEXT: v_fmac_f32_e32 v11, v12, v95491; GFX11-TRUE16-NEXT: v_bfe_u32 v9, v0, 16, 15492; GFX11-TRUE16-NEXT: v_or_b32_e32 v12, 0x400000, v05493; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)5494; GFX11-TRUE16-NEXT: v_or_b32_e32 v8, 0x400000, v45495; GFX11-TRUE16-NEXT: v_bfe_u32 v13, v11, 16, 15496; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)5497; GFX11-TRUE16-NEXT: v_add3_u32 v9, v9, v0, 0x7fff5498; GFX11-TRUE16-NEXT: v_or_b32_e32 v14, 0x400000, v115499; GFX11-TRUE16-NEXT: v_add3_u32 v13, v13, v11, 0x7fff5500; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)5501; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v0, v9, v12, vcc_lo5502; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15503; GFX11-TRUE16-NEXT: v_and_b32_e32 v0, 0xffff0000, v05504; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v1, v15, v16, vcc_lo5505; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v11, v115506; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)5507; GFX11-TRUE16-NEXT: v_fmac_f32_e32 v0, v2, v105508; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v7, v13, v14, vcc_lo5509; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v4, v45510; GFX11-TRUE16-NEXT: v_bfe_u32 v2, v0, 16, 15511; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)5512; GFX11-TRUE16-NEXT: v_and_b32_e32 v7, 0xffff0000, v75513; GFX11-TRUE16-NEXT: v_add3_u32 v2, v2, v0, 0x7fff5514; GFX11-TRUE16-NEXT: v_and_b32_e32 v1, 0xffff0000, v15515; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)5516; GFX11-TRUE16-NEXT: v_fmac_f32_e32 v7, v3, v55517; GFX11-TRUE16-NEXT: v_bfe_u32 v5, v4, 16, 15518; GFX11-TRUE16-NEXT: v_or_b32_e32 v12, 0x400000, v75519; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5520; GFX11-TRUE16-NEXT: v_add3_u32 v5, v5, v4, 0x7fff5521; GFX11-TRUE16-NEXT: v_dual_cndmask_b32 v4, v5, v8 :: v_dual_fmac_f32 v1, v3, v105522; GFX11-TRUE16-NEXT: v_bfe_u32 v10, v7, 16, 15523; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75524; GFX11-TRUE16-NEXT: v_or_b32_e32 v3, 0x400000, v05525; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)5526; GFX11-TRUE16-NEXT: v_bfe_u32 v9, v1, 16, 15527; GFX11-TRUE16-NEXT: v_add3_u32 v10, v10, v7, 0x7fff5528; GFX11-TRUE16-NEXT: v_or_b32_e32 v11, 0x400000, v15529; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)5530; GFX11-TRUE16-NEXT: v_add3_u32 v9, v9, v1, 0x7fff5531; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v5, v10, v12, vcc_lo5532; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05533; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc_lo5534; GFX11-TRUE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15535; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v4.h5536; GFX11-TRUE16-NEXT: v_cndmask_b32_e32 v1, v9, v11, vcc_lo5537; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v5.h5538; GFX11-TRUE16-NEXT: global_store_b64 v6, v[0:1], s[0:1]5539; GFX11-TRUE16-NEXT: s_endpgm5540;5541; GFX11-FAKE16-LABEL: fma_shuffle_v2bf16:5542; GFX11-FAKE16: ; %bb.0: ; %entry5543; GFX11-FAKE16-NEXT: s_clause 0x15544; GFX11-FAKE16-NEXT: s_load_b64 s[0:1], s[4:5], 0x105545; GFX11-FAKE16-NEXT: s_load_b128 s[4:7], s[4:5], 0x05546; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x3ff, v05547; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)5548; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v6, 3, v05549; GFX11-FAKE16-NEXT: s_waitcnt lgkmcnt(0)5550; GFX11-FAKE16-NEXT: s_clause 0x25551; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v6, s[0:1]5552; GFX11-FAKE16-NEXT: global_load_b64 v[2:3], v6, s[4:5]5553; GFX11-FAKE16-NEXT: global_load_b64 v[4:5], v6, s[6:7]5554; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5555; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v10, 16, v55556; GFX11-FAKE16-NEXT: v_and_b32_e32 v5, 0xffff0000, v55557; GFX11-FAKE16-NEXT: v_and_b32_e32 v9, 0xffff0000, v45558; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v12, 16, v35559; GFX11-FAKE16-NEXT: v_and_b32_e32 v3, 0xffff0000, v35560; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v4, 16, v45561; GFX11-FAKE16-NEXT: v_and_b32_e32 v11, 0xffff0000, v15562; GFX11-FAKE16-NEXT: v_lshlrev_b32_e32 v1, 16, v15563; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)5564; GFX11-FAKE16-NEXT: v_dual_fmac_f32 v1, v12, v4 :: v_dual_lshlrev_b32 v8, 16, v25565; GFX11-FAKE16-NEXT: v_bfe_u32 v15, v1, 16, 15566; GFX11-FAKE16-NEXT: v_or_b32_e32 v16, 0x400000, v15567; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)5568; GFX11-FAKE16-NEXT: v_add3_u32 v15, v15, v1, 0x7fff5569; GFX11-FAKE16-NEXT: v_and_b32_e32 v2, 0xffff0000, v25570; GFX11-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff0000, v05571; GFX11-FAKE16-NEXT: v_dual_fmac_f32 v7, v8, v9 :: v_dual_lshlrev_b32 v0, 16, v05572; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)5573; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v0, v8, v45574; GFX11-FAKE16-NEXT: v_bfe_u32 v4, v7, 16, 15575; GFX11-FAKE16-NEXT: v_or_b32_e32 v8, 0x400000, v75576; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75577; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)5578; GFX11-FAKE16-NEXT: v_add3_u32 v4, v4, v7, 0x7fff5579; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc_lo5580; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05581; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5582; GFX11-FAKE16-NEXT: v_and_b32_e32 v4, 0xffff0000, v45583; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v4, v2, v55584; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v11, v12, v95585; GFX11-FAKE16-NEXT: v_bfe_u32 v9, v0, 16, 15586; GFX11-FAKE16-NEXT: v_or_b32_e32 v12, 0x400000, v05587; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)5588; GFX11-FAKE16-NEXT: v_or_b32_e32 v8, 0x400000, v45589; GFX11-FAKE16-NEXT: v_bfe_u32 v13, v11, 16, 15590; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)5591; GFX11-FAKE16-NEXT: v_add3_u32 v9, v9, v0, 0x7fff5592; GFX11-FAKE16-NEXT: v_or_b32_e32 v14, 0x400000, v115593; GFX11-FAKE16-NEXT: v_add3_u32 v13, v13, v11, 0x7fff5594; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)5595; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v0, v9, v12, vcc_lo5596; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15597; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v1, v15, v16, vcc_lo5598; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v11, v115599; GFX11-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff0000, v15600; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v7, v13, v14, vcc_lo5601; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5602; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v1, v3, v105603; GFX11-FAKE16-NEXT: v_and_b32_e32 v7, 0xffff0000, v75604; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)5605; GFX11-FAKE16-NEXT: v_bfe_u32 v9, v1, 16, 15606; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v7, v3, v55607; GFX11-FAKE16-NEXT: v_bfe_u32 v5, v4, 16, 15608; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)5609; GFX11-FAKE16-NEXT: v_add3_u32 v9, v9, v1, 0x7fff5610; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff0000, v05611; GFX11-FAKE16-NEXT: v_bfe_u32 v11, v7, 16, 15612; GFX11-FAKE16-NEXT: v_or_b32_e32 v12, 0x400000, v75613; GFX11-FAKE16-NEXT: v_add3_u32 v5, v5, v4, 0x7fff5614; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)5615; GFX11-FAKE16-NEXT: v_fmac_f32_e32 v0, v2, v105616; GFX11-FAKE16-NEXT: v_or_b32_e32 v10, 0x400000, v15617; GFX11-FAKE16-NEXT: v_add3_u32 v11, v11, v7, 0x7fff5618; GFX11-FAKE16-NEXT: v_bfe_u32 v2, v0, 16, 15619; GFX11-FAKE16-NEXT: v_or_b32_e32 v3, 0x400000, v05620; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v0, v05621; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)5622; GFX11-FAKE16-NEXT: v_add3_u32 v2, v2, v0, 0x7fff5623; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc_lo5624; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v1, v15625; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v1, v9, v10, vcc_lo5626; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v7, v75627; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v2, v11, v12, vcc_lo5628; GFX11-FAKE16-NEXT: v_cmp_u_f32_e32 vcc_lo, v4, v45629; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)5630; GFX11-FAKE16-NEXT: v_perm_b32 v1, v2, v1, 0x70603025631; GFX11-FAKE16-NEXT: v_cndmask_b32_e32 v3, v5, v8, vcc_lo5632; GFX11-FAKE16-NEXT: v_perm_b32 v0, v3, v0, 0x70603025633; GFX11-FAKE16-NEXT: global_store_b64 v6, v[0:1], s[0:1]5634; GFX11-FAKE16-NEXT: s_endpgm5635entry:5636 %tmp1 = tail call i32 @llvm.amdgcn.workitem.id.x()5637 %tmp12 = zext i32 %tmp1 to i645638 %arrayidx = getelementptr inbounds <4 x bfloat>, ptr addrspace(1) %A, i64 %tmp125639 %tmp14 = load <4 x bfloat>, ptr addrspace(1) %arrayidx, align 85640 %arrayidx1 = getelementptr inbounds <4 x bfloat>, ptr addrspace(1) %B, i64 %tmp125641 %tmp15 = load <4 x bfloat>, ptr addrspace(1) %arrayidx1, align 85642 %arrayidx2 = getelementptr inbounds <4 x bfloat>, ptr addrspace(1) %C, i64 %tmp125643 %tmp16 = load <4 x bfloat>, ptr addrspace(1) %arrayidx2, align 85644 %tmp17 = shufflevector <4 x bfloat> %tmp14, <4 x bfloat> poison, <2 x i32> zeroinitializer5645 %tmp18 = shufflevector <4 x bfloat> %tmp15, <4 x bfloat> poison, <2 x i32> <i32 0, i32 1>5646 %tmp19 = shufflevector <4 x bfloat> %tmp16, <4 x bfloat> poison, <2 x i32> <i32 0, i32 1>5647 %tmp20 = tail call <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat> %tmp17, <2 x bfloat> %tmp18, <2 x bfloat> %tmp19)5648 %tmp21 = shufflevector <4 x bfloat> %tmp14, <4 x bfloat> poison, <2 x i32> <i32 1, i32 1>5649 %tmp22 = shufflevector <4 x bfloat> %tmp15, <4 x bfloat> poison, <2 x i32> <i32 2, i32 3>5650 %tmp23 = tail call <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat> %tmp21, <2 x bfloat> %tmp22, <2 x bfloat> %tmp20)5651 %tmp24 = shufflevector <2 x bfloat> %tmp23, <2 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>5652 %tmp25 = shufflevector <4 x bfloat> %tmp24, <4 x bfloat> %tmp16, <4 x i32> <i32 0, i32 1, i32 6, i32 7>5653 %tmp26 = shufflevector <4 x bfloat> %tmp14, <4 x bfloat> poison, <2 x i32> <i32 2, i32 2>5654 %tmp27 = shufflevector <4 x bfloat> %tmp25, <4 x bfloat> poison, <2 x i32> <i32 2, i32 3>5655 %tmp28 = tail call <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat> %tmp26, <2 x bfloat> %tmp18, <2 x bfloat> %tmp27)5656 %tmp29 = shufflevector <4 x bfloat> %tmp14, <4 x bfloat> poison, <2 x i32> <i32 3, i32 3>5657 %tmp30 = tail call <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat> %tmp29, <2 x bfloat> %tmp22, <2 x bfloat> %tmp28)5658 %tmp31 = shufflevector <2 x bfloat> %tmp30, <2 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>5659 %tmp32 = shufflevector <4 x bfloat> %tmp25, <4 x bfloat> %tmp31, <4 x i32> <i32 0, i32 1, i32 4, i32 5>5660 store <4 x bfloat> %tmp32, ptr addrspace(1) %arrayidx2, align 85661 ret void5662}5663 5664define <4 x bfloat> @shuffle_v4bf16_0456(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1) {5665; GX900-LABEL: shuffle_v4bf16_0456:5666; GX900: ; %bb.0:5667; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5668; GX900-NEXT: global_load_dwordx2 v[4:5], v[0:1], off5669; GX900-NEXT: global_load_dwordx2 v[5:6], v[2:3], off5670; GX900-NEXT: s_mov_b32 s4, 0x50401005671; GX900-NEXT: ; kill: killed $vgpr0 killed $vgpr15672; GX900-NEXT: ; kill: killed $vgpr2 killed $vgpr35673; GX900-NEXT: s_waitcnt vmcnt(0)5674; GX900-NEXT: v_perm_b32 v0, v5, v4, s45675; GX900-NEXT: v_alignbit_b32 v1, v6, v5, 165676; GX900-NEXT: s_setpc_b64 s[30:31]5677;5678; GFX942-LABEL: shuffle_v4bf16_0456:5679; GFX942: ; %bb.0:5680; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5681; GFX942-NEXT: global_load_dwordx2 v[4:5], v[0:1], off5682; GFX942-NEXT: global_load_dwordx2 v[6:7], v[2:3], off5683; GFX942-NEXT: s_mov_b32 s0, 0x50401005684; GFX942-NEXT: s_waitcnt vmcnt(0)5685; GFX942-NEXT: v_perm_b32 v0, v6, v4, s05686; GFX942-NEXT: v_alignbit_b32 v1, v7, v6, 165687; GFX942-NEXT: s_setpc_b64 s[30:31]5688;5689; GFX10-LABEL: shuffle_v4bf16_0456:5690; GFX10: ; %bb.0:5691; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5692; GFX10-NEXT: global_load_dwordx2 v[4:5], v[0:1], off5693; GFX10-NEXT: global_load_dwordx2 v[5:6], v[2:3], off5694; GFX10-NEXT: ; kill: killed $vgpr0 killed $vgpr15695; GFX10-NEXT: ; kill: killed $vgpr2 killed $vgpr35696; GFX10-NEXT: s_waitcnt vmcnt(0)5697; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x50401005698; GFX10-NEXT: v_alignbit_b32 v1, v6, v5, 165699; GFX10-NEXT: s_setpc_b64 s[30:31]5700;5701; GFX11-TRUE16-LABEL: shuffle_v4bf16_0456:5702; GFX11-TRUE16: ; %bb.0:5703; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5704; GFX11-TRUE16-NEXT: global_load_b64 v[2:3], v[2:3], off5705; GFX11-TRUE16-NEXT: global_load_b64 v[0:1], v[0:1], off5706; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5707; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l5708; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.h5709; GFX11-TRUE16-NEXT: v_mov_b16_e32 v1.h, v3.l5710; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5711;5712; GFX11-FAKE16-LABEL: shuffle_v4bf16_0456:5713; GFX11-FAKE16: ; %bb.0:5714; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5715; GFX11-FAKE16-NEXT: global_load_b64 v[0:1], v[0:1], off5716; GFX11-FAKE16-NEXT: global_load_b64 v[1:2], v[2:3], off5717; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5718; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401005719; GFX11-FAKE16-NEXT: v_alignbit_b32 v1, v2, v1, 165720; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5721 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg05722 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg15723 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <4 x i32> <i32 0, i32 4, i32 5, i32 6>5724 ret <4 x bfloat> %shuffle5725}5726 5727define <2 x bfloat> @low16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {5728; GX900-LABEL: low16bits:5729; GX900: ; %bb.0: ; %entry5730; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5731; GX900-NEXT: global_load_dword v4, v[0:1], off5732; GX900-NEXT: global_load_dword v5, v[2:3], off5733; GX900-NEXT: s_mov_b32 s4, 0x50401005734; GX900-NEXT: s_waitcnt vmcnt(0)5735; GX900-NEXT: v_perm_b32 v0, v5, v4, s45736; GX900-NEXT: s_setpc_b64 s[30:31]5737;5738; GFX942-LABEL: low16bits:5739; GFX942: ; %bb.0: ; %entry5740; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5741; GFX942-NEXT: global_load_dword v4, v[0:1], off5742; GFX942-NEXT: global_load_dword v5, v[2:3], off5743; GFX942-NEXT: s_mov_b32 s0, 0x50401005744; GFX942-NEXT: s_waitcnt vmcnt(0)5745; GFX942-NEXT: v_perm_b32 v0, v5, v4, s05746; GFX942-NEXT: s_setpc_b64 s[30:31]5747;5748; GFX10-LABEL: low16bits:5749; GFX10: ; %bb.0: ; %entry5750; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5751; GFX10-NEXT: global_load_dword v4, v[0:1], off5752; GFX10-NEXT: global_load_dword v5, v[2:3], off5753; GFX10-NEXT: s_waitcnt vmcnt(0)5754; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x50401005755; GFX10-NEXT: s_setpc_b64 s[30:31]5756;5757; GFX11-TRUE16-LABEL: low16bits:5758; GFX11-TRUE16: ; %bb.0: ; %entry5759; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5760; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off5761; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off5762; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5763; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.l5764; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5765;5766; GFX11-FAKE16-LABEL: low16bits:5767; GFX11-FAKE16: ; %bb.0: ; %entry5768; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5769; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off5770; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off5771; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5772; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x50401005773; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5774entry:5775 %0 = load <2 x bfloat>, ptr addrspace(1) %x0, align 45776 %1 = load <2 x bfloat>, ptr addrspace(1) %x1, align 45777 %vy1.0.vec.insert = shufflevector <2 x bfloat> %0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 poison>5778 %vy1.2.vec.insert = shufflevector <2 x bfloat> %vy1.0.vec.insert, <2 x bfloat> %1, <2 x i32> <i32 0, i32 2>5779 ret <2 x bfloat> %vy1.2.vec.insert5780}5781 5782define <2 x bfloat> @hi16bits_v2bf16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {5783; GX900-LABEL: hi16bits_v2bf16:5784; GX900: ; %bb.0: ; %entry5785; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5786; GX900-NEXT: global_load_dword v4, v[0:1], off5787; GX900-NEXT: global_load_dword v5, v[2:3], off5788; GX900-NEXT: s_mov_b32 s4, 0x70603025789; GX900-NEXT: s_waitcnt vmcnt(0)5790; GX900-NEXT: v_perm_b32 v0, v5, v4, s45791; GX900-NEXT: s_setpc_b64 s[30:31]5792;5793; GFX942-LABEL: hi16bits_v2bf16:5794; GFX942: ; %bb.0: ; %entry5795; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5796; GFX942-NEXT: global_load_dword v4, v[0:1], off5797; GFX942-NEXT: global_load_dword v5, v[2:3], off5798; GFX942-NEXT: s_mov_b32 s0, 0x70603025799; GFX942-NEXT: s_waitcnt vmcnt(0)5800; GFX942-NEXT: v_perm_b32 v0, v5, v4, s05801; GFX942-NEXT: s_setpc_b64 s[30:31]5802;5803; GFX10-LABEL: hi16bits_v2bf16:5804; GFX10: ; %bb.0: ; %entry5805; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5806; GFX10-NEXT: global_load_dword v4, v[0:1], off5807; GFX10-NEXT: global_load_dword v5, v[2:3], off5808; GFX10-NEXT: s_waitcnt vmcnt(0)5809; GFX10-NEXT: v_perm_b32 v0, v5, v4, 0x70603025810; GFX10-NEXT: s_setpc_b64 s[30:31]5811;5812; GFX11-TRUE16-LABEL: hi16bits_v2bf16:5813; GFX11-TRUE16: ; %bb.0: ; %entry5814; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5815; GFX11-TRUE16-NEXT: global_load_b32 v1, v[0:1], off5816; GFX11-TRUE16-NEXT: global_load_b32 v0, v[2:3], off5817; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5818; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v1.h5819; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5820;5821; GFX11-FAKE16-LABEL: hi16bits_v2bf16:5822; GFX11-FAKE16: ; %bb.0: ; %entry5823; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5824; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off5825; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off5826; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5827; GFX11-FAKE16-NEXT: v_perm_b32 v0, v1, v0, 0x70603025828; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5829entry:5830 %0 = load <2 x bfloat>, ptr addrspace(1) %x0, align 45831 %1 = load <2 x bfloat>, ptr addrspace(1) %x1, align 45832 %vy1.0.vec.insert = shufflevector <2 x bfloat> %0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 poison>5833 %vy1.2.vec.insert = shufflevector <2 x bfloat> %vy1.0.vec.insert, <2 x bfloat> %1, <2 x i32> <i32 0, i32 3>5834 ret <2 x bfloat> %vy1.2.vec.insert5835}5836 5837define <2 x bfloat> @low16hi16bits_v2bf16(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {5838; GX900-LABEL: low16hi16bits_v2bf16:5839; GX900: ; %bb.0: ; %entry5840; GX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5841; GX900-NEXT: global_load_dword v4, v[2:3], off5842; GX900-NEXT: global_load_dword v5, v[0:1], off5843; GX900-NEXT: s_mov_b32 s4, 0xffff5844; GX900-NEXT: s_waitcnt vmcnt(0)5845; GX900-NEXT: v_bfi_b32 v0, s4, v5, v45846; GX900-NEXT: s_setpc_b64 s[30:31]5847;5848; GFX942-LABEL: low16hi16bits_v2bf16:5849; GFX942: ; %bb.0: ; %entry5850; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5851; GFX942-NEXT: global_load_dword v4, v[2:3], off5852; GFX942-NEXT: global_load_dword v5, v[0:1], off5853; GFX942-NEXT: s_mov_b32 s0, 0xffff5854; GFX942-NEXT: s_waitcnt vmcnt(0)5855; GFX942-NEXT: v_bfi_b32 v0, s0, v5, v45856; GFX942-NEXT: s_setpc_b64 s[30:31]5857;5858; GFX10-LABEL: low16hi16bits_v2bf16:5859; GFX10: ; %bb.0: ; %entry5860; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5861; GFX10-NEXT: global_load_dword v4, v[2:3], off5862; GFX10-NEXT: global_load_dword v5, v[0:1], off5863; GFX10-NEXT: s_waitcnt vmcnt(0)5864; GFX10-NEXT: v_bfi_b32 v0, 0xffff, v5, v45865; GFX10-NEXT: s_setpc_b64 s[30:31]5866;5867; GFX11-TRUE16-LABEL: low16hi16bits_v2bf16:5868; GFX11-TRUE16: ; %bb.0: ; %entry5869; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5870; GFX11-TRUE16-NEXT: global_load_b32 v2, v[2:3], off5871; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off5872; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5873; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v2.h5874; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5875;5876; GFX11-FAKE16-LABEL: low16hi16bits_v2bf16:5877; GFX11-FAKE16: ; %bb.0: ; %entry5878; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5879; GFX11-FAKE16-NEXT: global_load_b32 v2, v[2:3], off5880; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off5881; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5882; GFX11-FAKE16-NEXT: v_bfi_b32 v0, 0xffff, v0, v25883; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5884entry:5885 %0 = load <2 x bfloat>, ptr addrspace(1) %x0, align 45886 %1 = load <2 x bfloat>, ptr addrspace(1) %x1, align 45887 %vy1.0.vec.insert = shufflevector <2 x bfloat> %0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 poison>5888 %vy1.2.vec.insert = shufflevector <2 x bfloat> %vy1.0.vec.insert, <2 x bfloat> %1, <2 x i32> <i32 0, i32 3>5889 ret <2 x bfloat> %vy1.2.vec.insert5890}5891 5892define <2 x bfloat> @hi16low16bits(ptr addrspace(1) %x0, ptr addrspace(1) %x1) {5893; GFX9-LABEL: hi16low16bits:5894; GFX9: ; %bb.0: ; %entry5895; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5896; GFX9-NEXT: global_load_dword v4, v[0:1], off5897; GFX9-NEXT: global_load_dword v5, v[2:3], off5898; GFX9-NEXT: s_waitcnt vmcnt(0)5899; GFX9-NEXT: v_alignbit_b32 v0, v5, v4, 165900; GFX9-NEXT: s_setpc_b64 s[30:31]5901;5902; GFX10-LABEL: hi16low16bits:5903; GFX10: ; %bb.0: ; %entry5904; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5905; GFX10-NEXT: global_load_dword v4, v[0:1], off5906; GFX10-NEXT: global_load_dword v5, v[2:3], off5907; GFX10-NEXT: s_waitcnt vmcnt(0)5908; GFX10-NEXT: v_alignbit_b32 v0, v5, v4, 165909; GFX10-NEXT: s_setpc_b64 s[30:31]5910;5911; GFX11-TRUE16-LABEL: hi16low16bits:5912; GFX11-TRUE16: ; %bb.0: ; %entry5913; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5914; GFX11-TRUE16-NEXT: global_load_b32 v0, v[0:1], off5915; GFX11-TRUE16-NEXT: global_load_b32 v1, v[2:3], off5916; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(1)5917; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.l, v0.h5918; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0)5919; GFX11-TRUE16-NEXT: v_mov_b16_e32 v0.h, v1.l5920; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]5921;5922; GFX11-FAKE16-LABEL: hi16low16bits:5923; GFX11-FAKE16: ; %bb.0: ; %entry5924; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5925; GFX11-FAKE16-NEXT: global_load_b32 v0, v[0:1], off5926; GFX11-FAKE16-NEXT: global_load_b32 v1, v[2:3], off5927; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0)5928; GFX11-FAKE16-NEXT: v_alignbit_b32 v0, v1, v0, 165929; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]5930entry:5931 %0 = load <2 x bfloat>, ptr addrspace(1) %x0, align 45932 %1 = load <2 x bfloat>, ptr addrspace(1) %x1, align 45933 %vy1.0.vec.insert = shufflevector <2 x bfloat> %0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 poison>5934 %vy1.2.vec.insert = shufflevector <2 x bfloat> %vy1.0.vec.insert, <2 x bfloat> %1, <2 x i32> <i32 0, i32 2>5935 ret <2 x bfloat> %vy1.2.vec.insert5936}5937 5938define <2 x bfloat> @v2bfloat_hi16bits(ptr addrspace(1) %x0) {5939; GFX9-LABEL: v2bfloat_hi16bits:5940; GFX9: ; %bb.0: ; %entry5941; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5942; GFX9-NEXT: global_load_dword v0, v[0:1], off5943; GFX9-NEXT: s_waitcnt vmcnt(0)5944; GFX9-NEXT: v_and_b32_e32 v0, 0xffff0000, v05945; GFX9-NEXT: s_setpc_b64 s[30:31]5946;5947; GFX10-LABEL: v2bfloat_hi16bits:5948; GFX10: ; %bb.0: ; %entry5949; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5950; GFX10-NEXT: global_load_dword v0, v[0:1], off5951; GFX10-NEXT: s_waitcnt vmcnt(0)5952; GFX10-NEXT: v_and_b32_e32 v0, 0xffff0000, v05953; GFX10-NEXT: s_setpc_b64 s[30:31]5954;5955; GFX11-LABEL: v2bfloat_hi16bits:5956; GFX11: ; %bb.0: ; %entry5957; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5958; GFX11-NEXT: global_load_b32 v0, v[0:1], off5959; GFX11-NEXT: s_waitcnt vmcnt(0)5960; GFX11-NEXT: v_and_b32_e32 v0, 0xffff0000, v05961; GFX11-NEXT: s_setpc_b64 s[30:31]5962entry:5963 %load0 = load <2 x bfloat>, ptr addrspace(1) %x0, align 45964 %insert1 = insertelement <2 x bfloat> poison, bfloat 0.0, i32 05965 %insert2 = insertelement <2 x bfloat> %insert1, bfloat 0.0, i32 15966 %vec.ret = shufflevector <2 x bfloat> %insert2, <2 x bfloat> %load0, <2 x i32> <i32 0, i32 3>5967 ret <2 x bfloat> %vec.ret5968}5969 5970define void @shuffle_v8bf16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {5971; GFX9-LABEL: shuffle_v8bf16_concat:5972; GFX9: ; %bb.0:5973; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5974; GFX9-NEXT: global_load_dwordx2 v[6:7], v[0:1], off5975; GFX9-NEXT: global_load_dwordx2 v[8:9], v[2:3], off5976; GFX9-NEXT: s_waitcnt vmcnt(0)5977; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off5978; GFX9-NEXT: s_waitcnt vmcnt(0)5979; GFX9-NEXT: s_setpc_b64 s[30:31]5980;5981; GFX10-LABEL: shuffle_v8bf16_concat:5982; GFX10: ; %bb.0:5983; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5984; GFX10-NEXT: global_load_dwordx2 v[6:7], v[0:1], off5985; GFX10-NEXT: global_load_dwordx2 v[8:9], v[2:3], off5986; GFX10-NEXT: s_waitcnt vmcnt(0)5987; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off5988; GFX10-NEXT: s_setpc_b64 s[30:31]5989;5990; GFX11-LABEL: shuffle_v8bf16_concat:5991; GFX11: ; %bb.0:5992; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5993; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off5994; GFX11-NEXT: global_load_b64 v[2:3], v[2:3], off5995; GFX11-NEXT: s_waitcnt vmcnt(0)5996; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off5997; GFX11-NEXT: s_setpc_b64 s[30:31]5998 %val0 = load <4 x bfloat>, ptr addrspace(1) %arg05999 %val1 = load <4 x bfloat>, ptr addrspace(1) %arg16000 %shuffle = shufflevector <4 x bfloat> %val0, <4 x bfloat> %val1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>6001 store <8 x bfloat> %shuffle, ptr addrspace(1) %out6002 ret void6003}6004 6005define void @shuffle_v16bf16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {6006; GFX9-LABEL: shuffle_v16bf16_concat:6007; GFX9: ; %bb.0:6008; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6009; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off6010; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off6011; GFX9-NEXT: s_waitcnt vmcnt(1)6012; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:166013; GFX9-NEXT: s_waitcnt vmcnt(1)6014; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off6015; GFX9-NEXT: s_waitcnt vmcnt(0)6016; GFX9-NEXT: s_setpc_b64 s[30:31]6017;6018; GFX10-LABEL: shuffle_v16bf16_concat:6019; GFX10: ; %bb.0:6020; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6021; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off6022; GFX10-NEXT: global_load_dwordx4 v[10:13], v[0:1], off6023; GFX10-NEXT: s_waitcnt vmcnt(1)6024; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:166025; GFX10-NEXT: s_waitcnt vmcnt(0)6026; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off6027; GFX10-NEXT: s_setpc_b64 s[30:31]6028;6029; GFX11-LABEL: shuffle_v16bf16_concat:6030; GFX11: ; %bb.0:6031; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6032; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off6033; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off6034; GFX11-NEXT: s_waitcnt vmcnt(1)6035; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:166036; GFX11-NEXT: s_waitcnt vmcnt(0)6037; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off6038; GFX11-NEXT: s_setpc_b64 s[30:31]6039 %val0 = load <8 x bfloat>, ptr addrspace(1) %arg06040 %val1 = load <8 x bfloat>, ptr addrspace(1) %arg16041 %shuffle = shufflevector <8 x bfloat> %val0, <8 x bfloat> %val1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>6042 store <16 x bfloat> %shuffle, ptr addrspace(1) %out6043 ret void6044}6045 6046define void @shuffle_v32bf16_concat(ptr addrspace(1) %arg0, ptr addrspace(1) %arg1, ptr addrspace(1) %out) {6047; GFX9-LABEL: shuffle_v32bf16_concat:6048; GFX9: ; %bb.0:6049; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6050; GFX9-NEXT: global_load_dwordx4 v[6:9], v[2:3], off6051; GFX9-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:166052; GFX9-NEXT: global_load_dwordx4 v[14:17], v[0:1], off6053; GFX9-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:166054; GFX9-NEXT: s_waitcnt vmcnt(3)6055; GFX9-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:326056; GFX9-NEXT: s_waitcnt vmcnt(3)6057; GFX9-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:486058; GFX9-NEXT: s_waitcnt vmcnt(3)6059; GFX9-NEXT: global_store_dwordx4 v[4:5], v[14:17], off6060; GFX9-NEXT: s_waitcnt vmcnt(3)6061; GFX9-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:166062; GFX9-NEXT: s_waitcnt vmcnt(0)6063; GFX9-NEXT: s_setpc_b64 s[30:31]6064;6065; GFX10-LABEL: shuffle_v32bf16_concat:6066; GFX10: ; %bb.0:6067; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6068; GFX10-NEXT: s_clause 0x16069; GFX10-NEXT: global_load_dwordx4 v[6:9], v[2:3], off6070; GFX10-NEXT: global_load_dwordx4 v[10:13], v[2:3], off offset:166071; GFX10-NEXT: s_clause 0x16072; GFX10-NEXT: global_load_dwordx4 v[14:17], v[0:1], off6073; GFX10-NEXT: global_load_dwordx4 v[18:21], v[0:1], off offset:166074; GFX10-NEXT: s_waitcnt vmcnt(3)6075; GFX10-NEXT: global_store_dwordx4 v[4:5], v[6:9], off offset:326076; GFX10-NEXT: s_waitcnt vmcnt(2)6077; GFX10-NEXT: global_store_dwordx4 v[4:5], v[10:13], off offset:486078; GFX10-NEXT: s_waitcnt vmcnt(1)6079; GFX10-NEXT: global_store_dwordx4 v[4:5], v[14:17], off6080; GFX10-NEXT: s_waitcnt vmcnt(0)6081; GFX10-NEXT: global_store_dwordx4 v[4:5], v[18:21], off offset:166082; GFX10-NEXT: s_setpc_b64 s[30:31]6083;6084; GFX11-LABEL: shuffle_v32bf16_concat:6085; GFX11: ; %bb.0:6086; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6087; GFX11-NEXT: s_clause 0x16088; GFX11-NEXT: global_load_b128 v[6:9], v[2:3], off6089; GFX11-NEXT: global_load_b128 v[10:13], v[2:3], off offset:166090; GFX11-NEXT: s_clause 0x16091; GFX11-NEXT: global_load_b128 v[14:17], v[0:1], off6092; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off offset:166093; GFX11-NEXT: s_waitcnt vmcnt(3)6094; GFX11-NEXT: global_store_b128 v[4:5], v[6:9], off offset:326095; GFX11-NEXT: s_waitcnt vmcnt(2)6096; GFX11-NEXT: global_store_b128 v[4:5], v[10:13], off offset:486097; GFX11-NEXT: s_waitcnt vmcnt(1)6098; GFX11-NEXT: global_store_b128 v[4:5], v[14:17], off6099; GFX11-NEXT: s_waitcnt vmcnt(0)6100; GFX11-NEXT: global_store_b128 v[4:5], v[0:3], off offset:166101; GFX11-NEXT: s_setpc_b64 s[30:31]6102 %val0 = load <16 x bfloat>, ptr addrspace(1) %arg06103 %val1 = load <16 x bfloat>, ptr addrspace(1) %arg16104 %shuffle = shufflevector <16 x bfloat> %val0, <16 x bfloat> %val1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>6105 store <32 x bfloat> %shuffle, ptr addrspace(1) %out6106 ret void6107}6108 6109declare <2 x half> @llvm.fma.v2f16(<2 x half>, <2 x half>, <2 x half>) #06110declare <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat>, <2 x bfloat>, <2 x bfloat>) #06111declare i32 @llvm.amdgcn.workitem.id.x() #06112 6113attributes #0 = { nounwind readnone speculatable }6114