Skip to content

Commit f61abee

Browse files
committed
AMDGPU: Add missing tests for local stack alloc s_add_i32 handling
None of these tested the case where the non-frame index operand was a register.
1 parent 4e52e6a commit f61abee

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

llvm/test/CodeGen/AMDGPU/local-stack-alloc-add-references.gfx8.mir

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,160 @@ body: |
425425
426426
...
427427

428+
---
429+
name: local_stack_alloc__s_add_i32__reg_offsets
430+
tracksRegLiveness: true
431+
stack:
432+
- { id: 0, size: 64, alignment: 4 }
433+
machineFunctionInfo:
434+
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
435+
frameOffsetReg: '$sgpr33'
436+
stackPtrOffsetReg: '$sgpr32'
437+
body: |
438+
bb.0:
439+
liveins: $sgpr4, $sgpr5
440+
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
441+
; GFX803: liveins: $sgpr4, $sgpr5
442+
; GFX803-NEXT: {{ $}}
443+
; GFX803-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
444+
; GFX803-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
445+
; GFX803-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
446+
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
447+
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
448+
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
449+
; GFX803-NEXT: SI_RETURN
450+
;
451+
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
452+
; GFX900: liveins: $sgpr4, $sgpr5
453+
; GFX900-NEXT: {{ $}}
454+
; GFX900-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
455+
; GFX900-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
456+
; GFX900-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
457+
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
458+
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
459+
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
460+
; GFX900-NEXT: SI_RETURN
461+
;
462+
; GFX940-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
463+
; GFX940: liveins: $sgpr4, $sgpr5
464+
; GFX940-NEXT: {{ $}}
465+
; GFX940-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
466+
; GFX940-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
467+
; GFX940-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
468+
; GFX940-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
469+
; GFX940-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
470+
; GFX940-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
471+
; GFX940-NEXT: SI_RETURN
472+
;
473+
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
474+
; GFX10: liveins: $sgpr4, $sgpr5
475+
; GFX10-NEXT: {{ $}}
476+
; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
477+
; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
478+
; GFX10-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
479+
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
480+
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
481+
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
482+
; GFX10-NEXT: SI_RETURN
483+
;
484+
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets
485+
; GFX12: liveins: $sgpr4, $sgpr5
486+
; GFX12-NEXT: {{ $}}
487+
; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
488+
; GFX12-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
489+
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def dead $scc
490+
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
491+
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY1]], %stack.0, implicit-def dead $scc
492+
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
493+
; GFX12-NEXT: SI_RETURN
494+
%0:sreg_32 = COPY $sgpr4
495+
%1:sreg_32 = COPY $sgpr5
496+
497+
%2:sreg_32 = S_ADD_I32 %0, %stack.0, implicit-def dead $scc
498+
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:SREG_32 */, %2
499+
%3:sreg_32 = S_ADD_I32 %1, %stack.0, implicit-def dead $scc
500+
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:SREG_32 */, %3
501+
SI_RETURN
502+
503+
...
504+
505+
---
506+
name: local_stack_alloc__s_add_i32__reg_offsets_commute
507+
tracksRegLiveness: true
508+
stack:
509+
- { id: 0, size: 64, alignment: 4 }
510+
machineFunctionInfo:
511+
scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'
512+
frameOffsetReg: '$sgpr33'
513+
stackPtrOffsetReg: '$sgpr32'
514+
body: |
515+
bb.0:
516+
liveins: $sgpr4, $sgpr5
517+
; GFX803-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
518+
; GFX803: liveins: $sgpr4, $sgpr5
519+
; GFX803-NEXT: {{ $}}
520+
; GFX803-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
521+
; GFX803-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
522+
; GFX803-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
523+
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
524+
; GFX803-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
525+
; GFX803-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
526+
; GFX803-NEXT: SI_RETURN
527+
;
528+
; GFX900-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
529+
; GFX900: liveins: $sgpr4, $sgpr5
530+
; GFX900-NEXT: {{ $}}
531+
; GFX900-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
532+
; GFX900-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
533+
; GFX900-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
534+
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
535+
; GFX900-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
536+
; GFX900-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
537+
; GFX900-NEXT: SI_RETURN
538+
;
539+
; GFX940-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
540+
; GFX940: liveins: $sgpr4, $sgpr5
541+
; GFX940-NEXT: {{ $}}
542+
; GFX940-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
543+
; GFX940-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
544+
; GFX940-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
545+
; GFX940-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
546+
; GFX940-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
547+
; GFX940-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
548+
; GFX940-NEXT: SI_RETURN
549+
;
550+
; GFX10-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
551+
; GFX10: liveins: $sgpr4, $sgpr5
552+
; GFX10-NEXT: {{ $}}
553+
; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
554+
; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
555+
; GFX10-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
556+
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
557+
; GFX10-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
558+
; GFX10-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
559+
; GFX10-NEXT: SI_RETURN
560+
;
561+
; GFX12-LABEL: name: local_stack_alloc__s_add_i32__reg_offsets_commute
562+
; GFX12: liveins: $sgpr4, $sgpr5
563+
; GFX12-NEXT: {{ $}}
564+
; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4
565+
; GFX12-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr5
566+
; GFX12-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def dead $scc
567+
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_]]
568+
; GFX12-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY1]], implicit-def dead $scc
569+
; GFX12-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, [[S_ADD_I32_1]]
570+
; GFX12-NEXT: SI_RETURN
571+
%0:sreg_32 = COPY $sgpr4
572+
%1:sreg_32 = COPY $sgpr5
573+
574+
%2:sreg_32 = S_ADD_I32 %stack.0, %0, implicit-def dead $scc
575+
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:SREG_32 */, %2
576+
%3:sreg_32 = S_ADD_I32 %stack.0, %1, implicit-def dead $scc
577+
INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:SREG_32 */, %3
578+
SI_RETURN
579+
580+
...
581+
428582
---
429583
name: local_stack_alloc__s_add_i32__literal_offsets_live_scc
430584
tracksRegLiveness: true

0 commit comments

Comments
 (0)