brintos

brintos / llvm-project-archived public Read only

0
0
Text · 259.2 KiB · 6bf6d54 Raw
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