blob: 6ece8125a1844217a659c04550cba123d2f7a5a5 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 -stop-after=prologepilog < %s | FileCheck %s -check-prefixes=GFX1250-TRUE16
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 -enable-misched=0 -post-RA-scheduler=0 -stress-regalloc=8 -stop-after=prologepilog < %s | FileCheck %s -check-prefixes=GFX1250-FAKE16
define amdgpu_kernel void @spill_i16_alu() {
; GFX1250-TRUE16-LABEL: name: spill_i16_alu
; GFX1250-TRUE16: bb.0.entry:
; GFX1250-TRUE16-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x04, 0x30, 0x36, 0xe9, 0x02
; GFX1250-TRUE16-NEXT: frame-setup CFI_INSTRUCTION undefined $pc_reg
; GFX1250-TRUE16-NEXT: S_SETREG_IMM32_B32 1, 1601, implicit-def $mode, implicit $mode
; GFX1250-TRUE16-NEXT: renamable $vgpr0 = SCRATCH_LOAD_USHORT_ST 0, 0, implicit $exec, implicit $flat_scr :: (volatile dereferenceable load (s16) from %ir.alloca, align 4, addrspace 5)
; GFX1250-TRUE16-NEXT: renamable $vgpr0_lo16 = V_ADD_NC_U16_t16_e64 0, 123, 0, killed $vgpr0_lo16, 0, 0, implicit $exec
; GFX1250-TRUE16-NEXT: SCRATCH_STORE_SHORT_ST_t16 killed $vgpr0_lo16, 2, 0, implicit $exec, implicit $flat_scr :: ("amdgpu-thread-private" store (s16) into %stack.1, addrspace 5)
; GFX1250-TRUE16-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $vgpr0, clobber, implicit-def dead early-clobber $vgpr1, clobber, implicit-def dead early-clobber $vgpr2, clobber, implicit-def dead early-clobber $vgpr3, clobber, implicit-def dead early-clobber $vgpr4, clobber, implicit-def dead early-clobber $vgpr5, clobber, implicit-def dead early-clobber $vgpr6, clobber, implicit-def dead early-clobber $vgpr7
; GFX1250-TRUE16-NEXT: $vgpr1 = SCRATCH_LOAD_USHORT_ST 2, 3, implicit $exec, implicit $flat_scr :: ("amdgpu-last-use" "amdgpu-thread-private" load (s16) from %stack.1, addrspace 5)
; GFX1250-TRUE16-NEXT: $vgpr0_lo16 = V_MOV_B16_t16_e64 0, killed $vgpr1_lo16, 0, implicit $exec
; GFX1250-TRUE16-NEXT: SCRATCH_STORE_SHORT_ST_t16 killed renamable $vgpr0_lo16, 0, 0, implicit $exec, implicit $flat_scr :: (volatile store (s16) into %ir.alloca, align 4, addrspace 5)
; GFX1250-TRUE16-NEXT: S_ENDPGM 0
;
; GFX1250-FAKE16-LABEL: name: spill_i16_alu
; GFX1250-FAKE16: bb.0.entry:
; GFX1250-FAKE16-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x04, 0x30, 0x36, 0xe9, 0x02
; GFX1250-FAKE16-NEXT: frame-setup CFI_INSTRUCTION undefined $pc_reg
; GFX1250-FAKE16-NEXT: S_SETREG_IMM32_B32 1, 1601, implicit-def $mode, implicit $mode
; GFX1250-FAKE16-NEXT: renamable $vgpr0 = SCRATCH_LOAD_USHORT_ST 0, 0, implicit $exec, implicit $flat_scr :: (volatile dereferenceable load (s16) from %ir.alloca, align 4, addrspace 5)
; GFX1250-FAKE16-NEXT: renamable $vgpr0 = V_ADD_NC_U16_fake16_e64 0, 123, 0, killed $vgpr0, 0, 0, implicit $exec
; GFX1250-FAKE16-NEXT: SCRATCH_STORE_DWORD_ST killed $vgpr0, 4, 0, implicit $exec, implicit $flat_scr :: ("amdgpu-thread-private" store (s32) into %stack.1, addrspace 5)
; GFX1250-FAKE16-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $vgpr0, clobber, implicit-def dead early-clobber $vgpr1, clobber, implicit-def dead early-clobber $vgpr2, clobber, implicit-def dead early-clobber $vgpr3, clobber, implicit-def dead early-clobber $vgpr4, clobber, implicit-def dead early-clobber $vgpr5, clobber, implicit-def dead early-clobber $vgpr6, clobber, implicit-def dead early-clobber $vgpr7
; GFX1250-FAKE16-NEXT: $vgpr0 = SCRATCH_LOAD_DWORD_ST 4, 3, implicit $exec, implicit $flat_scr :: ("amdgpu-last-use" "amdgpu-thread-private" load (s32) from %stack.1, addrspace 5)
; GFX1250-FAKE16-NEXT: SCRATCH_STORE_SHORT_ST killed renamable $vgpr0, 0, 0, implicit $exec, implicit $flat_scr :: (volatile store (s16) into %ir.alloca, align 4, addrspace 5)
; GFX1250-FAKE16-NEXT: S_ENDPGM 0
entry:
%alloca = alloca i16, i32 1, align 4, addrspace(5)
%aptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0
%a = load volatile i16, ptr addrspace(5) %aptr
%add = add i16 %a, 123
; Force %a to spill.
call void asm sideeffect "", "~{v0},~{v1},~{v2},~{v3},~{v4},~{v5},~{v6},~{v7}" ()
%outptr = getelementptr i16, ptr addrspace(5) %alloca, i32 0
store volatile i16 %add, ptr addrspace(5) %outptr
ret void
}