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