190 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -run-pass=prologepilog %s -o - | FileCheck -check-prefix=CHECK %s3 4---5name: spill_v326tracksRegLiveness: true7stack:8 - { id: 0, type: spill-slot, size: 4, alignment: 4 }9machineFunctionInfo:10 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'11 stackPtrOffsetReg: '$sgpr32'12 frameOffsetReg: '$sgpr33'13body: |14 bb.0:15 liveins: $vgpr016 17 ; CHECK-LABEL: name: spill_v3218 ; CHECK: liveins: $vgpr019 ; CHECK-NEXT: {{ $}}20 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)21 ; CHECK-NEXT: S_NOP 0, implicit $vgpr022 SI_SPILL_V32_SAVE $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)23 S_NOP 0, implicit $vgpr024...25 26---27name: spill_v32_kill28tracksRegLiveness: true29stack:30 - { id: 0, type: spill-slot, size: 4, alignment: 4 }31machineFunctionInfo:32 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'33 stackPtrOffsetReg: '$sgpr32'34 frameOffsetReg: '$sgpr33'35body: |36 bb.0:37 liveins: $vgpr038 39 ; CHECK-LABEL: name: spill_v32_kill40 ; CHECK: liveins: $vgpr041 ; CHECK-NEXT: {{ $}}42 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)43 SI_SPILL_V32_SAVE killed $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)44...45 46---47name: spill_v6448tracksRegLiveness: true49stack:50 - { id: 0, type: spill-slot, size: 8, alignment: 4 }51machineFunctionInfo:52 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'53 stackPtrOffsetReg: '$sgpr32'54 frameOffsetReg: '$sgpr33'55body: |56 bb.0:57 liveins: $vgpr0_vgpr158 59 ; CHECK-LABEL: name: spill_v6460 ; CHECK: liveins: $vgpr0_vgpr161 ; CHECK-NEXT: {{ $}}62 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr0_vgpr1 :: (store (s32) into %stack.0, addrspace 5)63 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec, implicit $vgpr0_vgpr1 :: (store (s32) into %stack.0 + 4, addrspace 5)64 ; CHECK-NEXT: S_NOP 0, implicit $vgpr0_vgpr165 SI_SPILL_V64_SAVE $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, addrspace 5)66 S_NOP 0, implicit $vgpr0_vgpr167...68 69---70name: spill_v64_kill71tracksRegLiveness: true72stack:73 - { id: 0, type: spill-slot, size: 8, alignment: 4 }74machineFunctionInfo:75 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'76 stackPtrOffsetReg: '$sgpr32'77 frameOffsetReg: '$sgpr33'78body: |79 bb.0:80 liveins: $vgpr0_vgpr181 82 ; CHECK-LABEL: name: spill_v64_kill83 ; CHECK: liveins: $vgpr0_vgpr184 ; CHECK-NEXT: {{ $}}85 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr0_vgpr1 :: (store (s32) into %stack.0, addrspace 5)86 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1 :: (store (s32) into %stack.0 + 4, addrspace 5)87 SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, addrspace 5)88...89 90# Make sure there's no verifier error on the undef spill component when the value is killed.91 92---93name: spill_v64_undef_sub1_killed94tracksRegLiveness: true95stack:96 - { id: 0, type: spill-slot, size: 8, alignment: 4 }97machineFunctionInfo:98 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'99 stackPtrOffsetReg: '$sgpr32'100 frameOffsetReg: '$sgpr33'101body: |102 bb.0:103 liveins: $vgpr0104 105 ; CHECK-LABEL: name: spill_v64_undef_sub1_killed106 ; CHECK: liveins: $vgpr0107 ; CHECK-NEXT: {{ $}}108 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr0_vgpr1 :: (store (s32) into %stack.0, addrspace 5)109 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1 :: (store (s32) into %stack.0 + 4, addrspace 5)110 SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, addrspace 5)111...112 113---114name: spill_v64_undef_sub0_killed115tracksRegLiveness: true116stack:117 - { id: 0, type: spill-slot, size: 8, alignment: 4 }118machineFunctionInfo:119 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'120 stackPtrOffsetReg: '$sgpr32'121 frameOffsetReg: '$sgpr33'122body: |123 bb.0:124 liveins: $vgpr1125 126 ; CHECK-LABEL: name: spill_v64_undef_sub0_killed127 ; CHECK: liveins: $vgpr1128 ; CHECK-NEXT: {{ $}}129 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $vgpr0_vgpr1 :: (store (s32) into %stack.0, addrspace 5)130 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1 :: (store (s32) into %stack.0 + 4, addrspace 5)131 SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, addrspace 5)132...133 134---135name: spill_v128_kill136tracksRegLiveness: true137stack:138 - { id: 0, type: spill-slot, size: 16, alignment: 4 }139machineFunctionInfo:140 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'141 stackPtrOffsetReg: '$sgpr32'142 frameOffsetReg: '$sgpr33'143body: |144 bb.0:145 liveins: $vgpr0_vgpr1_vgpr2_vgpr3146 147 ; CHECK-LABEL: name: spill_v128_kill148 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0_vgpr1_vgpr2_vgpr3 :: (store (s32) into %stack.0, addrspace 5)151 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec :: (store (s32) into %stack.0 + 4, addrspace 5)152 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 8, 0, 0, implicit $exec :: (store (s32) into %stack.0 + 8, addrspace 5)153 ; CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 12, 0, 0, implicit $exec, implicit killed $vgpr0_vgpr1_vgpr2_vgpr3 :: (store (s32) into %stack.0 + 12, addrspace 5)154 SI_SPILL_V128_SAVE killed $vgpr0_vgpr1_vgpr2_vgpr3, %stack.0, $sgpr32, 0, implicit $exec :: (store (s128) into %stack.0, addrspace 5)155...156 157---158name: spill_v32_undef159tracksRegLiveness: true160stack:161 - { id: 0, type: spill-slot, size: 4, alignment: 4 }162machineFunctionInfo:163 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'164 stackPtrOffsetReg: '$sgpr32'165 frameOffsetReg: '$sgpr33'166body: |167 bb.0:168 ; CHECK-LABEL: name: spill_v32_undef169 ; CHECK: S_NOP 0, implicit undef $vgpr0170 SI_SPILL_V32_SAVE undef $vgpr0, %stack.0, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)171 S_NOP 0, implicit undef $vgpr0172...173 174---175name: spill_v64_undef176tracksRegLiveness: true177stack:178 - { id: 0, type: spill-slot, size: 8, alignment: 4 }179machineFunctionInfo:180 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'181 stackPtrOffsetReg: '$sgpr32'182 frameOffsetReg: '$sgpr33'183body: |184 bb.0:185 ; CHECK-LABEL: name: spill_v64_undef186 ; CHECK: S_NOP 0, implicit undef $vgpr0_vgpr1187 SI_SPILL_V64_SAVE undef $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, addrspace 5)188 S_NOP 0, implicit undef $vgpr0_vgpr1189...190