1311260a6SOCHyams; RUN: llc %s -stop-after=finalize-isel -o - \ 2311260a6SOCHyams; RUN: | FileCheck %s --implicit-check-not=DBG_ 3311260a6SOCHyams 4*30845e8aSStephen Tozer 5*30845e8aSStephen Tozer; RUN: llc --try-experimental-debuginfo-iterators %s -stop-after=finalize-isel -o - \ 6*30845e8aSStephen Tozer; RUN: | FileCheck %s --implicit-check-not=DBG_ 7*30845e8aSStephen Tozer 8311260a6SOCHyams;; Check that SelectionDAG downgrades dbg.assigns to dbg.values if assignment 9311260a6SOCHyams;; tracking isn't enabled (e.g. if the module flag 10311260a6SOCHyams;; "debug-info-assignment-tracking" is missing / false). 11311260a6SOCHyams 12311260a6SOCHyams;; With assignment tracking enabled we'd see the variable put into the stack 13311260a6SOCHyams;; slot side table because the variable is always located in its stack 14311260a6SOCHyams;; slot. Check there's no debug-info saved there: 15311260a6SOCHyams;; CHECK: stack: 16311260a6SOCHyams;; CHECK-NEXT: - { id: 0, name: x, type: default, offset: 0, size: 4, alignment: 4, 17311260a6SOCHyams;; CHECK-NEXT: stack-id: default, callee-saved-register: '', callee-saved-restored: true, 18311260a6SOCHyams;; CHECK-NEXT: debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 19311260a6SOCHyams 20311260a6SOCHyams;; With assignment tracking disabled we should see the dbg.assigns downgraded 21311260a6SOCHyams;; to dbg.values, which become DBG _VALUEs/_INSTR_REFs. 22311260a6SOCHyams; CHECK: bb.0.entry: 23311260a6SOCHyams; CHECK: DBG_VALUE $noreg 24311260a6SOCHyams 25311260a6SOCHyams; CHECK: bb.1.if.then: 26311260a6SOCHyams; CHECK: DBG_INSTR_REF 27311260a6SOCHyams 28311260a6SOCHyams; CHECK: bb.2.if.else: 29311260a6SOCHyams; CHECK: DBG_VALUE 2 30311260a6SOCHyams 31311260a6SOCHyamstarget triple = "x86_64-unknown-unknown" 32311260a6SOCHyams 33311260a6SOCHyams@g = dso_local global i32 0, align 4, !dbg !0 34311260a6SOCHyams 35311260a6SOCHyamsdefine dso_local noundef i32 @_Z3funv() #0 !dbg !15 { 36311260a6SOCHyamsentry: 37311260a6SOCHyams %x = alloca i32, align 4, !DIAssignID !19 38311260a6SOCHyams call void @llvm.dbg.assign(metadata i1 undef, metadata !20, metadata !DIExpression(), metadata !19, metadata ptr %x, metadata !DIExpression()), !dbg !21 39311260a6SOCHyams %0 = load i32, ptr @g, align 4 40311260a6SOCHyams %tobool = icmp ne i32 %0, 0 41311260a6SOCHyams br i1 %tobool, label %if.then, label %if.else 42311260a6SOCHyams 43311260a6SOCHyamsif.then: ; preds = %entry 44311260a6SOCHyams %call = call noundef i32 @_Z3getv() 45311260a6SOCHyams store i32 %call, ptr %x, align 4, !DIAssignID !27 46311260a6SOCHyams call void @llvm.dbg.assign(metadata i32 %call, metadata !20, metadata !DIExpression(), metadata !27, metadata ptr %x, metadata !DIExpression()), !dbg !21 47311260a6SOCHyams br label %if.end 48311260a6SOCHyams 49311260a6SOCHyamsif.else: ; preds = %entry 50311260a6SOCHyams store i32 2, ptr %x, align 4, !DIAssignID !30 51311260a6SOCHyams call void @llvm.dbg.assign(metadata i32 2, metadata !20, metadata !DIExpression(), metadata !30, metadata ptr %x, metadata !DIExpression()), !dbg !21 52311260a6SOCHyams br label %if.end 53311260a6SOCHyams 54311260a6SOCHyamsif.end: ; preds = %if.else, %if.then 55311260a6SOCHyams %1 = load i32, ptr %x, align 4 56311260a6SOCHyams ret i32 %1 57311260a6SOCHyams} 58311260a6SOCHyams 59311260a6SOCHyamsdeclare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata) #1 60311260a6SOCHyamsdeclare void @llvm.dbg.declare(metadata, metadata, metadata) #1 61311260a6SOCHyamsdeclare noundef i32 @_Z3getv() #2 62311260a6SOCHyams 63311260a6SOCHyams!llvm.dbg.cu = !{!2} 64311260a6SOCHyams!llvm.module.flags = !{!6, !7} 65311260a6SOCHyams!llvm.ident = !{!14} 66311260a6SOCHyams 67311260a6SOCHyams!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) 68311260a6SOCHyams!1 = distinct !DIGlobalVariable(name: "g", scope: !2, file: !3, line: 1, type: !5, isLocal: false, isDefinition: true) 69311260a6SOCHyams!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !3, producer: "clang version 17.0.0)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None) 70311260a6SOCHyams!3 = !DIFile(filename: "test.cpp", directory: "/") 71311260a6SOCHyams!4 = !{!0} 72311260a6SOCHyams!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 73311260a6SOCHyams!6 = !{i32 7, !"Dwarf Version", i32 5} 74311260a6SOCHyams!7 = !{i32 2, !"Debug Info Version", i32 3} 75311260a6SOCHyams!14 = !{!"clang version 17.0.0"} 76311260a6SOCHyams!15 = distinct !DISubprogram(name: "fun", linkageName: "_Z3funv", scope: !3, file: !3, line: 3, type: !16, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18) 77311260a6SOCHyams!16 = !DISubroutineType(types: !17) 78311260a6SOCHyams!17 = !{!5} 79311260a6SOCHyams!18 = !{} 80311260a6SOCHyams!19 = distinct !DIAssignID() 81311260a6SOCHyams!20 = !DILocalVariable(name: "x", scope: !15, file: !3, line: 4, type: !5) 82311260a6SOCHyams!21 = !DILocation(line: 0, scope: !15) 83311260a6SOCHyams!23 = distinct !DILexicalBlock(scope: !15, file: !3, line: 5, column: 7) 84311260a6SOCHyams!27 = distinct !DIAssignID() 85311260a6SOCHyams!30 = distinct !DIAssignID() 86