298 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination %s -o - | FileCheck -check-prefix=GCN %s3 4# Kernels can have no FP5---6name: kernel_no_fold_fi_non_stack_rsrc_and_soffset7tracksRegLiveness: true8frameInfo:9 maxAlignment: 410 localFrameSize: 411stack:12 - { id: 0, size: 4, alignment: 4, local-offset: 0 }13machineFunctionInfo:14 isEntryFunction: true15 scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99'16 stackPtrOffsetReg: '$sgpr32'17body: |18 bb.0:19 liveins: $sgpr12_sgpr13_sgpr14_sgpr1520 21 ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_rsrc_and_soffset22 ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr1523 ; GCN-NEXT: {{ $}}24 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr1525 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec26 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec27 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]28 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr029 %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr1530 %1:sreg_32_xm0 = S_MOV_B32 031 %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec32 %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, %1, 0, 0, 0, implicit $exec33 $vgpr0 = COPY %334 SI_RETURN_TO_EPILOG $vgpr035 36...37 38---39name: kernel_no_fold_fi_non_stack_rsrc40tracksRegLiveness: true41frameInfo:42 maxAlignment: 443 localFrameSize: 444stack:45 - { id: 0, size: 4, alignment: 4, local-offset: 0 }46machineFunctionInfo:47 isEntryFunction: true48 scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99'49 stackPtrOffsetReg: '$sgpr32'50body: |51 bb.0:52 liveins: $sgpr12_sgpr13_sgpr14_sgpr1553 54 ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_rsrc55 ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr1556 ; GCN-NEXT: {{ $}}57 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr1558 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec59 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec60 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]61 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr062 %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr1563 %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec64 %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, 0, 0, 0, 0, implicit $exec65 $vgpr0 = COPY %366 SI_RETURN_TO_EPILOG $vgpr067 68...69 70---71name: kernel_no_fold_fi_non_stack_soffset72tracksRegLiveness: true73frameInfo:74 maxAlignment: 475 localFrameSize: 476stack:77 - { id: 0, size: 4, alignment: 4, local-offset: 0 }78machineFunctionInfo:79 isEntryFunction: true80 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'81 stackPtrOffsetReg: '$sgpr32'82body: |83 bb.0:84 85 ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_soffset86 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec87 ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec88 ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec89 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec90 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]91 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr092 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec93 %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec94 %2:sreg_32_xm0 = S_MOV_B32 095 96 BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, %2, 0, 0, 0, implicit $exec97 %3:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, %2, 0, 0, 0, implicit $exec98 $vgpr0 = COPY %399 S_ENDPGM 0, implicit $vgpr0100 101...102 103---104name: kernel_fold_fi_mubuf105tracksRegLiveness: true106frameInfo:107 maxAlignment: 4108 localFrameSize: 4109stack:110 - { id: 0, size: 4, alignment: 4, local-offset: 0 }111machineFunctionInfo:112 isEntryFunction: true113 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'114 stackPtrOffsetReg: '$sgpr32'115body: |116 bb.0:117 118 ; GCN-LABEL: name: kernel_fold_fi_mubuf119 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec120 ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec121 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec122 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]123 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0124 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec125 %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec126 127 BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec128 %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec129 $vgpr0 = COPY %2130 S_ENDPGM 0, implicit $vgpr0131 132...133 134 135# Functions have an unswizzled SP/FP relative to the wave offset136---137name: function_no_fold_fi_non_stack_rsrc_and_soffset138tracksRegLiveness: true139frameInfo:140 maxAlignment: 4141 localFrameSize: 4142stack:143 - { id: 0, size: 4, alignment: 4, local-offset: 0 }144machineFunctionInfo:145 isEntryFunction: false146 scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99'147 frameOffsetReg: '$sgpr32'148 stackPtrOffsetReg: '$sgpr32'149body: |150 bb.0:151 liveins: $sgpr12_sgpr13_sgpr14_sgpr15152 153 ; GCN-LABEL: name: function_no_fold_fi_non_stack_rsrc_and_soffset154 ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15155 ; GCN-NEXT: {{ $}}156 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15157 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec158 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec159 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]160 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0161 %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15162 %1:sreg_32_xm0 = S_MOV_B32 0163 %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec164 %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, %1, 0, 0, 0, implicit $exec165 $vgpr0 = COPY %3166 SI_RETURN_TO_EPILOG $vgpr0167 168...169 170---171name: function_no_fold_fi_non_stack_rsrc172tracksRegLiveness: true173frameInfo:174 maxAlignment: 4175 localFrameSize: 4176stack:177 - { id: 0, size: 4, alignment: 4, local-offset: 0 }178machineFunctionInfo:179 isEntryFunction: false180 scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99'181 frameOffsetReg: '$sgpr32'182 stackPtrOffsetReg: '$sgpr32'183body: |184 bb.0:185 liveins: $sgpr12_sgpr13_sgpr14_sgpr15186 187 ; GCN-LABEL: name: function_no_fold_fi_non_stack_rsrc188 ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15189 ; GCN-NEXT: {{ $}}190 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15191 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec192 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec193 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]194 ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0195 %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15196 %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec197 %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, 0, 0, 0, 0, implicit $exec198 $vgpr0 = COPY %3199 SI_RETURN_TO_EPILOG $vgpr0200 201...202 203---204name: function_no_fold_fi_non_stack_soffset205tracksRegLiveness: true206frameInfo:207 maxAlignment: 4208 localFrameSize: 4209stack:210 - { id: 0, size: 4, alignment: 4, local-offset: 0 }211machineFunctionInfo:212 isEntryFunction: false213 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'214 frameOffsetReg: '$sgpr32'215 stackPtrOffsetReg: '$sgpr32'216body: |217 bb.0:218 219 ; GCN-LABEL: name: function_no_fold_fi_non_stack_soffset220 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec221 ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec222 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec223 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]224 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0225 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec226 %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec227 228 BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec229 %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec230 $vgpr0 = COPY %2231 S_ENDPGM 0, implicit $vgpr0232 233...234 235---236name: function_fold_fi_mubuf_wave_relative237tracksRegLiveness: true238frameInfo:239 maxAlignment: 4240 localFrameSize: 4241stack:242 - { id: 0, size: 4, alignment: 4, local-offset: 0 }243machineFunctionInfo:244 isEntryFunction: false245 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'246 frameOffsetReg: '$sgpr32'247 stackPtrOffsetReg: '$sgpr32'248body: |249 bb.0:250 251 ; GCN-LABEL: name: function_fold_fi_mubuf_wave_relative252 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec253 ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec254 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec255 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]256 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0257 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec258 %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec259 260 BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec261 %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec262 $vgpr0 = COPY %2263 S_ENDPGM 0, implicit $vgpr0264 265...266 267---268name: function_fold_fi_mubuf_stack_relative269tracksRegLiveness: true270frameInfo:271 maxAlignment: 4272 localFrameSize: 4273stack:274 - { id: 0, size: 4, alignment: 4, local-offset: 0 }275machineFunctionInfo:276 isEntryFunction: false277 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'278 frameOffsetReg: '$sgpr32'279 stackPtrOffsetReg: '$sgpr32'280body: |281 bb.0:282 283 ; GCN-LABEL: name: function_fold_fi_mubuf_stack_relative284 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec285 ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec286 ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec287 ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]288 ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0289 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec290 %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec291 292 BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec293 %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec294 $vgpr0 = COPY %2295 S_ENDPGM 0, implicit $vgpr0296 297...298