| ; 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 |
| } |