brintos

brintos / llvm-project-archived public Read only

0
0
Text · 99.0 KiB · 5e5c3bc Raw
2338 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-promote-alloca < %s | FileCheck -check-prefixes=GFX900,GFX900-MUBUF %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx906 -mattr=-promote-alloca,+sram-ecc < %s | FileCheck --check-prefix=GFX906 %s4; RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-promote-alloca < %s | FileCheck --check-prefix=GFX803 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-promote-alloca --mattr=+enable-flat-scratch < %s | FileCheck -check-prefixes=GFX900,GFX900-FLATSCR %s6 7define <2 x i16> @load_local_lo_v2i16_undeflo(ptr addrspace(3) %in) #0 {8; GFX900-LABEL: load_local_lo_v2i16_undeflo:9; GFX900:       ; %bb.0: ; %entry10; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX900-NEXT:    ds_read_u16_d16 v0, v012; GFX900-NEXT:    s_waitcnt lgkmcnt(0)13; GFX900-NEXT:    s_setpc_b64 s[30:31]14;15; GFX906-LABEL: load_local_lo_v2i16_undeflo:16; GFX906:       ; %bb.0: ; %entry17; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GFX906-NEXT:    ds_read_u16 v0, v019; GFX906-NEXT:    s_waitcnt lgkmcnt(0)20; GFX906-NEXT:    s_setpc_b64 s[30:31]21;22; GFX803-LABEL: load_local_lo_v2i16_undeflo:23; GFX803:       ; %bb.0: ; %entry24; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)25; GFX803-NEXT:    s_mov_b32 m0, -126; GFX803-NEXT:    ds_read_u16 v0, v027; GFX803-NEXT:    s_waitcnt lgkmcnt(0)28; GFX803-NEXT:    s_setpc_b64 s[30:31]29entry:30  %load = load i16, ptr addrspace(3) %in31  %build = insertelement <2 x i16> poison, i16 %load, i32 032  ret <2 x i16> %build33}34 35define <2 x i16> @load_local_lo_v2i16_reglo(ptr addrspace(3) %in, i16 %reg) #0 {36; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reglo:37; GFX900-MUBUF:       ; %bb.0: ; %entry38; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)39; GFX900-MUBUF-NEXT:    ds_read_u16 v0, v040; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x504010041; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)42; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s443; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]44;45; GFX906-LABEL: load_local_lo_v2i16_reglo:46; GFX906:       ; %bb.0: ; %entry47; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; GFX906-NEXT:    ds_read_u16 v0, v049; GFX906-NEXT:    s_mov_b32 s4, 0x504010050; GFX906-NEXT:    s_waitcnt lgkmcnt(0)51; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s452; GFX906-NEXT:    s_setpc_b64 s[30:31]53;54; GFX803-LABEL: load_local_lo_v2i16_reglo:55; GFX803:       ; %bb.0: ; %entry56; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)57; GFX803-NEXT:    s_mov_b32 m0, -158; GFX803-NEXT:    ds_read_u16 v0, v059; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v160; GFX803-NEXT:    s_waitcnt lgkmcnt(0)61; GFX803-NEXT:    v_or_b32_e32 v0, v0, v162; GFX803-NEXT:    s_setpc_b64 s[30:31]63;64; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reglo:65; GFX900-FLATSCR:       ; %bb.0: ; %entry66; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)67; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v068; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x504010069; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)70; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s071; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]72entry:73  %load = load i16, ptr addrspace(3) %in74  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 175  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 076  ret <2 x i16> %build177}78 79; Show that we get reasonable regalloc without physreg constraints.80define void @load_local_lo_v2i16_reglo_vreg(ptr addrspace(3) %in, i16 %reg) #0 {81; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reglo_vreg:82; GFX900-MUBUF:       ; %bb.0: ; %entry83; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX900-MUBUF-NEXT:    ds_read_u16 v0, v085; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x504010086; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)87; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s488; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off89; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)90; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]91;92; GFX906-LABEL: load_local_lo_v2i16_reglo_vreg:93; GFX906:       ; %bb.0: ; %entry94; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX906-NEXT:    ds_read_u16 v0, v096; GFX906-NEXT:    s_mov_b32 s4, 0x504010097; GFX906-NEXT:    s_waitcnt lgkmcnt(0)98; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s499; GFX906-NEXT:    global_store_dword v[0:1], v0, off100; GFX906-NEXT:    s_waitcnt vmcnt(0)101; GFX906-NEXT:    s_setpc_b64 s[30:31]102;103; GFX803-LABEL: load_local_lo_v2i16_reglo_vreg:104; GFX803:       ; %bb.0: ; %entry105; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX803-NEXT:    s_mov_b32 m0, -1107; GFX803-NEXT:    ds_read_u16 v0, v0108; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1109; GFX803-NEXT:    s_waitcnt lgkmcnt(0)110; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1111; GFX803-NEXT:    flat_store_dword v[0:1], v0112; GFX803-NEXT:    s_waitcnt vmcnt(0)113; GFX803-NEXT:    s_setpc_b64 s[30:31]114;115; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reglo_vreg:116; GFX900-FLATSCR:       ; %bb.0: ; %entry117; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0119; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100120; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)121; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0122; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off123; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)124; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]125entry:126  %load = load i16, ptr addrspace(3) %in127  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 1128  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 0129  store <2 x i16> %build1, ptr addrspace(1) poison130  ret void131}132 133define <2 x i16> @load_local_lo_v2i16_zerolo(ptr addrspace(3) %in) #0 {134; GFX900-LABEL: load_local_lo_v2i16_zerolo:135; GFX900:       ; %bb.0: ; %entry136; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)137; GFX900-NEXT:    v_mov_b32_e32 v1, 0138; GFX900-NEXT:    ds_read_u16_d16 v1, v0139; GFX900-NEXT:    s_waitcnt lgkmcnt(0)140; GFX900-NEXT:    v_mov_b32_e32 v0, v1141; GFX900-NEXT:    s_setpc_b64 s[30:31]142;143; GFX906-LABEL: load_local_lo_v2i16_zerolo:144; GFX906:       ; %bb.0: ; %entry145; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)146; GFX906-NEXT:    ds_read_u16 v0, v0147; GFX906-NEXT:    s_waitcnt lgkmcnt(0)148; GFX906-NEXT:    v_and_b32_e32 v0, 0xffff, v0149; GFX906-NEXT:    s_setpc_b64 s[30:31]150;151; GFX803-LABEL: load_local_lo_v2i16_zerolo:152; GFX803:       ; %bb.0: ; %entry153; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX803-NEXT:    s_mov_b32 m0, -1155; GFX803-NEXT:    ds_read_u16 v0, v0156; GFX803-NEXT:    s_waitcnt lgkmcnt(0)157; GFX803-NEXT:    s_setpc_b64 s[30:31]158entry:159  %load = load i16, ptr addrspace(3) %in160  %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 0161  ret <2 x i16> %build162}163 164define <2 x half> @load_local_lo_v2f16_fpimm(ptr addrspace(3) %in) #0 {165; GFX900-LABEL: load_local_lo_v2f16_fpimm:166; GFX900:       ; %bb.0: ; %entry167; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)168; GFX900-NEXT:    v_mov_b32_e32 v1, 2.0169; GFX900-NEXT:    ds_read_u16_d16 v1, v0170; GFX900-NEXT:    s_waitcnt lgkmcnt(0)171; GFX900-NEXT:    v_mov_b32_e32 v0, v1172; GFX900-NEXT:    s_setpc_b64 s[30:31]173;174; GFX906-LABEL: load_local_lo_v2f16_fpimm:175; GFX906:       ; %bb.0: ; %entry176; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)177; GFX906-NEXT:    ds_read_u16 v0, v0178; GFX906-NEXT:    s_movk_i32 s4, 0x4000179; GFX906-NEXT:    v_mov_b32_e32 v1, 0x5040100180; GFX906-NEXT:    s_waitcnt lgkmcnt(0)181; GFX906-NEXT:    v_perm_b32 v0, s4, v0, v1182; GFX906-NEXT:    s_setpc_b64 s[30:31]183;184; GFX803-LABEL: load_local_lo_v2f16_fpimm:185; GFX803:       ; %bb.0: ; %entry186; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX803-NEXT:    s_mov_b32 m0, -1188; GFX803-NEXT:    ds_read_u16 v0, v0189; GFX803-NEXT:    s_waitcnt lgkmcnt(0)190; GFX803-NEXT:    v_or_b32_e32 v0, 2.0, v0191; GFX803-NEXT:    s_setpc_b64 s[30:31]192entry:193  %load = load half, ptr addrspace(3) %in194  %build = insertelement <2 x half> <half 0.0, half 2.0>, half %load, i32 0195  ret <2 x half> %build196}197 198define void @load_local_lo_v2f16_reghi_vreg(ptr addrspace(3) %in, i32 %reg) #0 {199; GFX900-LABEL: load_local_lo_v2f16_reghi_vreg:200; GFX900:       ; %bb.0: ; %entry201; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)202; GFX900-NEXT:    ds_read_u16_d16 v1, v0203; GFX900-NEXT:    s_waitcnt lgkmcnt(0)204; GFX900-NEXT:    global_store_dword v[0:1], v1, off205; GFX900-NEXT:    s_waitcnt vmcnt(0)206; GFX900-NEXT:    s_setpc_b64 s[30:31]207;208; GFX906-LABEL: load_local_lo_v2f16_reghi_vreg:209; GFX906:       ; %bb.0: ; %entry210; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX906-NEXT:    ds_read_u16 v0, v0212; GFX906-NEXT:    s_mov_b32 s4, 0xffff213; GFX906-NEXT:    s_waitcnt lgkmcnt(0)214; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1215; GFX906-NEXT:    global_store_dword v[0:1], v0, off216; GFX906-NEXT:    s_waitcnt vmcnt(0)217; GFX906-NEXT:    s_setpc_b64 s[30:31]218;219; GFX803-LABEL: load_local_lo_v2f16_reghi_vreg:220; GFX803:       ; %bb.0: ; %entry221; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)222; GFX803-NEXT:    s_mov_b32 m0, -1223; GFX803-NEXT:    ds_read_u16 v0, v0224; GFX803-NEXT:    s_mov_b32 s4, 0x3020504225; GFX803-NEXT:    s_waitcnt lgkmcnt(0)226; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s4227; GFX803-NEXT:    flat_store_dword v[0:1], v0228; GFX803-NEXT:    s_waitcnt vmcnt(0)229; GFX803-NEXT:    s_setpc_b64 s[30:31]230entry:231  %reg.bc = bitcast i32 %reg to <2 x half>232  %load = load half, ptr addrspace(3) %in233  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 0234  store <2 x half> %build1, ptr addrspace(1) poison235  ret void236}237 238define void @load_local_lo_v2f16_reglo_vreg(ptr addrspace(3) %in, half %reg) #0 {239; GFX900-MUBUF-LABEL: load_local_lo_v2f16_reglo_vreg:240; GFX900-MUBUF:       ; %bb.0: ; %entry241; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX900-MUBUF-NEXT:    ds_read_u16 v0, v0243; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x5040100244; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)245; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s4246; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off247; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)248; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]249;250; GFX906-LABEL: load_local_lo_v2f16_reglo_vreg:251; GFX906:       ; %bb.0: ; %entry252; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)253; GFX906-NEXT:    ds_read_u16 v0, v0254; GFX906-NEXT:    s_mov_b32 s4, 0x5040100255; GFX906-NEXT:    s_waitcnt lgkmcnt(0)256; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4257; GFX906-NEXT:    global_store_dword v[0:1], v0, off258; GFX906-NEXT:    s_waitcnt vmcnt(0)259; GFX906-NEXT:    s_setpc_b64 s[30:31]260;261; GFX803-LABEL: load_local_lo_v2f16_reglo_vreg:262; GFX803:       ; %bb.0: ; %entry263; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)264; GFX803-NEXT:    s_mov_b32 m0, -1265; GFX803-NEXT:    ds_read_u16 v0, v0266; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1267; GFX803-NEXT:    s_waitcnt lgkmcnt(0)268; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1269; GFX803-NEXT:    flat_store_dword v[0:1], v0270; GFX803-NEXT:    s_waitcnt vmcnt(0)271; GFX803-NEXT:    s_setpc_b64 s[30:31]272;273; GFX900-FLATSCR-LABEL: load_local_lo_v2f16_reglo_vreg:274; GFX900-FLATSCR:       ; %bb.0: ; %entry275; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)276; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0277; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100278; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)279; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0280; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off281; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)282; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]283entry:284  %load = load half, ptr addrspace(3) %in285  %build0 = insertelement <2 x half> poison, half %reg, i32 1286  %build1 = insertelement <2 x half> %build0, half %load, i32 0287  store <2 x half> %build1, ptr addrspace(1) poison288  ret void289}290 291define void @load_local_lo_v2i16_reghi_vreg_zexti8(ptr addrspace(3) %in, i32 %reg) #0 {292; GFX900-LABEL: load_local_lo_v2i16_reghi_vreg_zexti8:293; GFX900:       ; %bb.0: ; %entry294; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)295; GFX900-NEXT:    ds_read_u8_d16 v1, v0296; GFX900-NEXT:    s_waitcnt lgkmcnt(0)297; GFX900-NEXT:    global_store_dword v[0:1], v1, off298; GFX900-NEXT:    s_waitcnt vmcnt(0)299; GFX900-NEXT:    s_setpc_b64 s[30:31]300;301; GFX906-LABEL: load_local_lo_v2i16_reghi_vreg_zexti8:302; GFX906:       ; %bb.0: ; %entry303; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)304; GFX906-NEXT:    ds_read_u8 v0, v0305; GFX906-NEXT:    s_mov_b32 s4, 0xffff306; GFX906-NEXT:    s_waitcnt lgkmcnt(0)307; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1308; GFX906-NEXT:    global_store_dword v[0:1], v0, off309; GFX906-NEXT:    s_waitcnt vmcnt(0)310; GFX906-NEXT:    s_setpc_b64 s[30:31]311;312; GFX803-LABEL: load_local_lo_v2i16_reghi_vreg_zexti8:313; GFX803:       ; %bb.0: ; %entry314; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)315; GFX803-NEXT:    s_mov_b32 m0, -1316; GFX803-NEXT:    ds_read_u8 v0, v0317; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1318; GFX803-NEXT:    s_waitcnt lgkmcnt(0)319; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1320; GFX803-NEXT:    flat_store_dword v[0:1], v0321; GFX803-NEXT:    s_waitcnt vmcnt(0)322; GFX803-NEXT:    s_setpc_b64 s[30:31]323entry:324  %reg.bc = bitcast i32 %reg to <2 x i16>325  %load = load i8, ptr addrspace(3) %in326  %ext = zext i8 %load to i16327  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 0328  store <2 x i16> %build1, ptr addrspace(1) poison329  ret void330}331 332define void @load_local_lo_v2i16_reglo_vreg_zexti8(ptr addrspace(3) %in, i16 %reg) #0 {333; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reglo_vreg_zexti8:334; GFX900-MUBUF:       ; %bb.0: ; %entry335; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX900-MUBUF-NEXT:    ds_read_u8 v0, v0337; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x5040100338; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)339; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s4340; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off341; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)342; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]343;344; GFX906-LABEL: load_local_lo_v2i16_reglo_vreg_zexti8:345; GFX906:       ; %bb.0: ; %entry346; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)347; GFX906-NEXT:    ds_read_u8 v0, v0348; GFX906-NEXT:    s_mov_b32 s4, 0x5040100349; GFX906-NEXT:    s_waitcnt lgkmcnt(0)350; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4351; GFX906-NEXT:    global_store_dword v[0:1], v0, off352; GFX906-NEXT:    s_waitcnt vmcnt(0)353; GFX906-NEXT:    s_setpc_b64 s[30:31]354;355; GFX803-LABEL: load_local_lo_v2i16_reglo_vreg_zexti8:356; GFX803:       ; %bb.0: ; %entry357; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX803-NEXT:    s_mov_b32 m0, -1359; GFX803-NEXT:    ds_read_u8 v0, v0360; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1361; GFX803-NEXT:    s_waitcnt lgkmcnt(0)362; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1363; GFX803-NEXT:    flat_store_dword v[0:1], v0364; GFX803-NEXT:    s_waitcnt vmcnt(0)365; GFX803-NEXT:    s_setpc_b64 s[30:31]366;367; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reglo_vreg_zexti8:368; GFX900-FLATSCR:       ; %bb.0: ; %entry369; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)370; GFX900-FLATSCR-NEXT:    ds_read_u8 v0, v0371; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100372; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)373; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0374; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off375; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)376; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]377entry:378  %load = load i8, ptr addrspace(3) %in379  %ext = zext i8 %load to i16380  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 1381  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 0382  store <2 x i16> %build1, ptr addrspace(1) poison383  ret void384}385 386define void @load_local_lo_v2i16_reghi_vreg_sexti8(ptr addrspace(3) %in, i32 %reg) #0 {387; GFX900-LABEL: load_local_lo_v2i16_reghi_vreg_sexti8:388; GFX900:       ; %bb.0: ; %entry389; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX900-NEXT:    ds_read_i8_d16 v1, v0391; GFX900-NEXT:    s_waitcnt lgkmcnt(0)392; GFX900-NEXT:    global_store_dword v[0:1], v1, off393; GFX900-NEXT:    s_waitcnt vmcnt(0)394; GFX900-NEXT:    s_setpc_b64 s[30:31]395;396; GFX906-LABEL: load_local_lo_v2i16_reghi_vreg_sexti8:397; GFX906:       ; %bb.0: ; %entry398; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)399; GFX906-NEXT:    ds_read_i8 v0, v0400; GFX906-NEXT:    s_mov_b32 s4, 0xffff401; GFX906-NEXT:    s_waitcnt lgkmcnt(0)402; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1403; GFX906-NEXT:    global_store_dword v[0:1], v0, off404; GFX906-NEXT:    s_waitcnt vmcnt(0)405; GFX906-NEXT:    s_setpc_b64 s[30:31]406;407; GFX803-LABEL: load_local_lo_v2i16_reghi_vreg_sexti8:408; GFX803:       ; %bb.0: ; %entry409; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX803-NEXT:    s_mov_b32 m0, -1411; GFX803-NEXT:    ds_read_i8 v0, v0412; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1413; GFX803-NEXT:    s_waitcnt lgkmcnt(0)414; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD415; GFX803-NEXT:    flat_store_dword v[0:1], v0416; GFX803-NEXT:    s_waitcnt vmcnt(0)417; GFX803-NEXT:    s_setpc_b64 s[30:31]418entry:419  %reg.bc = bitcast i32 %reg to <2 x i16>420  %load = load i8, ptr addrspace(3) %in421  %ext = sext i8 %load to i16422  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 0423  store <2 x i16> %build1, ptr addrspace(1) poison424  ret void425}426 427define void @load_local_lo_v2i16_reglo_vreg_sexti8(ptr addrspace(3) %in, i16 %reg) #0 {428; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reglo_vreg_sexti8:429; GFX900-MUBUF:       ; %bb.0: ; %entry430; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)431; GFX900-MUBUF-NEXT:    ds_read_i8 v0, v0432; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x5040100433; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)434; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s4435; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off436; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)437; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]438;439; GFX906-LABEL: load_local_lo_v2i16_reglo_vreg_sexti8:440; GFX906:       ; %bb.0: ; %entry441; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)442; GFX906-NEXT:    ds_read_i8 v0, v0443; GFX906-NEXT:    s_mov_b32 s4, 0x5040100444; GFX906-NEXT:    s_waitcnt lgkmcnt(0)445; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4446; GFX906-NEXT:    global_store_dword v[0:1], v0, off447; GFX906-NEXT:    s_waitcnt vmcnt(0)448; GFX906-NEXT:    s_setpc_b64 s[30:31]449;450; GFX803-LABEL: load_local_lo_v2i16_reglo_vreg_sexti8:451; GFX803:       ; %bb.0: ; %entry452; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)453; GFX803-NEXT:    s_mov_b32 m0, -1454; GFX803-NEXT:    ds_read_i8 v0, v0455; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1456; GFX803-NEXT:    s_waitcnt lgkmcnt(0)457; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD458; GFX803-NEXT:    flat_store_dword v[0:1], v0459; GFX803-NEXT:    s_waitcnt vmcnt(0)460; GFX803-NEXT:    s_setpc_b64 s[30:31]461;462; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reglo_vreg_sexti8:463; GFX900-FLATSCR:       ; %bb.0: ; %entry464; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)465; GFX900-FLATSCR-NEXT:    ds_read_i8 v0, v0466; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100467; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)468; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0469; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off470; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)471; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]472entry:473  %load = load i8, ptr addrspace(3) %in474  %ext = sext i8 %load to i16475  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 1476  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 0477  store <2 x i16> %build1, ptr addrspace(1) poison478  ret void479}480 481define void @load_local_lo_v2f16_reglo_vreg_zexti8(ptr addrspace(3) %in, half %reg) #0 {482; GFX900-MUBUF-LABEL: load_local_lo_v2f16_reglo_vreg_zexti8:483; GFX900-MUBUF:       ; %bb.0: ; %entry484; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)485; GFX900-MUBUF-NEXT:    ds_read_u8 v0, v0486; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x5040100487; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)488; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s4489; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off490; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)491; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]492;493; GFX906-LABEL: load_local_lo_v2f16_reglo_vreg_zexti8:494; GFX906:       ; %bb.0: ; %entry495; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX906-NEXT:    ds_read_u8 v0, v0497; GFX906-NEXT:    s_mov_b32 s4, 0x5040100498; GFX906-NEXT:    s_waitcnt lgkmcnt(0)499; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4500; GFX906-NEXT:    global_store_dword v[0:1], v0, off501; GFX906-NEXT:    s_waitcnt vmcnt(0)502; GFX906-NEXT:    s_setpc_b64 s[30:31]503;504; GFX803-LABEL: load_local_lo_v2f16_reglo_vreg_zexti8:505; GFX803:       ; %bb.0: ; %entry506; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)507; GFX803-NEXT:    s_mov_b32 m0, -1508; GFX803-NEXT:    ds_read_u8 v0, v0509; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1510; GFX803-NEXT:    s_waitcnt lgkmcnt(0)511; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1512; GFX803-NEXT:    flat_store_dword v[0:1], v0513; GFX803-NEXT:    s_waitcnt vmcnt(0)514; GFX803-NEXT:    s_setpc_b64 s[30:31]515;516; GFX900-FLATSCR-LABEL: load_local_lo_v2f16_reglo_vreg_zexti8:517; GFX900-FLATSCR:       ; %bb.0: ; %entry518; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; GFX900-FLATSCR-NEXT:    ds_read_u8 v0, v0520; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100521; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)522; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0523; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off524; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)525; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]526entry:527  %load = load i8, ptr addrspace(3) %in528  %ext = zext i8 %load to i16529  %bitcast = bitcast i16 %ext to half530  %build0 = insertelement <2 x half> poison, half %reg, i32 1531  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 0532  store <2 x half> %build1, ptr addrspace(1) poison533  ret void534}535 536define void @load_local_lo_v2f16_reglo_vreg_sexti8(ptr addrspace(3) %in, half %reg) #0 {537; GFX900-MUBUF-LABEL: load_local_lo_v2f16_reglo_vreg_sexti8:538; GFX900-MUBUF:       ; %bb.0: ; %entry539; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)540; GFX900-MUBUF-NEXT:    ds_read_i8 v0, v0541; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x5040100542; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)543; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v1, v0, s4544; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off545; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)546; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]547;548; GFX906-LABEL: load_local_lo_v2f16_reglo_vreg_sexti8:549; GFX906:       ; %bb.0: ; %entry550; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX906-NEXT:    ds_read_i8 v0, v0552; GFX906-NEXT:    s_mov_b32 s4, 0x5040100553; GFX906-NEXT:    s_waitcnt lgkmcnt(0)554; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4555; GFX906-NEXT:    global_store_dword v[0:1], v0, off556; GFX906-NEXT:    s_waitcnt vmcnt(0)557; GFX906-NEXT:    s_setpc_b64 s[30:31]558;559; GFX803-LABEL: load_local_lo_v2f16_reglo_vreg_sexti8:560; GFX803:       ; %bb.0: ; %entry561; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)562; GFX803-NEXT:    s_mov_b32 m0, -1563; GFX803-NEXT:    ds_read_i8 v0, v0564; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1565; GFX803-NEXT:    s_waitcnt lgkmcnt(0)566; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD567; GFX803-NEXT:    flat_store_dword v[0:1], v0568; GFX803-NEXT:    s_waitcnt vmcnt(0)569; GFX803-NEXT:    s_setpc_b64 s[30:31]570;571; GFX900-FLATSCR-LABEL: load_local_lo_v2f16_reglo_vreg_sexti8:572; GFX900-FLATSCR:       ; %bb.0: ; %entry573; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)574; GFX900-FLATSCR-NEXT:    ds_read_i8 v0, v0575; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100576; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)577; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0578; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off579; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)580; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]581entry:582  %load = load i8, ptr addrspace(3) %in583  %ext = sext i8 %load to i16584  %bitcast = bitcast i16 %ext to half585  %build0 = insertelement <2 x half> poison, half %reg, i32 1586  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 0587  store <2 x half> %build1, ptr addrspace(1) poison588  ret void589}590 591define void @load_local_lo_v2i16_reghi_vreg_multi_use_lo(ptr addrspace(3) %in, <2 x i16> %reg) #0 {592; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lo:593; GFX900-MUBUF:       ; %bb.0: ; %entry594; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)595; GFX900-MUBUF-NEXT:    ds_read_u16 v0, v0596; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v2, 0597; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0xffff598; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)599; GFX900-MUBUF-NEXT:    ds_write_b16 v2, v0600; GFX900-MUBUF-NEXT:    v_bfi_b32 v0, s4, v0, v1601; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off602; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)603; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]604;605; GFX906-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lo:606; GFX906:       ; %bb.0: ; %entry607; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)608; GFX906-NEXT:    ds_read_u16 v0, v0609; GFX906-NEXT:    v_mov_b32_e32 v2, 0610; GFX906-NEXT:    s_mov_b32 s4, 0xffff611; GFX906-NEXT:    s_waitcnt lgkmcnt(0)612; GFX906-NEXT:    ds_write_b16 v2, v0613; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1614; GFX906-NEXT:    global_store_dword v[0:1], v0, off615; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)616; GFX906-NEXT:    s_setpc_b64 s[30:31]617;618; GFX803-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lo:619; GFX803:       ; %bb.0: ; %entry620; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)621; GFX803-NEXT:    s_mov_b32 m0, -1622; GFX803-NEXT:    ds_read_u16 v0, v0623; GFX803-NEXT:    v_mov_b32_e32 v2, 0624; GFX803-NEXT:    s_mov_b32 s4, 0x3020504625; GFX803-NEXT:    s_waitcnt lgkmcnt(0)626; GFX803-NEXT:    ds_write_b16 v2, v0627; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s4628; GFX803-NEXT:    flat_store_dword v[0:1], v0629; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)630; GFX803-NEXT:    s_setpc_b64 s[30:31]631;632; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lo:633; GFX900-FLATSCR:       ; %bb.0: ; %entry634; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)635; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0636; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, 0637; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0xffff638; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)639; GFX900-FLATSCR-NEXT:    ds_write_b16 v2, v0640; GFX900-FLATSCR-NEXT:    v_bfi_b32 v0, s0, v0, v1641; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off642; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)643; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]644entry:645  %load = load i16, ptr addrspace(3) %in646  %elt1 = extractelement <2 x i16> %reg, i32 1647  store i16 %load, ptr addrspace(3) null648  %build1 = insertelement <2 x i16> %reg, i16 %load, i32 0649  store <2 x i16> %build1, ptr addrspace(1) poison650  ret void651}652 653define void @load_local_lo_v2i16_reghi_vreg_multi_use_hi(ptr addrspace(3) %in, <2 x i16> %reg) #0 {654; GFX900-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_hi:655; GFX900:       ; %bb.0: ; %entry656; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)657; GFX900-NEXT:    v_lshrrev_b32_e32 v2, 16, v1658; GFX900-NEXT:    ds_read_u16_d16 v1, v0659; GFX900-NEXT:    v_mov_b32_e32 v0, 0660; GFX900-NEXT:    ds_write_b16 v0, v2661; GFX900-NEXT:    s_waitcnt lgkmcnt(1)662; GFX900-NEXT:    global_store_dword v[0:1], v1, off663; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)664; GFX900-NEXT:    s_setpc_b64 s[30:31]665;666; GFX906-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_hi:667; GFX906:       ; %bb.0: ; %entry668; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)669; GFX906-NEXT:    ds_read_u16 v0, v0670; GFX906-NEXT:    s_mov_b32 s4, 0xffff671; GFX906-NEXT:    v_lshrrev_b32_e32 v2, 16, v1672; GFX906-NEXT:    v_mov_b32_e32 v3, 0673; GFX906-NEXT:    ds_write_b16 v3, v2674; GFX906-NEXT:    s_waitcnt lgkmcnt(1)675; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1676; GFX906-NEXT:    global_store_dword v[0:1], v0, off677; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)678; GFX906-NEXT:    s_setpc_b64 s[30:31]679;680; GFX803-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_hi:681; GFX803:       ; %bb.0: ; %entry682; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)683; GFX803-NEXT:    s_mov_b32 m0, -1684; GFX803-NEXT:    ds_read_u16 v0, v0685; GFX803-NEXT:    s_mov_b32 s4, 0x3020504686; GFX803-NEXT:    v_lshrrev_b32_e32 v2, 16, v1687; GFX803-NEXT:    v_mov_b32_e32 v3, 0688; GFX803-NEXT:    ds_write_b16 v3, v2689; GFX803-NEXT:    s_waitcnt lgkmcnt(1)690; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s4691; GFX803-NEXT:    flat_store_dword v[0:1], v0692; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)693; GFX803-NEXT:    s_setpc_b64 s[30:31]694entry:695  %load = load i16, ptr addrspace(3) %in696  %elt1 = extractelement <2 x i16> %reg, i32 1697  store i16 %elt1, ptr addrspace(3) null698  %build1 = insertelement <2 x i16> %reg, i16 %load, i32 0699  store <2 x i16> %build1, ptr addrspace(1) poison700  ret void701}702 703define void @load_local_lo_v2i16_reghi_vreg_multi_use_lohi(ptr addrspace(3) noalias %in, <2 x i16> %reg, ptr addrspace(3) noalias %out0, ptr addrspace(3) noalias %out1) #0 {704; GFX900-MUBUF-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lohi:705; GFX900-MUBUF:       ; %bb.0: ; %entry706; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)707; GFX900-MUBUF-NEXT:    ds_read_u16 v0, v0708; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0xffff709; GFX900-MUBUF-NEXT:    v_lshrrev_b32_e32 v4, 16, v1710; GFX900-MUBUF-NEXT:    s_waitcnt lgkmcnt(0)711; GFX900-MUBUF-NEXT:    ds_write_b16 v2, v0712; GFX900-MUBUF-NEXT:    ds_write_b16 v3, v4713; GFX900-MUBUF-NEXT:    v_bfi_b32 v0, s4, v0, v1714; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off715; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)716; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]717;718; GFX906-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lohi:719; GFX906:       ; %bb.0: ; %entry720; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX906-NEXT:    ds_read_u16 v0, v0722; GFX906-NEXT:    s_mov_b32 s4, 0xffff723; GFX906-NEXT:    v_lshrrev_b32_e32 v4, 16, v1724; GFX906-NEXT:    s_waitcnt lgkmcnt(0)725; GFX906-NEXT:    ds_write_b16 v2, v0726; GFX906-NEXT:    ds_write_b16 v3, v4727; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v1728; GFX906-NEXT:    global_store_dword v[0:1], v0, off729; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)730; GFX906-NEXT:    s_setpc_b64 s[30:31]731;732; GFX803-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lohi:733; GFX803:       ; %bb.0: ; %entry734; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)735; GFX803-NEXT:    s_mov_b32 m0, -1736; GFX803-NEXT:    ds_read_u16 v0, v0737; GFX803-NEXT:    s_mov_b32 s4, 0x3020504738; GFX803-NEXT:    v_lshrrev_b32_e32 v4, 16, v1739; GFX803-NEXT:    s_waitcnt lgkmcnt(0)740; GFX803-NEXT:    ds_write_b16 v2, v0741; GFX803-NEXT:    ds_write_b16 v3, v4742; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s4743; GFX803-NEXT:    flat_store_dword v[0:1], v0744; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)745; GFX803-NEXT:    s_setpc_b64 s[30:31]746;747; GFX900-FLATSCR-LABEL: load_local_lo_v2i16_reghi_vreg_multi_use_lohi:748; GFX900-FLATSCR:       ; %bb.0: ; %entry749; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)750; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0751; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0xffff752; GFX900-FLATSCR-NEXT:    v_lshrrev_b32_e32 v4, 16, v1753; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)754; GFX900-FLATSCR-NEXT:    ds_write_b16 v2, v0755; GFX900-FLATSCR-NEXT:    ds_write_b16 v3, v4756; GFX900-FLATSCR-NEXT:    v_bfi_b32 v0, s0, v0, v1757; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off758; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)759; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]760entry:761  %load = load i16, ptr addrspace(3) %in762  %elt1 = extractelement <2 x i16> %reg, i32 1763  store i16 %load, ptr addrspace(3) %out0764  store i16 %elt1, ptr addrspace(3) %out1765  %build1 = insertelement <2 x i16> %reg, i16 %load, i32 0766  store <2 x i16> %build1, ptr addrspace(1) poison767  ret void768}769 770define void @load_global_lo_v2i16_reglo_vreg(ptr addrspace(1) %in, i32 %reg) #0 {771; GFX900-LABEL: load_global_lo_v2i16_reglo_vreg:772; GFX900:       ; %bb.0: ; %entry773; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)774; GFX900-NEXT:    global_load_short_d16 v2, v[0:1], off offset:-4094775; GFX900-NEXT:    s_waitcnt vmcnt(0)776; GFX900-NEXT:    global_store_dword v[0:1], v2, off777; GFX900-NEXT:    s_waitcnt vmcnt(0)778; GFX900-NEXT:    s_setpc_b64 s[30:31]779;780; GFX906-LABEL: load_global_lo_v2i16_reglo_vreg:781; GFX906:       ; %bb.0: ; %entry782; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)783; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-4094784; GFX906-NEXT:    s_mov_b32 s4, 0xffff785; GFX906-NEXT:    s_waitcnt vmcnt(0)786; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v2787; GFX906-NEXT:    global_store_dword v[0:1], v0, off788; GFX906-NEXT:    s_waitcnt vmcnt(0)789; GFX906-NEXT:    s_setpc_b64 s[30:31]790;791; GFX803-LABEL: load_global_lo_v2i16_reglo_vreg:792; GFX803:       ; %bb.0: ; %entry793; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v0795; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc796; GFX803-NEXT:    flat_load_ushort v0, v[0:1]797; GFX803-NEXT:    s_mov_b32 s4, 0x3020504798; GFX803-NEXT:    s_waitcnt vmcnt(0)799; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s4800; GFX803-NEXT:    flat_store_dword v[0:1], v0801; GFX803-NEXT:    s_waitcnt vmcnt(0)802; GFX803-NEXT:    s_setpc_b64 s[30:31]803entry:804  %reg.bc = bitcast i32 %reg to <2 x i16>805  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 -2047806  %load = load i16, ptr addrspace(1) %gep807  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 0808  store <2 x i16> %build1, ptr addrspace(1) poison809  ret void810}811 812define void @load_global_lo_v2f16_reglo_vreg(ptr addrspace(1) %in, i32 %reg) #0 {813; GFX900-LABEL: load_global_lo_v2f16_reglo_vreg:814; GFX900:       ; %bb.0: ; %entry815; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)816; GFX900-NEXT:    global_load_short_d16 v2, v[0:1], off offset:-4094817; GFX900-NEXT:    s_waitcnt vmcnt(0)818; GFX900-NEXT:    global_store_dword v[0:1], v2, off819; GFX900-NEXT:    s_waitcnt vmcnt(0)820; GFX900-NEXT:    s_setpc_b64 s[30:31]821;822; GFX906-LABEL: load_global_lo_v2f16_reglo_vreg:823; GFX906:       ; %bb.0: ; %entry824; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)825; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-4094826; GFX906-NEXT:    s_mov_b32 s4, 0xffff827; GFX906-NEXT:    s_waitcnt vmcnt(0)828; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v2829; GFX906-NEXT:    global_store_dword v[0:1], v0, off830; GFX906-NEXT:    s_waitcnt vmcnt(0)831; GFX906-NEXT:    s_setpc_b64 s[30:31]832;833; GFX803-LABEL: load_global_lo_v2f16_reglo_vreg:834; GFX803:       ; %bb.0: ; %entry835; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)836; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v0837; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc838; GFX803-NEXT:    flat_load_ushort v0, v[0:1]839; GFX803-NEXT:    s_mov_b32 s4, 0x3020504840; GFX803-NEXT:    s_waitcnt vmcnt(0)841; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s4842; GFX803-NEXT:    flat_store_dword v[0:1], v0843; GFX803-NEXT:    s_waitcnt vmcnt(0)844; GFX803-NEXT:    s_setpc_b64 s[30:31]845entry:846  %reg.bc = bitcast i32 %reg to <2 x half>847  %gep = getelementptr inbounds half, ptr addrspace(1) %in, i64 -2047848  %load = load half, ptr addrspace(1) %gep849  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 0850  store <2 x half> %build1, ptr addrspace(1) poison851  ret void852}853 854define void @load_global_lo_v2i16_reglo_vreg_zexti8(ptr addrspace(1) %in, i32 %reg) #0 {855; GFX900-LABEL: load_global_lo_v2i16_reglo_vreg_zexti8:856; GFX900:       ; %bb.0: ; %entry857; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)858; GFX900-NEXT:    global_load_ubyte_d16 v2, v[0:1], off offset:-4095859; GFX900-NEXT:    s_waitcnt vmcnt(0)860; GFX900-NEXT:    global_store_dword v[0:1], v2, off861; GFX900-NEXT:    s_waitcnt vmcnt(0)862; GFX900-NEXT:    s_setpc_b64 s[30:31]863;864; GFX906-LABEL: load_global_lo_v2i16_reglo_vreg_zexti8:865; GFX906:       ; %bb.0: ; %entry866; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)867; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-4095868; GFX906-NEXT:    s_mov_b32 s4, 0xffff869; GFX906-NEXT:    s_waitcnt vmcnt(0)870; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v2871; GFX906-NEXT:    global_store_dword v[0:1], v0, off872; GFX906-NEXT:    s_waitcnt vmcnt(0)873; GFX906-NEXT:    s_setpc_b64 s[30:31]874;875; GFX803-LABEL: load_global_lo_v2i16_reglo_vreg_zexti8:876; GFX803:       ; %bb.0: ; %entry877; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)878; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0879; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc880; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]881; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2882; GFX803-NEXT:    s_waitcnt vmcnt(0)883; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1884; GFX803-NEXT:    flat_store_dword v[0:1], v0885; GFX803-NEXT:    s_waitcnt vmcnt(0)886; GFX803-NEXT:    s_setpc_b64 s[30:31]887entry:888  %reg.bc = bitcast i32 %reg to <2 x i16>889  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095890  %load = load i8, ptr addrspace(1) %gep891  %ext = zext i8 %load to i16892  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 0893  store <2 x i16> %build1, ptr addrspace(1) poison894  ret void895}896 897define void @load_global_lo_v2i16_reglo_vreg_sexti8(ptr addrspace(1) %in, i32 %reg) #0 {898; GFX900-LABEL: load_global_lo_v2i16_reglo_vreg_sexti8:899; GFX900:       ; %bb.0: ; %entry900; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)901; GFX900-NEXT:    global_load_sbyte_d16 v2, v[0:1], off offset:-4095902; GFX900-NEXT:    s_waitcnt vmcnt(0)903; GFX900-NEXT:    global_store_dword v[0:1], v2, off904; GFX900-NEXT:    s_waitcnt vmcnt(0)905; GFX900-NEXT:    s_setpc_b64 s[30:31]906;907; GFX906-LABEL: load_global_lo_v2i16_reglo_vreg_sexti8:908; GFX906:       ; %bb.0: ; %entry909; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)910; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-4095911; GFX906-NEXT:    s_mov_b32 s4, 0xffff912; GFX906-NEXT:    s_waitcnt vmcnt(0)913; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v2914; GFX906-NEXT:    global_store_dword v[0:1], v0, off915; GFX906-NEXT:    s_waitcnt vmcnt(0)916; GFX906-NEXT:    s_setpc_b64 s[30:31]917;918; GFX803-LABEL: load_global_lo_v2i16_reglo_vreg_sexti8:919; GFX803:       ; %bb.0: ; %entry920; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)921; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0922; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc923; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]924; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2925; GFX803-NEXT:    s_waitcnt vmcnt(0)926; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD927; GFX803-NEXT:    flat_store_dword v[0:1], v0928; GFX803-NEXT:    s_waitcnt vmcnt(0)929; GFX803-NEXT:    s_setpc_b64 s[30:31]930entry:931  %reg.bc = bitcast i32 %reg to <2 x i16>932  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095933  %load = load i8, ptr addrspace(1) %gep934  %ext = sext i8 %load to i16935  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 0936  store <2 x i16> %build1, ptr addrspace(1) poison937  ret void938}939 940define void @load_global_lo_v2f16_reglo_vreg_zexti8(ptr addrspace(1) %in, i32 %reg) #0 {941; GFX900-LABEL: load_global_lo_v2f16_reglo_vreg_zexti8:942; GFX900:       ; %bb.0: ; %entry943; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)944; GFX900-NEXT:    global_load_ubyte_d16 v2, v[0:1], off offset:-4095945; GFX900-NEXT:    s_waitcnt vmcnt(0)946; GFX900-NEXT:    global_store_dword v[0:1], v2, off947; GFX900-NEXT:    s_waitcnt vmcnt(0)948; GFX900-NEXT:    s_setpc_b64 s[30:31]949;950; GFX906-LABEL: load_global_lo_v2f16_reglo_vreg_zexti8:951; GFX906:       ; %bb.0: ; %entry952; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)953; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-4095954; GFX906-NEXT:    s_mov_b32 s4, 0xffff955; GFX906-NEXT:    s_waitcnt vmcnt(0)956; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v2957; GFX906-NEXT:    global_store_dword v[0:1], v0, off958; GFX906-NEXT:    s_waitcnt vmcnt(0)959; GFX906-NEXT:    s_setpc_b64 s[30:31]960;961; GFX803-LABEL: load_global_lo_v2f16_reglo_vreg_zexti8:962; GFX803:       ; %bb.0: ; %entry963; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)964; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0965; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc966; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]967; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2968; GFX803-NEXT:    s_waitcnt vmcnt(0)969; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1970; GFX803-NEXT:    flat_store_dword v[0:1], v0971; GFX803-NEXT:    s_waitcnt vmcnt(0)972; GFX803-NEXT:    s_setpc_b64 s[30:31]973entry:974  %reg.bc = bitcast i32 %reg to <2 x half>975  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095976  %load = load i8, ptr addrspace(1) %gep977  %ext = zext i8 %load to i16978  %bitcast = bitcast i16 %ext to half979  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 0980  store <2 x half> %build1, ptr addrspace(1) poison981  ret void982}983 984define void @load_global_lo_v2f16_reglo_vreg_sexti8(ptr addrspace(1) %in, i32 %reg) #0 {985; GFX900-LABEL: load_global_lo_v2f16_reglo_vreg_sexti8:986; GFX900:       ; %bb.0: ; %entry987; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)988; GFX900-NEXT:    global_load_sbyte_d16 v2, v[0:1], off offset:-4095989; GFX900-NEXT:    s_waitcnt vmcnt(0)990; GFX900-NEXT:    global_store_dword v[0:1], v2, off991; GFX900-NEXT:    s_waitcnt vmcnt(0)992; GFX900-NEXT:    s_setpc_b64 s[30:31]993;994; GFX906-LABEL: load_global_lo_v2f16_reglo_vreg_sexti8:995; GFX906:       ; %bb.0: ; %entry996; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-4095998; GFX906-NEXT:    s_mov_b32 s4, 0xffff999; GFX906-NEXT:    s_waitcnt vmcnt(0)1000; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21001; GFX906-NEXT:    global_store_dword v[0:1], v0, off1002; GFX906-NEXT:    s_waitcnt vmcnt(0)1003; GFX906-NEXT:    s_setpc_b64 s[30:31]1004;1005; GFX803-LABEL: load_global_lo_v2f16_reglo_vreg_sexti8:1006; GFX803:       ; %bb.0: ; %entry1007; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1008; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v01009; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1010; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1011; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21012; GFX803-NEXT:    s_waitcnt vmcnt(0)1013; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1014; GFX803-NEXT:    flat_store_dword v[0:1], v01015; GFX803-NEXT:    s_waitcnt vmcnt(0)1016; GFX803-NEXT:    s_setpc_b64 s[30:31]1017entry:1018  %reg.bc = bitcast i32 %reg to <2 x half>1019  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -40951020  %load = load i8, ptr addrspace(1) %gep1021  %ext = sext i8 %load to i161022  %bitcast = bitcast i16 %ext to half1023  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 01024  store <2 x half> %build1, ptr addrspace(1) poison1025  ret void1026}1027 1028define void @load_flat_lo_v2i16_reghi_vreg(ptr %in, i32 %reg) #0 {1029; GFX900-LABEL: load_flat_lo_v2i16_reghi_vreg:1030; GFX900:       ; %bb.0: ; %entry1031; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1032; GFX900-NEXT:    flat_load_short_d16 v2, v[0:1]1033; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1034; GFX900-NEXT:    global_store_dword v[0:1], v2, off1035; GFX900-NEXT:    s_waitcnt vmcnt(0)1036; GFX900-NEXT:    s_setpc_b64 s[30:31]1037;1038; GFX906-LABEL: load_flat_lo_v2i16_reghi_vreg:1039; GFX906:       ; %bb.0: ; %entry1040; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1041; GFX906-NEXT:    flat_load_ushort v0, v[0:1]1042; GFX906-NEXT:    s_mov_b32 s4, 0xffff1043; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1044; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21045; GFX906-NEXT:    global_store_dword v[0:1], v0, off1046; GFX906-NEXT:    s_waitcnt vmcnt(0)1047; GFX906-NEXT:    s_setpc_b64 s[30:31]1048;1049; GFX803-LABEL: load_flat_lo_v2i16_reghi_vreg:1050; GFX803:       ; %bb.0: ; %entry1051; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1052; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1053; GFX803-NEXT:    s_mov_b32 s4, 0x30205041054; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1055; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s41056; GFX803-NEXT:    flat_store_dword v[0:1], v01057; GFX803-NEXT:    s_waitcnt vmcnt(0)1058; GFX803-NEXT:    s_setpc_b64 s[30:31]1059entry:1060  %reg.bc = bitcast i32 %reg to <2 x i16>1061  %load = load i16, ptr %in1062  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 01063  store <2 x i16> %build1, ptr addrspace(1) poison1064  ret void1065}1066 1067define void @load_flat_lo_v2f16_reghi_vreg(ptr %in, i32 %reg) #0 {1068; GFX900-LABEL: load_flat_lo_v2f16_reghi_vreg:1069; GFX900:       ; %bb.0: ; %entry1070; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1071; GFX900-NEXT:    flat_load_short_d16 v2, v[0:1]1072; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1073; GFX900-NEXT:    global_store_dword v[0:1], v2, off1074; GFX900-NEXT:    s_waitcnt vmcnt(0)1075; GFX900-NEXT:    s_setpc_b64 s[30:31]1076;1077; GFX906-LABEL: load_flat_lo_v2f16_reghi_vreg:1078; GFX906:       ; %bb.0: ; %entry1079; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1080; GFX906-NEXT:    flat_load_ushort v0, v[0:1]1081; GFX906-NEXT:    s_mov_b32 s4, 0xffff1082; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1083; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21084; GFX906-NEXT:    global_store_dword v[0:1], v0, off1085; GFX906-NEXT:    s_waitcnt vmcnt(0)1086; GFX906-NEXT:    s_setpc_b64 s[30:31]1087;1088; GFX803-LABEL: load_flat_lo_v2f16_reghi_vreg:1089; GFX803:       ; %bb.0: ; %entry1090; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1091; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1092; GFX803-NEXT:    s_mov_b32 s4, 0x30205041093; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1094; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s41095; GFX803-NEXT:    flat_store_dword v[0:1], v01096; GFX803-NEXT:    s_waitcnt vmcnt(0)1097; GFX803-NEXT:    s_setpc_b64 s[30:31]1098 1099; FIXME: the and above should be removable1100entry:1101  %reg.bc = bitcast i32 %reg to <2 x half>1102  %load = load half, ptr %in1103  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 01104  store <2 x half> %build1, ptr addrspace(1) poison1105  ret void1106}1107 1108define void @load_flat_lo_v2i16_reglo_vreg_zexti8(ptr %in, i32 %reg) #0 {1109; GFX900-LABEL: load_flat_lo_v2i16_reglo_vreg_zexti8:1110; GFX900:       ; %bb.0: ; %entry1111; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1112; GFX900-NEXT:    flat_load_ubyte_d16 v2, v[0:1]1113; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1114; GFX900-NEXT:    global_store_dword v[0:1], v2, off1115; GFX900-NEXT:    s_waitcnt vmcnt(0)1116; GFX900-NEXT:    s_setpc_b64 s[30:31]1117;1118; GFX906-LABEL: load_flat_lo_v2i16_reglo_vreg_zexti8:1119; GFX906:       ; %bb.0: ; %entry1120; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1121; GFX906-NEXT:    flat_load_ubyte v0, v[0:1]1122; GFX906-NEXT:    s_mov_b32 s4, 0xffff1123; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1124; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21125; GFX906-NEXT:    global_store_dword v[0:1], v0, off1126; GFX906-NEXT:    s_waitcnt vmcnt(0)1127; GFX906-NEXT:    s_setpc_b64 s[30:31]1128;1129; GFX803-LABEL: load_flat_lo_v2i16_reglo_vreg_zexti8:1130; GFX803:       ; %bb.0: ; %entry1131; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1132; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]1133; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21134; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1135; GFX803-NEXT:    v_or_b32_e32 v0, v0, v11136; GFX803-NEXT:    flat_store_dword v[0:1], v01137; GFX803-NEXT:    s_waitcnt vmcnt(0)1138; GFX803-NEXT:    s_setpc_b64 s[30:31]1139entry:1140  %reg.bc = bitcast i32 %reg to <2 x i16>1141  %load = load i8, ptr %in1142  %ext = zext i8 %load to i161143  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01144  store <2 x i16> %build1, ptr addrspace(1) poison1145  ret void1146}1147 1148define void @load_flat_lo_v2i16_reglo_vreg_sexti8(ptr %in, i32 %reg) #0 {1149; GFX900-LABEL: load_flat_lo_v2i16_reglo_vreg_sexti8:1150; GFX900:       ; %bb.0: ; %entry1151; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1152; GFX900-NEXT:    flat_load_sbyte_d16 v2, v[0:1]1153; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1154; GFX900-NEXT:    global_store_dword v[0:1], v2, off1155; GFX900-NEXT:    s_waitcnt vmcnt(0)1156; GFX900-NEXT:    s_setpc_b64 s[30:31]1157;1158; GFX906-LABEL: load_flat_lo_v2i16_reglo_vreg_sexti8:1159; GFX906:       ; %bb.0: ; %entry1160; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1161; GFX906-NEXT:    flat_load_sbyte v0, v[0:1]1162; GFX906-NEXT:    s_mov_b32 s4, 0xffff1163; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1164; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21165; GFX906-NEXT:    global_store_dword v[0:1], v0, off1166; GFX906-NEXT:    s_waitcnt vmcnt(0)1167; GFX906-NEXT:    s_setpc_b64 s[30:31]1168;1169; GFX803-LABEL: load_flat_lo_v2i16_reglo_vreg_sexti8:1170; GFX803:       ; %bb.0: ; %entry1171; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1172; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1173; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21174; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1175; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1176; GFX803-NEXT:    flat_store_dword v[0:1], v01177; GFX803-NEXT:    s_waitcnt vmcnt(0)1178; GFX803-NEXT:    s_setpc_b64 s[30:31]1179entry:1180  %reg.bc = bitcast i32 %reg to <2 x i16>1181  %load = load i8, ptr %in1182  %ext = sext i8 %load to i161183  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01184  store <2 x i16> %build1, ptr addrspace(1) poison1185  ret void1186}1187 1188define void @load_flat_lo_v2f16_reglo_vreg_zexti8(ptr %in, i32 %reg) #0 {1189; GFX900-LABEL: load_flat_lo_v2f16_reglo_vreg_zexti8:1190; GFX900:       ; %bb.0: ; %entry1191; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1192; GFX900-NEXT:    flat_load_ubyte_d16 v2, v[0:1]1193; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1194; GFX900-NEXT:    global_store_dword v[0:1], v2, off1195; GFX900-NEXT:    s_waitcnt vmcnt(0)1196; GFX900-NEXT:    s_setpc_b64 s[30:31]1197;1198; GFX906-LABEL: load_flat_lo_v2f16_reglo_vreg_zexti8:1199; GFX906:       ; %bb.0: ; %entry1200; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX906-NEXT:    flat_load_ubyte v0, v[0:1]1202; GFX906-NEXT:    s_mov_b32 s4, 0xffff1203; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1204; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21205; GFX906-NEXT:    global_store_dword v[0:1], v0, off1206; GFX906-NEXT:    s_waitcnt vmcnt(0)1207; GFX906-NEXT:    s_setpc_b64 s[30:31]1208;1209; GFX803-LABEL: load_flat_lo_v2f16_reglo_vreg_zexti8:1210; GFX803:       ; %bb.0: ; %entry1211; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1212; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]1213; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21214; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1215; GFX803-NEXT:    v_or_b32_e32 v0, v0, v11216; GFX803-NEXT:    flat_store_dword v[0:1], v01217; GFX803-NEXT:    s_waitcnt vmcnt(0)1218; GFX803-NEXT:    s_setpc_b64 s[30:31]1219entry:1220  %reg.bc = bitcast i32 %reg to <2 x half>1221  %load = load i8, ptr %in1222  %ext = zext i8 %load to i161223  %bitcast = bitcast i16 %ext to half1224  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 01225  store <2 x half> %build1, ptr addrspace(1) poison1226  ret void1227}1228 1229define void @load_flat_lo_v2f16_reglo_vreg_sexti8(ptr %in, i32 %reg) #0 {1230; GFX900-LABEL: load_flat_lo_v2f16_reglo_vreg_sexti8:1231; GFX900:       ; %bb.0: ; %entry1232; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1233; GFX900-NEXT:    flat_load_sbyte_d16 v2, v[0:1]1234; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1235; GFX900-NEXT:    global_store_dword v[0:1], v2, off1236; GFX900-NEXT:    s_waitcnt vmcnt(0)1237; GFX900-NEXT:    s_setpc_b64 s[30:31]1238;1239; GFX906-LABEL: load_flat_lo_v2f16_reglo_vreg_sexti8:1240; GFX906:       ; %bb.0: ; %entry1241; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1242; GFX906-NEXT:    flat_load_sbyte v0, v[0:1]1243; GFX906-NEXT:    s_mov_b32 s4, 0xffff1244; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1245; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21246; GFX906-NEXT:    global_store_dword v[0:1], v0, off1247; GFX906-NEXT:    s_waitcnt vmcnt(0)1248; GFX906-NEXT:    s_setpc_b64 s[30:31]1249;1250; GFX803-LABEL: load_flat_lo_v2f16_reglo_vreg_sexti8:1251; GFX803:       ; %bb.0: ; %entry1252; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1253; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1254; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21255; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1256; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1257; GFX803-NEXT:    flat_store_dword v[0:1], v01258; GFX803-NEXT:    s_waitcnt vmcnt(0)1259; GFX803-NEXT:    s_setpc_b64 s[30:31]1260entry:1261  %reg.bc = bitcast i32 %reg to <2 x half>1262  %load = load i8, ptr %in1263  %ext = sext i8 %load to i161264  %bitcast = bitcast i16 %ext to half1265  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 01266  store <2 x half> %build1, ptr addrspace(1) poison1267  ret void1268}1269 1270define void @load_private_lo_v2i16_reglo_vreg(ptr addrspace(5) byval(i16) %in, i32 %reg) #0 {1271; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg:1272; GFX900-MUBUF:       ; %bb.0: ; %entry1273; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1274; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v0, off, s[0:3], s32 offset:40941275; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1276; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off1277; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1278; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1279;1280; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg:1281; GFX906:       ; %bb.0: ; %entry1282; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1283; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941284; GFX906-NEXT:    s_mov_b32 s4, 0xffff1285; GFX906-NEXT:    s_waitcnt vmcnt(0)1286; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v01287; GFX906-NEXT:    global_store_dword v[0:1], v0, off1288; GFX906-NEXT:    s_waitcnt vmcnt(0)1289; GFX906-NEXT:    s_setpc_b64 s[30:31]1290;1291; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg:1292; GFX803:       ; %bb.0: ; %entry1293; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1294; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941295; GFX803-NEXT:    s_mov_b32 s4, 0x30205041296; GFX803-NEXT:    s_waitcnt vmcnt(0)1297; GFX803-NEXT:    v_perm_b32 v0, v1, v0, s41298; GFX803-NEXT:    flat_store_dword v[0:1], v01299; GFX803-NEXT:    s_waitcnt vmcnt(0)1300; GFX803-NEXT:    s_setpc_b64 s[30:31]1301;1302; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg:1303; GFX900-FLATSCR:       ; %bb.0: ; %entry1304; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1305; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v0, off, s32 offset:40941306; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1307; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1308; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1309; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1310entry:1311  %reg.bc = bitcast i32 %reg to <2 x i16>1312  %gep = getelementptr inbounds i16, ptr addrspace(5) %in, i64 20471313  %load = load i16, ptr addrspace(5) %gep1314  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 01315  store <2 x i16> %build1, ptr addrspace(1) poison1316  ret void1317}1318 1319define void @load_private_lo_v2i16_reghi_vreg(ptr addrspace(5) byval(i16) %in, i16 %reg) #0 {1320; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reghi_vreg:1321; GFX900-MUBUF:       ; %bb.0: ; %entry1322; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1323; GFX900-MUBUF-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941324; GFX900-MUBUF-NEXT:    s_mov_b32 s4, 0x50401001325; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1326; GFX900-MUBUF-NEXT:    v_perm_b32 v0, v0, v1, s41327; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off1328; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1329; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1330;1331; GFX906-LABEL: load_private_lo_v2i16_reghi_vreg:1332; GFX906:       ; %bb.0: ; %entry1333; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1334; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941335; GFX906-NEXT:    s_mov_b32 s4, 0x50401001336; GFX906-NEXT:    s_waitcnt vmcnt(0)1337; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s41338; GFX906-NEXT:    global_store_dword v[0:1], v0, off1339; GFX906-NEXT:    s_waitcnt vmcnt(0)1340; GFX906-NEXT:    s_setpc_b64 s[30:31]1341;1342; GFX803-LABEL: load_private_lo_v2i16_reghi_vreg:1343; GFX803:       ; %bb.0: ; %entry1344; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941346; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01347; GFX803-NEXT:    s_waitcnt vmcnt(0)1348; GFX803-NEXT:    v_or_b32_e32 v0, v1, v01349; GFX803-NEXT:    flat_store_dword v[0:1], v01350; GFX803-NEXT:    s_waitcnt vmcnt(0)1351; GFX803-NEXT:    s_setpc_b64 s[30:31]1352;1353; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reghi_vreg:1354; GFX900-FLATSCR:       ; %bb.0: ; %entry1355; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1356; GFX900-FLATSCR-NEXT:    scratch_load_ushort v1, off, s32 offset:40941357; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x50401001358; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1359; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v0, v1, s01360; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1361; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1362; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1363entry:1364  %gep = getelementptr inbounds i16, ptr addrspace(5) %in, i64 20471365  %load = load i16, ptr addrspace(5) %gep1366  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 11367  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 01368  store <2 x i16> %build1, ptr addrspace(1) poison1369  ret void1370}1371 1372define void @load_private_lo_v2f16_reglo_vreg(ptr addrspace(5) byval(half) %in, i32 %reg) #0 {1373; GFX900-MUBUF-LABEL: load_private_lo_v2f16_reglo_vreg:1374; GFX900-MUBUF:       ; %bb.0: ; %entry1375; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1376; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v0, off, s[0:3], s32 offset:40941377; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1378; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off1379; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1380; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1381;1382; GFX906-LABEL: load_private_lo_v2f16_reglo_vreg:1383; GFX906:       ; %bb.0: ; %entry1384; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941386; GFX906-NEXT:    s_mov_b32 s4, 0xffff1387; GFX906-NEXT:    s_waitcnt vmcnt(0)1388; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v01389; GFX906-NEXT:    global_store_dword v[0:1], v0, off1390; GFX906-NEXT:    s_waitcnt vmcnt(0)1391; GFX906-NEXT:    s_setpc_b64 s[30:31]1392;1393; GFX803-LABEL: load_private_lo_v2f16_reglo_vreg:1394; GFX803:       ; %bb.0: ; %entry1395; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1396; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941397; GFX803-NEXT:    s_mov_b32 s4, 0x30205041398; GFX803-NEXT:    s_waitcnt vmcnt(0)1399; GFX803-NEXT:    v_perm_b32 v0, v1, v0, s41400; GFX803-NEXT:    flat_store_dword v[0:1], v01401; GFX803-NEXT:    s_waitcnt vmcnt(0)1402; GFX803-NEXT:    s_setpc_b64 s[30:31]1403;1404; GFX900-FLATSCR-LABEL: load_private_lo_v2f16_reglo_vreg:1405; GFX900-FLATSCR:       ; %bb.0: ; %entry1406; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1407; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v0, off, s32 offset:40941408; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1409; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1410; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1411; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1412entry:1413  %reg.bc = bitcast i32 %reg to <2 x half>1414  %gep = getelementptr inbounds half, ptr addrspace(5) %in, i64 20471415  %load = load half, ptr addrspace(5) %gep1416  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 01417  store <2 x half> %build1, ptr addrspace(1) poison1418  ret void1419}1420 1421define void @load_private_lo_v2i16_reglo_vreg_nooff(ptr addrspace(5) %in, i32 %reg) #0 {1422; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_nooff:1423; GFX900-MUBUF:       ; %bb.0: ; %entry1424; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1425; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v1, off, s[0:3], 0 offset:4094 glc1426; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1427; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1428; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1429; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1430;1431; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_nooff:1432; GFX906:       ; %bb.0: ; %entry1433; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1434; GFX906-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1435; GFX906-NEXT:    s_waitcnt vmcnt(0)1436; GFX906-NEXT:    s_mov_b32 s4, 0xffff1437; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11438; GFX906-NEXT:    global_store_dword v[0:1], v0, off1439; GFX906-NEXT:    s_waitcnt vmcnt(0)1440; GFX906-NEXT:    s_setpc_b64 s[30:31]1441;1442; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_nooff:1443; GFX803:       ; %bb.0: ; %entry1444; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1445; GFX803-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1446; GFX803-NEXT:    s_waitcnt vmcnt(0)1447; GFX803-NEXT:    s_mov_b32 s4, 0x30205041448; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s41449; GFX803-NEXT:    flat_store_dword v[0:1], v01450; GFX803-NEXT:    s_waitcnt vmcnt(0)1451; GFX803-NEXT:    s_setpc_b64 s[30:31]1452;1453; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_nooff:1454; GFX900-FLATSCR:       ; %bb.0: ; %entry1455; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1456; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1457; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v1, off, s0 glc1458; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1459; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1460; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1461; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1462entry:1463  %reg.bc = bitcast i32 %reg to <2 x i16>1464  %load = load volatile i16, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1465  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 01466  store <2 x i16> %build1, ptr addrspace(1) poison1467  ret void1468}1469 1470define void @load_private_lo_v2i16_reghi_vreg_nooff(ptr addrspace(5) %in, i32 %reg) #0 {1471; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reghi_vreg_nooff:1472; GFX900-MUBUF:       ; %bb.0: ; %entry1473; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1474; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v1, off, s[0:3], 0 offset:4094 glc1475; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1476; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1477; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1478; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1479;1480; GFX906-LABEL: load_private_lo_v2i16_reghi_vreg_nooff:1481; GFX906:       ; %bb.0: ; %entry1482; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1483; GFX906-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1484; GFX906-NEXT:    s_waitcnt vmcnt(0)1485; GFX906-NEXT:    s_mov_b32 s4, 0xffff1486; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11487; GFX906-NEXT:    global_store_dword v[0:1], v0, off1488; GFX906-NEXT:    s_waitcnt vmcnt(0)1489; GFX906-NEXT:    s_setpc_b64 s[30:31]1490;1491; GFX803-LABEL: load_private_lo_v2i16_reghi_vreg_nooff:1492; GFX803:       ; %bb.0: ; %entry1493; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1494; GFX803-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1495; GFX803-NEXT:    s_waitcnt vmcnt(0)1496; GFX803-NEXT:    s_mov_b32 s4, 0x30205041497; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s41498; GFX803-NEXT:    flat_store_dword v[0:1], v01499; GFX803-NEXT:    s_waitcnt vmcnt(0)1500; GFX803-NEXT:    s_setpc_b64 s[30:31]1501;1502; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reghi_vreg_nooff:1503; GFX900-FLATSCR:       ; %bb.0: ; %entry1504; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1505; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1506; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v1, off, s0 glc1507; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1508; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1509; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1510; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1511entry:1512  %reg.bc = bitcast i32 %reg to <2 x i16>1513  %load = load volatile i16, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1514  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 01515  store <2 x i16> %build1, ptr addrspace(1) poison1516  ret void1517}1518 1519define void @load_private_lo_v2f16_reglo_vreg_nooff(ptr addrspace(5) %in, i32 %reg) #0 {1520; GFX900-MUBUF-LABEL: load_private_lo_v2f16_reglo_vreg_nooff:1521; GFX900-MUBUF:       ; %bb.0: ; %entry1522; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1523; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v1, off, s[0:3], 0 offset:4094 glc1524; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1525; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1526; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1527; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1528;1529; GFX906-LABEL: load_private_lo_v2f16_reglo_vreg_nooff:1530; GFX906:       ; %bb.0: ; %entry1531; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX906-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1533; GFX906-NEXT:    s_waitcnt vmcnt(0)1534; GFX906-NEXT:    s_mov_b32 s4, 0xffff1535; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11536; GFX906-NEXT:    global_store_dword v[0:1], v0, off1537; GFX906-NEXT:    s_waitcnt vmcnt(0)1538; GFX906-NEXT:    s_setpc_b64 s[30:31]1539;1540; GFX803-LABEL: load_private_lo_v2f16_reglo_vreg_nooff:1541; GFX803:       ; %bb.0: ; %entry1542; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1543; GFX803-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1544; GFX803-NEXT:    s_waitcnt vmcnt(0)1545; GFX803-NEXT:    s_mov_b32 s4, 0x30205041546; GFX803-NEXT:    v_perm_b32 v0, v0, v1, s41547; GFX803-NEXT:    flat_store_dword v[0:1], v01548; GFX803-NEXT:    s_waitcnt vmcnt(0)1549; GFX803-NEXT:    s_setpc_b64 s[30:31]1550;1551; GFX900-FLATSCR-LABEL: load_private_lo_v2f16_reglo_vreg_nooff:1552; GFX900-FLATSCR:       ; %bb.0: ; %entry1553; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1554; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1555; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v1, off, s0 glc1556; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1557; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1558; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1559; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1560entry:1561  %reg.bc = bitcast i32 %reg to <2 x half>1562  %load = load volatile half, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1563  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 01564  store <2 x half> %build1, ptr addrspace(1) poison1565  ret void1566}1567 1568define void @load_private_lo_v2i16_reglo_vreg_zexti8(ptr addrspace(5) byval(i8) %in, i32 %reg) #0 {1569; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8:1570; GFX900-MUBUF:       ; %bb.0: ; %entry1571; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1572; GFX900-MUBUF-NEXT:    buffer_load_ubyte_d16 v0, off, s[0:3], s32 offset:40951573; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1574; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off1575; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1576; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1577;1578; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8:1579; GFX906:       ; %bb.0: ; %entry1580; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1581; GFX906-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951582; GFX906-NEXT:    s_mov_b32 s4, 0xffff1583; GFX906-NEXT:    s_waitcnt vmcnt(0)1584; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v01585; GFX906-NEXT:    global_store_dword v[0:1], v0, off1586; GFX906-NEXT:    s_waitcnt vmcnt(0)1587; GFX906-NEXT:    s_setpc_b64 s[30:31]1588;1589; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8:1590; GFX803:       ; %bb.0: ; %entry1591; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1592; GFX803-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951593; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v01594; GFX803-NEXT:    s_waitcnt vmcnt(0)1595; GFX803-NEXT:    v_or_b32_e32 v0, v1, v01596; GFX803-NEXT:    flat_store_dword v[0:1], v01597; GFX803-NEXT:    s_waitcnt vmcnt(0)1598; GFX803-NEXT:    s_setpc_b64 s[30:31]1599;1600; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8:1601; GFX900-FLATSCR:       ; %bb.0: ; %entry1602; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1603; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16 v0, off, s32 offset:40951604; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1605; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1606; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1607; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1608entry:1609  %reg.bc = bitcast i32 %reg to <2 x i16>1610  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951611  %load = load i8, ptr addrspace(5) %gep1612  %ext = zext i8 %load to i161613  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01614  store <2 x i16> %build1, ptr addrspace(1) poison1615  ret void1616}1617 1618define void @load_private_lo_v2i16_reglo_vreg_sexti8(ptr addrspace(5) byval(i8) %in, i32 %reg) #0 {1619; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8:1620; GFX900-MUBUF:       ; %bb.0: ; %entry1621; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-MUBUF-NEXT:    buffer_load_sbyte_d16 v0, off, s[0:3], s32 offset:40951623; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1624; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off1625; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1626; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1627;1628; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8:1629; GFX906:       ; %bb.0: ; %entry1630; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1631; GFX906-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951632; GFX906-NEXT:    s_mov_b32 s4, 0xffff1633; GFX906-NEXT:    s_waitcnt vmcnt(0)1634; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v01635; GFX906-NEXT:    global_store_dword v[0:1], v0, off1636; GFX906-NEXT:    s_waitcnt vmcnt(0)1637; GFX906-NEXT:    s_setpc_b64 s[30:31]1638;1639; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8:1640; GFX803:       ; %bb.0: ; %entry1641; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1642; GFX803-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951643; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v01644; GFX803-NEXT:    s_waitcnt vmcnt(0)1645; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1646; GFX803-NEXT:    flat_store_dword v[0:1], v01647; GFX803-NEXT:    s_waitcnt vmcnt(0)1648; GFX803-NEXT:    s_setpc_b64 s[30:31]1649;1650; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8:1651; GFX900-FLATSCR:       ; %bb.0: ; %entry1652; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1653; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16 v0, off, s32 offset:40951654; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1655; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1656; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1657; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1658entry:1659  %reg.bc = bitcast i32 %reg to <2 x i16>1660  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951661  %load = load i8, ptr addrspace(5) %gep1662  %ext = sext i8 %load to i161663  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01664  store <2 x i16> %build1, ptr addrspace(1) poison1665  ret void1666}1667 1668define void @load_private_lo_v2i16_reglo_vreg_nooff_zexti8(ptr addrspace(5) %in, i32 %reg) #0 {1669; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_zexti8:1670; GFX900-MUBUF:       ; %bb.0: ; %entry1671; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1672; GFX900-MUBUF-NEXT:    buffer_load_ubyte_d16 v1, off, s[0:3], 0 offset:4094 glc1673; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1674; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1675; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1676; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1677;1678; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_zexti8:1679; GFX906:       ; %bb.0: ; %entry1680; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1681; GFX906-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1682; GFX906-NEXT:    s_waitcnt vmcnt(0)1683; GFX906-NEXT:    s_mov_b32 s4, 0xffff1684; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11685; GFX906-NEXT:    global_store_dword v[0:1], v0, off1686; GFX906-NEXT:    s_waitcnt vmcnt(0)1687; GFX906-NEXT:    s_setpc_b64 s[30:31]1688;1689; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_zexti8:1690; GFX803:       ; %bb.0: ; %entry1691; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1692; GFX803-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1693; GFX803-NEXT:    s_waitcnt vmcnt(0)1694; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v11695; GFX803-NEXT:    v_or_b32_e32 v0, v0, v11696; GFX803-NEXT:    flat_store_dword v[0:1], v01697; GFX803-NEXT:    s_waitcnt vmcnt(0)1698; GFX803-NEXT:    s_setpc_b64 s[30:31]1699;1700; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_zexti8:1701; GFX900-FLATSCR:       ; %bb.0: ; %entry1702; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1703; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1704; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16 v1, off, s0 glc1705; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1706; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1707; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1708; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1709entry:1710  %reg.bc = bitcast i32 %reg to <2 x i16>1711  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1712  %ext = zext i8 %load to i161713  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01714  store <2 x i16> %build1, ptr addrspace(1) poison1715  ret void1716}1717 1718define void @load_private_lo_v2i16_reglo_vreg_nooff_sexti8(ptr addrspace(5) %in, i32 %reg) #0 {1719; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_sexti8:1720; GFX900-MUBUF:       ; %bb.0: ; %entry1721; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1722; GFX900-MUBUF-NEXT:    buffer_load_sbyte_d16 v1, off, s[0:3], 0 offset:4094 glc1723; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1724; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1725; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1726; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1727;1728; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_sexti8:1729; GFX906:       ; %bb.0: ; %entry1730; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1731; GFX906-NEXT:    buffer_load_sbyte v0, off, s[0:3], 0 offset:4094 glc1732; GFX906-NEXT:    s_waitcnt vmcnt(0)1733; GFX906-NEXT:    s_mov_b32 s4, 0xffff1734; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11735; GFX906-NEXT:    global_store_dword v[0:1], v0, off1736; GFX906-NEXT:    s_waitcnt vmcnt(0)1737; GFX906-NEXT:    s_setpc_b64 s[30:31]1738;1739; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_sexti8:1740; GFX803:       ; %bb.0: ; %entry1741; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1742; GFX803-NEXT:    buffer_load_sbyte v0, off, s[0:3], 0 offset:4094 glc1743; GFX803-NEXT:    s_waitcnt vmcnt(0)1744; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v11745; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1746; GFX803-NEXT:    flat_store_dword v[0:1], v01747; GFX803-NEXT:    s_waitcnt vmcnt(0)1748; GFX803-NEXT:    s_setpc_b64 s[30:31]1749;1750; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_nooff_sexti8:1751; GFX900-FLATSCR:       ; %bb.0: ; %entry1752; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1753; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1754; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16 v1, off, s0 glc1755; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1756; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1757; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1758; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1759entry:1760  %reg.bc = bitcast i32 %reg to <2 x i16>1761  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1762  %ext = sext i8 %load to i161763  %build1 = insertelement <2 x i16> %reg.bc, i16 %ext, i32 01764  store <2 x i16> %build1, ptr addrspace(1) poison1765  ret void1766}1767 1768define void @load_private_lo_v2f16_reglo_vreg_nooff_zexti8(ptr addrspace(5) %in, i32 %reg) #0 {1769; GFX900-MUBUF-LABEL: load_private_lo_v2f16_reglo_vreg_nooff_zexti8:1770; GFX900-MUBUF:       ; %bb.0: ; %entry1771; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1772; GFX900-MUBUF-NEXT:    buffer_load_ubyte_d16 v1, off, s[0:3], 0 offset:4094 glc1773; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1774; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v1, off1775; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1776; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]1777;1778; GFX906-LABEL: load_private_lo_v2f16_reglo_vreg_nooff_zexti8:1779; GFX906:       ; %bb.0: ; %entry1780; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1781; GFX906-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1782; GFX906-NEXT:    s_waitcnt vmcnt(0)1783; GFX906-NEXT:    s_mov_b32 s4, 0xffff1784; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v11785; GFX906-NEXT:    global_store_dword v[0:1], v0, off1786; GFX906-NEXT:    s_waitcnt vmcnt(0)1787; GFX906-NEXT:    s_setpc_b64 s[30:31]1788;1789; GFX803-LABEL: load_private_lo_v2f16_reglo_vreg_nooff_zexti8:1790; GFX803:       ; %bb.0: ; %entry1791; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1792; GFX803-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1793; GFX803-NEXT:    s_waitcnt vmcnt(0)1794; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v11795; GFX803-NEXT:    v_or_b32_e32 v0, v0, v11796; GFX803-NEXT:    flat_store_dword v[0:1], v01797; GFX803-NEXT:    s_waitcnt vmcnt(0)1798; GFX803-NEXT:    s_setpc_b64 s[30:31]1799;1800; GFX900-FLATSCR-LABEL: load_private_lo_v2f16_reglo_vreg_nooff_zexti8:1801; GFX900-FLATSCR:       ; %bb.0: ; %entry1802; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1803; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1804; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16 v1, off, s0 glc1805; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1806; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1807; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1808; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1809entry:1810  %reg.bc = bitcast i32 %reg to <2 x half>1811  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1812  %ext = zext i8 %load to i161813  %bc.ext = bitcast i16 %ext to half1814  %build1 = insertelement <2 x half> %reg.bc, half %bc.ext, i32 01815  store <2 x half> %build1, ptr addrspace(1) poison1816  ret void1817}1818 1819define void @load_constant_lo_v2i16_reglo_vreg(ptr addrspace(4) %in, i32 %reg) #0 {1820; GFX900-LABEL: load_constant_lo_v2i16_reglo_vreg:1821; GFX900:       ; %bb.0: ; %entry1822; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1823; GFX900-NEXT:    global_load_short_d16 v2, v[0:1], off offset:-40941824; GFX900-NEXT:    s_waitcnt vmcnt(0)1825; GFX900-NEXT:    global_store_dword v[0:1], v2, off1826; GFX900-NEXT:    s_waitcnt vmcnt(0)1827; GFX900-NEXT:    s_setpc_b64 s[30:31]1828;1829; GFX906-LABEL: load_constant_lo_v2i16_reglo_vreg:1830; GFX906:       ; %bb.0: ; %entry1831; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1832; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-40941833; GFX906-NEXT:    s_mov_b32 s4, 0xffff1834; GFX906-NEXT:    s_waitcnt vmcnt(0)1835; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21836; GFX906-NEXT:    global_store_dword v[0:1], v0, off1837; GFX906-NEXT:    s_waitcnt vmcnt(0)1838; GFX906-NEXT:    s_setpc_b64 s[30:31]1839;1840; GFX803-LABEL: load_constant_lo_v2i16_reglo_vreg:1841; GFX803:       ; %bb.0: ; %entry1842; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1843; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v01844; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1845; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1846; GFX803-NEXT:    s_mov_b32 s4, 0x30205041847; GFX803-NEXT:    s_waitcnt vmcnt(0)1848; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s41849; GFX803-NEXT:    flat_store_dword v[0:1], v01850; GFX803-NEXT:    s_waitcnt vmcnt(0)1851; GFX803-NEXT:    s_setpc_b64 s[30:31]1852entry:1853  %reg.bc = bitcast i32 %reg to <2 x i16>1854  %gep = getelementptr inbounds i16, ptr addrspace(4) %in, i64 -20471855  %load = load i16, ptr addrspace(4) %gep1856  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 01857  store <2 x i16> %build1, ptr addrspace(1) poison1858  ret void1859}1860 1861define void @load_constant_lo_v2f16_reglo_vreg(ptr addrspace(4) %in, i32 %reg) #0 {1862; GFX900-LABEL: load_constant_lo_v2f16_reglo_vreg:1863; GFX900:       ; %bb.0: ; %entry1864; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1865; GFX900-NEXT:    global_load_short_d16 v2, v[0:1], off offset:-40941866; GFX900-NEXT:    s_waitcnt vmcnt(0)1867; GFX900-NEXT:    global_store_dword v[0:1], v2, off1868; GFX900-NEXT:    s_waitcnt vmcnt(0)1869; GFX900-NEXT:    s_setpc_b64 s[30:31]1870;1871; GFX906-LABEL: load_constant_lo_v2f16_reglo_vreg:1872; GFX906:       ; %bb.0: ; %entry1873; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1874; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-40941875; GFX906-NEXT:    s_mov_b32 s4, 0xffff1876; GFX906-NEXT:    s_waitcnt vmcnt(0)1877; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21878; GFX906-NEXT:    global_store_dword v[0:1], v0, off1879; GFX906-NEXT:    s_waitcnt vmcnt(0)1880; GFX906-NEXT:    s_setpc_b64 s[30:31]1881;1882; GFX803-LABEL: load_constant_lo_v2f16_reglo_vreg:1883; GFX803:       ; %bb.0: ; %entry1884; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1885; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v01886; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1887; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1888; GFX803-NEXT:    s_mov_b32 s4, 0x30205041889; GFX803-NEXT:    s_waitcnt vmcnt(0)1890; GFX803-NEXT:    v_perm_b32 v0, v0, v2, s41891; GFX803-NEXT:    flat_store_dword v[0:1], v01892; GFX803-NEXT:    s_waitcnt vmcnt(0)1893; GFX803-NEXT:    s_setpc_b64 s[30:31]1894entry:1895  %reg.bc = bitcast i32 %reg to <2 x half>1896  %gep = getelementptr inbounds half, ptr addrspace(4) %in, i64 -20471897  %load = load half, ptr addrspace(4) %gep1898  %build1 = insertelement <2 x half> %reg.bc, half %load, i32 01899  store <2 x half> %build1, ptr addrspace(1) poison1900  ret void1901}1902 1903define void @load_constant_lo_v2f16_reglo_vreg_zexti8(ptr addrspace(4) %in, i32 %reg) #0 {1904; GFX900-LABEL: load_constant_lo_v2f16_reglo_vreg_zexti8:1905; GFX900:       ; %bb.0: ; %entry1906; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1907; GFX900-NEXT:    global_load_ubyte_d16 v2, v[0:1], off offset:-40951908; GFX900-NEXT:    s_waitcnt vmcnt(0)1909; GFX900-NEXT:    global_store_dword v[0:1], v2, off1910; GFX900-NEXT:    s_waitcnt vmcnt(0)1911; GFX900-NEXT:    s_setpc_b64 s[30:31]1912;1913; GFX906-LABEL: load_constant_lo_v2f16_reglo_vreg_zexti8:1914; GFX906:       ; %bb.0: ; %entry1915; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1916; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-40951917; GFX906-NEXT:    s_mov_b32 s4, 0xffff1918; GFX906-NEXT:    s_waitcnt vmcnt(0)1919; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21920; GFX906-NEXT:    global_store_dword v[0:1], v0, off1921; GFX906-NEXT:    s_waitcnt vmcnt(0)1922; GFX906-NEXT:    s_setpc_b64 s[30:31]1923;1924; GFX803-LABEL: load_constant_lo_v2f16_reglo_vreg_zexti8:1925; GFX803:       ; %bb.0: ; %entry1926; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1927; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v01928; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1929; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]1930; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21931; GFX803-NEXT:    s_waitcnt vmcnt(0)1932; GFX803-NEXT:    v_or_b32_e32 v0, v0, v11933; GFX803-NEXT:    flat_store_dword v[0:1], v01934; GFX803-NEXT:    s_waitcnt vmcnt(0)1935; GFX803-NEXT:    s_setpc_b64 s[30:31]1936entry:1937  %reg.bc = bitcast i32 %reg to <2 x half>1938  %gep = getelementptr inbounds i8, ptr addrspace(4) %in, i64 -40951939  %load = load i8, ptr addrspace(4) %gep1940  %ext = zext i8 %load to i161941  %bitcast = bitcast i16 %ext to half1942  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 01943  store <2 x half> %build1, ptr addrspace(1) poison1944  ret void1945}1946 1947define void @load_constant_lo_v2f16_reglo_vreg_sexti8(ptr addrspace(4) %in, i32 %reg) #0 {1948; GFX900-LABEL: load_constant_lo_v2f16_reglo_vreg_sexti8:1949; GFX900:       ; %bb.0: ; %entry1950; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1951; GFX900-NEXT:    global_load_sbyte_d16 v2, v[0:1], off offset:-40951952; GFX900-NEXT:    s_waitcnt vmcnt(0)1953; GFX900-NEXT:    global_store_dword v[0:1], v2, off1954; GFX900-NEXT:    s_waitcnt vmcnt(0)1955; GFX900-NEXT:    s_setpc_b64 s[30:31]1956;1957; GFX906-LABEL: load_constant_lo_v2f16_reglo_vreg_sexti8:1958; GFX906:       ; %bb.0: ; %entry1959; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1960; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-40951961; GFX906-NEXT:    s_mov_b32 s4, 0xffff1962; GFX906-NEXT:    s_waitcnt vmcnt(0)1963; GFX906-NEXT:    v_bfi_b32 v0, s4, v0, v21964; GFX906-NEXT:    global_store_dword v[0:1], v0, off1965; GFX906-NEXT:    s_waitcnt vmcnt(0)1966; GFX906-NEXT:    s_setpc_b64 s[30:31]1967;1968; GFX803-LABEL: load_constant_lo_v2f16_reglo_vreg_sexti8:1969; GFX803:       ; %bb.0: ; %entry1970; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1971; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v01972; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1973; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1974; GFX803-NEXT:    v_and_b32_e32 v1, 0xffff0000, v21975; GFX803-NEXT:    s_waitcnt vmcnt(0)1976; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1977; GFX803-NEXT:    flat_store_dword v[0:1], v01978; GFX803-NEXT:    s_waitcnt vmcnt(0)1979; GFX803-NEXT:    s_setpc_b64 s[30:31]1980entry:1981  %reg.bc = bitcast i32 %reg to <2 x half>1982  %gep = getelementptr inbounds i8, ptr addrspace(4) %in, i64 -40951983  %load = load i8, ptr addrspace(4) %gep1984  %ext = sext i8 %load to i161985  %bitcast = bitcast i16 %ext to half1986  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 01987  store <2 x half> %build1, ptr addrspace(1) poison1988  ret void1989}1990 1991define void @load_private_lo_v2i16_reglo_vreg_to_offset(i32 %reg) #0 {1992; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_to_offset:1993; GFX900-MUBUF:       ; %bb.0: ; %entry1994; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1995; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 0x7b1996; GFX900-MUBUF-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:41997; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)1998; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 441999; GFX900-MUBUF-NEXT:    buffer_load_short_d16 v0, v1, s[0:3], s32 offen offset:4054 glc2000; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2001; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off2002; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2003; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]2004;2005; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_to_offset:2006; GFX906:       ; %bb.0: ; %entry2007; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2008; GFX906-NEXT:    v_mov_b32_e32 v1, 0x7b2009; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42010; GFX906-NEXT:    s_waitcnt vmcnt(0)2011; GFX906-NEXT:    v_mov_b32_e32 v2, 442012; GFX906-NEXT:    buffer_load_ushort v1, v2, s[0:3], s32 offen offset:4054 glc2013; GFX906-NEXT:    s_waitcnt vmcnt(0)2014; GFX906-NEXT:    s_mov_b32 s4, 0xffff2015; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v02016; GFX906-NEXT:    global_store_dword v[0:1], v0, off2017; GFX906-NEXT:    s_waitcnt vmcnt(0)2018; GFX906-NEXT:    s_setpc_b64 s[30:31]2019;2020; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_to_offset:2021; GFX803:       ; %bb.0: ; %entry2022; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2023; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b2024; GFX803-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42025; GFX803-NEXT:    s_waitcnt vmcnt(0)2026; GFX803-NEXT:    v_mov_b32_e32 v2, 442027; GFX803-NEXT:    buffer_load_ushort v1, v2, s[0:3], s32 offen offset:4054 glc2028; GFX803-NEXT:    s_waitcnt vmcnt(0)2029; GFX803-NEXT:    s_mov_b32 s4, 0x30205042030; GFX803-NEXT:    v_perm_b32 v0, v1, v0, s42031; GFX803-NEXT:    flat_store_dword v[0:1], v02032; GFX803-NEXT:    s_waitcnt vmcnt(0)2033; GFX803-NEXT:    s_setpc_b64 s[30:31]2034;2035; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_to_offset:2036; GFX900-FLATSCR:       ; %bb.0: ; %entry2037; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2038; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0x7b2039; GFX900-FLATSCR-NEXT:    scratch_store_dword off, v1, s32 offset:42040; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2041; GFX900-FLATSCR-NEXT:    s_add_i32 s0, s32, 442042; GFX900-FLATSCR-NEXT:    scratch_load_short_d16 v0, off, s0 offset:4054 glc2043; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2044; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2045; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2046; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2047entry:2048  %obj0 = alloca [10 x i32], align 4, addrspace(5)2049  %obj1 = alloca [4096 x i16], align 2, addrspace(5)2050  %reg.bc = bitcast i32 %reg to <2 x i16>2051  store volatile i32 123, ptr addrspace(5) %obj02052  %gep = getelementptr inbounds [4096 x i16], ptr addrspace(5) %obj1, i32 0, i32 20272053  %load = load volatile i16, ptr addrspace(5) %gep2054  %build1 = insertelement <2 x i16> %reg.bc, i16 %load, i32 02055  store <2 x i16> %build1, ptr addrspace(1) poison2056  ret void2057}2058 2059define void @load_private_lo_v2i16_reglo_vreg_sexti8_to_offset(i32 %reg) #0 {2060; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8_to_offset:2061; GFX900-MUBUF:       ; %bb.0: ; %entry2062; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2063; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 0x7b2064; GFX900-MUBUF-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42065; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2066; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 442067; GFX900-MUBUF-NEXT:    buffer_load_sbyte_d16 v0, v1, s[0:3], s32 offen offset:4055 glc2068; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2069; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off2070; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2071; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]2072;2073; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8_to_offset:2074; GFX906:       ; %bb.0: ; %entry2075; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2076; GFX906-NEXT:    v_mov_b32_e32 v1, 0x7b2077; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42078; GFX906-NEXT:    s_waitcnt vmcnt(0)2079; GFX906-NEXT:    v_mov_b32_e32 v2, 442080; GFX906-NEXT:    buffer_load_sbyte v1, v2, s[0:3], s32 offen offset:4055 glc2081; GFX906-NEXT:    s_waitcnt vmcnt(0)2082; GFX906-NEXT:    s_mov_b32 s4, 0xffff2083; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v02084; GFX906-NEXT:    global_store_dword v[0:1], v0, off2085; GFX906-NEXT:    s_waitcnt vmcnt(0)2086; GFX906-NEXT:    s_setpc_b64 s[30:31]2087;2088; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8_to_offset:2089; GFX803:       ; %bb.0: ; %entry2090; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2091; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b2092; GFX803-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42093; GFX803-NEXT:    s_waitcnt vmcnt(0)2094; GFX803-NEXT:    v_mov_b32_e32 v2, 442095; GFX803-NEXT:    buffer_load_sbyte v1, v2, s[0:3], s32 offen offset:4055 glc2096; GFX803-NEXT:    s_waitcnt vmcnt(0)2097; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v02098; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2099; GFX803-NEXT:    flat_store_dword v[0:1], v02100; GFX803-NEXT:    s_waitcnt vmcnt(0)2101; GFX803-NEXT:    s_setpc_b64 s[30:31]2102;2103; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_sexti8_to_offset:2104; GFX900-FLATSCR:       ; %bb.0: ; %entry2105; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2106; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0x7b2107; GFX900-FLATSCR-NEXT:    scratch_store_dword off, v1, s32 offset:42108; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2109; GFX900-FLATSCR-NEXT:    s_add_i32 s0, s32, 442110; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16 v0, off, s0 offset:4055 glc2111; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2112; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2113; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2114; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2115entry:2116  %obj0 = alloca [10 x i32], align 4, addrspace(5)2117  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2118  %reg.bc = bitcast i32 %reg to <2 x i16>2119  store volatile i32 123, ptr addrspace(5) %obj02120  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552121  %load = load volatile i8, ptr addrspace(5) %gep2122  %load.ext = sext i8 %load to i162123  %build1 = insertelement <2 x i16> %reg.bc, i16 %load.ext, i32 02124  store <2 x i16> %build1, ptr addrspace(1) poison2125  ret void2126}2127 2128define void @load_private_lo_v2i16_reglo_vreg_zexti8_to_offset(i32 %reg) #0 {2129; GFX900-MUBUF-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8_to_offset:2130; GFX900-MUBUF:       ; %bb.0: ; %entry2131; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2132; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 0x7b2133; GFX900-MUBUF-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42134; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2135; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 442136; GFX900-MUBUF-NEXT:    buffer_load_ubyte_d16 v0, v1, s[0:3], s32 offen offset:4055 glc2137; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2138; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off2139; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2140; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]2141;2142; GFX906-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8_to_offset:2143; GFX906:       ; %bb.0: ; %entry2144; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2145; GFX906-NEXT:    v_mov_b32_e32 v1, 0x7b2146; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42147; GFX906-NEXT:    s_waitcnt vmcnt(0)2148; GFX906-NEXT:    v_mov_b32_e32 v2, 442149; GFX906-NEXT:    buffer_load_ubyte v1, v2, s[0:3], s32 offen offset:4055 glc2150; GFX906-NEXT:    s_waitcnt vmcnt(0)2151; GFX906-NEXT:    s_mov_b32 s4, 0xffff2152; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v02153; GFX906-NEXT:    global_store_dword v[0:1], v0, off2154; GFX906-NEXT:    s_waitcnt vmcnt(0)2155; GFX906-NEXT:    s_setpc_b64 s[30:31]2156;2157; GFX803-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8_to_offset:2158; GFX803:       ; %bb.0: ; %entry2159; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2160; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b2161; GFX803-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42162; GFX803-NEXT:    s_waitcnt vmcnt(0)2163; GFX803-NEXT:    v_mov_b32_e32 v2, 442164; GFX803-NEXT:    buffer_load_ubyte v1, v2, s[0:3], s32 offen offset:4055 glc2165; GFX803-NEXT:    s_waitcnt vmcnt(0)2166; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v02167; GFX803-NEXT:    v_or_b32_e32 v0, v1, v02168; GFX803-NEXT:    flat_store_dword v[0:1], v02169; GFX803-NEXT:    s_waitcnt vmcnt(0)2170; GFX803-NEXT:    s_setpc_b64 s[30:31]2171;2172; GFX900-FLATSCR-LABEL: load_private_lo_v2i16_reglo_vreg_zexti8_to_offset:2173; GFX900-FLATSCR:       ; %bb.0: ; %entry2174; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2175; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0x7b2176; GFX900-FLATSCR-NEXT:    scratch_store_dword off, v1, s32 offset:42177; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2178; GFX900-FLATSCR-NEXT:    s_add_i32 s0, s32, 442179; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16 v0, off, s0 offset:4055 glc2180; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2181; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2182; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2183; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2184entry:2185  %obj0 = alloca [10 x i32], align 4, addrspace(5)2186  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2187  %reg.bc = bitcast i32 %reg to <2 x i16>2188  store volatile i32 123, ptr addrspace(5) %obj02189  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552190  %load = load volatile i8, ptr addrspace(5) %gep2191  %load.ext = zext i8 %load to i162192  %build1 = insertelement <2 x i16> %reg.bc, i16 %load.ext, i32 02193  store <2 x i16> %build1, ptr addrspace(1) poison2194  ret void2195}2196 2197define void @load_private_lo_v2f16_reglo_vreg_sexti8_to_offset(i32 %reg) #0 {2198; GFX900-MUBUF-LABEL: load_private_lo_v2f16_reglo_vreg_sexti8_to_offset:2199; GFX900-MUBUF:       ; %bb.0: ; %entry2200; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 0x7b2202; GFX900-MUBUF-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42203; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2204; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 442205; GFX900-MUBUF-NEXT:    buffer_load_sbyte_d16 v0, v1, s[0:3], s32 offen offset:4055 glc2206; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2207; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off2208; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2209; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]2210;2211; GFX906-LABEL: load_private_lo_v2f16_reglo_vreg_sexti8_to_offset:2212; GFX906:       ; %bb.0: ; %entry2213; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2214; GFX906-NEXT:    v_mov_b32_e32 v1, 0x7b2215; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42216; GFX906-NEXT:    s_waitcnt vmcnt(0)2217; GFX906-NEXT:    v_mov_b32_e32 v2, 442218; GFX906-NEXT:    buffer_load_sbyte v1, v2, s[0:3], s32 offen offset:4055 glc2219; GFX906-NEXT:    s_waitcnt vmcnt(0)2220; GFX906-NEXT:    s_mov_b32 s4, 0xffff2221; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v02222; GFX906-NEXT:    global_store_dword v[0:1], v0, off2223; GFX906-NEXT:    s_waitcnt vmcnt(0)2224; GFX906-NEXT:    s_setpc_b64 s[30:31]2225;2226; GFX803-LABEL: load_private_lo_v2f16_reglo_vreg_sexti8_to_offset:2227; GFX803:       ; %bb.0: ; %entry2228; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b2230; GFX803-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42231; GFX803-NEXT:    s_waitcnt vmcnt(0)2232; GFX803-NEXT:    v_mov_b32_e32 v2, 442233; GFX803-NEXT:    buffer_load_sbyte v1, v2, s[0:3], s32 offen offset:4055 glc2234; GFX803-NEXT:    s_waitcnt vmcnt(0)2235; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v02236; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2237; GFX803-NEXT:    flat_store_dword v[0:1], v02238; GFX803-NEXT:    s_waitcnt vmcnt(0)2239; GFX803-NEXT:    s_setpc_b64 s[30:31]2240;2241; GFX900-FLATSCR-LABEL: load_private_lo_v2f16_reglo_vreg_sexti8_to_offset:2242; GFX900-FLATSCR:       ; %bb.0: ; %entry2243; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2244; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0x7b2245; GFX900-FLATSCR-NEXT:    scratch_store_dword off, v1, s32 offset:42246; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2247; GFX900-FLATSCR-NEXT:    s_add_i32 s0, s32, 442248; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16 v0, off, s0 offset:4055 glc2249; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2250; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2251; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2252; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2253entry:2254  %obj0 = alloca [10 x i32], align 4, addrspace(5)2255  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2256  %reg.bc = bitcast i32 %reg to <2 x half>2257  store volatile i32 123, ptr addrspace(5) %obj02258  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552259  %load = load volatile i8, ptr addrspace(5) %gep2260  %load.ext = sext i8 %load to i162261  %bitcast = bitcast i16 %load.ext to half2262  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 02263  store <2 x half> %build1, ptr addrspace(1) poison2264  ret void2265}2266 2267define void @load_private_lo_v2f16_reglo_vreg_zexti8_to_offset(i32 %reg) #0 {2268; GFX900-MUBUF-LABEL: load_private_lo_v2f16_reglo_vreg_zexti8_to_offset:2269; GFX900-MUBUF:       ; %bb.0: ; %entry2270; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2271; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 0x7b2272; GFX900-MUBUF-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42273; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2274; GFX900-MUBUF-NEXT:    v_mov_b32_e32 v1, 442275; GFX900-MUBUF-NEXT:    buffer_load_ubyte_d16 v0, v1, s[0:3], s32 offen offset:4055 glc2276; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2277; GFX900-MUBUF-NEXT:    global_store_dword v[0:1], v0, off2278; GFX900-MUBUF-NEXT:    s_waitcnt vmcnt(0)2279; GFX900-MUBUF-NEXT:    s_setpc_b64 s[30:31]2280;2281; GFX906-LABEL: load_private_lo_v2f16_reglo_vreg_zexti8_to_offset:2282; GFX906:       ; %bb.0: ; %entry2283; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2284; GFX906-NEXT:    v_mov_b32_e32 v1, 0x7b2285; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42286; GFX906-NEXT:    s_waitcnt vmcnt(0)2287; GFX906-NEXT:    v_mov_b32_e32 v2, 442288; GFX906-NEXT:    buffer_load_ubyte v1, v2, s[0:3], s32 offen offset:4055 glc2289; GFX906-NEXT:    s_waitcnt vmcnt(0)2290; GFX906-NEXT:    s_mov_b32 s4, 0xffff2291; GFX906-NEXT:    v_bfi_b32 v0, s4, v1, v02292; GFX906-NEXT:    global_store_dword v[0:1], v0, off2293; GFX906-NEXT:    s_waitcnt vmcnt(0)2294; GFX906-NEXT:    s_setpc_b64 s[30:31]2295;2296; GFX803-LABEL: load_private_lo_v2f16_reglo_vreg_zexti8_to_offset:2297; GFX803:       ; %bb.0: ; %entry2298; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2299; GFX803-NEXT:    v_mov_b32_e32 v1, 0x7b2300; GFX803-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:42301; GFX803-NEXT:    s_waitcnt vmcnt(0)2302; GFX803-NEXT:    v_mov_b32_e32 v2, 442303; GFX803-NEXT:    buffer_load_ubyte v1, v2, s[0:3], s32 offen offset:4055 glc2304; GFX803-NEXT:    s_waitcnt vmcnt(0)2305; GFX803-NEXT:    v_and_b32_e32 v0, 0xffff0000, v02306; GFX803-NEXT:    v_or_b32_e32 v0, v1, v02307; GFX803-NEXT:    flat_store_dword v[0:1], v02308; GFX803-NEXT:    s_waitcnt vmcnt(0)2309; GFX803-NEXT:    s_setpc_b64 s[30:31]2310;2311; GFX900-FLATSCR-LABEL: load_private_lo_v2f16_reglo_vreg_zexti8_to_offset:2312; GFX900-FLATSCR:       ; %bb.0: ; %entry2313; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2314; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0x7b2315; GFX900-FLATSCR-NEXT:    scratch_store_dword off, v1, s32 offset:42316; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2317; GFX900-FLATSCR-NEXT:    s_add_i32 s0, s32, 442318; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16 v0, off, s0 offset:4055 glc2319; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2320; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2321; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2322; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2323entry:2324  %obj0 = alloca [10 x i32], align 4, addrspace(5)2325  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2326  %reg.bc = bitcast i32 %reg to <2 x half>2327  store volatile i32 123, ptr addrspace(5) %obj02328  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552329  %load = load volatile i8, ptr addrspace(5) %gep2330  %load.ext = zext i8 %load to i162331  %bitcast = bitcast i16 %load.ext to half2332  %build1 = insertelement <2 x half> %reg.bc, half %bitcast, i32 02333  store <2 x half> %build1, ptr addrspace(1) poison2334  ret void2335}2336 2337attributes #0 = { nounwind }2338