1e932d2e6SOCHyams; RUN: opt -S %s -passes=inline -o - \ 2e932d2e6SOCHyams; RUN: | FileCheck %s --implicit-check-not="call void @llvm.dbg" 3632f44e5SStephen Tozer; RUN: opt --try-experimental-debuginfo-iterators -S %s -passes=inline -o - \ 4632f44e5SStephen Tozer; RUN: | FileCheck %s --implicit-check-not="call void @llvm.dbg" 5e932d2e6SOCHyams 6e932d2e6SOCHyams;; The dbg.assign linked to the large alloca describes a variable sitting at 7e932d2e6SOCHyams;; offset 0, size 64. Check: 8e932d2e6SOCHyams;; A) an inlined store to the alloca outside of the bits 0-64 is not attributed 9e932d2e6SOCHyams;; to the variable. 10e932d2e6SOCHyams;; B) a fragment expression is not created if the inlined store is the size of 11e932d2e6SOCHyams;; the variable. 12e932d2e6SOCHyams;; C) a fragment expression is created if the inlined store is not the size of 13e932d2e6SOCHyams;; the variable. 14e932d2e6SOCHyams 15e932d2e6SOCHyams;; Test A: 16e932d2e6SOCHyams; CHECK: %0 = alloca %"struct.llvm::detail::DenseMapPair", i32 0, align 8, !DIAssignID ![[ID1:[0-9]+]] 17*09457270SStephen Tozer; CHECK: #dbg_assign(i1 undef, ![[#]], !DIExpression(), ![[ID1]], ptr %0, !DIExpression(), 18e932d2e6SOCHyams 19e932d2e6SOCHyams;; Test B: 20e932d2e6SOCHyams;; CHECK: store i64 1, ptr %0, align 4, !DIAssignID ![[ID2:[0-9]+]] 21*09457270SStephen Tozer;; CHECK: #dbg_assign(i64 1, ![[#]], !DIExpression(), ![[ID2]], ptr %0, !DIExpression(), 22e932d2e6SOCHyams 23e932d2e6SOCHyams;; Test C: 24e932d2e6SOCHyams;; CHECK: store i32 2, ptr %0, align 4, !DIAssignID ![[ID3:[0-9]+]] 25*09457270SStephen Tozer;; CHECK: #dbg_assign(i32 2, ![[#]], !DIExpression(DW_OP_LLVM_fragment, 0, 32), ![[ID3]], ptr %0, !DIExpression(), 26e932d2e6SOCHyams 27e932d2e6SOCHyams%"struct.llvm::detail::DenseMapPair" = type { %"struct.std::pair" } 28e932d2e6SOCHyams%"struct.std::pair" = type { ptr, %"class.llvm::SmallVector" } 29e932d2e6SOCHyams%"class.llvm::SmallVector" = type { %"class.llvm::SmallVectorImpl", %"struct.llvm::SmallVectorStorage" } 30e932d2e6SOCHyams%"class.llvm::SmallVectorImpl" = type { %"class.llvm::SmallVectorTemplateBase" } 31e932d2e6SOCHyams%"class.llvm::SmallVectorTemplateBase" = type { %"class.llvm::SmallVectorTemplateCommon" } 32e932d2e6SOCHyams%"class.llvm::SmallVectorTemplateCommon" = type { %"class.llvm::SmallVectorBase" } 33e932d2e6SOCHyams%"class.llvm::SmallVectorBase" = type { ptr, i64, i64 } 34e932d2e6SOCHyams%"struct.llvm::SmallVectorStorage" = type { [40 x i8] } 35e932d2e6SOCHyams 36e932d2e6SOCHyamsdefine void @_Z6verifyv() { 37e932d2e6SOCHyamsentry: 38e932d2e6SOCHyams %0 = alloca %"struct.llvm::detail::DenseMapPair", i32 0, align 8, !DIAssignID !5 39e932d2e6SOCHyams call void @llvm.dbg.assign(metadata i1 undef, metadata !6, metadata !DIExpression(), metadata !5, metadata ptr %0, metadata !DIExpression()), !dbg !14 40e932d2e6SOCHyams call void @_ZN4llvm6detail12DenseMapPairIP4SCEVNS_11SmallVectorI6FoldIDLj40EEEEC2ERKS7_(ptr %0) 41e932d2e6SOCHyams ret void 42e932d2e6SOCHyams} 43e932d2e6SOCHyams 44e932d2e6SOCHyamsdefine linkonce_odr void @_ZN4llvm6detail12DenseMapPairIP4SCEVNS_11SmallVectorI6FoldIDLj40EEEEC2ERKS7_(ptr %this) { 45e932d2e6SOCHyamsentry: 46e932d2e6SOCHyams %second.i = getelementptr %"struct.std::pair", ptr %this, i64 0, i32 1 47e932d2e6SOCHyams store i32 0, ptr %second.i, align 4 48e932d2e6SOCHyams %test = getelementptr %"struct.std::pair", ptr %this, i64 0, i32 0 49e932d2e6SOCHyams store i64 1, ptr %test 50e932d2e6SOCHyams store i32 2, ptr %test 51e932d2e6SOCHyams ret void 52e932d2e6SOCHyams} 53e932d2e6SOCHyams 54e932d2e6SOCHyamsdeclare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata) 55e932d2e6SOCHyams 56e932d2e6SOCHyams!llvm.dbg.cu = !{!0} 57e932d2e6SOCHyams!llvm.module.flags = !{!3, !4} 58e932d2e6SOCHyams 59e932d2e6SOCHyams!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 17.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2, splitDebugInlining: false, nameTableKind: None) 60e932d2e6SOCHyams!1 = !DIFile(filename: "reduce.cpp", directory: "") 61e932d2e6SOCHyams!2 = !{} 62e932d2e6SOCHyams!3 = !{i32 2, !"Debug Info Version", i32 3} 63e932d2e6SOCHyams!4 = !{i32 7, !"debug-info-assignment-tracking", i1 true} 64e932d2e6SOCHyams!5 = distinct !DIAssignID() 65e932d2e6SOCHyams!6 = !DILocalVariable(name: "a", scope: !7, file: !1, line: 10, type: !12) 66e932d2e6SOCHyams!7 = distinct !DILexicalBlock(scope: !8, file: !1, line: 10, column: 3) 67e932d2e6SOCHyams!8 = distinct !DILexicalBlock(scope: !9, file: !1, line: 10, column: 3) 68e932d2e6SOCHyams!9 = distinct !DISubprogram(name: "verify", linkageName: "_Z6verifyv", scope: !1, file: !1, line: 9, type: !10, scopeLine: 9, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2) 69e932d2e6SOCHyams!10 = !DISubroutineType(types: !11) 70e932d2e6SOCHyams!11 = !{null} 71e932d2e6SOCHyams!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64) 72e932d2e6SOCHyams!13 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "SCEV", file: !1, line: 3, flags: DIFlagFwdDecl | DIFlagNonTrivial, identifier: "_ZTS4SCEV") 73e932d2e6SOCHyams!14 = !DILocation(line: 0, scope: !7) 74e932d2e6SOCHyams 75