[PATCH] D148140: [Assignment Tracking] Ignore VLA-backed variables
Orlando Cazalet-Hyams via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 12 09:11:14 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGff11c4f184ca: [Assignment Tracking] Ignore VLA-backed variables (authored by Orlando).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148140/new/
https://reviews.llvm.org/D148140
Files:
llvm/lib/IR/DebugInfo.cpp
llvm/test/DebugInfo/Generic/assignment-tracking/declare-to-assign/vla.ll
Index: llvm/test/DebugInfo/Generic/assignment-tracking/declare-to-assign/vla.ll
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/Generic/assignment-tracking/declare-to-assign/vla.ll
@@ -0,0 +1,61 @@
+; RUN: opt -S %s -passes=declare-to-assign -o - | FileCheck %s
+
+;; Check declare-to-assign ignores VLA-backed variables (for now).
+;; From C++ source:
+;; __attribute__ ((nodebug)) int sz;
+;; void fun() {
+;; int x[sz];
+;; }
+
+; CHECK: llvm.dbg.declare(metadata ptr %vla, metadata ![[#]], metadata !DIExpression())
+
+ at sz = dso_local global i32 0, align 4
+
+define dso_local void @_Z3funv() #0 !dbg !10 {
+entry:
+ %saved_stack = alloca ptr, align 8
+ %__vla_expr0 = alloca i64, align 8
+ %0 = load i32, ptr @sz, align 4, !dbg !14
+ %1 = zext i32 %0 to i64, !dbg !15
+ %2 = call ptr @llvm.stacksave(), !dbg !15
+ store ptr %2, ptr %saved_stack, align 8, !dbg !15
+ %vla = alloca i32, i64 %1, align 16, !dbg !15
+ store i64 %1, ptr %__vla_expr0, align 8, !dbg !15
+ ;; Ignore this artificial variable for the purpose of the test.
+ ; call void @llvm.dbg.declare(metadata ptr %__vla_expr0, metadata !16, metadata !DIExpression()), !dbg !18
+ call void @llvm.dbg.declare(metadata ptr %vla, metadata !19, metadata !DIExpression()), !dbg !24
+ %3 = load ptr, ptr %saved_stack, align 8, !dbg !25
+ call void @llvm.stackrestore(ptr %3), !dbg !25
+ ret void, !dbg !25
+}
+
+declare ptr @llvm.stacksave() #1
+declare void @llvm.dbg.declare(metadata, metadata, metadata) #2
+declare void @llvm.stackrestore(ptr) #1
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!2, !3}
+!llvm.ident = !{!9}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 17.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "test.cpp", directory: "/")
+!2 = !{i32 7, !"Dwarf Version", i32 5}
+!3 = !{i32 2, !"Debug Info Version", i32 3}
+!8 = !{i32 7, !"frame-pointer", i32 2}
+!9 = !{!"clang version 17.0.0"}
+!10 = distinct !DISubprogram(name: "fun", linkageName: "_Z3funv", scope: !1, file: !1, line: 2, type: !11, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !13)
+!11 = !DISubroutineType(types: !12)
+!12 = !{null}
+!13 = !{}
+!14 = !DILocation(line: 3, column: 9, scope: !10)
+!15 = !DILocation(line: 3, column: 3, scope: !10)
+!16 = !DILocalVariable(name: "__vla_expr0", scope: !10, type: !17, flags: DIFlagArtificial)
+!17 = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned)
+!18 = !DILocation(line: 0, scope: !10)
+!19 = !DILocalVariable(name: "x", scope: !10, file: !1, line: 3, type: !20)
+!20 = !DICompositeType(tag: DW_TAG_array_type, baseType: !21, elements: !22)
+!21 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!22 = !{!23}
+!23 = !DISubrange(count: !16)
+!24 = !DILocation(line: 3, column: 7, scope: !10)
+!25 = !DILocation(line: 4, column: 1, scope: !10)
Index: llvm/lib/IR/DebugInfo.cpp
===================================================================
--- llvm/lib/IR/DebugInfo.cpp
+++ llvm/lib/IR/DebugInfo.cpp
@@ -2000,6 +2000,9 @@
continue;
if (AllocaInst *Alloca =
dyn_cast<AllocaInst>(DDI->getAddress()->stripPointerCasts())) {
+ // FIXME: Skip VLAs for now (let these variables use dbg.declares).
+ if (!Alloca->isStaticAlloca())
+ continue;
DbgDeclares[Alloca].insert(DDI);
Vars[Alloca].insert(VarRecord(DDI));
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148140.512866.patch
Type: text/x-patch
Size: 3596 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230412/8f8ceb25/attachment.bin>
More information about the llvm-commits
mailing list