Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 188 additions & 0 deletions llvm/test/DebugInfo/AArch64/instr-ref-target-hooks-sp-clobber.mir
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
# Test to ensure that variable "__last" is properly recovered at the end of the livedebugvalues pass when Instruction Referencing-based LiveDebugValues is used.
# This testcase was obtained by looking at FileCheck.cpp and reducing it down via llvm-reduce.
# This test is the same as llvm/test/DebugInfo/AArch64/instr-ref-target-hooks.ll, however, the output is taken just before the livedebugvalues pass, and then a clobber
# to the stack slot has been added after the first LDRXui in bb.2.if.then13, the livedebugvalues pass should still recover the value, as it was loaded into $x8 before the clobber.

# RUN: llc -o - %s -start-before=livedebugvalues -stop-after=livedebugvalues -mtriple=aarch64-apple-darwin | FileCheck %s

# CHECK: ![[LOC:[0-9]+]] = !DILocalVariable(name: "__last",
# CHECK-LABEL: bb.2.if.then13
# CHECK: STRXui $xzr, $sp, 1
# CHECK-NEXT: DBG_VALUE_LIST ![[LOC]], !DIExpression(DW_OP_LLVM_arg, 0), $x8

--- |
; ModuleID = '/Users/srastogi/Development/llvm-project/llvm/test/DebugInfo/AArch64/instr-ref-target-hooks.ll'
source_filename = "/Users/srastogi/Development/llvm-project/llvm/test/DebugInfo/AArch64/instr-ref-target-hooks.ll"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"

declare void @_ZdlPvm()

define fastcc void @"_ZNSt3__111__introsortINS_17_ClassicAlgPolicyERZL18DumpAnnotatedInputRN4llvm11raw_ostreamERKNS2_16FileCheckRequestE20DumpInputFilterValuejNS2_9StringRefERNS_6vectorI15InputAnnotationNS_9allocatorISB_EEEEjE3$_0PSB_Lb0EEEvT1_SJ_T0_NS_15iterator_traitsISJ_E15difference_typeEb"(ptr %__first, ptr %__last, i1 %cmp, ptr %__first.addr.0, ptr %Label3.i.i.i241, ptr %__pivot.sroa.9113.8.copyload.i, ptr %0, ptr %1) !dbg !4 {
br label %while.cond

while.cond: ; preds = %if.end16, %2
br i1 %cmp, label %if.then13, label %if.end16

if.then13: ; preds = %while.cond
%cmp.i = icmp eq ptr %__first, %__last
%or.cond.i = select i1 %cmp.i, i1 false, i1 false
#dbg_value(ptr %__last, !10, !DIExpression(), !16)
br i1 %or.cond.i, label %common.ret, label %for.body.i, !dbg !20

common.ret: ; preds = %for.body.i, %if.then13
ret void

for.body.i: ; preds = %if.then13
%InputLine.i.i = getelementptr i8, ptr %__first.addr.0, i64 132
br label %common.ret

if.end16: ; preds = %while.cond
%__pivot.sroa.13.8.copyload.i = load i64, ptr null, align 8
call void @_ZdlPvm()
store ptr %__pivot.sroa.9113.8.copyload.i, ptr %0, align 8
store i64 %__pivot.sroa.13.8.copyload.i, ptr %1, align 8
store i64 0, ptr %__first, align 8
store i32 0, ptr %__first.addr.0, align 8
store i32 1, ptr %Label3.i.i.i241, align 4
br label %while.cond
}

!llvm.module.flags = !{!0}
!llvm.dbg.cu = !{!1}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !2, producer: "clang version 22.0.0git (git@github.com:llvm/llvm-project.git 46a3b4d5dc6dd9449ec7c0c9065552368cdf41d6)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, retainedTypes: !3, globals: !3, imports: !3, splitDebugInlining: false, nameTableKind: Apple, sysroot: "/Library/Developer/CommandLineTools/SDKs/MacOSX15.3.sdk", sdk: "MacOSX15.3.sdk")
!2 = !DIFile(filename: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/llvm/utils/FileCheck/FileCheck.cpp", directory: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/build-instr-ref-stage2", checksumkind: CSK_MD5, checksum: "fa5f53f1b5782eb8b92fadec416b8941")
!3 = !{}
!4 = distinct !DISubprogram(name: "__introsort<std::__1::_ClassicAlgPolicy, (lambda at /Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/llvm/utils/FileCheck/FileCheck.cpp:544:14) &, InputAnnotation *, false>", linkageName: "_ZNSt3__111__introsortINS_17_ClassicAlgPolicyERZL18DumpAnnotatedInputRN4llvm11raw_ostreamERKNS2_16FileCheckRequestE20DumpInputFilterValuejNS2_9StringRefERNS_6vectorI15InputAnnotationNS_9allocatorISB_EEEEjE3$_0PSB_Lb0EEEvT1_SJ_T0_NS_15iterator_traitsISJ_E15difference_typeEb", scope: !6, file: !5, line: 758, type: !8, scopeLine: 762, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !1, templateParams: !3, retainedNodes: !3, keyInstructions: true)
!5 = !DIFile(filename: "/Library/Developer/CommandLineTools/SDKs/MacOSX15.3.sdk/usr/include/c++/v1/__algorithm/sort.h", directory: "")
!6 = !DINamespace(name: "__1", scope: !7, exportSymbols: true)
!7 = !DINamespace(name: "std", scope: null)
!8 = !DISubroutineType(cc: DW_CC_nocall, types: !9)
!9 = !{null}
!10 = !DILocalVariable(name: "__last", arg: 2, scope: !11, file: !5, line: 284, type: !13)
!11 = distinct !DISubprogram(name: "__insertion_sort<std::__1::_ClassicAlgPolicy, (lambda at /Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/llvm/utils/FileCheck/FileCheck.cpp:544:14) &, InputAnnotation *>", linkageName: "_ZNSt3__116__insertion_sortB8nn180100INS_17_ClassicAlgPolicyERZL18DumpAnnotatedInputRN4llvm11raw_ostreamERKNS2_16FileCheckRequestE20DumpInputFilterValuejNS2_9StringRefERNS_6vectorI15InputAnnotationNS_9allocatorISB_EEEEjE3$_0PSB_EEvT1_SJ_T0_", scope: !6, file: !5, line: 284, type: !12, scopeLine: 284, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !1, templateParams: !3, retainedNodes: !3, keyInstructions: true)
!12 = distinct !DISubroutineType(types: !9)
!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64)
!14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "InputAnnotation", file: !15, line: 323, size: 768, flags: DIFlagTypePassByReference | DIFlagNonTrivial, elements: !3, identifier: "_ZTS15InputAnnotation")
!15 = !DIFile(filename: "llvm/utils/FileCheck/FileCheck.cpp", directory: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project", checksumkind: CSK_MD5, checksum: "fa5f53f1b5782eb8b92fadec416b8941")
!16 = !DILocation(line: 0, scope: !11, inlinedAt: !17)
!17 = distinct !DILocation(line: 800, column: 9, scope: !18)
!18 = distinct !DILexicalBlock(scope: !19, file: !5, line: 799, column: 23)
!19 = distinct !DILexicalBlock(scope: !4, file: !5, line: 770, column: 16)
!20 = !DILocation(line: 288, column: 15, scope: !21, inlinedAt: !17, atomGroup: 1, atomRank: 1)
!21 = distinct !DILexicalBlock(scope: !11, file: !5, line: 288, column: 7)
...
---
name: '_ZNSt3__111__introsortINS_17_ClassicAlgPolicyERZL18DumpAnnotatedInputRN4llvm11raw_ostreamERKNS2_16FileCheckRequestE20DumpInputFilterValuejNS2_9StringRefERNS_6vectorI15InputAnnotationNS_9allocatorISB_EEEEjE3$_0PSB_Lb0EEEvT1_SJ_T0_NS_15iterator_traitsISJ_E15difference_typeEb'
alignment: 4
tracksRegLiveness: true
noPhis: true
isSSA: false
noVRegs: true
hasFakeUses: false
debugInstrRef: true
tracksDebugUserValues: true
liveins:
- { reg: '$x0' }
- { reg: '$x1' }
- { reg: '$w2' }
- { reg: '$x3' }
- { reg: '$x4' }
- { reg: '$x5' }
- { reg: '$x6' }
- { reg: '$x7' }
frameInfo:
stackSize: 112
maxAlignment: 8
adjustsStack: true
hasCalls: true
maxCallFrameSize: 0
isCalleeSavedInfoValid: true
stack:
- { id: 0, type: spill-slot, offset: -104, size: 8, alignment: 8 }
- { id: 1, type: spill-slot, offset: -8, size: 8, alignment: 8, callee-saved-register: '$lr' }
- { id: 2, type: spill-slot, offset: -16, size: 8, alignment: 8, callee-saved-register: '$fp' }
- { id: 3, type: spill-slot, offset: -24, size: 8, alignment: 8, callee-saved-register: '$x19' }
- { id: 4, type: spill-slot, offset: -32, size: 8, alignment: 8, callee-saved-register: '$x20' }
- { id: 5, type: spill-slot, offset: -40, size: 8, alignment: 8, callee-saved-register: '$x21' }
- { id: 6, type: spill-slot, offset: -48, size: 8, alignment: 8, callee-saved-register: '$x22' }
- { id: 7, type: spill-slot, offset: -56, size: 8, alignment: 8, callee-saved-register: '$x23' }
- { id: 8, type: spill-slot, offset: -64, size: 8, alignment: 8, callee-saved-register: '$x24' }
- { id: 9, type: spill-slot, offset: -72, size: 8, alignment: 8, callee-saved-register: '$x25' }
- { id: 10, type: spill-slot, offset: -80, size: 8, alignment: 8, callee-saved-register: '$x26' }
- { id: 11, type: spill-slot, offset: -88, size: 8, alignment: 8, callee-saved-register: '$x27' }
- { id: 12, type: spill-slot, offset: -96, size: 8, alignment: 8, callee-saved-register: '$x28' }
machineFunctionInfo:
hasRedZone: false
stackSizeZPR: 0
stackSizePPR: 0
hasStackFrame: true
body: |
bb.0 (%ir-block.2):
successors: %bb.2(0x04000000), %bb.3(0x7c000000)
liveins: $w2, $x0, $x1, $x3, $x4, $x5, $x6, $x7, $x27, $x28, $x25, $x26, $x23, $x24, $x21, $x22, $x19, $x20, $lr

$sp = frame-setup SUBXri $sp, 112, 0
frame-setup STPXi killed $x28, killed $x27, $sp, 2 :: (store (s64) into %stack.12), (store (s64) into %stack.11)
frame-setup STPXi killed $x26, killed $x25, $sp, 4 :: (store (s64) into %stack.10), (store (s64) into %stack.9)
frame-setup STPXi killed $x24, killed $x23, $sp, 6 :: (store (s64) into %stack.8), (store (s64) into %stack.7)
frame-setup STPXi killed $x22, killed $x21, $sp, 8 :: (store (s64) into %stack.6), (store (s64) into %stack.5)
frame-setup STPXi killed $x20, killed $x19, $sp, 10 :: (store (s64) into %stack.4), (store (s64) into %stack.3)
frame-setup STPXi $fp, killed $lr, $sp, 12 :: (store (s64) into %stack.2), (store (s64) into %stack.1)
frame-setup CFI_INSTRUCTION def_cfa_offset 112
frame-setup CFI_INSTRUCTION offset $w30, -8
frame-setup CFI_INSTRUCTION offset $w29, -16
frame-setup CFI_INSTRUCTION offset $w19, -24
frame-setup CFI_INSTRUCTION offset $w20, -32
frame-setup CFI_INSTRUCTION offset $w21, -40
frame-setup CFI_INSTRUCTION offset $w22, -48
frame-setup CFI_INSTRUCTION offset $w23, -56
frame-setup CFI_INSTRUCTION offset $w24, -64
frame-setup CFI_INSTRUCTION offset $w25, -72
frame-setup CFI_INSTRUCTION offset $w26, -80
frame-setup CFI_INSTRUCTION offset $w27, -88
frame-setup CFI_INSTRUCTION offset $w28, -96
DBG_PHI $x1, 1
$x19 = ORRXrs $xzr, killed $x7, 0
$x20 = ORRXrs $xzr, killed $x6, 0
$x21 = ORRXrs $xzr, killed $x5, 0
$x22 = ORRXrs $xzr, killed $x4, 0
$x23 = ORRXrs $xzr, killed $x3, 0
$w25 = ORRWrs $wzr, killed $w2, 0
$x26 = ORRXrs $xzr, killed $x0, 0
renamable $w27 = MOVZWi 1, 0
STRXui killed $x1, $sp, 1 :: (store (s64) into %stack.0)
TBNZW renamable $w25, 0, %bb.2

bb.3.if.end16:
successors: %bb.2(0x04000000), %bb.3(0x7c000000)
liveins: $w25, $w27, $x19, $x20, $x21, $x22, $x23, $x26

$x28 = ORRXrs $xzr, $xzr, 0
renamable $x24 = LDRXui killed renamable $x28, 0 :: (load (s64) from `ptr null`)
BL @_ZdlPvm, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
STRXui renamable $x21, renamable $x20, 0 :: (store (s64) into %ir.0)
STRXui killed renamable $x24, renamable $x19, 0 :: (store (s64) into %ir.1)
STRXui $xzr, renamable $x26, 0 :: (store (s64) into %ir.__first)
STRWui $wzr, renamable $x23, 0 :: (store (s32) into %ir.__first.addr.0, align 8)
STRWui renamable $w27, renamable $x22, 0 :: (store (s32) into %ir.Label3.i.i.i241)
TBZW renamable $w25, 0, %bb.3

bb.2.if.then13:
liveins: $x26

DBG_INSTR_REF !10, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(1, 0), debug-location !16
renamable $x8 = LDRXui $sp, 1 :: (load (s64) from %stack.0)
; Clobber the stack slot that contains the value we care about, to ensure that LDV can still recover it from $x8 above
STRXui $xzr, $sp, 1 :: (store (s64) into %stack.0)
$fp, $lr = frame-destroy LDPXi $sp, 12 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
$x20, $x19 = frame-destroy LDPXi $sp, 10 :: (load (s64) from %stack.4), (load (s64) from %stack.3)
$xzr = SUBSXrs killed renamable $x26, killed renamable $x8, 0, implicit-def $nzcv, debug-location !20
$x22, $x21 = frame-destroy LDPXi $sp, 8 :: (load (s64) from %stack.6), (load (s64) from %stack.5)
$x24, $x23 = frame-destroy LDPXi $sp, 6 :: (load (s64) from %stack.8), (load (s64) from %stack.7)
$x26, $x25 = frame-destroy LDPXi $sp, 4 :: (load (s64) from %stack.10), (load (s64) from %stack.9)
$x28, $x27 = frame-destroy LDPXi $sp, 2 :: (load (s64) from %stack.12), (load (s64) from %stack.11)
$sp = frame-destroy ADDXri $sp, 112, 0
RET undef $lr
...
Loading