[llvm] 79f46a3 - Have stripDebugInfo() also strip !llvm.loop annotations from all
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 5 17:23:08 PST 2021
Author: Adrian Prantl
Date: 2021-02-05T17:22:41-08:00
New Revision: 79f46a30c2c4af7f7e6ef3d691505ade19465e52
URL: https://github.com/llvm/llvm-project/commit/79f46a30c2c4af7f7e6ef3d691505ade19465e52
DIFF: https://github.com/llvm/llvm-project/commit/79f46a30c2c4af7f7e6ef3d691505ade19465e52.diff
LOG: Have stripDebugInfo() also strip !llvm.loop annotations from all
instructions.
The !llvm.loop annotations consist of pointers into the debug info, so
when stripping the debug info (particularly important when it is
malformed!) !llvm.loop annotations need to be stripped as well, or
else the malformed debug info stays around. This patch applies the
stripping to all instructions, not just terminator instructions.
rdar://73687049
Differential Revision: https://reviews.llvm.org/D96181
Added:
llvm/test/Verifier/llvm.loop-cu-strip.ll
Modified:
llvm/lib/IR/DebugInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp
index d7656b9dd1f8..3413447f72c0 100644
--- a/llvm/lib/IR/DebugInfo.cpp
+++ b/llvm/lib/IR/DebugInfo.cpp
@@ -338,18 +338,13 @@ bool llvm::stripDebugInfo(Function &F) {
Changed = true;
I.setDebugLoc(DebugLoc());
}
- }
-
- auto *TermInst = BB.getTerminator();
- if (!TermInst)
- // This is invalid IR, but we may not have run the verifier yet
- continue;
- if (auto *LoopID = TermInst->getMetadata(LLVMContext::MD_loop)) {
- auto *NewLoopID = LoopIDsMap.lookup(LoopID);
- if (!NewLoopID)
- NewLoopID = LoopIDsMap[LoopID] = stripDebugLocFromLoopID(LoopID);
- if (NewLoopID != LoopID)
- TermInst->setMetadata(LLVMContext::MD_loop, NewLoopID);
+ if (auto *LoopID = I.getMetadata(LLVMContext::MD_loop)) {
+ auto *NewLoopID = LoopIDsMap.lookup(LoopID);
+ if (!NewLoopID)
+ NewLoopID = LoopIDsMap[LoopID] = stripDebugLocFromLoopID(LoopID);
+ if (NewLoopID != LoopID)
+ I.setMetadata(LLVMContext::MD_loop, NewLoopID);
+ }
}
}
return Changed;
diff --git a/llvm/test/Verifier/llvm.loop-cu-strip.ll b/llvm/test/Verifier/llvm.loop-cu-strip.ll
new file mode 100644
index 000000000000..5f7923e067fe
--- /dev/null
+++ b/llvm/test/Verifier/llvm.loop-cu-strip.ll
@@ -0,0 +1,21 @@
+; RUN: llvm-as -disable-output < %s -o /dev/null 2>&1 | FileCheck %s
+; RUN: llvm-as < %s -o - | llvm-dis - | FileCheck %s --check-prefix=CHECK-STRIP
+; CHECK: DICompileUnit not listed in llvm.dbg.cu
+; CHECK: ignoring invalid debug info in
+; CHECK-NOT: DICompileUnit not listed in llvm.dbg.cu
+declare hidden void @g() local_unnamed_addr #1 align 2
+define hidden void @f() {
+ tail call void @g() #2, !llvm.loop !5
+ ret void
+}
+!llvm.module.flags = !{!0, !1}
+!0 = !{i32 2, !"Dwarf Version", i32 4}
+!1 = !{i32 2, !"Debug Info Version", i32 3}
+; CHECK-STRIP: ![[MD:.*]] = distinct !{![[MD]], !"fake loop metadata"}
+!5 = distinct !{!5, !6, !6, !"fake loop metadata"}
+!6 = !DILocation(line: 1325, column: 3, scope: !7)
+!7 = distinct !DISubprogram(name: "f", scope: !8, file: !8, line: 1324, type: !9, scopeLine: 1324, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11)
+!8 = !DIFile(filename: "/", directory: "f.cpp")
+!9 = !DISubroutineType(types: !10)
+!10 = !{}
+!11 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !8)
More information about the llvm-commits
mailing list