brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.3 KiB · c167936 Raw
841 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GCN,GCN-TRUE163; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GCN,GCN-FAKE164; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+real-true16,+d16-write-vgpr32 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GFX12-TRUE16,GFX12-TRUE16-D16W325; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+real-true16,-d16-write-vgpr32 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GFX12-TRUE16,GFX12-TRUE16-D16W166; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GFX1250,GFX1250-TRUE167; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 < %s | FileCheck %s -check-prefixes=GFX1250,GFX1250-FAKE168 9define void @spill_i16_alu() {10; GCN-TRUE16-LABEL: spill_i16_alu:11; GCN-TRUE16:       ; %bb.0: ; %entry12; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc14; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)15; GCN-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l16; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill17; GCN-TRUE16-NEXT:    ;;#ASMSTART18; GCN-TRUE16-NEXT:    ;;#ASMEND19; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 ; 2-byte Folded Reload20; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)21; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 dlc22; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x023; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]24;25; GCN-FAKE16-LABEL: spill_i16_alu:26; GCN-FAKE16:       ; %bb.0: ; %entry27; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc29; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)30; GCN-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v031; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill32; GCN-FAKE16-NEXT:    ;;#ASMSTART33; GCN-FAKE16-NEXT:    ;;#ASMEND34; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:4 ; 4-byte Folded Reload35; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)36; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 dlc37; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x038; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]39;40; GFX12-TRUE16-LABEL: spill_i16_alu:41; GFX12-TRUE16:       ; %bb.0: ; %entry42; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x043; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x044; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x045; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x046; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x047; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS48; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x049; GFX12-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l50; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill51; GFX12-TRUE16-NEXT:    ;;#ASMSTART52; GFX12-TRUE16-NEXT:    ;;#ASMEND53; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 th:TH_LOAD_LU ; 2-byte Folded Reload54; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x055; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x056; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS57; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x058; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]59;60; GFX1250-TRUE16-LABEL: spill_i16_alu:61; GFX1250-TRUE16:       ; %bb.0: ; %entry62; GFX1250-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x063; GFX1250-TRUE16-NEXT:    s_wait_kmcnt 0x064; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS65; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x066; GFX1250-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l67; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill68; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x069; GFX1250-TRUE16-NEXT:    ;;#ASMSTART70; GFX1250-TRUE16-NEXT:    ;;#ASMEND71; GFX1250-TRUE16-NEXT:    scratch_load_u16 v1, off, s32 offset:2 th:TH_LOAD_LU ; 2-byte Folded Reload72; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x073; GFX1250-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v1.l74; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x075; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS76; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x077; GFX1250-TRUE16-NEXT:    s_set_pc_i64 s[30:31]78;79; GFX1250-FAKE16-LABEL: spill_i16_alu:80; GFX1250-FAKE16:       ; %bb.0: ; %entry81; GFX1250-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x082; GFX1250-FAKE16-NEXT:    s_wait_kmcnt 0x083; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS84; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x085; GFX1250-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v086; GFX1250-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill87; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x088; GFX1250-FAKE16-NEXT:    ;;#ASMSTART89; GFX1250-FAKE16-NEXT:    ;;#ASMEND90; GFX1250-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:4 th:TH_LOAD_LU ; 4-byte Folded Reload91; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x092; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x093; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS94; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x095; GFX1250-FAKE16-NEXT:    s_set_pc_i64 s[30:31]96entry:97  %alloca = alloca i16, i32 1, align 4, addrspace(5)98 99  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0100  %a = load volatile i16, ptr addrspace(5) %aptr101  %add = add i16 %a, 123102 103  ; Force %a to spill.104  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()105 106  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0107  store volatile i16 %add, ptr addrspace(5) %outptr108 109  ret void110}111 112define void @spill_i16_alu_two_vals() {113; GCN-TRUE16-LABEL: spill_i16_alu_two_vals:114; GCN-TRUE16:       ; %bb.0: ; %entry115; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)116; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc117; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)118; GCN-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l119; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:6 ; 2-byte Folded Spill120; GCN-TRUE16-NEXT:    ;;#ASMSTART121; GCN-TRUE16-NEXT:    ;;#ASMEND122; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:4 glc dlc123; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)124; GCN-TRUE16-NEXT:    scratch_load_d16_hi_b16 v0, off, s32 offset:6 ; 2-byte Folded Reload125; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)126; GCN-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l127; GCN-TRUE16-NEXT:    scratch_store_d16_hi_b16 off, v0, s32 dlc128; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0129; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:4 dlc130; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0131; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]132;133; GCN-FAKE16-LABEL: spill_i16_alu_two_vals:134; GCN-FAKE16:       ; %bb.0: ; %entry135; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc137; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)138; GCN-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v0139; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill140; GCN-FAKE16-NEXT:    ;;#ASMSTART141; GCN-FAKE16-NEXT:    ;;#ASMEND142; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 offset:4 glc dlc143; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)144; GCN-FAKE16-NEXT:    scratch_load_b32 v1, off, s32 offset:8 ; 4-byte Folded Reload145; GCN-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v0146; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)147; GCN-FAKE16-NEXT:    scratch_store_b16 off, v1, s32 dlc148; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0149; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 offset:4 dlc150; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0151; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]152;153; GFX12-TRUE16-D16W32-LABEL: spill_i16_alu_two_vals:154; GFX12-TRUE16-D16W32:       ; %bb.0: ; %entry155; GFX12-TRUE16-D16W32-NEXT:    s_wait_loadcnt_dscnt 0x0156; GFX12-TRUE16-D16W32-NEXT:    s_wait_expcnt 0x0157; GFX12-TRUE16-D16W32-NEXT:    s_wait_samplecnt 0x0158; GFX12-TRUE16-D16W32-NEXT:    s_wait_bvhcnt 0x0159; GFX12-TRUE16-D16W32-NEXT:    s_wait_kmcnt 0x0160; GFX12-TRUE16-D16W32-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS161; GFX12-TRUE16-D16W32-NEXT:    s_wait_loadcnt 0x0162; GFX12-TRUE16-D16W32-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l163; GFX12-TRUE16-D16W32-NEXT:    scratch_store_b16 off, v0, s32 offset:6 ; 2-byte Folded Spill164; GFX12-TRUE16-D16W32-NEXT:    ;;#ASMSTART165; GFX12-TRUE16-D16W32-NEXT:    ;;#ASMEND166; GFX12-TRUE16-D16W32-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:4 scope:SCOPE_SYS167; GFX12-TRUE16-D16W32-NEXT:    s_wait_loadcnt 0x0168; GFX12-TRUE16-D16W32-NEXT:    scratch_load_d16_hi_b16 v0, off, s32 offset:6 th:TH_LOAD_LU ; 2-byte Folded Reload169; GFX12-TRUE16-D16W32-NEXT:    s_wait_loadcnt 0x0170; GFX12-TRUE16-D16W32-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l171; GFX12-TRUE16-D16W32-NEXT:    s_wait_storecnt 0x0172; GFX12-TRUE16-D16W32-NEXT:    scratch_store_d16_hi_b16 off, v0, s32 scope:SCOPE_SYS173; GFX12-TRUE16-D16W32-NEXT:    s_wait_storecnt 0x0174; GFX12-TRUE16-D16W32-NEXT:    scratch_store_b16 off, v0, s32 offset:4 scope:SCOPE_SYS175; GFX12-TRUE16-D16W32-NEXT:    s_wait_storecnt 0x0176; GFX12-TRUE16-D16W32-NEXT:    s_setpc_b64 s[30:31]177;178; GFX12-TRUE16-D16W16-LABEL: spill_i16_alu_two_vals:179; GFX12-TRUE16-D16W16:       ; %bb.0: ; %entry180; GFX12-TRUE16-D16W16-NEXT:    s_wait_loadcnt_dscnt 0x0181; GFX12-TRUE16-D16W16-NEXT:    s_wait_expcnt 0x0182; GFX12-TRUE16-D16W16-NEXT:    s_wait_samplecnt 0x0183; GFX12-TRUE16-D16W16-NEXT:    s_wait_bvhcnt 0x0184; GFX12-TRUE16-D16W16-NEXT:    s_wait_kmcnt 0x0185; GFX12-TRUE16-D16W16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS186; GFX12-TRUE16-D16W16-NEXT:    s_wait_loadcnt 0x0187; GFX12-TRUE16-D16W16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l188; GFX12-TRUE16-D16W16-NEXT:    scratch_store_b16 off, v0, s32 offset:6 ; 2-byte Folded Spill189; GFX12-TRUE16-D16W16-NEXT:    ;;#ASMSTART190; GFX12-TRUE16-D16W16-NEXT:    ;;#ASMEND191; GFX12-TRUE16-D16W16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:4 scope:SCOPE_SYS192; GFX12-TRUE16-D16W16-NEXT:    s_wait_loadcnt 0x0193; GFX12-TRUE16-D16W16-NEXT:    scratch_load_d16_hi_b16 v0, off, s32 offset:6 th:TH_LOAD_LU ; 2-byte Folded Reload194; GFX12-TRUE16-D16W16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l195; GFX12-TRUE16-D16W16-NEXT:    s_wait_loadcnt 0x0196; GFX12-TRUE16-D16W16-NEXT:    s_wait_storecnt 0x0197; GFX12-TRUE16-D16W16-NEXT:    scratch_store_d16_hi_b16 off, v0, s32 scope:SCOPE_SYS198; GFX12-TRUE16-D16W16-NEXT:    s_wait_storecnt 0x0199; GFX12-TRUE16-D16W16-NEXT:    scratch_store_b16 off, v0, s32 offset:4 scope:SCOPE_SYS200; GFX12-TRUE16-D16W16-NEXT:    s_wait_storecnt 0x0201; GFX12-TRUE16-D16W16-NEXT:    s_setpc_b64 s[30:31]202;203; GFX1250-TRUE16-LABEL: spill_i16_alu_two_vals:204; GFX1250-TRUE16:       ; %bb.0: ; %entry205; GFX1250-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0206; GFX1250-TRUE16-NEXT:    s_wait_kmcnt 0x0207; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS208; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0209; GFX1250-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l210; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:6 ; 2-byte Folded Spill211; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0212; GFX1250-TRUE16-NEXT:    ;;#ASMSTART213; GFX1250-TRUE16-NEXT:    ;;#ASMEND214; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 offset:4 scope:SCOPE_SYS215; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0216; GFX1250-TRUE16-NEXT:    scratch_load_u16 v1, off, s32 offset:6 th:TH_LOAD_LU ; 2-byte Folded Reload217; GFX1250-TRUE16-NEXT:    v_add_nc_u16 v0.l, 0x7b, v0.l218; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0219; GFX1250-TRUE16-NEXT:    v_mov_b16_e32 v0.h, v1.l220; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0221; GFX1250-TRUE16-NEXT:    scratch_store_d16_hi_b16 off, v0, s32 scope:SCOPE_SYS222; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0223; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0224; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:4 scope:SCOPE_SYS225; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0226; GFX1250-TRUE16-NEXT:    s_set_pc_i64 s[30:31]227;228; GFX1250-FAKE16-LABEL: spill_i16_alu_two_vals:229; GFX1250-FAKE16:       ; %bb.0: ; %entry230; GFX1250-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0231; GFX1250-FAKE16-NEXT:    s_wait_kmcnt 0x0232; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS233; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0234; GFX1250-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v0235; GFX1250-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill236; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0237; GFX1250-FAKE16-NEXT:    ;;#ASMSTART238; GFX1250-FAKE16-NEXT:    ;;#ASMEND239; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 offset:4 scope:SCOPE_SYS240; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0241; GFX1250-FAKE16-NEXT:    scratch_load_b32 v1, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload242; GFX1250-FAKE16-NEXT:    v_add_nc_u16 v0, 0x7b, v0243; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0244; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0245; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v1, s32 scope:SCOPE_SYS246; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0247; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0248; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 offset:4 scope:SCOPE_SYS249; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0250; GFX1250-FAKE16-NEXT:    s_set_pc_i64 s[30:31]251entry:252  %alloca = alloca i16, i32 1, align 4, addrspace(5)253  %alloca2 = alloca i16, i32 1, align 4, addrspace(5)254 255  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0256  %a = load volatile i16, ptr addrspace(5) %aptr257  %add = add i16 %a, 123258 259  ; Force %a to spill.260  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()261 262  %bptr = getelementptr i16, ptr addrspace(5) %alloca2, i32 0263  %b = load volatile i16, ptr addrspace(5) %bptr264  %badd = add i16 %b, 123265  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0266  store volatile i16 %add, ptr addrspace(5) %outptr267  %outptr2 = getelementptr i16, ptr addrspace(5) %alloca2, i32 0268  store volatile i16 %badd, ptr addrspace(5) %outptr2269 270  ret void271}272 273; Tests after this do not actually test 16 bit spills because there is no use of VGPR_16. They could demonstrate 16 bit spills if we update the instructions to use VGPR_16 instead of VGPR_32274 275define void @spill_i16() {276; GCN-TRUE16-LABEL: spill_i16:277; GCN-TRUE16:       ; %bb.0: ; %entry278; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc280; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)281; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill282; GCN-TRUE16-NEXT:    ;;#ASMSTART283; GCN-TRUE16-NEXT:    ;;#ASMEND284; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 ; 2-byte Folded Reload285; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)286; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 dlc287; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0288; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]289;290; GCN-FAKE16-LABEL: spill_i16:291; GCN-FAKE16:       ; %bb.0: ; %entry292; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)293; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc294; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)295; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill296; GCN-FAKE16-NEXT:    ;;#ASMSTART297; GCN-FAKE16-NEXT:    ;;#ASMEND298; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:4 ; 4-byte Folded Reload299; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)300; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 dlc301; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0302; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]303;304; GFX12-TRUE16-LABEL: spill_i16:305; GFX12-TRUE16:       ; %bb.0: ; %entry306; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0307; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0308; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0309; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0310; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0311; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS312; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0313; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill314; GFX12-TRUE16-NEXT:    ;;#ASMSTART315; GFX12-TRUE16-NEXT:    ;;#ASMEND316; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 th:TH_LOAD_LU ; 2-byte Folded Reload317; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0318; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0319; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS320; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0321; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]322;323; GFX1250-LABEL: spill_i16:324; GFX1250:       ; %bb.0: ; %entry325; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0326; GFX1250-NEXT:    s_wait_kmcnt 0x0327; GFX1250-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS328; GFX1250-NEXT:    s_wait_loadcnt 0x0329; GFX1250-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill330; GFX1250-NEXT:    s_wait_xcnt 0x0331; GFX1250-NEXT:    ;;#ASMSTART332; GFX1250-NEXT:    ;;#ASMEND333; GFX1250-NEXT:    scratch_load_b32 v0, off, s32 offset:4 th:TH_LOAD_LU ; 4-byte Folded Reload334; GFX1250-NEXT:    s_wait_xcnt 0x0335; GFX1250-NEXT:    s_wait_loadcnt 0x0336; GFX1250-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS337; GFX1250-NEXT:    s_wait_storecnt 0x0338; GFX1250-NEXT:    s_set_pc_i64 s[30:31]339entry:340  %alloca = alloca i16, i32 1, align 4, addrspace(5)341 342  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0343  %a = load volatile i16, ptr addrspace(5) %aptr344 345  ; Force %a to spill.346  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()347 348  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0349  store volatile i16 %a, ptr addrspace(5) %outptr350 351  ret void352}353 354define void @spill_half() {355; GCN-TRUE16-LABEL: spill_half:356; GCN-TRUE16:       ; %bb.0: ; %entry357; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc359; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)360; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill361; GCN-TRUE16-NEXT:    ;;#ASMSTART362; GCN-TRUE16-NEXT:    ;;#ASMEND363; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 ; 2-byte Folded Reload364; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)365; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 dlc366; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0367; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]368;369; GCN-FAKE16-LABEL: spill_half:370; GCN-FAKE16:       ; %bb.0: ; %entry371; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)372; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc373; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)374; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill375; GCN-FAKE16-NEXT:    ;;#ASMSTART376; GCN-FAKE16-NEXT:    ;;#ASMEND377; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:4 ; 4-byte Folded Reload378; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)379; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 dlc380; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0381; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]382;383; GFX12-TRUE16-LABEL: spill_half:384; GFX12-TRUE16:       ; %bb.0: ; %entry385; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0386; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0387; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0388; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0389; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0390; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS391; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0392; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 ; 2-byte Folded Spill393; GFX12-TRUE16-NEXT:    ;;#ASMSTART394; GFX12-TRUE16-NEXT:    ;;#ASMEND395; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 th:TH_LOAD_LU ; 2-byte Folded Reload396; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0397; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0398; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS399; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0400; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]401;402; GFX1250-LABEL: spill_half:403; GFX1250:       ; %bb.0: ; %entry404; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0405; GFX1250-NEXT:    s_wait_kmcnt 0x0406; GFX1250-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS407; GFX1250-NEXT:    s_wait_loadcnt 0x0408; GFX1250-NEXT:    scratch_store_b32 off, v0, s32 offset:4 ; 4-byte Folded Spill409; GFX1250-NEXT:    s_wait_xcnt 0x0410; GFX1250-NEXT:    ;;#ASMSTART411; GFX1250-NEXT:    ;;#ASMEND412; GFX1250-NEXT:    scratch_load_b32 v0, off, s32 offset:4 th:TH_LOAD_LU ; 4-byte Folded Reload413; GFX1250-NEXT:    s_wait_xcnt 0x0414; GFX1250-NEXT:    s_wait_loadcnt 0x0415; GFX1250-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS416; GFX1250-NEXT:    s_wait_storecnt 0x0417; GFX1250-NEXT:    s_set_pc_i64 s[30:31]418entry:419  %alloca = alloca half, i32 1, align 4, addrspace(5)420 421  %aptr = getelementptr half, ptr addrspace(5) %alloca, i32 0422  %a = load volatile half, ptr addrspace(5) %aptr423 424  ; Force %a to spill.425  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()426 427  %outptr = getelementptr half, ptr addrspace(5) %alloca, i32 0428  store volatile half %a, ptr addrspace(5) %outptr429 430  ret void431}432 433define void @spill_i16_from_v2i16() {434; GCN-TRUE16-LABEL: spill_i16_from_v2i16:435; GCN-TRUE16:       ; %bb.0: ; %entry436; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)437; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 glc dlc438; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)439; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill440; GCN-TRUE16-NEXT:    ;;#ASMSTART441; GCN-TRUE16-NEXT:    ;;#ASMEND442; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 ; 2-byte Folded Reload443; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)444; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 dlc445; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0446; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]447;448; GCN-FAKE16-LABEL: spill_i16_from_v2i16:449; GCN-FAKE16:       ; %bb.0: ; %entry450; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)451; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 offset:2 glc dlc452; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)453; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill454; GCN-FAKE16-NEXT:    ;;#ASMSTART455; GCN-FAKE16-NEXT:    ;;#ASMEND456; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 ; 4-byte Folded Reload457; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)458; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 dlc459; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0460; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]461;462; GFX12-TRUE16-LABEL: spill_i16_from_v2i16:463; GFX12-TRUE16:       ; %bb.0: ; %entry464; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0465; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0466; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0467; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0468; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0469; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 scope:SCOPE_SYS470; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0471; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill472; GFX12-TRUE16-NEXT:    ;;#ASMSTART473; GFX12-TRUE16-NEXT:    ;;#ASMEND474; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 th:TH_LOAD_LU ; 2-byte Folded Reload475; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0476; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0477; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS478; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0479; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]480;481; GFX1250-LABEL: spill_i16_from_v2i16:482; GFX1250:       ; %bb.0: ; %entry483; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0484; GFX1250-NEXT:    s_wait_kmcnt 0x0485; GFX1250-NEXT:    scratch_load_u16 v0, off, s32 offset:2 scope:SCOPE_SYS486; GFX1250-NEXT:    s_wait_loadcnt 0x0487; GFX1250-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill488; GFX1250-NEXT:    s_wait_xcnt 0x0489; GFX1250-NEXT:    ;;#ASMSTART490; GFX1250-NEXT:    ;;#ASMEND491; GFX1250-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload492; GFX1250-NEXT:    s_wait_xcnt 0x0493; GFX1250-NEXT:    s_wait_loadcnt 0x0494; GFX1250-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS495; GFX1250-NEXT:    s_wait_storecnt 0x0496; GFX1250-NEXT:    s_set_pc_i64 s[30:31]497entry:498  %alloca = alloca <2 x i16>, i32 2, align 1, addrspace(5)499 500  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1501  %a = load volatile i16, ptr addrspace(5) %aptr502 503  ; Force %a to spill.504  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()505 506  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1507  store volatile i16 %a, ptr addrspace(5) %outptr508 509  ret void510}511 512define void @spill_2xi16_from_v2i16() {513; GCN-TRUE16-LABEL: spill_2xi16_from_v2i16:514; GCN-TRUE16:       ; %bb.0: ; %entry515; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)516; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 glc dlc517; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)518; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill519; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc520; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)521; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:10 ; 2-byte Folded Spill522; GCN-TRUE16-NEXT:    ;;#ASMSTART523; GCN-TRUE16-NEXT:    ;;#ASMEND524; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 ; 2-byte Folded Reload525; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)526; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 dlc527; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0528; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:10 ; 2-byte Folded Reload529; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)530; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 dlc531; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0532; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]533;534; GCN-FAKE16-LABEL: spill_2xi16_from_v2i16:535; GCN-FAKE16:       ; %bb.0: ; %entry536; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 offset:2 glc dlc538; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)539; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill540; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc541; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)542; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:12 ; 4-byte Folded Spill543; GCN-FAKE16-NEXT:    ;;#ASMSTART544; GCN-FAKE16-NEXT:    ;;#ASMEND545; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 ; 4-byte Folded Reload546; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)547; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 dlc548; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0549; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:12 ; 4-byte Folded Reload550; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)551; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 dlc552; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0553; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]554;555; GFX12-TRUE16-LABEL: spill_2xi16_from_v2i16:556; GFX12-TRUE16:       ; %bb.0: ; %entry557; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0558; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0559; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0560; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0561; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0562; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 scope:SCOPE_SYS563; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0564; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill565; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS566; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0567; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:10 ; 2-byte Folded Spill568; GFX12-TRUE16-NEXT:    ;;#ASMSTART569; GFX12-TRUE16-NEXT:    ;;#ASMEND570; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 th:TH_LOAD_LU ; 2-byte Folded Reload571; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0572; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0573; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS574; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0575; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:10 th:TH_LOAD_LU ; 2-byte Folded Reload576; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0577; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS578; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0579; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]580;581; GFX1250-TRUE16-LABEL: spill_2xi16_from_v2i16:582; GFX1250-TRUE16:       ; %bb.0: ; %entry583; GFX1250-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0584; GFX1250-TRUE16-NEXT:    s_wait_kmcnt 0x0585; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 offset:2 scope:SCOPE_SYS586; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0587; GFX1250-TRUE16-NEXT:    s_clause 0x1 ; 4-byte Folded Spill588; GFX1250-TRUE16-NEXT:    scratch_store_b32 off, v0, s32 offset:12589; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS590; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0591; GFX1250-TRUE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill592; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0593; GFX1250-TRUE16-NEXT:    ;;#ASMSTART594; GFX1250-TRUE16-NEXT:    ;;#ASMEND595; GFX1250-TRUE16-NEXT:    scratch_load_b32 v0, off, s32 offset:12 th:TH_LOAD_LU ; 4-byte Folded Reload596; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0597; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0598; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS599; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0600; GFX1250-TRUE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload601; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0602; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS603; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0604; GFX1250-TRUE16-NEXT:    s_set_pc_i64 s[30:31]605;606; GFX1250-FAKE16-LABEL: spill_2xi16_from_v2i16:607; GFX1250-FAKE16:       ; %bb.0: ; %entry608; GFX1250-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0609; GFX1250-FAKE16-NEXT:    s_wait_kmcnt 0x0610; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 offset:2 scope:SCOPE_SYS611; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0612; GFX1250-FAKE16-NEXT:    s_clause 0x1 ; 4-byte Folded Spill613; GFX1250-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8614; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS615; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0616; GFX1250-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:12 ; 4-byte Folded Spill617; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0618; GFX1250-FAKE16-NEXT:    ;;#ASMSTART619; GFX1250-FAKE16-NEXT:    ;;#ASMEND620; GFX1250-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload621; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0622; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0623; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS624; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0625; GFX1250-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:12 th:TH_LOAD_LU ; 4-byte Folded Reload626; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0627; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS628; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0629; GFX1250-FAKE16-NEXT:    s_set_pc_i64 s[30:31]630entry:631  %alloca = alloca <2 x i16>, i32 2, align 1, addrspace(5)632 633  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1634  %a = load volatile i16, ptr addrspace(5) %aptr635  %bptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0636  %b = load volatile i16, ptr addrspace(5) %bptr637 638  ; Force %a to spill.639  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()640 641  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1642  store volatile i16 %a, ptr addrspace(5) %outptr643  %boutptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0644  store volatile i16 %b, ptr addrspace(5) %boutptr645 646  ret void647}648 649define void @spill_2xi16_from_v2i16_one_free_reg() {650; GCN-TRUE16-LABEL: spill_2xi16_from_v2i16_one_free_reg:651; GCN-TRUE16:       ; %bb.0: ; %entry652; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)653; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 glc dlc654; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)655; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill656; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 glc dlc657; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)658; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:10 ; 2-byte Folded Spill659; GCN-TRUE16-NEXT:    ;;#ASMSTART660; GCN-TRUE16-NEXT:    ;;#ASMEND661; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 ; 2-byte Folded Reload662; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)663; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 dlc664; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0665; GCN-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:10 ; 2-byte Folded Reload666; GCN-TRUE16-NEXT:    s_waitcnt vmcnt(0)667; GCN-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 dlc668; GCN-TRUE16-NEXT:    s_waitcnt_vscnt null, 0x0669; GCN-TRUE16-NEXT:    s_setpc_b64 s[30:31]670;671; GCN-FAKE16-LABEL: spill_2xi16_from_v2i16_one_free_reg:672; GCN-FAKE16:       ; %bb.0: ; %entry673; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)674; GCN-FAKE16-NEXT:    scratch_load_u16 v7, off, s32 offset:2 glc dlc675; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)676; GCN-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 glc dlc677; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)678; GCN-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill679; GCN-FAKE16-NEXT:    ;;#ASMSTART680; GCN-FAKE16-NEXT:    ;;#ASMEND681; GCN-FAKE16-NEXT:    scratch_store_b16 off, v7, s32 offset:2 dlc682; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0683; GCN-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 ; 4-byte Folded Reload684; GCN-FAKE16-NEXT:    s_waitcnt vmcnt(0)685; GCN-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 dlc686; GCN-FAKE16-NEXT:    s_waitcnt_vscnt null, 0x0687; GCN-FAKE16-NEXT:    s_setpc_b64 s[30:31]688;689; GFX12-TRUE16-LABEL: spill_2xi16_from_v2i16_one_free_reg:690; GFX12-TRUE16:       ; %bb.0: ; %entry691; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0692; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0693; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0694; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0695; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0696; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:2 scope:SCOPE_SYS697; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0698; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:8 ; 2-byte Folded Spill699; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 scope:SCOPE_SYS700; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0701; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:10 ; 2-byte Folded Spill702; GFX12-TRUE16-NEXT:    ;;#ASMSTART703; GFX12-TRUE16-NEXT:    ;;#ASMEND704; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:8 th:TH_LOAD_LU ; 2-byte Folded Reload705; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0706; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0707; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS708; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0709; GFX12-TRUE16-NEXT:    scratch_load_d16_b16 v0, off, s32 offset:10 th:TH_LOAD_LU ; 2-byte Folded Reload710; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0711; GFX12-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS712; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0713; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]714;715; GFX1250-TRUE16-LABEL: spill_2xi16_from_v2i16_one_free_reg:716; GFX1250-TRUE16:       ; %bb.0: ; %entry717; GFX1250-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0718; GFX1250-TRUE16-NEXT:    s_wait_kmcnt 0x0719; GFX1250-TRUE16-NEXT:    scratch_load_u16 v7, off, s32 offset:2 scope:SCOPE_SYS720; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0721; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0722; GFX1250-TRUE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS723; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0724; GFX1250-TRUE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill725; GFX1250-TRUE16-NEXT:    s_wait_xcnt 0x0726; GFX1250-TRUE16-NEXT:    ;;#ASMSTART727; GFX1250-TRUE16-NEXT:    ;;#ASMEND728; GFX1250-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v7.l729; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 offset:2 scope:SCOPE_SYS730; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0731; GFX1250-TRUE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload732; GFX1250-TRUE16-NEXT:    s_wait_loadcnt 0x0733; GFX1250-TRUE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS734; GFX1250-TRUE16-NEXT:    s_wait_storecnt 0x0735; GFX1250-TRUE16-NEXT:    s_set_pc_i64 s[30:31]736;737; GFX1250-FAKE16-LABEL: spill_2xi16_from_v2i16_one_free_reg:738; GFX1250-FAKE16:       ; %bb.0: ; %entry739; GFX1250-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0740; GFX1250-FAKE16-NEXT:    s_wait_kmcnt 0x0741; GFX1250-FAKE16-NEXT:    scratch_load_u16 v7, off, s32 offset:2 scope:SCOPE_SYS742; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0743; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0744; GFX1250-FAKE16-NEXT:    scratch_load_u16 v0, off, s32 scope:SCOPE_SYS745; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0746; GFX1250-FAKE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill747; GFX1250-FAKE16-NEXT:    s_wait_xcnt 0x0748; GFX1250-FAKE16-NEXT:    ;;#ASMSTART749; GFX1250-FAKE16-NEXT:    ;;#ASMEND750; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v7, s32 offset:2 scope:SCOPE_SYS751; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0752; GFX1250-FAKE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload753; GFX1250-FAKE16-NEXT:    s_wait_loadcnt 0x0754; GFX1250-FAKE16-NEXT:    scratch_store_b16 off, v0, s32 scope:SCOPE_SYS755; GFX1250-FAKE16-NEXT:    s_wait_storecnt 0x0756; GFX1250-FAKE16-NEXT:    s_set_pc_i64 s[30:31]757entry:758  %alloca = alloca <2 x i16>, i32 2, align 1, addrspace(5)759 760  %aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1761  %a = load volatile i16, ptr addrspace(5) %aptr762  %bptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0763  %b = load volatile i16, ptr addrspace(5) %bptr764 765  ; Force %a to spill.766  ; Would not need to spill if the short scratch instructions used vgpr_16767  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6}" ()768 769  %outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 1770  store volatile i16 %a, ptr addrspace(5) %outptr771  %boutptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0772  store volatile i16 %b, ptr addrspace(5) %boutptr773 774  ret void775}776 777define void @spill_v2i16() {778; GCN-LABEL: spill_v2i16:779; GCN:       ; %bb.0: ; %entry780; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)781; GCN-NEXT:    scratch_load_b32 v0, off, s32 offset:4 glc dlc782; GCN-NEXT:    s_waitcnt vmcnt(0)783; GCN-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill784; GCN-NEXT:    ;;#ASMSTART785; GCN-NEXT:    ;;#ASMEND786; GCN-NEXT:    scratch_load_b32 v0, off, s32 offset:8 ; 4-byte Folded Reload787; GCN-NEXT:    s_waitcnt vmcnt(0)788; GCN-NEXT:    scratch_store_b32 off, v0, s32 offset:4 dlc789; GCN-NEXT:    s_waitcnt_vscnt null, 0x0790; GCN-NEXT:    s_setpc_b64 s[30:31]791;792; GFX12-TRUE16-LABEL: spill_v2i16:793; GFX12-TRUE16:       ; %bb.0: ; %entry794; GFX12-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0795; GFX12-TRUE16-NEXT:    s_wait_expcnt 0x0796; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0797; GFX12-TRUE16-NEXT:    s_wait_bvhcnt 0x0798; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0799; GFX12-TRUE16-NEXT:    scratch_load_b32 v0, off, s32 offset:4 scope:SCOPE_SYS800; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0801; GFX12-TRUE16-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill802; GFX12-TRUE16-NEXT:    ;;#ASMSTART803; GFX12-TRUE16-NEXT:    ;;#ASMEND804; GFX12-TRUE16-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload805; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0806; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0807; GFX12-TRUE16-NEXT:    scratch_store_b32 off, v0, s32 offset:4 scope:SCOPE_SYS808; GFX12-TRUE16-NEXT:    s_wait_storecnt 0x0809; GFX12-TRUE16-NEXT:    s_setpc_b64 s[30:31]810;811; GFX1250-LABEL: spill_v2i16:812; GFX1250:       ; %bb.0: ; %entry813; GFX1250-NEXT:    s_wait_loadcnt_dscnt 0x0814; GFX1250-NEXT:    s_wait_kmcnt 0x0815; GFX1250-NEXT:    scratch_load_b32 v0, off, s32 offset:4 scope:SCOPE_SYS816; GFX1250-NEXT:    s_wait_loadcnt 0x0817; GFX1250-NEXT:    scratch_store_b32 off, v0, s32 offset:8 ; 4-byte Folded Spill818; GFX1250-NEXT:    s_wait_xcnt 0x0819; GFX1250-NEXT:    ;;#ASMSTART820; GFX1250-NEXT:    ;;#ASMEND821; GFX1250-NEXT:    scratch_load_b32 v0, off, s32 offset:8 th:TH_LOAD_LU ; 4-byte Folded Reload822; GFX1250-NEXT:    s_wait_xcnt 0x0823; GFX1250-NEXT:    s_wait_loadcnt 0x0824; GFX1250-NEXT:    scratch_store_b32 off, v0, s32 offset:4 scope:SCOPE_SYS825; GFX1250-NEXT:    s_wait_storecnt 0x0826; GFX1250-NEXT:    s_set_pc_i64 s[30:31]827entry:828  %alloca = alloca <2 x i16>, i32 2, align 1, addrspace(5)829 830  %aptr = getelementptr <2 x i16>, ptr addrspace(5) %alloca, i32 1831  %a = load volatile <2 x i16>, ptr addrspace(5) %aptr832 833  ; Force %a to spill.834  call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()835 836  %outptr = getelementptr <2 x i16>, ptr addrspace(5) %alloca, i32 1837  store volatile <2 x i16> %a, ptr addrspace(5) %outptr838 839  ret void840}841