brintos

brintos / llvm-project-archived public Read only

0
0
Text · 116.0 KiB · 825ae80 Raw
2708 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 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx906 -mattr=-promote-alloca < %s | FileCheck -check-prefixes=GFX906 %s4; RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-promote-alloca < %s | FileCheck -check-prefixes=GFX803 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-promote-alloca -mattr=+enable-flat-scratch < %s | FileCheck -check-prefixes=GFX900-FLATSCR %s6 7define <2 x i16> @load_local_lo_hi_v2i16_multi_use_lo(ptr addrspace(3) noalias %in) #0 {8; GFX900-LABEL: load_local_lo_hi_v2i16_multi_use_lo:9; GFX900:       ; %bb.0: ; %entry10; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX900-NEXT:    ds_read_u16 v2, v012; GFX900-NEXT:    s_waitcnt lgkmcnt(0)13; GFX900-NEXT:    v_mov_b32_e32 v1, v214; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0 offset:1615; GFX900-NEXT:    v_mov_b32_e32 v0, 016; GFX900-NEXT:    ds_write_b16 v0, v217; GFX900-NEXT:    s_waitcnt lgkmcnt(1)18; GFX900-NEXT:    v_mov_b32_e32 v0, v119; GFX900-NEXT:    s_waitcnt lgkmcnt(0)20; GFX900-NEXT:    s_setpc_b64 s[30:31]21;22; GFX906-LABEL: load_local_lo_hi_v2i16_multi_use_lo:23; GFX906:       ; %bb.0: ; %entry24; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)25; GFX906-NEXT:    ds_read_u16 v1, v026; GFX906-NEXT:    ds_read_u16 v0, v0 offset:1627; GFX906-NEXT:    s_mov_b32 s4, 0x504010028; GFX906-NEXT:    v_mov_b32_e32 v2, 029; GFX906-NEXT:    s_waitcnt lgkmcnt(1)30; GFX906-NEXT:    ds_write_b16 v2, v131; GFX906-NEXT:    s_waitcnt lgkmcnt(1)32; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s433; GFX906-NEXT:    s_waitcnt lgkmcnt(0)34; GFX906-NEXT:    s_setpc_b64 s[30:31]35;36; GFX803-LABEL: load_local_lo_hi_v2i16_multi_use_lo:37; GFX803:       ; %bb.0: ; %entry38; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)39; GFX803-NEXT:    s_mov_b32 m0, -140; GFX803-NEXT:    ds_read_u16 v1, v041; GFX803-NEXT:    ds_read_u16 v0, v0 offset:1642; GFX803-NEXT:    v_mov_b32_e32 v2, 043; GFX803-NEXT:    s_waitcnt lgkmcnt(1)44; GFX803-NEXT:    ds_write_b16 v2, v145; GFX803-NEXT:    s_waitcnt lgkmcnt(1)46; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v047; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD48; GFX803-NEXT:    s_waitcnt lgkmcnt(0)49; GFX803-NEXT:    s_setpc_b64 s[30:31]50;51; GFX900-FLATSCR-LABEL: load_local_lo_hi_v2i16_multi_use_lo:52; GFX900-FLATSCR:       ; %bb.0: ; %entry53; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)54; GFX900-FLATSCR-NEXT:    ds_read_u16 v2, v055; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)56; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, v257; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0 offset:1658; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, 059; GFX900-FLATSCR-NEXT:    ds_write_b16 v0, v260; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)61; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v162; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)63; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]64entry:65  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 866  %load.lo = load i16, ptr addrspace(3) %in67  %load.hi = load i16, ptr addrspace(3) %gep68  store i16 %load.lo, ptr addrspace(3) null69  %build0 = insertelement <2 x i16> poison, i16 %load.lo, i32 070  %build1 = insertelement <2 x i16> %build0, i16 %load.hi, i32 171  ret <2 x i16> %build172}73 74define <2 x i16> @load_local_lo_hi_v2i16_multi_use_hi(ptr addrspace(3) noalias %in) #0 {75; GFX900-LABEL: load_local_lo_hi_v2i16_multi_use_hi:76; GFX900:       ; %bb.0: ; %entry77; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX900-NEXT:    ds_read_u16 v1, v0 offset:1679; GFX900-NEXT:    ds_read_u16 v0, v080; GFX900-NEXT:    s_mov_b32 s4, 0x504010081; GFX900-NEXT:    v_mov_b32_e32 v2, 082; GFX900-NEXT:    s_waitcnt lgkmcnt(1)83; GFX900-NEXT:    ds_write_b16 v2, v184; GFX900-NEXT:    s_waitcnt lgkmcnt(1)85; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s486; GFX900-NEXT:    s_waitcnt lgkmcnt(0)87; GFX900-NEXT:    s_setpc_b64 s[30:31]88;89; GFX906-LABEL: load_local_lo_hi_v2i16_multi_use_hi:90; GFX906:       ; %bb.0: ; %entry91; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)92; GFX906-NEXT:    ds_read_u16 v1, v0 offset:1693; GFX906-NEXT:    ds_read_u16 v0, v094; GFX906-NEXT:    s_mov_b32 s4, 0x504010095; GFX906-NEXT:    v_mov_b32_e32 v2, 096; GFX906-NEXT:    s_waitcnt lgkmcnt(1)97; GFX906-NEXT:    ds_write_b16 v2, v198; GFX906-NEXT:    s_waitcnt lgkmcnt(1)99; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s4100; GFX906-NEXT:    s_waitcnt lgkmcnt(0)101; GFX906-NEXT:    s_setpc_b64 s[30:31]102;103; GFX803-LABEL: load_local_lo_hi_v2i16_multi_use_hi: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 v1, v0 offset:16108; GFX803-NEXT:    ds_read_u16 v0, v0109; GFX803-NEXT:    v_mov_b32_e32 v2, 0110; GFX803-NEXT:    s_waitcnt lgkmcnt(1)111; GFX803-NEXT:    ds_write_b16 v2, v1112; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v1113; GFX803-NEXT:    s_waitcnt lgkmcnt(1)114; GFX803-NEXT:    v_or_b32_e32 v0, v0, v1115; GFX803-NEXT:    s_waitcnt lgkmcnt(0)116; GFX803-NEXT:    s_setpc_b64 s[30:31]117;118; GFX900-FLATSCR-LABEL: load_local_lo_hi_v2i16_multi_use_hi:119; GFX900-FLATSCR:       ; %bb.0: ; %entry120; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)121; GFX900-FLATSCR-NEXT:    ds_read_u16 v1, v0 offset:16122; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0123; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100124; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, 0125; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)126; GFX900-FLATSCR-NEXT:    ds_write_b16 v2, v1127; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)128; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v1, v0, s0129; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)130; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]131entry:132  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 8133  %load.lo = load i16, ptr addrspace(3) %in134  %load.hi = load i16, ptr addrspace(3) %gep135  store i16 %load.hi, ptr addrspace(3) null136  %build0 = insertelement <2 x i16> poison, i16 %load.lo, i32 0137  %build1 = insertelement <2 x i16> %build0, i16 %load.hi, i32 1138  ret <2 x i16> %build1139}140 141define <2 x i16> @load_local_lo_hi_v2i16_multi_use_lohi(ptr addrspace(3) noalias %in, ptr addrspace(3) noalias %out0, ptr addrspace(3) noalias %out1) #0 {142; GFX900-LABEL: load_local_lo_hi_v2i16_multi_use_lohi:143; GFX900:       ; %bb.0: ; %entry144; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)145; GFX900-NEXT:    ds_read_u16 v3, v0146; GFX900-NEXT:    ds_read_u16 v0, v0 offset:16147; GFX900-NEXT:    s_mov_b32 s4, 0x5040100148; GFX900-NEXT:    s_waitcnt lgkmcnt(1)149; GFX900-NEXT:    ds_write_b16 v1, v3150; GFX900-NEXT:    s_waitcnt lgkmcnt(1)151; GFX900-NEXT:    ds_write_b16 v2, v0152; GFX900-NEXT:    v_perm_b32 v0, v0, v3, s4153; GFX900-NEXT:    s_waitcnt lgkmcnt(0)154; GFX900-NEXT:    s_setpc_b64 s[30:31]155;156; GFX906-LABEL: load_local_lo_hi_v2i16_multi_use_lohi:157; GFX906:       ; %bb.0: ; %entry158; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)159; GFX906-NEXT:    ds_read_u16 v3, v0160; GFX906-NEXT:    ds_read_u16 v0, v0 offset:16161; GFX906-NEXT:    s_mov_b32 s4, 0x5040100162; GFX906-NEXT:    s_waitcnt lgkmcnt(1)163; GFX906-NEXT:    ds_write_b16 v1, v3164; GFX906-NEXT:    s_waitcnt lgkmcnt(1)165; GFX906-NEXT:    ds_write_b16 v2, v0166; GFX906-NEXT:    v_perm_b32 v0, v0, v3, s4167; GFX906-NEXT:    s_waitcnt lgkmcnt(0)168; GFX906-NEXT:    s_setpc_b64 s[30:31]169;170; GFX803-LABEL: load_local_lo_hi_v2i16_multi_use_lohi:171; GFX803:       ; %bb.0: ; %entry172; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX803-NEXT:    s_mov_b32 m0, -1174; GFX803-NEXT:    ds_read_u16 v3, v0175; GFX803-NEXT:    ds_read_u16 v0, v0 offset:16176; GFX803-NEXT:    s_waitcnt lgkmcnt(1)177; GFX803-NEXT:    ds_write_b16 v1, v3178; GFX803-NEXT:    s_waitcnt lgkmcnt(1)179; GFX803-NEXT:    ds_write_b16 v2, v0180; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0181; GFX803-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD182; GFX803-NEXT:    s_waitcnt lgkmcnt(0)183; GFX803-NEXT:    s_setpc_b64 s[30:31]184;185; GFX900-FLATSCR-LABEL: load_local_lo_hi_v2i16_multi_use_lohi:186; GFX900-FLATSCR:       ; %bb.0: ; %entry187; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)188; GFX900-FLATSCR-NEXT:    ds_read_u16 v3, v0189; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0 offset:16190; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x5040100191; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)192; GFX900-FLATSCR-NEXT:    ds_write_b16 v1, v3193; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)194; GFX900-FLATSCR-NEXT:    ds_write_b16 v2, v0195; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v0, v3, s0196; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)197; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]198entry:199  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 8200  %load.lo = load i16, ptr addrspace(3) %in201  %load.hi = load i16, ptr addrspace(3) %gep202  store i16 %load.lo, ptr addrspace(3) %out0203  store i16 %load.hi, ptr addrspace(3) %out1204  %build0 = insertelement <2 x i16> poison, i16 %load.lo, i32 0205  %build1 = insertelement <2 x i16> %build0, i16 %load.hi, i32 1206  ret <2 x i16> %build1207}208 209define <2 x i16> @load_local_hi_v2i16_undeflo(ptr addrspace(3) %in) #0 {210; GFX900-LABEL: load_local_hi_v2i16_undeflo:211; GFX900:       ; %bb.0: ; %entry212; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; GFX900-NEXT:    ds_read_u16_d16_hi v0, v0214; GFX900-NEXT:    s_waitcnt lgkmcnt(0)215; GFX900-NEXT:    s_setpc_b64 s[30:31]216;217; GFX906-LABEL: load_local_hi_v2i16_undeflo:218; GFX906:       ; %bb.0: ; %entry219; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)220; GFX906-NEXT:    ds_read_u16 v0, v0221; GFX906-NEXT:    s_waitcnt lgkmcnt(0)222; GFX906-NEXT:    v_lshlrev_b32_e32 v0, 16, v0223; GFX906-NEXT:    s_setpc_b64 s[30:31]224;225; GFX803-LABEL: load_local_hi_v2i16_undeflo:226; GFX803:       ; %bb.0: ; %entry227; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX803-NEXT:    s_mov_b32 m0, -1229; GFX803-NEXT:    ds_read_u16 v0, v0230; GFX803-NEXT:    s_waitcnt lgkmcnt(0)231; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0232; GFX803-NEXT:    s_setpc_b64 s[30:31]233;234; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_undeflo:235; GFX900-FLATSCR:       ; %bb.0: ; %entry236; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)237; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v0, v0238; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)239; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]240entry:241  %load = load i16, ptr addrspace(3) %in242  %build = insertelement <2 x i16> poison, i16 %load, i32 1243  ret <2 x i16> %build244}245 246define <2 x i16> @load_local_hi_v2i16_reglo(ptr addrspace(3) %in, i16 %reg) #0 {247; GFX900-LABEL: load_local_hi_v2i16_reglo:248; GFX900:       ; %bb.0: ; %entry249; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)250; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0251; GFX900-NEXT:    s_waitcnt lgkmcnt(0)252; GFX900-NEXT:    v_mov_b32_e32 v0, v1253; GFX900-NEXT:    s_setpc_b64 s[30:31]254;255; GFX906-LABEL: load_local_hi_v2i16_reglo:256; GFX906:       ; %bb.0: ; %entry257; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)258; GFX906-NEXT:    ds_read_u16 v0, v0259; GFX906-NEXT:    s_mov_b32 s4, 0x5040100260; GFX906-NEXT:    s_waitcnt lgkmcnt(0)261; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4262; GFX906-NEXT:    s_setpc_b64 s[30:31]263;264; GFX803-LABEL: load_local_hi_v2i16_reglo:265; GFX803:       ; %bb.0: ; %entry266; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)267; GFX803-NEXT:    s_mov_b32 m0, -1268; GFX803-NEXT:    ds_read_u16 v0, v0269; GFX803-NEXT:    s_waitcnt lgkmcnt(0)270; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0271; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD272; GFX803-NEXT:    s_setpc_b64 s[30:31]273;274; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_reglo:275; GFX900-FLATSCR:       ; %bb.0: ; %entry276; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)277; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0278; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)279; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v1280; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]281entry:282  %load = load i16, ptr addrspace(3) %in283  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0284  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 1285  ret <2 x i16> %build1286}287 288define void @load_local_hi_v2i16_reglo_vreg(ptr addrspace(3) %in, i16 %reg) #0 {289; GFX900-LABEL: load_local_hi_v2i16_reglo_vreg:290; GFX900:       ; %bb.0: ; %entry291; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)292; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0293; GFX900-NEXT:    s_waitcnt lgkmcnt(0)294; GFX900-NEXT:    global_store_dword v[0:1], v1, off295; GFX900-NEXT:    s_waitcnt vmcnt(0)296; GFX900-NEXT:    s_setpc_b64 s[30:31]297;298; GFX906-LABEL: load_local_hi_v2i16_reglo_vreg:299; GFX906:       ; %bb.0: ; %entry300; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)301; GFX906-NEXT:    ds_read_u16 v0, v0302; GFX906-NEXT:    s_mov_b32 s4, 0x5040100303; GFX906-NEXT:    s_waitcnt lgkmcnt(0)304; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4305; GFX906-NEXT:    global_store_dword v[0:1], v0, off306; GFX906-NEXT:    s_waitcnt vmcnt(0)307; GFX906-NEXT:    s_setpc_b64 s[30:31]308;309; GFX803-LABEL: load_local_hi_v2i16_reglo_vreg:310; GFX803:       ; %bb.0: ; %entry311; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)312; GFX803-NEXT:    s_mov_b32 m0, -1313; GFX803-NEXT:    ds_read_u16 v0, v0314; GFX803-NEXT:    s_waitcnt lgkmcnt(0)315; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0316; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD317; GFX803-NEXT:    flat_store_dword v[0:1], v0318; GFX803-NEXT:    s_waitcnt vmcnt(0)319; GFX803-NEXT:    s_setpc_b64 s[30:31]320;321; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_reglo_vreg:322; GFX900-FLATSCR:       ; %bb.0: ; %entry323; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)324; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0325; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)326; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off327; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)328; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]329entry:330  %load = load i16, ptr addrspace(3) %in331  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0332  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 1333  store <2 x i16> %build1, ptr addrspace(1) poison334  ret void335}336 337define <2 x i16> @load_local_hi_v2i16_zerolo(ptr addrspace(3) %in) #0 {338; GFX900-LABEL: load_local_hi_v2i16_zerolo:339; GFX900:       ; %bb.0: ; %entry340; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)341; GFX900-NEXT:    v_mov_b32_e32 v1, 0342; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0343; GFX900-NEXT:    s_waitcnt lgkmcnt(0)344; GFX900-NEXT:    v_mov_b32_e32 v0, v1345; GFX900-NEXT:    s_setpc_b64 s[30:31]346;347; GFX906-LABEL: load_local_hi_v2i16_zerolo:348; GFX906:       ; %bb.0: ; %entry349; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)350; GFX906-NEXT:    ds_read_u16 v0, v0351; GFX906-NEXT:    s_waitcnt lgkmcnt(0)352; GFX906-NEXT:    v_lshlrev_b32_e32 v0, 16, v0353; GFX906-NEXT:    s_setpc_b64 s[30:31]354;355; GFX803-LABEL: load_local_hi_v2i16_zerolo: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_u16 v0, v0360; GFX803-NEXT:    s_waitcnt lgkmcnt(0)361; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0362; GFX803-NEXT:    s_setpc_b64 s[30:31]363;364; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_zerolo:365; GFX900-FLATSCR:       ; %bb.0: ; %entry366; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v1, 0368; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0369; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)370; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v1371; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]372entry:373  %load = load i16, ptr addrspace(3) %in374  %build = insertelement <2 x i16> zeroinitializer, i16 %load, i32 1375  ret <2 x i16> %build376}377 378; FIXME: Remove m0 initialization379define i32 @load_local_hi_v2i16_zerolo_shift(ptr addrspace(3) %in) #0 {380; GFX900-LABEL: load_local_hi_v2i16_zerolo_shift:381; GFX900:       ; %bb.0: ; %entry382; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)383; GFX900-NEXT:    ds_read_u16 v0, v0384; GFX900-NEXT:    s_waitcnt lgkmcnt(0)385; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0386; GFX900-NEXT:    s_setpc_b64 s[30:31]387;388; GFX906-LABEL: load_local_hi_v2i16_zerolo_shift:389; GFX906:       ; %bb.0: ; %entry390; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)391; GFX906-NEXT:    ds_read_u16 v0, v0392; GFX906-NEXT:    s_waitcnt lgkmcnt(0)393; GFX906-NEXT:    v_lshlrev_b32_e32 v0, 16, v0394; GFX906-NEXT:    s_setpc_b64 s[30:31]395;396; GFX803-LABEL: load_local_hi_v2i16_zerolo_shift:397; GFX803:       ; %bb.0: ; %entry398; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)399; GFX803-NEXT:    s_mov_b32 m0, -1400; GFX803-NEXT:    ds_read_u16 v0, v0401; GFX803-NEXT:    s_waitcnt lgkmcnt(0)402; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0403; GFX803-NEXT:    s_setpc_b64 s[30:31]404;405; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_zerolo_shift:406; GFX900-FLATSCR:       ; %bb.0: ; %entry407; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)408; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v0409; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)410; GFX900-FLATSCR-NEXT:    v_lshlrev_b32_e32 v0, 16, v0411; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]412entry:413  %load = load i16, ptr addrspace(3) %in414  %zext = zext i16 %load to i32415  %shift = shl i32 %zext, 16416  ret i32 %shift417}418 419define void @load_local_hi_v2f16_reglo_vreg(ptr addrspace(3) %in, half %reg) #0 {420; GFX900-LABEL: load_local_hi_v2f16_reglo_vreg:421; GFX900:       ; %bb.0: ; %entry422; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0424; GFX900-NEXT:    s_waitcnt lgkmcnt(0)425; GFX900-NEXT:    global_store_dword v[0:1], v1, off426; GFX900-NEXT:    s_waitcnt vmcnt(0)427; GFX900-NEXT:    s_setpc_b64 s[30:31]428;429; GFX906-LABEL: load_local_hi_v2f16_reglo_vreg:430; GFX906:       ; %bb.0: ; %entry431; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX906-NEXT:    ds_read_u16 v0, v0433; GFX906-NEXT:    s_mov_b32 s4, 0x5040100434; GFX906-NEXT:    s_waitcnt lgkmcnt(0)435; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4436; GFX906-NEXT:    global_store_dword v[0:1], v0, off437; GFX906-NEXT:    s_waitcnt vmcnt(0)438; GFX906-NEXT:    s_setpc_b64 s[30:31]439;440; GFX803-LABEL: load_local_hi_v2f16_reglo_vreg:441; GFX803:       ; %bb.0: ; %entry442; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)443; GFX803-NEXT:    s_mov_b32 m0, -1444; GFX803-NEXT:    ds_read_u16 v0, v0445; GFX803-NEXT:    s_waitcnt lgkmcnt(0)446; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0447; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD448; GFX803-NEXT:    flat_store_dword v[0:1], v0449; GFX803-NEXT:    s_waitcnt vmcnt(0)450; GFX803-NEXT:    s_setpc_b64 s[30:31]451;452; GFX900-FLATSCR-LABEL: load_local_hi_v2f16_reglo_vreg:453; GFX900-FLATSCR:       ; %bb.0: ; %entry454; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)455; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0456; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)457; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off458; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)459; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]460entry:461  %load = load half, ptr addrspace(3) %in462  %build0 = insertelement <2 x half> poison, half %reg, i32 0463  %build1 = insertelement <2 x half> %build0, half %load, i32 1464  store <2 x half> %build1, ptr addrspace(1) poison465  ret void466}467 468define void @load_local_hi_v2i16_reglo_vreg_zexti8(ptr addrspace(3) %in, i16 %reg) #0 {469; GFX900-LABEL: load_local_hi_v2i16_reglo_vreg_zexti8:470; GFX900:       ; %bb.0: ; %entry471; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)472; GFX900-NEXT:    ds_read_u8_d16_hi v1, v0473; GFX900-NEXT:    s_waitcnt lgkmcnt(0)474; GFX900-NEXT:    global_store_dword v[0:1], v1, off475; GFX900-NEXT:    s_waitcnt vmcnt(0)476; GFX900-NEXT:    s_setpc_b64 s[30:31]477;478; GFX906-LABEL: load_local_hi_v2i16_reglo_vreg_zexti8:479; GFX906:       ; %bb.0: ; %entry480; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX906-NEXT:    ds_read_u8 v0, v0482; GFX906-NEXT:    s_mov_b32 s4, 0x5040100483; GFX906-NEXT:    s_waitcnt lgkmcnt(0)484; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4485; GFX906-NEXT:    global_store_dword v[0:1], v0, off486; GFX906-NEXT:    s_waitcnt vmcnt(0)487; GFX906-NEXT:    s_setpc_b64 s[30:31]488;489; GFX803-LABEL: load_local_hi_v2i16_reglo_vreg_zexti8:490; GFX803:       ; %bb.0: ; %entry491; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)492; GFX803-NEXT:    s_mov_b32 m0, -1493; GFX803-NEXT:    ds_read_u8 v0, v0494; GFX803-NEXT:    s_waitcnt lgkmcnt(0)495; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0496; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD497; GFX803-NEXT:    flat_store_dword v[0:1], v0498; GFX803-NEXT:    s_waitcnt vmcnt(0)499; GFX803-NEXT:    s_setpc_b64 s[30:31]500;501; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_reglo_vreg_zexti8:502; GFX900-FLATSCR:       ; %bb.0: ; %entry503; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)504; GFX900-FLATSCR-NEXT:    ds_read_u8_d16_hi v1, v0505; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)506; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off507; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)508; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]509entry:510  %load = load i8, ptr addrspace(3) %in511  %ext = zext i8 %load to i16512  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0513  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 1514  store <2 x i16> %build1, ptr addrspace(1) poison515  ret void516}517 518define void @load_local_hi_v2i16_reglo_vreg_sexti8(ptr addrspace(3) %in, i16 %reg) #0 {519; GFX900-LABEL: load_local_hi_v2i16_reglo_vreg_sexti8:520; GFX900:       ; %bb.0: ; %entry521; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)522; GFX900-NEXT:    ds_read_i8_d16_hi v1, v0523; GFX900-NEXT:    s_waitcnt lgkmcnt(0)524; GFX900-NEXT:    global_store_dword v[0:1], v1, off525; GFX900-NEXT:    s_waitcnt vmcnt(0)526; GFX900-NEXT:    s_setpc_b64 s[30:31]527;528; GFX906-LABEL: load_local_hi_v2i16_reglo_vreg_sexti8:529; GFX906:       ; %bb.0: ; %entry530; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)531; GFX906-NEXT:    ds_read_i8 v0, v0532; GFX906-NEXT:    s_mov_b32 s4, 0x5040100533; GFX906-NEXT:    s_waitcnt lgkmcnt(0)534; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4535; GFX906-NEXT:    global_store_dword v[0:1], v0, off536; GFX906-NEXT:    s_waitcnt vmcnt(0)537; GFX906-NEXT:    s_setpc_b64 s[30:31]538;539; GFX803-LABEL: load_local_hi_v2i16_reglo_vreg_sexti8:540; GFX803:       ; %bb.0: ; %entry541; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)542; GFX803-NEXT:    s_mov_b32 m0, -1543; GFX803-NEXT:    ds_read_i8 v0, v0544; GFX803-NEXT:    s_waitcnt lgkmcnt(0)545; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0546; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD547; GFX803-NEXT:    flat_store_dword v[0:1], v0548; GFX803-NEXT:    s_waitcnt vmcnt(0)549; GFX803-NEXT:    s_setpc_b64 s[30:31]550;551; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_reglo_vreg_sexti8:552; GFX900-FLATSCR:       ; %bb.0: ; %entry553; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)554; GFX900-FLATSCR-NEXT:    ds_read_i8_d16_hi v1, v0555; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)556; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off557; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)558; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]559entry:560  %load = load i8, ptr addrspace(3) %in561  %ext = sext i8 %load to i16562  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0563  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 1564  store <2 x i16> %build1, ptr addrspace(1) poison565  ret void566}567 568define void @load_local_hi_v2f16_reglo_vreg_zexti8(ptr addrspace(3) %in, half %reg) #0 {569; GFX900-LABEL: load_local_hi_v2f16_reglo_vreg_zexti8:570; GFX900:       ; %bb.0: ; %entry571; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)572; GFX900-NEXT:    ds_read_u8_d16_hi v1, v0573; GFX900-NEXT:    s_waitcnt lgkmcnt(0)574; GFX900-NEXT:    global_store_dword v[0:1], v1, off575; GFX900-NEXT:    s_waitcnt vmcnt(0)576; GFX900-NEXT:    s_setpc_b64 s[30:31]577;578; GFX906-LABEL: load_local_hi_v2f16_reglo_vreg_zexti8:579; GFX906:       ; %bb.0: ; %entry580; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)581; GFX906-NEXT:    ds_read_u8 v0, v0582; GFX906-NEXT:    s_mov_b32 s4, 0x5040100583; GFX906-NEXT:    s_waitcnt lgkmcnt(0)584; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4585; GFX906-NEXT:    global_store_dword v[0:1], v0, off586; GFX906-NEXT:    s_waitcnt vmcnt(0)587; GFX906-NEXT:    s_setpc_b64 s[30:31]588;589; GFX803-LABEL: load_local_hi_v2f16_reglo_vreg_zexti8:590; GFX803:       ; %bb.0: ; %entry591; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)592; GFX803-NEXT:    s_mov_b32 m0, -1593; GFX803-NEXT:    ds_read_u8 v0, v0594; GFX803-NEXT:    s_waitcnt lgkmcnt(0)595; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0596; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD597; GFX803-NEXT:    flat_store_dword v[0:1], v0598; GFX803-NEXT:    s_waitcnt vmcnt(0)599; GFX803-NEXT:    s_setpc_b64 s[30:31]600;601; GFX900-FLATSCR-LABEL: load_local_hi_v2f16_reglo_vreg_zexti8:602; GFX900-FLATSCR:       ; %bb.0: ; %entry603; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)604; GFX900-FLATSCR-NEXT:    ds_read_u8_d16_hi v1, v0605; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)606; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off607; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)608; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]609entry:610  %load = load i8, ptr addrspace(3) %in611  %ext = zext i8 %load to i16612  %bitcast = bitcast i16 %ext to half613 614  %build0 = insertelement <2 x half> poison, half %reg, i32 0615  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 1616  store <2 x half> %build1, ptr addrspace(1) poison617  ret void618}619 620define void @load_local_hi_v2f16_reglo_vreg_sexti8(ptr addrspace(3) %in, half %reg) #0 {621; GFX900-LABEL: load_local_hi_v2f16_reglo_vreg_sexti8:622; GFX900:       ; %bb.0: ; %entry623; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)624; GFX900-NEXT:    ds_read_i8_d16_hi v1, v0625; GFX900-NEXT:    s_waitcnt lgkmcnt(0)626; GFX900-NEXT:    global_store_dword v[0:1], v1, off627; GFX900-NEXT:    s_waitcnt vmcnt(0)628; GFX900-NEXT:    s_setpc_b64 s[30:31]629;630; GFX906-LABEL: load_local_hi_v2f16_reglo_vreg_sexti8:631; GFX906:       ; %bb.0: ; %entry632; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)633; GFX906-NEXT:    ds_read_i8 v0, v0634; GFX906-NEXT:    s_mov_b32 s4, 0x5040100635; GFX906-NEXT:    s_waitcnt lgkmcnt(0)636; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s4637; GFX906-NEXT:    global_store_dword v[0:1], v0, off638; GFX906-NEXT:    s_waitcnt vmcnt(0)639; GFX906-NEXT:    s_setpc_b64 s[30:31]640;641; GFX803-LABEL: load_local_hi_v2f16_reglo_vreg_sexti8:642; GFX803:       ; %bb.0: ; %entry643; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)644; GFX803-NEXT:    s_mov_b32 m0, -1645; GFX803-NEXT:    ds_read_i8 v0, v0646; GFX803-NEXT:    s_waitcnt lgkmcnt(0)647; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0648; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD649; GFX803-NEXT:    flat_store_dword v[0:1], v0650; GFX803-NEXT:    s_waitcnt vmcnt(0)651; GFX803-NEXT:    s_setpc_b64 s[30:31]652;653; GFX900-FLATSCR-LABEL: load_local_hi_v2f16_reglo_vreg_sexti8:654; GFX900-FLATSCR:       ; %bb.0: ; %entry655; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)656; GFX900-FLATSCR-NEXT:    ds_read_i8_d16_hi v1, v0657; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)658; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off659; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)660; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]661entry:662  %load = load i8, ptr addrspace(3) %in663  %ext = sext i8 %load to i16664  %bitcast = bitcast i16 %ext to half665 666  %build0 = insertelement <2 x half> poison, half %reg, i32 0667  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 1668  store <2 x half> %build1, ptr addrspace(1) poison669  ret void670}671 672define void @load_global_hi_v2i16_reglo_vreg(ptr addrspace(1) %in, i16 %reg) #0 {673; GFX900-LABEL: load_global_hi_v2i16_reglo_vreg:674; GFX900:       ; %bb.0: ; %entry675; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)676; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-4094677; GFX900-NEXT:    s_waitcnt vmcnt(0)678; GFX900-NEXT:    global_store_dword v[0:1], v2, off679; GFX900-NEXT:    s_waitcnt vmcnt(0)680; GFX900-NEXT:    s_setpc_b64 s[30:31]681;682; GFX906-LABEL: load_global_hi_v2i16_reglo_vreg:683; GFX906:       ; %bb.0: ; %entry684; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)685; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-4094686; GFX906-NEXT:    s_mov_b32 s4, 0x5040100687; GFX906-NEXT:    s_waitcnt vmcnt(0)688; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4689; GFX906-NEXT:    global_store_dword v[0:1], v0, off690; GFX906-NEXT:    s_waitcnt vmcnt(0)691; GFX906-NEXT:    s_setpc_b64 s[30:31]692;693; GFX803-LABEL: load_global_hi_v2i16_reglo_vreg:694; GFX803:       ; %bb.0: ; %entry695; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)696; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v0697; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc698; GFX803-NEXT:    flat_load_ushort v0, v[0:1]699; GFX803-NEXT:    s_waitcnt vmcnt(0)700; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0701; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD702; GFX803-NEXT:    flat_store_dword v[0:1], v0703; GFX803-NEXT:    s_waitcnt vmcnt(0)704; GFX803-NEXT:    s_setpc_b64 s[30:31]705;706; GFX900-FLATSCR-LABEL: load_global_hi_v2i16_reglo_vreg:707; GFX900-FLATSCR:       ; %bb.0: ; %entry708; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-4094710; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)711; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off712; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)713; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]714entry:715  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 -2047716  %load = load i16, ptr addrspace(1) %gep717  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0718  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 1719  store <2 x i16> %build1, ptr addrspace(1) poison720  ret void721}722 723define void @load_global_hi_v2f16_reglo_vreg(ptr addrspace(1) %in, half %reg) #0 {724; GFX900-LABEL: load_global_hi_v2f16_reglo_vreg:725; GFX900:       ; %bb.0: ; %entry726; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)727; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-4094728; GFX900-NEXT:    s_waitcnt vmcnt(0)729; GFX900-NEXT:    global_store_dword v[0:1], v2, off730; GFX900-NEXT:    s_waitcnt vmcnt(0)731; GFX900-NEXT:    s_setpc_b64 s[30:31]732;733; GFX906-LABEL: load_global_hi_v2f16_reglo_vreg:734; GFX906:       ; %bb.0: ; %entry735; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)736; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-4094737; GFX906-NEXT:    s_mov_b32 s4, 0x5040100738; GFX906-NEXT:    s_waitcnt vmcnt(0)739; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4740; GFX906-NEXT:    global_store_dword v[0:1], v0, off741; GFX906-NEXT:    s_waitcnt vmcnt(0)742; GFX906-NEXT:    s_setpc_b64 s[30:31]743;744; GFX803-LABEL: load_global_hi_v2f16_reglo_vreg:745; GFX803:       ; %bb.0: ; %entry746; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)747; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v0748; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc749; GFX803-NEXT:    flat_load_ushort v0, v[0:1]750; GFX803-NEXT:    s_waitcnt vmcnt(0)751; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0752; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD753; GFX803-NEXT:    flat_store_dword v[0:1], v0754; GFX803-NEXT:    s_waitcnt vmcnt(0)755; GFX803-NEXT:    s_setpc_b64 s[30:31]756;757; GFX900-FLATSCR-LABEL: load_global_hi_v2f16_reglo_vreg:758; GFX900-FLATSCR:       ; %bb.0: ; %entry759; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)760; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-4094761; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)762; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off763; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)764; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]765entry:766  %gep = getelementptr inbounds half, ptr addrspace(1) %in, i64 -2047767  %load = load half, ptr addrspace(1) %gep768  %build0 = insertelement <2 x half> poison, half %reg, i32 0769  %build1 = insertelement <2 x half> %build0, half %load, i32 1770  store <2 x half> %build1, ptr addrspace(1) poison771  ret void772}773 774define void @load_global_hi_v2i16_reglo_vreg_zexti8(ptr addrspace(1) %in, i16 %reg) #0 {775; GFX900-LABEL: load_global_hi_v2i16_reglo_vreg_zexti8:776; GFX900:       ; %bb.0: ; %entry777; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)778; GFX900-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-4095779; GFX900-NEXT:    s_waitcnt vmcnt(0)780; GFX900-NEXT:    global_store_dword v[0:1], v2, off781; GFX900-NEXT:    s_waitcnt vmcnt(0)782; GFX900-NEXT:    s_setpc_b64 s[30:31]783;784; GFX906-LABEL: load_global_hi_v2i16_reglo_vreg_zexti8:785; GFX906:       ; %bb.0: ; %entry786; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)787; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-4095788; GFX906-NEXT:    s_mov_b32 s4, 0x5040100789; GFX906-NEXT:    s_waitcnt vmcnt(0)790; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4791; GFX906-NEXT:    global_store_dword v[0:1], v0, off792; GFX906-NEXT:    s_waitcnt vmcnt(0)793; GFX906-NEXT:    s_setpc_b64 s[30:31]794;795; GFX803-LABEL: load_global_hi_v2i16_reglo_vreg_zexti8:796; GFX803:       ; %bb.0: ; %entry797; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)798; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0799; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc800; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]801; GFX803-NEXT:    s_waitcnt vmcnt(0)802; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0803; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD804; GFX803-NEXT:    flat_store_dword v[0:1], v0805; GFX803-NEXT:    s_waitcnt vmcnt(0)806; GFX803-NEXT:    s_setpc_b64 s[30:31]807;808; GFX900-FLATSCR-LABEL: load_global_hi_v2i16_reglo_vreg_zexti8:809; GFX900-FLATSCR:       ; %bb.0: ; %entry810; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)811; GFX900-FLATSCR-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-4095812; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)813; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off814; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)815; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]816entry:817  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095818  %load = load i8, ptr addrspace(1) %gep819  %ext = zext i8 %load to i16820  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0821  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 1822  store <2 x i16> %build1, ptr addrspace(1) poison823  ret void824}825 826define void @load_global_hi_v2i16_reglo_vreg_sexti8(ptr addrspace(1) %in, i16 %reg) #0 {827; GFX900-LABEL: load_global_hi_v2i16_reglo_vreg_sexti8:828; GFX900:       ; %bb.0: ; %entry829; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)830; GFX900-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-4095831; GFX900-NEXT:    s_waitcnt vmcnt(0)832; GFX900-NEXT:    global_store_dword v[0:1], v2, off833; GFX900-NEXT:    s_waitcnt vmcnt(0)834; GFX900-NEXT:    s_setpc_b64 s[30:31]835;836; GFX906-LABEL: load_global_hi_v2i16_reglo_vreg_sexti8:837; GFX906:       ; %bb.0: ; %entry838; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)839; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-4095840; GFX906-NEXT:    s_mov_b32 s4, 0x5040100841; GFX906-NEXT:    s_waitcnt vmcnt(0)842; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4843; GFX906-NEXT:    global_store_dword v[0:1], v0, off844; GFX906-NEXT:    s_waitcnt vmcnt(0)845; GFX906-NEXT:    s_setpc_b64 s[30:31]846;847; GFX803-LABEL: load_global_hi_v2i16_reglo_vreg_sexti8:848; GFX803:       ; %bb.0: ; %entry849; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0851; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc852; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]853; GFX803-NEXT:    s_waitcnt vmcnt(0)854; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0855; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD856; GFX803-NEXT:    flat_store_dword v[0:1], v0857; GFX803-NEXT:    s_waitcnt vmcnt(0)858; GFX803-NEXT:    s_setpc_b64 s[30:31]859;860; GFX900-FLATSCR-LABEL: load_global_hi_v2i16_reglo_vreg_sexti8:861; GFX900-FLATSCR:       ; %bb.0: ; %entry862; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)863; GFX900-FLATSCR-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-4095864; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)865; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off866; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)867; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]868entry:869  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095870  %load = load i8, ptr addrspace(1) %gep871  %ext = sext i8 %load to i16872  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 0873  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 1874  store <2 x i16> %build1, ptr addrspace(1) poison875  ret void876}877 878define void @load_global_hi_v2f16_reglo_vreg_sexti8(ptr addrspace(1) %in, half %reg) #0 {879; GFX900-LABEL: load_global_hi_v2f16_reglo_vreg_sexti8:880; GFX900:       ; %bb.0: ; %entry881; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)882; GFX900-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-4095883; GFX900-NEXT:    s_waitcnt vmcnt(0)884; GFX900-NEXT:    global_store_dword v[0:1], v2, off885; GFX900-NEXT:    s_waitcnt vmcnt(0)886; GFX900-NEXT:    s_setpc_b64 s[30:31]887;888; GFX906-LABEL: load_global_hi_v2f16_reglo_vreg_sexti8:889; GFX906:       ; %bb.0: ; %entry890; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-4095892; GFX906-NEXT:    s_mov_b32 s4, 0x5040100893; GFX906-NEXT:    s_waitcnt vmcnt(0)894; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4895; GFX906-NEXT:    global_store_dword v[0:1], v0, off896; GFX906-NEXT:    s_waitcnt vmcnt(0)897; GFX906-NEXT:    s_setpc_b64 s[30:31]898;899; GFX803-LABEL: load_global_hi_v2f16_reglo_vreg_sexti8:900; GFX803:       ; %bb.0: ; %entry901; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)902; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0903; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc904; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]905; GFX803-NEXT:    s_waitcnt vmcnt(0)906; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0907; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD908; GFX803-NEXT:    flat_store_dword v[0:1], v0909; GFX803-NEXT:    s_waitcnt vmcnt(0)910; GFX803-NEXT:    s_setpc_b64 s[30:31]911;912; GFX900-FLATSCR-LABEL: load_global_hi_v2f16_reglo_vreg_sexti8:913; GFX900-FLATSCR:       ; %bb.0: ; %entry914; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GFX900-FLATSCR-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-4095916; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)917; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off918; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)919; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]920entry:921  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095922  %load = load i8, ptr addrspace(1) %gep923  %ext = sext i8 %load to i16924  %bitcast = bitcast i16 %ext to half925  %build0 = insertelement <2 x half> poison, half %reg, i32 0926  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 1927  store <2 x half> %build1, ptr addrspace(1) poison928  ret void929}930 931define void @load_global_hi_v2f16_reglo_vreg_zexti8(ptr addrspace(1) %in, half %reg) #0 {932; GFX900-LABEL: load_global_hi_v2f16_reglo_vreg_zexti8:933; GFX900:       ; %bb.0: ; %entry934; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)935; GFX900-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-4095936; GFX900-NEXT:    s_waitcnt vmcnt(0)937; GFX900-NEXT:    global_store_dword v[0:1], v2, off938; GFX900-NEXT:    s_waitcnt vmcnt(0)939; GFX900-NEXT:    s_setpc_b64 s[30:31]940;941; GFX906-LABEL: load_global_hi_v2f16_reglo_vreg_zexti8:942; GFX906:       ; %bb.0: ; %entry943; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)944; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-4095945; GFX906-NEXT:    s_mov_b32 s4, 0x5040100946; GFX906-NEXT:    s_waitcnt vmcnt(0)947; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s4948; GFX906-NEXT:    global_store_dword v[0:1], v0, off949; GFX906-NEXT:    s_waitcnt vmcnt(0)950; GFX906-NEXT:    s_setpc_b64 s[30:31]951;952; GFX803-LABEL: load_global_hi_v2f16_reglo_vreg_zexti8:953; GFX803:       ; %bb.0: ; %entry954; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)955; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v0956; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc957; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]958; GFX803-NEXT:    s_waitcnt vmcnt(0)959; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v0960; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD961; GFX803-NEXT:    flat_store_dword v[0:1], v0962; GFX803-NEXT:    s_waitcnt vmcnt(0)963; GFX803-NEXT:    s_setpc_b64 s[30:31]964;965; GFX900-FLATSCR-LABEL: load_global_hi_v2f16_reglo_vreg_zexti8:966; GFX900-FLATSCR:       ; %bb.0: ; %entry967; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)968; GFX900-FLATSCR-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-4095969; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)970; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off971; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)972; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]973entry:974  %gep = getelementptr inbounds i8, ptr addrspace(1) %in, i64 -4095975  %load = load i8, ptr addrspace(1) %gep976  %ext = zext i8 %load to i16977  %bitcast = bitcast i16 %ext to half978  %build0 = insertelement <2 x half> poison, half %reg, i32 0979  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 1980  store <2 x half> %build1, ptr addrspace(1) poison981  ret void982}983 984define void @load_flat_hi_v2i16_reglo_vreg(ptr %in, i16 %reg) #0 {985; GFX900-LABEL: load_flat_hi_v2i16_reglo_vreg:986; GFX900:       ; %bb.0: ; %entry987; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)988; GFX900-NEXT:    flat_load_short_d16_hi v2, v[0:1]989; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(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_flat_hi_v2i16_reglo_vreg:995; GFX906:       ; %bb.0: ; %entry996; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX906-NEXT:    flat_load_ushort v0, v[0:1]998; GFX906-NEXT:    s_mov_b32 s4, 0x5040100999; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1000; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41001; 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_flat_hi_v2i16_reglo_vreg:1006; GFX803:       ; %bb.0: ; %entry1007; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1008; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1009; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1010; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01011; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1012; GFX803-NEXT:    flat_store_dword v[0:1], v01013; GFX803-NEXT:    s_waitcnt vmcnt(0)1014; GFX803-NEXT:    s_setpc_b64 s[30:31]1015;1016; GFX900-FLATSCR-LABEL: load_flat_hi_v2i16_reglo_vreg:1017; GFX900-FLATSCR:       ; %bb.0: ; %entry1018; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX900-FLATSCR-NEXT:    flat_load_short_d16_hi v2, v[0:1]1020; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1021; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1022; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1023; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1024entry:1025  %load = load i16, ptr %in1026  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01027  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 11028  store <2 x i16> %build1, ptr addrspace(1) poison1029  ret void1030}1031 1032define void @load_flat_hi_v2f16_reglo_vreg(ptr %in, half %reg) #0 {1033; GFX900-LABEL: load_flat_hi_v2f16_reglo_vreg:1034; GFX900:       ; %bb.0: ; %entry1035; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1036; GFX900-NEXT:    flat_load_short_d16_hi v2, v[0:1]1037; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1038; GFX900-NEXT:    global_store_dword v[0:1], v2, off1039; GFX900-NEXT:    s_waitcnt vmcnt(0)1040; GFX900-NEXT:    s_setpc_b64 s[30:31]1041;1042; GFX906-LABEL: load_flat_hi_v2f16_reglo_vreg:1043; GFX906:       ; %bb.0: ; %entry1044; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1045; GFX906-NEXT:    flat_load_ushort v0, v[0:1]1046; GFX906-NEXT:    s_mov_b32 s4, 0x50401001047; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1048; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41049; GFX906-NEXT:    global_store_dword v[0:1], v0, off1050; GFX906-NEXT:    s_waitcnt vmcnt(0)1051; GFX906-NEXT:    s_setpc_b64 s[30:31]1052;1053; GFX803-LABEL: load_flat_hi_v2f16_reglo_vreg:1054; GFX803:       ; %bb.0: ; %entry1055; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1056; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1057; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1058; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01059; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1060; GFX803-NEXT:    flat_store_dword v[0:1], v01061; GFX803-NEXT:    s_waitcnt vmcnt(0)1062; GFX803-NEXT:    s_setpc_b64 s[30:31]1063;1064; GFX900-FLATSCR-LABEL: load_flat_hi_v2f16_reglo_vreg:1065; GFX900-FLATSCR:       ; %bb.0: ; %entry1066; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX900-FLATSCR-NEXT:    flat_load_short_d16_hi v2, v[0:1]1068; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1069; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1070; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1071; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1072entry:1073  %load = load half, ptr %in1074  %build0 = insertelement <2 x half> poison, half %reg, i32 01075  %build1 = insertelement <2 x half> %build0, half %load, i32 11076  store <2 x half> %build1, ptr addrspace(1) poison1077  ret void1078}1079 1080define void @load_flat_hi_v2i16_reglo_vreg_zexti8(ptr %in, i16 %reg) #0 {1081; GFX900-LABEL: load_flat_hi_v2i16_reglo_vreg_zexti8:1082; GFX900:       ; %bb.0: ; %entry1083; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX900-NEXT:    flat_load_ubyte_d16_hi v2, v[0:1]1085; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1086; GFX900-NEXT:    global_store_dword v[0:1], v2, off1087; GFX900-NEXT:    s_waitcnt vmcnt(0)1088; GFX900-NEXT:    s_setpc_b64 s[30:31]1089;1090; GFX906-LABEL: load_flat_hi_v2i16_reglo_vreg_zexti8:1091; GFX906:       ; %bb.0: ; %entry1092; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1093; GFX906-NEXT:    flat_load_ubyte v0, v[0:1]1094; GFX906-NEXT:    s_mov_b32 s4, 0x50401001095; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1096; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41097; GFX906-NEXT:    global_store_dword v[0:1], v0, off1098; GFX906-NEXT:    s_waitcnt vmcnt(0)1099; GFX906-NEXT:    s_setpc_b64 s[30:31]1100;1101; GFX803-LABEL: load_flat_hi_v2i16_reglo_vreg_zexti8:1102; GFX803:       ; %bb.0: ; %entry1103; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1104; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]1105; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1106; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01107; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1108; GFX803-NEXT:    flat_store_dword v[0:1], v01109; GFX803-NEXT:    s_waitcnt vmcnt(0)1110; GFX803-NEXT:    s_setpc_b64 s[30:31]1111;1112; GFX900-FLATSCR-LABEL: load_flat_hi_v2i16_reglo_vreg_zexti8:1113; GFX900-FLATSCR:       ; %bb.0: ; %entry1114; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX900-FLATSCR-NEXT:    flat_load_ubyte_d16_hi v2, v[0:1]1116; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1117; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1118; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1119; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1120entry:1121  %load = load i8, ptr %in1122  %ext = zext i8 %load to i161123  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01124  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11125  store <2 x i16> %build1, ptr addrspace(1) poison1126  ret void1127}1128 1129define void @load_flat_hi_v2i16_reglo_vreg_sexti8(ptr %in, i16 %reg) #0 {1130; GFX900-LABEL: load_flat_hi_v2i16_reglo_vreg_sexti8:1131; GFX900:       ; %bb.0: ; %entry1132; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1133; GFX900-NEXT:    flat_load_sbyte_d16_hi v2, v[0:1]1134; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1135; GFX900-NEXT:    global_store_dword v[0:1], v2, off1136; GFX900-NEXT:    s_waitcnt vmcnt(0)1137; GFX900-NEXT:    s_setpc_b64 s[30:31]1138;1139; GFX906-LABEL: load_flat_hi_v2i16_reglo_vreg_sexti8:1140; GFX906:       ; %bb.0: ; %entry1141; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1142; GFX906-NEXT:    flat_load_sbyte v0, v[0:1]1143; GFX906-NEXT:    s_mov_b32 s4, 0x50401001144; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1145; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41146; GFX906-NEXT:    global_store_dword v[0:1], v0, off1147; GFX906-NEXT:    s_waitcnt vmcnt(0)1148; GFX906-NEXT:    s_setpc_b64 s[30:31]1149;1150; GFX803-LABEL: load_flat_hi_v2i16_reglo_vreg_sexti8:1151; GFX803:       ; %bb.0: ; %entry1152; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1153; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1154; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1155; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01156; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1157; GFX803-NEXT:    flat_store_dword v[0:1], v01158; GFX803-NEXT:    s_waitcnt vmcnt(0)1159; GFX803-NEXT:    s_setpc_b64 s[30:31]1160;1161; GFX900-FLATSCR-LABEL: load_flat_hi_v2i16_reglo_vreg_sexti8:1162; GFX900-FLATSCR:       ; %bb.0: ; %entry1163; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1164; GFX900-FLATSCR-NEXT:    flat_load_sbyte_d16_hi v2, v[0:1]1165; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1166; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1167; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1168; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1169entry:1170  %load = load i8, ptr %in1171  %ext = sext i8 %load to i161172  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01173  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11174  store <2 x i16> %build1, ptr addrspace(1) poison1175  ret void1176}1177 1178define void @load_flat_hi_v2f16_reglo_vreg_zexti8(ptr %in, half %reg) #0 {1179; GFX900-LABEL: load_flat_hi_v2f16_reglo_vreg_zexti8:1180; GFX900:       ; %bb.0: ; %entry1181; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1182; GFX900-NEXT:    flat_load_ubyte_d16_hi v2, v[0:1]1183; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1184; GFX900-NEXT:    global_store_dword v[0:1], v2, off1185; GFX900-NEXT:    s_waitcnt vmcnt(0)1186; GFX900-NEXT:    s_setpc_b64 s[30:31]1187;1188; GFX906-LABEL: load_flat_hi_v2f16_reglo_vreg_zexti8:1189; GFX906:       ; %bb.0: ; %entry1190; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; GFX906-NEXT:    flat_load_ubyte v0, v[0:1]1192; GFX906-NEXT:    s_mov_b32 s4, 0x50401001193; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1194; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41195; GFX906-NEXT:    global_store_dword v[0:1], v0, off1196; GFX906-NEXT:    s_waitcnt vmcnt(0)1197; GFX906-NEXT:    s_setpc_b64 s[30:31]1198;1199; GFX803-LABEL: load_flat_hi_v2f16_reglo_vreg_zexti8:1200; GFX803:       ; %bb.0: ; %entry1201; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1202; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]1203; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1204; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01205; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1206; GFX803-NEXT:    flat_store_dword v[0:1], v01207; GFX803-NEXT:    s_waitcnt vmcnt(0)1208; GFX803-NEXT:    s_setpc_b64 s[30:31]1209;1210; GFX900-FLATSCR-LABEL: load_flat_hi_v2f16_reglo_vreg_zexti8:1211; GFX900-FLATSCR:       ; %bb.0: ; %entry1212; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1213; GFX900-FLATSCR-NEXT:    flat_load_ubyte_d16_hi v2, v[0:1]1214; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1215; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1216; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1217; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1218entry:1219  %load = load i8, ptr %in1220  %ext = zext i8 %load to i161221  %bitcast = bitcast i16 %ext to half1222  %build0 = insertelement <2 x half> poison, half %reg, i32 01223  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 11224  store <2 x half> %build1, ptr addrspace(1) poison1225  ret void1226}1227 1228define void @load_flat_hi_v2f16_reglo_vreg_sexti8(ptr %in, half %reg) #0 {1229; GFX900-LABEL: load_flat_hi_v2f16_reglo_vreg_sexti8:1230; GFX900:       ; %bb.0: ; %entry1231; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1232; GFX900-NEXT:    flat_load_sbyte_d16_hi v2, v[0:1]1233; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1234; GFX900-NEXT:    global_store_dword v[0:1], v2, off1235; GFX900-NEXT:    s_waitcnt vmcnt(0)1236; GFX900-NEXT:    s_setpc_b64 s[30:31]1237;1238; GFX906-LABEL: load_flat_hi_v2f16_reglo_vreg_sexti8:1239; GFX906:       ; %bb.0: ; %entry1240; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1241; GFX906-NEXT:    flat_load_sbyte v0, v[0:1]1242; GFX906-NEXT:    s_mov_b32 s4, 0x50401001243; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1244; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41245; GFX906-NEXT:    global_store_dword v[0:1], v0, off1246; GFX906-NEXT:    s_waitcnt vmcnt(0)1247; GFX906-NEXT:    s_setpc_b64 s[30:31]1248;1249; GFX803-LABEL: load_flat_hi_v2f16_reglo_vreg_sexti8:1250; GFX803:       ; %bb.0: ; %entry1251; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1253; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1254; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01255; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1256; GFX803-NEXT:    flat_store_dword v[0:1], v01257; GFX803-NEXT:    s_waitcnt vmcnt(0)1258; GFX803-NEXT:    s_setpc_b64 s[30:31]1259;1260; GFX900-FLATSCR-LABEL: load_flat_hi_v2f16_reglo_vreg_sexti8:1261; GFX900-FLATSCR:       ; %bb.0: ; %entry1262; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1263; GFX900-FLATSCR-NEXT:    flat_load_sbyte_d16_hi v2, v[0:1]1264; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1265; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1266; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1267; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1268entry:1269  %load = load i8, ptr %in1270  %ext = sext i8 %load to i161271  %bitcast = bitcast i16 %ext to half1272  %build0 = insertelement <2 x half> poison, half %reg, i32 01273  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 11274  store <2 x half> %build1, ptr addrspace(1) poison1275  ret void1276}1277 1278define void @load_private_hi_v2i16_reglo_vreg(ptr addrspace(5) byval(i16) %in, i16 %reg) #0 {1279; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg:1280; GFX900:       ; %bb.0: ; %entry1281; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1282; GFX900-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], s32 offset:40941283; GFX900-NEXT:    s_waitcnt vmcnt(0)1284; GFX900-NEXT:    global_store_dword v[0:1], v0, off1285; GFX900-NEXT:    s_waitcnt vmcnt(0)1286; GFX900-NEXT:    s_setpc_b64 s[30:31]1287;1288; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg:1289; GFX906:       ; %bb.0: ; %entry1290; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1291; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941292; GFX906-NEXT:    s_mov_b32 s4, 0x50401001293; GFX906-NEXT:    s_waitcnt vmcnt(0)1294; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41295; GFX906-NEXT:    global_store_dword v[0:1], v0, off1296; GFX906-NEXT:    s_waitcnt vmcnt(0)1297; GFX906-NEXT:    s_setpc_b64 s[30:31]1298;1299; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg:1300; GFX803:       ; %bb.0: ; %entry1301; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1302; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941303; GFX803-NEXT:    s_waitcnt vmcnt(0)1304; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11305; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1306; GFX803-NEXT:    flat_store_dword v[0:1], v01307; GFX803-NEXT:    s_waitcnt vmcnt(0)1308; GFX803-NEXT:    s_setpc_b64 s[30:31]1309;1310; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg:1311; GFX900-FLATSCR:       ; %bb.0: ; %entry1312; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1313; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v0, off, s32 offset:40941314; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1315; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1316; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1317; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1318entry:1319  %gep = getelementptr inbounds i16, ptr addrspace(5) %in, i64 20471320  %load = load i16, ptr addrspace(5) %gep1321  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01322  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 11323  store <2 x i16> %build1, ptr addrspace(1) poison1324  ret void1325}1326 1327define void @load_private_hi_v2f16_reglo_vreg(ptr addrspace(5) byval(half) %in, half %reg) #0 {1328; GFX900-LABEL: load_private_hi_v2f16_reglo_vreg:1329; GFX900:       ; %bb.0: ; %entry1330; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1331; GFX900-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], s32 offset:40941332; GFX900-NEXT:    s_waitcnt vmcnt(0)1333; GFX900-NEXT:    global_store_dword v[0:1], v0, off1334; GFX900-NEXT:    s_waitcnt vmcnt(0)1335; GFX900-NEXT:    s_setpc_b64 s[30:31]1336;1337; GFX906-LABEL: load_private_hi_v2f16_reglo_vreg:1338; GFX906:       ; %bb.0: ; %entry1339; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1340; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941341; GFX906-NEXT:    s_mov_b32 s4, 0x50401001342; GFX906-NEXT:    s_waitcnt vmcnt(0)1343; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41344; GFX906-NEXT:    global_store_dword v[0:1], v0, off1345; GFX906-NEXT:    s_waitcnt vmcnt(0)1346; GFX906-NEXT:    s_setpc_b64 s[30:31]1347;1348; GFX803-LABEL: load_private_hi_v2f16_reglo_vreg:1349; GFX803:       ; %bb.0: ; %entry1350; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1351; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40941352; GFX803-NEXT:    s_waitcnt vmcnt(0)1353; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11354; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1355; GFX803-NEXT:    flat_store_dword v[0:1], v01356; GFX803-NEXT:    s_waitcnt vmcnt(0)1357; GFX803-NEXT:    s_setpc_b64 s[30:31]1358;1359; GFX900-FLATSCR-LABEL: load_private_hi_v2f16_reglo_vreg:1360; GFX900-FLATSCR:       ; %bb.0: ; %entry1361; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1362; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v0, off, s32 offset:40941363; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1364; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1365; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1366; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1367entry:1368  %gep = getelementptr inbounds half, ptr addrspace(5) %in, i64 20471369  %load = load half, ptr addrspace(5) %gep1370  %build0 = insertelement <2 x half> poison, half %reg, i32 01371  %build1 = insertelement <2 x half> %build0, half %load, i32 11372  store <2 x half> %build1, ptr addrspace(1) poison1373  ret void1374}1375 1376define void @load_private_hi_v2i16_reglo_vreg_nooff(ptr addrspace(5) byval(i16) %in, i16 %reg) #0 {1377; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_nooff:1378; GFX900:       ; %bb.0: ; %entry1379; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1380; GFX900-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], 0 offset:4094 glc1381; GFX900-NEXT:    s_waitcnt vmcnt(0)1382; GFX900-NEXT:    global_store_dword v[0:1], v0, off1383; GFX900-NEXT:    s_waitcnt vmcnt(0)1384; GFX900-NEXT:    s_setpc_b64 s[30:31]1385;1386; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_nooff:1387; GFX906:       ; %bb.0: ; %entry1388; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1389; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], 0 offset:4094 glc1390; GFX906-NEXT:    s_waitcnt vmcnt(0)1391; GFX906-NEXT:    s_mov_b32 s4, 0x50401001392; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41393; GFX906-NEXT:    global_store_dword v[0:1], v0, off1394; GFX906-NEXT:    s_waitcnt vmcnt(0)1395; GFX906-NEXT:    s_setpc_b64 s[30:31]1396;1397; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_nooff:1398; GFX803:       ; %bb.0: ; %entry1399; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1400; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], 0 offset:4094 glc1401; GFX803-NEXT:    s_waitcnt vmcnt(0)1402; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11403; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1404; GFX803-NEXT:    flat_store_dword v[0:1], v01405; GFX803-NEXT:    s_waitcnt vmcnt(0)1406; GFX803-NEXT:    s_setpc_b64 s[30:31]1407;1408; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_nooff:1409; GFX900-FLATSCR:       ; %bb.0: ; %entry1410; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1411; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1412; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v0, off, s0 glc1413; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1414; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1415; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1416; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1417entry:1418  %load = load volatile i16, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1419  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01420  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 11421  store <2 x i16> %build1, ptr addrspace(1) poison1422  ret void1423}1424 1425define void @load_private_hi_v2f16_reglo_vreg_nooff(ptr addrspace(5) %in, half %reg) #0 {1426; GFX900-LABEL: load_private_hi_v2f16_reglo_vreg_nooff:1427; GFX900:       ; %bb.0: ; %entry1428; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1429; GFX900-NEXT:    buffer_load_short_d16_hi v1, off, s[0:3], 0 offset:4094 glc1430; GFX900-NEXT:    s_waitcnt vmcnt(0)1431; GFX900-NEXT:    global_store_dword v[0:1], v1, off1432; GFX900-NEXT:    s_waitcnt vmcnt(0)1433; GFX900-NEXT:    s_setpc_b64 s[30:31]1434;1435; GFX906-LABEL: load_private_hi_v2f16_reglo_vreg_nooff:1436; GFX906:       ; %bb.0: ; %entry1437; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1438; GFX906-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1439; GFX906-NEXT:    s_waitcnt vmcnt(0)1440; GFX906-NEXT:    s_mov_b32 s4, 0x50401001441; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s41442; GFX906-NEXT:    global_store_dword v[0:1], v0, off1443; GFX906-NEXT:    s_waitcnt vmcnt(0)1444; GFX906-NEXT:    s_setpc_b64 s[30:31]1445;1446; GFX803-LABEL: load_private_hi_v2f16_reglo_vreg_nooff:1447; GFX803:       ; %bb.0: ; %entry1448; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1449; GFX803-NEXT:    buffer_load_ushort v0, off, s[0:3], 0 offset:4094 glc1450; GFX803-NEXT:    s_waitcnt vmcnt(0)1451; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01452; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1453; GFX803-NEXT:    flat_store_dword v[0:1], v01454; GFX803-NEXT:    s_waitcnt vmcnt(0)1455; GFX803-NEXT:    s_setpc_b64 s[30:31]1456;1457; GFX900-FLATSCR-LABEL: load_private_hi_v2f16_reglo_vreg_nooff:1458; GFX900-FLATSCR:       ; %bb.0: ; %entry1459; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1461; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v1, off, s0 glc1462; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1463; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1464; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1465; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1466entry:1467  %load = load volatile half, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1468  %build0 = insertelement <2 x half> poison, half %reg, i32 01469  %build1 = insertelement <2 x half> %build0, half %load, i32 11470  store <2 x half> %build1, ptr addrspace(1) poison1471  ret void1472}1473 1474define void @load_private_hi_v2i16_reglo_vreg_zexti8(ptr addrspace(5) byval(i8) %in, i16 %reg) #0 {1475; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8:1476; GFX900:       ; %bb.0: ; %entry1477; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1478; GFX900-NEXT:    buffer_load_ubyte_d16_hi v0, off, s[0:3], s32 offset:40951479; GFX900-NEXT:    s_waitcnt vmcnt(0)1480; GFX900-NEXT:    global_store_dword v[0:1], v0, off1481; GFX900-NEXT:    s_waitcnt vmcnt(0)1482; GFX900-NEXT:    s_setpc_b64 s[30:31]1483;1484; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8:1485; GFX906:       ; %bb.0: ; %entry1486; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1487; GFX906-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951488; GFX906-NEXT:    s_mov_b32 s4, 0x50401001489; GFX906-NEXT:    s_waitcnt vmcnt(0)1490; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41491; GFX906-NEXT:    global_store_dword v[0:1], v0, off1492; GFX906-NEXT:    s_waitcnt vmcnt(0)1493; GFX906-NEXT:    s_setpc_b64 s[30:31]1494;1495; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8:1496; GFX803:       ; %bb.0: ; %entry1497; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1498; GFX803-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951499; GFX803-NEXT:    s_waitcnt vmcnt(0)1500; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11501; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1502; GFX803-NEXT:    flat_store_dword v[0:1], v01503; GFX803-NEXT:    s_waitcnt vmcnt(0)1504; GFX803-NEXT:    s_setpc_b64 s[30:31]1505;1506; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8:1507; GFX900-FLATSCR:       ; %bb.0: ; %entry1508; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1509; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16_hi v0, off, s32 offset:40951510; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1511; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1512; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1513; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1514entry:1515  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951516  %load = load i8, ptr addrspace(5) %gep1517  %ext = zext i8 %load to i161518  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01519  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11520  store <2 x i16> %build1, ptr addrspace(1) poison1521  ret void1522}1523 1524define void @load_private_hi_v2f16_reglo_vreg_zexti8(ptr addrspace(5) byval(i8) %in, half %reg) #0 {1525; GFX900-LABEL: load_private_hi_v2f16_reglo_vreg_zexti8:1526; GFX900:       ; %bb.0: ; %entry1527; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1528; GFX900-NEXT:    buffer_load_ubyte_d16_hi v0, off, s[0:3], s32 offset:40951529; GFX900-NEXT:    s_waitcnt vmcnt(0)1530; GFX900-NEXT:    global_store_dword v[0:1], v0, off1531; GFX900-NEXT:    s_waitcnt vmcnt(0)1532; GFX900-NEXT:    s_setpc_b64 s[30:31]1533;1534; GFX906-LABEL: load_private_hi_v2f16_reglo_vreg_zexti8:1535; GFX906:       ; %bb.0: ; %entry1536; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1537; GFX906-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951538; GFX906-NEXT:    s_mov_b32 s4, 0x50401001539; GFX906-NEXT:    s_waitcnt vmcnt(0)1540; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41541; GFX906-NEXT:    global_store_dword v[0:1], v0, off1542; GFX906-NEXT:    s_waitcnt vmcnt(0)1543; GFX906-NEXT:    s_setpc_b64 s[30:31]1544;1545; GFX803-LABEL: load_private_hi_v2f16_reglo_vreg_zexti8:1546; GFX803:       ; %bb.0: ; %entry1547; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1548; GFX803-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40951549; GFX803-NEXT:    s_waitcnt vmcnt(0)1550; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11551; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1552; GFX803-NEXT:    flat_store_dword v[0:1], v01553; GFX803-NEXT:    s_waitcnt vmcnt(0)1554; GFX803-NEXT:    s_setpc_b64 s[30:31]1555;1556; GFX900-FLATSCR-LABEL: load_private_hi_v2f16_reglo_vreg_zexti8:1557; GFX900-FLATSCR:       ; %bb.0: ; %entry1558; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1559; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16_hi v0, off, s32 offset:40951560; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1561; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1562; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1563; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1564entry:1565  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951566  %load = load i8, ptr addrspace(5) %gep1567  %ext = zext i8 %load to i161568  %bitcast = bitcast i16 %ext to half1569  %build0 = insertelement <2 x half> poison, half %reg, i32 01570  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 11571  store <2 x half> %build1, ptr addrspace(1) poison1572  ret void1573}1574 1575define void @load_private_hi_v2f16_reglo_vreg_sexti8(ptr addrspace(5) byval(i8) %in, half %reg) #0 {1576; GFX900-LABEL: load_private_hi_v2f16_reglo_vreg_sexti8:1577; GFX900:       ; %bb.0: ; %entry1578; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1579; GFX900-NEXT:    buffer_load_sbyte_d16_hi v0, off, s[0:3], s32 offset:40951580; GFX900-NEXT:    s_waitcnt vmcnt(0)1581; GFX900-NEXT:    global_store_dword v[0:1], v0, off1582; GFX900-NEXT:    s_waitcnt vmcnt(0)1583; GFX900-NEXT:    s_setpc_b64 s[30:31]1584;1585; GFX906-LABEL: load_private_hi_v2f16_reglo_vreg_sexti8:1586; GFX906:       ; %bb.0: ; %entry1587; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1588; GFX906-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951589; GFX906-NEXT:    s_mov_b32 s4, 0x50401001590; GFX906-NEXT:    s_waitcnt vmcnt(0)1591; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41592; GFX906-NEXT:    global_store_dword v[0:1], v0, off1593; GFX906-NEXT:    s_waitcnt vmcnt(0)1594; GFX906-NEXT:    s_setpc_b64 s[30:31]1595;1596; GFX803-LABEL: load_private_hi_v2f16_reglo_vreg_sexti8:1597; GFX803:       ; %bb.0: ; %entry1598; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1599; GFX803-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951600; GFX803-NEXT:    s_waitcnt vmcnt(0)1601; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11602; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1603; GFX803-NEXT:    flat_store_dword v[0:1], v01604; GFX803-NEXT:    s_waitcnt vmcnt(0)1605; GFX803-NEXT:    s_setpc_b64 s[30:31]1606;1607; GFX900-FLATSCR-LABEL: load_private_hi_v2f16_reglo_vreg_sexti8:1608; GFX900-FLATSCR:       ; %bb.0: ; %entry1609; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1610; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16_hi v0, off, s32 offset:40951611; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1612; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1613; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1614; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1615entry:1616  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951617  %load = load i8, ptr addrspace(5) %gep1618  %ext = sext i8 %load to i161619  %bitcast = bitcast i16 %ext to half1620  %build0 = insertelement <2 x half> poison, half %reg, i32 01621  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 11622  store <2 x half> %build1, ptr addrspace(1) poison1623  ret void1624}1625 1626define void @load_private_hi_v2i16_reglo_vreg_sexti8(ptr addrspace(5) byval(i8) %in, i16 %reg) #0 {1627; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8:1628; GFX900:       ; %bb.0: ; %entry1629; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1630; GFX900-NEXT:    buffer_load_sbyte_d16_hi v0, off, s[0:3], s32 offset:40951631; GFX900-NEXT:    s_waitcnt vmcnt(0)1632; GFX900-NEXT:    global_store_dword v[0:1], v0, off1633; GFX900-NEXT:    s_waitcnt vmcnt(0)1634; GFX900-NEXT:    s_setpc_b64 s[30:31]1635;1636; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8:1637; GFX906:       ; %bb.0: ; %entry1638; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1639; GFX906-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951640; GFX906-NEXT:    s_mov_b32 s4, 0x50401001641; GFX906-NEXT:    s_waitcnt vmcnt(0)1642; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s41643; GFX906-NEXT:    global_store_dword v[0:1], v0, off1644; GFX906-NEXT:    s_waitcnt vmcnt(0)1645; GFX906-NEXT:    s_setpc_b64 s[30:31]1646;1647; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8:1648; GFX803:       ; %bb.0: ; %entry1649; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1650; GFX803-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40951651; GFX803-NEXT:    s_waitcnt vmcnt(0)1652; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v11653; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1654; GFX803-NEXT:    flat_store_dword v[0:1], v01655; GFX803-NEXT:    s_waitcnt vmcnt(0)1656; GFX803-NEXT:    s_setpc_b64 s[30:31]1657;1658; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8:1659; GFX900-FLATSCR:       ; %bb.0: ; %entry1660; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1661; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16_hi v0, off, s32 offset:40951662; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1663; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off1664; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1665; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1666entry:1667  %gep = getelementptr inbounds i8, ptr addrspace(5) %in, i64 40951668  %load = load i8, ptr addrspace(5) %gep1669  %ext = sext i8 %load to i161670  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01671  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11672  store <2 x i16> %build1, ptr addrspace(1) poison1673  ret void1674}1675 1676define void @load_private_hi_v2i16_reglo_vreg_nooff_zexti8(ptr addrspace(5) %in, i16 %reg) #0 {1677; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_zexti8:1678; GFX900:       ; %bb.0: ; %entry1679; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1680; GFX900-NEXT:    buffer_load_ubyte_d16_hi v1, off, s[0:3], 0 offset:4094 glc1681; GFX900-NEXT:    s_waitcnt vmcnt(0)1682; GFX900-NEXT:    global_store_dword v[0:1], v1, off1683; GFX900-NEXT:    s_waitcnt vmcnt(0)1684; GFX900-NEXT:    s_setpc_b64 s[30:31]1685;1686; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_zexti8:1687; GFX906:       ; %bb.0: ; %entry1688; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1689; GFX906-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1690; GFX906-NEXT:    s_waitcnt vmcnt(0)1691; GFX906-NEXT:    s_mov_b32 s4, 0x50401001692; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s41693; GFX906-NEXT:    global_store_dword v[0:1], v0, off1694; GFX906-NEXT:    s_waitcnt vmcnt(0)1695; GFX906-NEXT:    s_setpc_b64 s[30:31]1696;1697; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_zexti8:1698; GFX803:       ; %bb.0: ; %entry1699; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1700; GFX803-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1701; GFX803-NEXT:    s_waitcnt vmcnt(0)1702; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01703; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1704; GFX803-NEXT:    flat_store_dword v[0:1], v01705; GFX803-NEXT:    s_waitcnt vmcnt(0)1706; GFX803-NEXT:    s_setpc_b64 s[30:31]1707;1708; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_zexti8:1709; GFX900-FLATSCR:       ; %bb.0: ; %entry1710; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1711; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1712; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16_hi v1, off, s0 glc1713; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1714; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1715; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1716; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1717entry:1718  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1719  %ext = zext i8 %load to i161720  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01721  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11722  store <2 x i16> %build1, ptr addrspace(1) poison1723  ret void1724}1725 1726define void @load_private_hi_v2i16_reglo_vreg_nooff_sexti8(ptr addrspace(5) %in, i16 %reg) #0 {1727; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_sexti8:1728; GFX900:       ; %bb.0: ; %entry1729; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1730; GFX900-NEXT:    buffer_load_sbyte_d16_hi v1, off, s[0:3], 0 offset:4094 glc1731; GFX900-NEXT:    s_waitcnt vmcnt(0)1732; GFX900-NEXT:    global_store_dword v[0:1], v1, off1733; GFX900-NEXT:    s_waitcnt vmcnt(0)1734; GFX900-NEXT:    s_setpc_b64 s[30:31]1735;1736; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_sexti8:1737; GFX906:       ; %bb.0: ; %entry1738; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1739; GFX906-NEXT:    buffer_load_sbyte v0, off, s[0:3], 0 offset:4094 glc1740; GFX906-NEXT:    s_waitcnt vmcnt(0)1741; GFX906-NEXT:    s_mov_b32 s4, 0x50401001742; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s41743; GFX906-NEXT:    global_store_dword v[0:1], v0, off1744; GFX906-NEXT:    s_waitcnt vmcnt(0)1745; GFX906-NEXT:    s_setpc_b64 s[30:31]1746;1747; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_sexti8:1748; GFX803:       ; %bb.0: ; %entry1749; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1750; GFX803-NEXT:    buffer_load_sbyte v0, off, s[0:3], 0 offset:4094 glc1751; GFX803-NEXT:    s_waitcnt vmcnt(0)1752; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01753; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1754; GFX803-NEXT:    flat_store_dword v[0:1], v01755; GFX803-NEXT:    s_waitcnt vmcnt(0)1756; GFX803-NEXT:    s_setpc_b64 s[30:31]1757;1758; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_nooff_sexti8:1759; GFX900-FLATSCR:       ; %bb.0: ; %entry1760; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1761; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1762; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16_hi v1, off, s0 glc1763; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1764; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1765; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1766; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1767entry:1768  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1769  %ext = sext i8 %load to i161770  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01771  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 11772  store <2 x i16> %build1, ptr addrspace(1) poison1773  ret void1774}1775 1776define void @load_private_hi_v2f16_reglo_vreg_nooff_zexti8(ptr addrspace(5) %in, half %reg) #0 {1777; GFX900-LABEL: load_private_hi_v2f16_reglo_vreg_nooff_zexti8:1778; GFX900:       ; %bb.0: ; %entry1779; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1780; GFX900-NEXT:    buffer_load_ubyte_d16_hi v1, off, s[0:3], 0 offset:4094 glc1781; GFX900-NEXT:    s_waitcnt vmcnt(0)1782; GFX900-NEXT:    global_store_dword v[0:1], v1, off1783; GFX900-NEXT:    s_waitcnt vmcnt(0)1784; GFX900-NEXT:    s_setpc_b64 s[30:31]1785;1786; GFX906-LABEL: load_private_hi_v2f16_reglo_vreg_nooff_zexti8:1787; GFX906:       ; %bb.0: ; %entry1788; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1789; GFX906-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1790; GFX906-NEXT:    s_waitcnt vmcnt(0)1791; GFX906-NEXT:    s_mov_b32 s4, 0x50401001792; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s41793; GFX906-NEXT:    global_store_dword v[0:1], v0, off1794; GFX906-NEXT:    s_waitcnt vmcnt(0)1795; GFX906-NEXT:    s_setpc_b64 s[30:31]1796;1797; GFX803-LABEL: load_private_hi_v2f16_reglo_vreg_nooff_zexti8:1798; GFX803:       ; %bb.0: ; %entry1799; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1800; GFX803-NEXT:    buffer_load_ubyte v0, off, s[0:3], 0 offset:4094 glc1801; GFX803-NEXT:    s_waitcnt vmcnt(0)1802; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01803; GFX803-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1804; GFX803-NEXT:    flat_store_dword v[0:1], v01805; GFX803-NEXT:    s_waitcnt vmcnt(0)1806; GFX803-NEXT:    s_setpc_b64 s[30:31]1807;1808; GFX900-FLATSCR-LABEL: load_private_hi_v2f16_reglo_vreg_nooff_zexti8:1809; GFX900-FLATSCR:       ; %bb.0: ; %entry1810; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1811; GFX900-FLATSCR-NEXT:    s_movk_i32 s0, 0xffe1812; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16_hi v1, off, s0 glc1813; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1814; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v1, off1815; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1816; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1817entry:1818  %load = load volatile i8, ptr addrspace(5) inttoptr (i32 4094 to ptr addrspace(5))1819  %ext = zext i8 %load to i161820  %bc.ext = bitcast i16 %ext to half1821  %build0 = insertelement <2 x half> poison, half %reg, i32 01822  %build1 = insertelement <2 x half> %build0, half %bc.ext, i32 11823  store <2 x half> %build1, ptr addrspace(1) poison1824  ret void1825}1826 1827define void @load_constant_hi_v2i16_reglo_vreg(ptr addrspace(4) %in, i16 %reg) #0 {1828; GFX900-LABEL: load_constant_hi_v2i16_reglo_vreg:1829; GFX900:       ; %bb.0: ; %entry1830; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1831; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-40941832; GFX900-NEXT:    s_waitcnt vmcnt(0)1833; GFX900-NEXT:    global_store_dword v[0:1], v2, off1834; GFX900-NEXT:    s_waitcnt vmcnt(0)1835; GFX900-NEXT:    s_setpc_b64 s[30:31]1836;1837; GFX906-LABEL: load_constant_hi_v2i16_reglo_vreg:1838; GFX906:       ; %bb.0: ; %entry1839; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1840; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-40941841; GFX906-NEXT:    s_mov_b32 s4, 0x50401001842; GFX906-NEXT:    s_waitcnt vmcnt(0)1843; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41844; GFX906-NEXT:    global_store_dword v[0:1], v0, off1845; GFX906-NEXT:    s_waitcnt vmcnt(0)1846; GFX906-NEXT:    s_setpc_b64 s[30:31]1847;1848; GFX803-LABEL: load_constant_hi_v2i16_reglo_vreg:1849; GFX803:       ; %bb.0: ; %entry1850; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1851; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v01852; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1853; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1854; GFX803-NEXT:    s_waitcnt vmcnt(0)1855; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01856; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1857; GFX803-NEXT:    flat_store_dword v[0:1], v01858; GFX803-NEXT:    s_waitcnt vmcnt(0)1859; GFX803-NEXT:    s_setpc_b64 s[30:31]1860;1861; GFX900-FLATSCR-LABEL: load_constant_hi_v2i16_reglo_vreg:1862; GFX900-FLATSCR:       ; %bb.0: ; %entry1863; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1864; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-40941865; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1866; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1867; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1868; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1869entry:1870  %gep = getelementptr inbounds i16, ptr addrspace(4) %in, i64 -20471871  %load = load i16, ptr addrspace(4) %gep1872  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 01873  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 11874  store <2 x i16> %build1, ptr addrspace(1) poison1875  ret void1876}1877 1878define void @load_constant_hi_v2f16_reglo_vreg(ptr addrspace(4) %in, half %reg) #0 {1879; GFX900-LABEL: load_constant_hi_v2f16_reglo_vreg:1880; GFX900:       ; %bb.0: ; %entry1881; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1882; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-40941883; GFX900-NEXT:    s_waitcnt vmcnt(0)1884; GFX900-NEXT:    global_store_dword v[0:1], v2, off1885; GFX900-NEXT:    s_waitcnt vmcnt(0)1886; GFX900-NEXT:    s_setpc_b64 s[30:31]1887;1888; GFX906-LABEL: load_constant_hi_v2f16_reglo_vreg:1889; GFX906:       ; %bb.0: ; %entry1890; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1891; GFX906-NEXT:    global_load_ushort v0, v[0:1], off offset:-40941892; GFX906-NEXT:    s_mov_b32 s4, 0x50401001893; GFX906-NEXT:    s_waitcnt vmcnt(0)1894; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41895; GFX906-NEXT:    global_store_dword v[0:1], v0, off1896; GFX906-NEXT:    s_waitcnt vmcnt(0)1897; GFX906-NEXT:    s_setpc_b64 s[30:31]1898;1899; GFX803-LABEL: load_constant_hi_v2f16_reglo_vreg:1900; GFX803:       ; %bb.0: ; %entry1901; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1902; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff002, v01903; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1904; GFX803-NEXT:    flat_load_ushort v0, v[0:1]1905; GFX803-NEXT:    s_waitcnt vmcnt(0)1906; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01907; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1908; GFX803-NEXT:    flat_store_dword v[0:1], v01909; GFX803-NEXT:    s_waitcnt vmcnt(0)1910; GFX803-NEXT:    s_setpc_b64 s[30:31]1911;1912; GFX900-FLATSCR-LABEL: load_constant_hi_v2f16_reglo_vreg:1913; GFX900-FLATSCR:       ; %bb.0: ; %entry1914; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1915; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:-40941916; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1917; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1918; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1919; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1920entry:1921  %gep = getelementptr inbounds half, ptr addrspace(4) %in, i64 -20471922  %load = load half, ptr addrspace(4) %gep1923  %build0 = insertelement <2 x half> poison, half %reg, i32 01924  %build1 = insertelement <2 x half> %build0, half %load, i32 11925  store <2 x half> %build1, ptr addrspace(1) poison1926  ret void1927}1928 1929define void @load_constant_hi_v2f16_reglo_vreg_sexti8(ptr addrspace(4) %in, half %reg) #0 {1930; GFX900-LABEL: load_constant_hi_v2f16_reglo_vreg_sexti8:1931; GFX900:       ; %bb.0: ; %entry1932; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1933; GFX900-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-40951934; GFX900-NEXT:    s_waitcnt vmcnt(0)1935; GFX900-NEXT:    global_store_dword v[0:1], v2, off1936; GFX900-NEXT:    s_waitcnt vmcnt(0)1937; GFX900-NEXT:    s_setpc_b64 s[30:31]1938;1939; GFX906-LABEL: load_constant_hi_v2f16_reglo_vreg_sexti8:1940; GFX906:       ; %bb.0: ; %entry1941; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1942; GFX906-NEXT:    global_load_sbyte v0, v[0:1], off offset:-40951943; GFX906-NEXT:    s_mov_b32 s4, 0x50401001944; GFX906-NEXT:    s_waitcnt vmcnt(0)1945; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41946; GFX906-NEXT:    global_store_dword v[0:1], v0, off1947; GFX906-NEXT:    s_waitcnt vmcnt(0)1948; GFX906-NEXT:    s_setpc_b64 s[30:31]1949;1950; GFX803-LABEL: load_constant_hi_v2f16_reglo_vreg_sexti8:1951; GFX803:       ; %bb.0: ; %entry1952; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1953; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v01954; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc1955; GFX803-NEXT:    flat_load_sbyte v0, v[0:1]1956; GFX803-NEXT:    s_waitcnt vmcnt(0)1957; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v01958; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1959; GFX803-NEXT:    flat_store_dword v[0:1], v01960; GFX803-NEXT:    s_waitcnt vmcnt(0)1961; GFX803-NEXT:    s_setpc_b64 s[30:31]1962;1963; GFX900-FLATSCR-LABEL: load_constant_hi_v2f16_reglo_vreg_sexti8:1964; GFX900-FLATSCR:       ; %bb.0: ; %entry1965; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1966; GFX900-FLATSCR-NEXT:    global_load_sbyte_d16_hi v2, v[0:1], off offset:-40951967; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1968; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off1969; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)1970; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]1971entry:1972  %gep = getelementptr inbounds i8, ptr addrspace(4) %in, i64 -40951973  %load = load i8, ptr addrspace(4) %gep1974  %ext = sext i8 %load to i161975  %bitcast = bitcast i16 %ext to half1976  %build0 = insertelement <2 x half> poison, half %reg, i32 01977  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 11978  store <2 x half> %build1, ptr addrspace(1) poison1979  ret void1980}1981 1982define void @load_constant_hi_v2f16_reglo_vreg_zexti8(ptr addrspace(4) %in, half %reg) #0 {1983; GFX900-LABEL: load_constant_hi_v2f16_reglo_vreg_zexti8:1984; GFX900:       ; %bb.0: ; %entry1985; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1986; GFX900-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-40951987; GFX900-NEXT:    s_waitcnt vmcnt(0)1988; GFX900-NEXT:    global_store_dword v[0:1], v2, off1989; GFX900-NEXT:    s_waitcnt vmcnt(0)1990; GFX900-NEXT:    s_setpc_b64 s[30:31]1991;1992; GFX906-LABEL: load_constant_hi_v2f16_reglo_vreg_zexti8:1993; GFX906:       ; %bb.0: ; %entry1994; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1995; GFX906-NEXT:    global_load_ubyte v0, v[0:1], off offset:-40951996; GFX906-NEXT:    s_mov_b32 s4, 0x50401001997; GFX906-NEXT:    s_waitcnt vmcnt(0)1998; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s41999; GFX906-NEXT:    global_store_dword v[0:1], v0, off2000; GFX906-NEXT:    s_waitcnt vmcnt(0)2001; GFX906-NEXT:    s_setpc_b64 s[30:31]2002;2003; GFX803-LABEL: load_constant_hi_v2f16_reglo_vreg_zexti8:2004; GFX803:       ; %bb.0: ; %entry2005; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2006; GFX803-NEXT:    v_add_u32_e32 v0, vcc, 0xfffff001, v02007; GFX803-NEXT:    v_addc_u32_e32 v1, vcc, -1, v1, vcc2008; GFX803-NEXT:    flat_load_ubyte v0, v[0:1]2009; GFX803-NEXT:    s_waitcnt vmcnt(0)2010; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v02011; GFX803-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2012; GFX803-NEXT:    flat_store_dword v[0:1], v02013; GFX803-NEXT:    s_waitcnt vmcnt(0)2014; GFX803-NEXT:    s_setpc_b64 s[30:31]2015;2016; GFX900-FLATSCR-LABEL: load_constant_hi_v2f16_reglo_vreg_zexti8:2017; GFX900-FLATSCR:       ; %bb.0: ; %entry2018; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2019; GFX900-FLATSCR-NEXT:    global_load_ubyte_d16_hi v2, v[0:1], off offset:-40952020; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2021; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v2, off2022; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2023; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2024entry:2025  %gep = getelementptr inbounds i8, ptr addrspace(4) %in, i64 -40952026  %load = load i8, ptr addrspace(4) %gep2027  %ext = zext i8 %load to i162028  %bitcast = bitcast i16 %ext to half2029  %build0 = insertelement <2 x half> poison, half %reg, i32 02030  %build1 = insertelement <2 x half> %build0, half %bitcast, i32 12031  store <2 x half> %build1, ptr addrspace(1) poison2032  ret void2033}2034 2035; Local object gives known offset, so requires converting from offen2036; to offset variant.2037 2038define void @load_private_hi_v2i16_reglo_vreg_to_offset(i16 %reg, ptr addrspace(5) %obj0) #0 {2039; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_to_offset:2040; GFX900:       ; %bb.0: ; %entry2041; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2042; GFX900-NEXT:    v_mov_b32_e32 v2, 0x7b2043; GFX900-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2044; GFX900-NEXT:    s_waitcnt vmcnt(0)2045; GFX900-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], s32 offset:40582046; GFX900-NEXT:    s_waitcnt vmcnt(0)2047; GFX900-NEXT:    global_store_dword v[0:1], v0, off2048; GFX900-NEXT:    s_waitcnt vmcnt(0)2049; GFX900-NEXT:    s_setpc_b64 s[30:31]2050;2051; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_to_offset:2052; GFX906:       ; %bb.0: ; %entry2053; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2054; GFX906-NEXT:    v_mov_b32_e32 v2, 0x7b2055; GFX906-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2056; GFX906-NEXT:    s_waitcnt vmcnt(0)2057; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40582058; GFX906-NEXT:    s_mov_b32 s4, 0x50401002059; GFX906-NEXT:    s_waitcnt vmcnt(0)2060; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s42061; GFX906-NEXT:    global_store_dword v[0:1], v0, off2062; GFX906-NEXT:    s_waitcnt vmcnt(0)2063; GFX906-NEXT:    s_setpc_b64 s[30:31]2064;2065; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_to_offset:2066; GFX803:       ; %bb.0: ; %entry2067; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2068; GFX803-NEXT:    v_mov_b32_e32 v2, 0x7b2069; GFX803-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2070; GFX803-NEXT:    s_waitcnt vmcnt(0)2071; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:40582072; GFX803-NEXT:    s_waitcnt vmcnt(0)2073; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12074; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2075; GFX803-NEXT:    flat_store_dword v[0:1], v02076; GFX803-NEXT:    s_waitcnt vmcnt(0)2077; GFX803-NEXT:    s_setpc_b64 s[30:31]2078;2079; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_to_offset:2080; GFX900-FLATSCR:       ; %bb.0: ; %entry2081; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2082; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, 0x7b2083; GFX900-FLATSCR-NEXT:    scratch_store_dword v1, v2, off2084; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2085; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v0, off, s32 offset:40582086; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2087; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2088; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2089; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2090entry:2091  %obj1 = alloca [4096 x i16], align 2, addrspace(5)2092  store volatile i32 123, ptr addrspace(5) %obj02093  %gep = getelementptr inbounds [4096 x i16], ptr addrspace(5) %obj1, i32 0, i32 20272094  %load = load i16, ptr addrspace(5) %gep2095  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 02096  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 12097  store <2 x i16> %build1, ptr addrspace(1) poison2098  ret void2099}2100 2101define void @load_private_hi_v2i16_reglo_vreg_sexti8_to_offset(i16 %reg, ptr addrspace(5) %obj0) #0 {2102; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8_to_offset:2103; GFX900:       ; %bb.0: ; %entry2104; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2105; GFX900-NEXT:    v_mov_b32_e32 v2, 0x7b2106; GFX900-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2107; GFX900-NEXT:    s_waitcnt vmcnt(0)2108; GFX900-NEXT:    buffer_load_sbyte_d16_hi v0, off, s[0:3], s32 offset:40592109; GFX900-NEXT:    s_waitcnt vmcnt(0)2110; GFX900-NEXT:    global_store_dword v[0:1], v0, off2111; GFX900-NEXT:    s_waitcnt vmcnt(0)2112; GFX900-NEXT:    s_setpc_b64 s[30:31]2113;2114; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8_to_offset:2115; GFX906:       ; %bb.0: ; %entry2116; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2117; GFX906-NEXT:    v_mov_b32_e32 v2, 0x7b2118; GFX906-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2119; GFX906-NEXT:    s_waitcnt vmcnt(0)2120; GFX906-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40592121; GFX906-NEXT:    s_mov_b32 s4, 0x50401002122; GFX906-NEXT:    s_waitcnt vmcnt(0)2123; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s42124; GFX906-NEXT:    global_store_dword v[0:1], v0, off2125; GFX906-NEXT:    s_waitcnt vmcnt(0)2126; GFX906-NEXT:    s_setpc_b64 s[30:31]2127;2128; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8_to_offset:2129; GFX803:       ; %bb.0: ; %entry2130; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2131; GFX803-NEXT:    v_mov_b32_e32 v2, 0x7b2132; GFX803-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2133; GFX803-NEXT:    s_waitcnt vmcnt(0)2134; GFX803-NEXT:    buffer_load_sbyte v1, off, s[0:3], s32 offset:40592135; GFX803-NEXT:    s_waitcnt vmcnt(0)2136; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12137; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2138; GFX803-NEXT:    flat_store_dword v[0:1], v02139; GFX803-NEXT:    s_waitcnt vmcnt(0)2140; GFX803-NEXT:    s_setpc_b64 s[30:31]2141;2142; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_sexti8_to_offset:2143; GFX900-FLATSCR:       ; %bb.0: ; %entry2144; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2145; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, 0x7b2146; GFX900-FLATSCR-NEXT:    scratch_store_dword v1, v2, off2147; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2148; GFX900-FLATSCR-NEXT:    scratch_load_sbyte_d16_hi v0, off, s32 offset:40592149; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2150; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2151; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2152; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2153entry:2154  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2155  store volatile i32 123, ptr addrspace(5) %obj02156  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552157  %load = load i8, ptr addrspace(5) %gep2158  %ext = sext i8 %load to i162159  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 02160  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 12161  store <2 x i16> %build1, ptr addrspace(1) poison2162  ret void2163}2164 2165define void @load_private_hi_v2i16_reglo_vreg_zexti8_to_offset(i16 %reg, ptr addrspace(5) %obj0) #0 {2166; GFX900-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8_to_offset:2167; GFX900:       ; %bb.0: ; %entry2168; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2169; GFX900-NEXT:    v_mov_b32_e32 v2, 0x7b2170; GFX900-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2171; GFX900-NEXT:    s_waitcnt vmcnt(0)2172; GFX900-NEXT:    buffer_load_ubyte_d16_hi v0, off, s[0:3], s32 offset:40592173; GFX900-NEXT:    s_waitcnt vmcnt(0)2174; GFX900-NEXT:    global_store_dword v[0:1], v0, off2175; GFX900-NEXT:    s_waitcnt vmcnt(0)2176; GFX900-NEXT:    s_setpc_b64 s[30:31]2177;2178; GFX906-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8_to_offset:2179; GFX906:       ; %bb.0: ; %entry2180; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2181; GFX906-NEXT:    v_mov_b32_e32 v2, 0x7b2182; GFX906-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2183; GFX906-NEXT:    s_waitcnt vmcnt(0)2184; GFX906-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40592185; GFX906-NEXT:    s_mov_b32 s4, 0x50401002186; GFX906-NEXT:    s_waitcnt vmcnt(0)2187; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s42188; GFX906-NEXT:    global_store_dword v[0:1], v0, off2189; GFX906-NEXT:    s_waitcnt vmcnt(0)2190; GFX906-NEXT:    s_setpc_b64 s[30:31]2191;2192; GFX803-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8_to_offset:2193; GFX803:       ; %bb.0: ; %entry2194; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2195; GFX803-NEXT:    v_mov_b32_e32 v2, 0x7b2196; GFX803-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen2197; GFX803-NEXT:    s_waitcnt vmcnt(0)2198; GFX803-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32 offset:40592199; GFX803-NEXT:    s_waitcnt vmcnt(0)2200; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12201; GFX803-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2202; GFX803-NEXT:    flat_store_dword v[0:1], v02203; GFX803-NEXT:    s_waitcnt vmcnt(0)2204; GFX803-NEXT:    s_setpc_b64 s[30:31]2205;2206; GFX900-FLATSCR-LABEL: load_private_hi_v2i16_reglo_vreg_zexti8_to_offset:2207; GFX900-FLATSCR:       ; %bb.0: ; %entry2208; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2209; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, 0x7b2210; GFX900-FLATSCR-NEXT:    scratch_store_dword v1, v2, off2211; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2212; GFX900-FLATSCR-NEXT:    scratch_load_ubyte_d16_hi v0, off, s32 offset:40592213; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2214; GFX900-FLATSCR-NEXT:    global_store_dword v[0:1], v0, off2215; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2216; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2217entry:2218  %obj1 = alloca [4096 x i8], align 2, addrspace(5)2219  store volatile i32 123, ptr addrspace(5) %obj02220  %gep = getelementptr inbounds [4096 x i8], ptr addrspace(5) %obj1, i32 0, i32 40552221  %load = load i8, ptr addrspace(5) %gep2222  %ext = zext i8 %load to i162223  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 02224  %build1 = insertelement <2 x i16> %build0, i16 %ext, i32 12225  store <2 x i16> %build1, ptr addrspace(1) poison2226  ret void2227}2228 2229; FIXME: Remove m0 init and waitcnt between reads2230; FIXME: Is there a cost to using the extload over not?2231define <2 x i16> @load_local_v2i16_split_multi_chain(ptr addrspace(3) %in) #0 {2232; GFX900-LABEL: load_local_v2i16_split_multi_chain:2233; GFX900:       ; %bb.0: ; %entry2234; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2235; GFX900-NEXT:    ds_read_u16 v1, v02236; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2237; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0 offset:22238; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2239; GFX900-NEXT:    v_mov_b32_e32 v0, v12240; GFX900-NEXT:    s_setpc_b64 s[30:31]2241;2242; GFX906-LABEL: load_local_v2i16_split_multi_chain:2243; GFX906:       ; %bb.0: ; %entry2244; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2245; GFX906-NEXT:    ds_read_u16 v1, v02246; GFX906-NEXT:    ds_read_u16 v0, v0 offset:22247; GFX906-NEXT:    s_mov_b32 s4, 0x50401002248; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2249; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s42250; GFX906-NEXT:    s_setpc_b64 s[30:31]2251;2252; GFX803-LABEL: load_local_v2i16_split_multi_chain:2253; GFX803:       ; %bb.0: ; %entry2254; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2255; GFX803-NEXT:    s_mov_b32 m0, -12256; GFX803-NEXT:    ds_read_u16 v1, v02257; GFX803-NEXT:    ds_read_u16 v0, v0 offset:22258; GFX803-NEXT:    s_waitcnt lgkmcnt(0)2259; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v02260; GFX803-NEXT:    v_or_b32_e32 v0, v1, v02261; GFX803-NEXT:    s_setpc_b64 s[30:31]2262;2263; GFX900-FLATSCR-LABEL: load_local_v2i16_split_multi_chain:2264; GFX900-FLATSCR:       ; %bb.0: ; %entry2265; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2266; GFX900-FLATSCR-NEXT:    ds_read_u16 v1, v02267; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2268; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0 offset:22269; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2270; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v12271; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2272entry:2273  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 12274  %load0 = load volatile i16, ptr addrspace(3) %in2275  %load1 = load volatile i16, ptr addrspace(3) %gep2276  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02277  %build1 = insertelement <2 x i16> %build0, i16 %load1, i32 12278  ret <2 x i16> %build12279}2280 2281define <2 x i16> @load_local_lo_hi_v2i16_samechain(ptr addrspace(3) %in) #0 {2282; GFX900-LABEL: load_local_lo_hi_v2i16_samechain:2283; GFX900:       ; %bb.0: ; %entry2284; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2285; GFX900-NEXT:    ds_read_u16 v1, v02286; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2287; GFX900-NEXT:    ds_read_u16_d16_hi v1, v0 offset:162288; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2289; GFX900-NEXT:    v_mov_b32_e32 v0, v12290; GFX900-NEXT:    s_setpc_b64 s[30:31]2291;2292; GFX906-LABEL: load_local_lo_hi_v2i16_samechain:2293; GFX906:       ; %bb.0: ; %entry2294; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2295; GFX906-NEXT:    ds_read_u16 v1, v02296; GFX906-NEXT:    ds_read_u16 v0, v0 offset:162297; GFX906-NEXT:    s_mov_b32 s4, 0x50401002298; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2299; GFX906-NEXT:    v_perm_b32 v0, v0, v1, s42300; GFX906-NEXT:    s_setpc_b64 s[30:31]2301;2302; GFX803-LABEL: load_local_lo_hi_v2i16_samechain:2303; GFX803:       ; %bb.0: ; %entry2304; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2305; GFX803-NEXT:    s_mov_b32 m0, -12306; GFX803-NEXT:    ds_read_u16 v1, v0 offset:162307; GFX803-NEXT:    ds_read_u16 v0, v02308; GFX803-NEXT:    s_waitcnt lgkmcnt(1)2309; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12310; GFX803-NEXT:    s_waitcnt lgkmcnt(0)2311; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12312; GFX803-NEXT:    s_setpc_b64 s[30:31]2313;2314; GFX900-FLATSCR-LABEL: load_local_lo_hi_v2i16_samechain:2315; GFX900-FLATSCR:       ; %bb.0: ; %entry2316; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2317; GFX900-FLATSCR-NEXT:    ds_read_u16 v1, v02318; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2319; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v1, v0 offset:162320; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2321; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v12322; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2323entry:2324  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 82325  %load.lo = load i16, ptr addrspace(3) %in2326  %load.hi = load i16, ptr addrspace(3) %gep2327  %build0 = insertelement <2 x i16> poison, i16 %load.lo, i32 02328  %build1 = insertelement <2 x i16> %build0, i16 %load.hi, i32 12329  ret <2 x i16> %build12330}2331 2332; FIXME: Remove and2333define <2 x i16> @load_local_v2i16_broadcast(ptr addrspace(3) %in) #0 {2334; GFX900-LABEL: load_local_v2i16_broadcast:2335; GFX900:       ; %bb.0: ; %entry2336; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2337; GFX900-NEXT:    ds_read_u16 v0, v02338; GFX900-NEXT:    s_mov_b32 s4, 0x50401002339; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2340; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s42341; GFX900-NEXT:    s_setpc_b64 s[30:31]2342;2343; GFX906-LABEL: load_local_v2i16_broadcast:2344; GFX906:       ; %bb.0: ; %entry2345; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2346; GFX906-NEXT:    ds_read_u16 v0, v02347; GFX906-NEXT:    s_mov_b32 s4, 0x50401002348; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2349; GFX906-NEXT:    v_perm_b32 v0, v0, v0, s42350; GFX906-NEXT:    s_setpc_b64 s[30:31]2351;2352; GFX803-LABEL: load_local_v2i16_broadcast:2353; GFX803:       ; %bb.0: ; %entry2354; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2355; GFX803-NEXT:    s_mov_b32 m0, -12356; GFX803-NEXT:    ds_read_u16 v0, v02357; GFX803-NEXT:    s_waitcnt lgkmcnt(0)2358; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v02359; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12360; GFX803-NEXT:    s_setpc_b64 s[30:31]2361;2362; GFX900-FLATSCR-LABEL: load_local_v2i16_broadcast:2363; GFX900-FLATSCR:       ; %bb.0: ; %entry2364; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2365; GFX900-FLATSCR-NEXT:    ds_read_u16 v0, v02366; GFX900-FLATSCR-NEXT:    s_mov_b32 s0, 0x50401002367; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2368; GFX900-FLATSCR-NEXT:    v_perm_b32 v0, v0, v0, s02369; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2370entry:2371  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 12372  %load0 = load i16, ptr addrspace(3) %in2373  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02374  %build1 = insertelement <2 x i16> %build0, i16 %load0, i32 12375  ret <2 x i16> %build12376}2377 2378define <2 x i16> @load_local_lo_hi_v2i16_side_effect(ptr addrspace(3) %in, ptr addrspace(3) %may.alias) #0 {2379; GFX900-LABEL: load_local_lo_hi_v2i16_side_effect:2380; GFX900:       ; %bb.0: ; %entry2381; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2382; GFX900-NEXT:    ds_read_u16 v2, v02383; GFX900-NEXT:    v_mov_b32_e32 v3, 0x7b2384; GFX900-NEXT:    ds_write_b16 v1, v32385; GFX900-NEXT:    s_waitcnt lgkmcnt(1)2386; GFX900-NEXT:    ds_read_u16_d16_hi v2, v0 offset:162387; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2388; GFX900-NEXT:    v_mov_b32_e32 v0, v22389; GFX900-NEXT:    s_setpc_b64 s[30:31]2390;2391; GFX906-LABEL: load_local_lo_hi_v2i16_side_effect:2392; GFX906:       ; %bb.0: ; %entry2393; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2394; GFX906-NEXT:    v_mov_b32_e32 v3, 0x7b2395; GFX906-NEXT:    ds_read_u16 v2, v02396; GFX906-NEXT:    ds_write_b16 v1, v32397; GFX906-NEXT:    ds_read_u16 v0, v0 offset:162398; GFX906-NEXT:    s_mov_b32 s4, 0x50401002399; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2400; GFX906-NEXT:    v_perm_b32 v0, v0, v2, s42401; GFX906-NEXT:    s_setpc_b64 s[30:31]2402;2403; GFX803-LABEL: load_local_lo_hi_v2i16_side_effect:2404; GFX803:       ; %bb.0: ; %entry2405; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX803-NEXT:    s_mov_b32 m0, -12407; GFX803-NEXT:    v_mov_b32_e32 v3, 0x7b2408; GFX803-NEXT:    ds_read_u16 v2, v02409; GFX803-NEXT:    ds_write_b16 v1, v32410; GFX803-NEXT:    ds_read_u16 v0, v0 offset:162411; GFX803-NEXT:    s_waitcnt lgkmcnt(0)2412; GFX803-NEXT:    v_lshlrev_b32_e32 v0, 16, v02413; GFX803-NEXT:    v_or_b32_e32 v0, v2, v02414; GFX803-NEXT:    s_setpc_b64 s[30:31]2415;2416; GFX900-FLATSCR-LABEL: load_local_lo_hi_v2i16_side_effect:2417; GFX900-FLATSCR:       ; %bb.0: ; %entry2418; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2419; GFX900-FLATSCR-NEXT:    ds_read_u16 v2, v02420; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v3, 0x7b2421; GFX900-FLATSCR-NEXT:    ds_write_b16 v1, v32422; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)2423; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v2, v0 offset:162424; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2425; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v22426; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2427entry:2428  %gep = getelementptr inbounds i16, ptr addrspace(3) %in, i32 82429  %load.lo = load i16, ptr addrspace(3) %in2430  store i16 123, ptr addrspace(3) %may.alias2431  %load.hi = load i16, ptr addrspace(3) %gep2432  %build0 = insertelement <2 x i16> poison, i16 %load.lo, i32 02433  %build1 = insertelement <2 x i16> %build0, i16 %load.hi, i32 12434  ret <2 x i16> %build12435}2436 2437; FIXME: Remove waitcnt between reads2438define <2 x i16> @load_global_v2i16_split(ptr addrspace(1) %in) #0 {2439; GFX900-LABEL: load_global_v2i16_split:2440; GFX900:       ; %bb.0: ; %entry2441; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2442; GFX900-NEXT:    global_load_ushort v2, v[0:1], off glc2443; GFX900-NEXT:    s_waitcnt vmcnt(0)2444; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:2 glc2445; GFX900-NEXT:    s_waitcnt vmcnt(0)2446; GFX900-NEXT:    v_mov_b32_e32 v0, v22447; GFX900-NEXT:    s_setpc_b64 s[30:31]2448;2449; GFX906-LABEL: load_global_v2i16_split:2450; GFX906:       ; %bb.0: ; %entry2451; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX906-NEXT:    global_load_ushort v2, v[0:1], off glc2453; GFX906-NEXT:    s_waitcnt vmcnt(0)2454; GFX906-NEXT:    global_load_ushort v3, v[0:1], off offset:2 glc2455; GFX906-NEXT:    s_waitcnt vmcnt(0)2456; GFX906-NEXT:    s_mov_b32 s4, 0x50401002457; GFX906-NEXT:    v_perm_b32 v0, v3, v2, s42458; GFX906-NEXT:    s_setpc_b64 s[30:31]2459;2460; GFX803-LABEL: load_global_v2i16_split:2461; GFX803:       ; %bb.0: ; %entry2462; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; GFX803-NEXT:    v_add_u32_e32 v2, vcc, 2, v02464; GFX803-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2465; GFX803-NEXT:    flat_load_ushort v0, v[0:1] glc2466; GFX803-NEXT:    s_waitcnt vmcnt(0)2467; GFX803-NEXT:    flat_load_ushort v1, v[2:3] glc2468; GFX803-NEXT:    s_waitcnt vmcnt(0)2469; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12470; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12471; GFX803-NEXT:    s_setpc_b64 s[30:31]2472;2473; GFX900-FLATSCR-LABEL: load_global_v2i16_split:2474; GFX900-FLATSCR:       ; %bb.0: ; %entry2475; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2476; GFX900-FLATSCR-NEXT:    global_load_ushort v2, v[0:1], off glc2477; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2478; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:2 glc2479; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2480; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v22481; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2482entry:2483  %gep = getelementptr inbounds i16, ptr addrspace(1) %in, i64 12484  %load0 = load volatile i16, ptr addrspace(1) %in2485  %load1 = load volatile i16, ptr addrspace(1) %gep2486  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02487  %build1 = insertelement <2 x i16> %build0, i16 %load1, i32 12488  ret <2 x i16> %build12489}2490 2491; FIXME: Remove waitcnt between reads2492define <2 x i16> @load_flat_v2i16_split(ptr %in) #0 {2493; GFX900-LABEL: load_flat_v2i16_split:2494; GFX900:       ; %bb.0: ; %entry2495; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2496; GFX900-NEXT:    flat_load_ushort v2, v[0:1] glc2497; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2498; GFX900-NEXT:    flat_load_short_d16_hi v2, v[0:1] offset:2 glc2499; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2500; GFX900-NEXT:    v_mov_b32_e32 v0, v22501; GFX900-NEXT:    s_setpc_b64 s[30:31]2502;2503; GFX906-LABEL: load_flat_v2i16_split:2504; GFX906:       ; %bb.0: ; %entry2505; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2506; GFX906-NEXT:    flat_load_ushort v2, v[0:1] glc2507; GFX906-NEXT:    s_waitcnt vmcnt(0)2508; GFX906-NEXT:    flat_load_ushort v3, v[0:1] offset:2 glc2509; GFX906-NEXT:    s_waitcnt vmcnt(0)2510; GFX906-NEXT:    s_mov_b32 s4, 0x50401002511; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2512; GFX906-NEXT:    v_perm_b32 v0, v3, v2, s42513; GFX906-NEXT:    s_setpc_b64 s[30:31]2514;2515; GFX803-LABEL: load_flat_v2i16_split:2516; GFX803:       ; %bb.0: ; %entry2517; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2518; GFX803-NEXT:    v_add_u32_e32 v2, vcc, 2, v02519; GFX803-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2520; GFX803-NEXT:    flat_load_ushort v0, v[0:1] glc2521; GFX803-NEXT:    s_waitcnt vmcnt(0)2522; GFX803-NEXT:    flat_load_ushort v1, v[2:3] glc2523; GFX803-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2524; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12525; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12526; GFX803-NEXT:    s_setpc_b64 s[30:31]2527;2528; GFX900-FLATSCR-LABEL: load_flat_v2i16_split:2529; GFX900-FLATSCR:       ; %bb.0: ; %entry2530; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2531; GFX900-FLATSCR-NEXT:    flat_load_ushort v2, v[0:1] glc2532; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2533; GFX900-FLATSCR-NEXT:    flat_load_short_d16_hi v2, v[0:1] offset:2 glc2534; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2535; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v22536; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2537entry:2538  %gep = getelementptr inbounds i16, ptr %in, i64 12539  %load0 = load volatile i16, ptr %in2540  %load1 = load volatile i16, ptr %gep2541  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02542  %build1 = insertelement <2 x i16> %build0, i16 %load1, i32 12543  ret <2 x i16> %build12544}2545 2546; FIXME: Remove waitcnt between reads2547define <2 x i16> @load_constant_v2i16_split(ptr addrspace(4) %in) #0 {2548; GFX900-LABEL: load_constant_v2i16_split:2549; GFX900:       ; %bb.0: ; %entry2550; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2551; GFX900-NEXT:    global_load_ushort v2, v[0:1], off glc2552; GFX900-NEXT:    s_nop 02553; GFX900-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:2 glc2554; GFX900-NEXT:    s_waitcnt vmcnt(0)2555; GFX900-NEXT:    v_mov_b32_e32 v0, v22556; GFX900-NEXT:    s_setpc_b64 s[30:31]2557;2558; GFX906-LABEL: load_constant_v2i16_split:2559; GFX906:       ; %bb.0: ; %entry2560; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2561; GFX906-NEXT:    global_load_ushort v2, v[0:1], off glc2562; GFX906-NEXT:    global_load_ushort v3, v[0:1], off offset:2 glc2563; GFX906-NEXT:    s_mov_b32 s4, 0x50401002564; GFX906-NEXT:    s_waitcnt vmcnt(0)2565; GFX906-NEXT:    v_perm_b32 v0, v3, v2, s42566; GFX906-NEXT:    s_setpc_b64 s[30:31]2567;2568; GFX803-LABEL: load_constant_v2i16_split:2569; GFX803:       ; %bb.0: ; %entry2570; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2571; GFX803-NEXT:    v_add_u32_e32 v2, vcc, 2, v02572; GFX803-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2573; GFX803-NEXT:    flat_load_ushort v0, v[0:1] glc2574; GFX803-NEXT:    flat_load_ushort v1, v[2:3] glc2575; GFX803-NEXT:    s_waitcnt vmcnt(0)2576; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12577; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12578; GFX803-NEXT:    s_setpc_b64 s[30:31]2579;2580; GFX900-FLATSCR-LABEL: load_constant_v2i16_split:2581; GFX900-FLATSCR:       ; %bb.0: ; %entry2582; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2583; GFX900-FLATSCR-NEXT:    global_load_ushort v2, v[0:1], off glc2584; GFX900-FLATSCR-NEXT:    s_nop 02585; GFX900-FLATSCR-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:2 glc2586; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2587; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v22588; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2589entry:2590  %gep = getelementptr inbounds i16, ptr addrspace(4) %in, i64 12591  %load0 = load volatile i16, ptr addrspace(4) %in2592  %load1 = load volatile i16, ptr addrspace(4) %gep2593  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02594  %build1 = insertelement <2 x i16> %build0, i16 %load1, i32 12595  ret <2 x i16> %build12596}2597 2598; FIXME: Remove m0 init and waitcnt between reads2599; FIXME: Is there a cost to using the extload over not?2600define <2 x i16> @load_private_v2i16_split(ptr addrspace(5) byval(i16) %in) #0 {2601; GFX900-LABEL: load_private_v2i16_split:2602; GFX900:       ; %bb.0: ; %entry2603; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2604; GFX900-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc2605; GFX900-NEXT:    s_waitcnt vmcnt(0)2606; GFX900-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], s32 offset:2 glc2607; GFX900-NEXT:    s_waitcnt vmcnt(0)2608; GFX900-NEXT:    s_setpc_b64 s[30:31]2609;2610; GFX906-LABEL: load_private_v2i16_split:2611; GFX906:       ; %bb.0: ; %entry2612; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2613; GFX906-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc2614; GFX906-NEXT:    s_waitcnt vmcnt(0)2615; GFX906-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:2 glc2616; GFX906-NEXT:    s_waitcnt vmcnt(0)2617; GFX906-NEXT:    s_mov_b32 s4, 0x50401002618; GFX906-NEXT:    v_perm_b32 v0, v1, v0, s42619; GFX906-NEXT:    s_setpc_b64 s[30:31]2620;2621; GFX803-LABEL: load_private_v2i16_split:2622; GFX803:       ; %bb.0: ; %entry2623; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2624; GFX803-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc2625; GFX803-NEXT:    s_waitcnt vmcnt(0)2626; GFX803-NEXT:    buffer_load_ushort v1, off, s[0:3], s32 offset:2 glc2627; GFX803-NEXT:    s_waitcnt vmcnt(0)2628; GFX803-NEXT:    v_lshlrev_b32_e32 v1, 16, v12629; GFX803-NEXT:    v_or_b32_e32 v0, v0, v12630; GFX803-NEXT:    s_setpc_b64 s[30:31]2631;2632; GFX900-FLATSCR-LABEL: load_private_v2i16_split:2633; GFX900-FLATSCR:       ; %bb.0: ; %entry2634; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2635; GFX900-FLATSCR-NEXT:    scratch_load_ushort v0, off, s32 glc2636; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2637; GFX900-FLATSCR-NEXT:    scratch_load_short_d16_hi v0, off, s32 offset:2 glc2638; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0)2639; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2640entry:2641  %gep = getelementptr inbounds i16, ptr addrspace(5) %in, i32 12642  %load0 = load volatile i16, ptr addrspace(5) %in2643  %load1 = load volatile i16, ptr addrspace(5) %gep2644  %build0 = insertelement <2 x i16> poison, i16 %load0, i32 02645  %build1 = insertelement <2 x i16> %build0, i16 %load1, i32 12646  ret <2 x i16> %build12647}2648 2649; FIXME: This test should work without copying of v0.2650;        ds_read_u16_d16_hi preserves low 16 bits of the destination2651;        and ds_write_b16 only reads low 16 bits.2652define <2 x i16> @load_local_hi_v2i16_store_local_lo(i16 %reg, ptr addrspace(3) %in) #0 {2653; GFX900-LABEL: load_local_hi_v2i16_store_local_lo:2654; GFX900:       ; %bb.0: ; %entry2655; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2656; GFX900-NEXT:    v_mov_b32_e32 v2, v02657; GFX900-NEXT:    ds_read_u16_d16_hi v2, v12658; GFX900-NEXT:    ds_write_b16 v1, v02659; GFX900-NEXT:    s_waitcnt lgkmcnt(1)2660; GFX900-NEXT:    v_mov_b32_e32 v0, v22661; GFX900-NEXT:    s_waitcnt lgkmcnt(0)2662; GFX900-NEXT:    s_setpc_b64 s[30:31]2663;2664; GFX906-LABEL: load_local_hi_v2i16_store_local_lo:2665; GFX906:       ; %bb.0: ; %entry2666; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2667; GFX906-NEXT:    ds_read_u16 v2, v12668; GFX906-NEXT:    s_mov_b32 s4, 0x50401002669; GFX906-NEXT:    ds_write_b16 v1, v02670; GFX906-NEXT:    s_waitcnt lgkmcnt(1)2671; GFX906-NEXT:    v_perm_b32 v2, v2, v0, s42672; GFX906-NEXT:    v_mov_b32_e32 v0, v22673; GFX906-NEXT:    s_waitcnt lgkmcnt(0)2674; GFX906-NEXT:    s_setpc_b64 s[30:31]2675;2676; GFX803-LABEL: load_local_hi_v2i16_store_local_lo:2677; GFX803:       ; %bb.0: ; %entry2678; GFX803-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2679; GFX803-NEXT:    s_mov_b32 m0, -12680; GFX803-NEXT:    ds_read_u16 v2, v12681; GFX803-NEXT:    ds_write_b16 v1, v02682; GFX803-NEXT:    s_waitcnt lgkmcnt(1)2683; GFX803-NEXT:    v_lshlrev_b32_e32 v2, 16, v22684; GFX803-NEXT:    v_or_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2685; GFX803-NEXT:    v_mov_b32_e32 v0, v22686; GFX803-NEXT:    s_waitcnt lgkmcnt(0)2687; GFX803-NEXT:    s_setpc_b64 s[30:31]2688;2689; GFX900-FLATSCR-LABEL: load_local_hi_v2i16_store_local_lo:2690; GFX900-FLATSCR:       ; %bb.0: ; %entry2691; GFX900-FLATSCR-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2692; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v2, v02693; GFX900-FLATSCR-NEXT:    ds_read_u16_d16_hi v2, v12694; GFX900-FLATSCR-NEXT:    ds_write_b16 v1, v02695; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(1)2696; GFX900-FLATSCR-NEXT:    v_mov_b32_e32 v0, v22697; GFX900-FLATSCR-NEXT:    s_waitcnt lgkmcnt(0)2698; GFX900-FLATSCR-NEXT:    s_setpc_b64 s[30:31]2699entry:2700  %load = load i16, ptr addrspace(3) %in2701  %build0 = insertelement <2 x i16> poison, i16 %reg, i32 02702  %build1 = insertelement <2 x i16> %build0, i16 %load, i32 12703  store volatile i16 %reg, ptr addrspace(3) %in2704  ret <2 x i16> %build12705}2706 2707attributes #0 = { nounwind }2708