[llvm] 3e76e60 - [DebugInfo][RemoveDIs] Set new-dbg-info flag from Modules correctly (#82373)

via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 08:13:32 PST 2024


Author: Jeremy Morse
Date: 2024-02-20T16:13:28Z
New Revision: 3e76e6083da3717fafbb2345eb8a5d1bdac3013e

URL: https://github.com/llvm/llvm-project/commit/3e76e6083da3717fafbb2345eb8a5d1bdac3013e
DIFF: https://github.com/llvm/llvm-project/commit/3e76e6083da3717fafbb2345eb8a5d1bdac3013e.diff

LOG: [DebugInfo][RemoveDIs] Set new-dbg-info flag from Modules correctly (#82373)

It turns out there's a pathway for Functions to be inserted into modules
without having the "New" debug-info flag set correctly, which this patch
fixes. Sadly there isn't a Module::insert method to instrument out
there, everyone touches the list directly.

This fix exposes a path where such functions are produced in the
outliner in the wrong mode; requiring a fix there to correctly drop
RemoveDIs-mode debug-info. This is covered by
test/DebugInfo/AArch64/ir-outliner.ll

Added: 
    

Modified: 
    llvm/lib/IR/Function.cpp
    llvm/lib/Transforms/IPO/IROutliner.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp
index fceffbc3cea6d7..056e4f31981a72 100644
--- a/llvm/lib/IR/Function.cpp
+++ b/llvm/lib/IR/Function.cpp
@@ -437,8 +437,10 @@ Function::Function(FunctionType *Ty, LinkageTypes Linkage, unsigned AddrSpace,
   if (Ty->getNumParams())
     setValueSubclassData(1);   // Set the "has lazy arguments" bit.
 
-  if (ParentModule)
+  if (ParentModule) {
     ParentModule->getFunctionList().push_back(this);
+    IsNewDbgInfoFormat = ParentModule->IsNewDbgInfoFormat;
+  }
 
   HasLLVMReservedName = getName().starts_with("llvm.");
   // Ensure intrinsics have the right parameter attributes.

diff  --git a/llvm/lib/Transforms/IPO/IROutliner.cpp b/llvm/lib/Transforms/IPO/IROutliner.cpp
index 8e6d0e814372d6..48470bc71ff38a 100644
--- a/llvm/lib/Transforms/IPO/IROutliner.cpp
+++ b/llvm/lib/Transforms/IPO/IROutliner.cpp
@@ -721,6 +721,12 @@ static void moveFunctionData(Function &Old, Function &New,
     std::vector<Instruction *> DebugInsts;
 
     for (Instruction &Val : CurrBB) {
+      // Since debug-info originates from many 
diff erent locations in the
+      // program, it will cause incorrect reporting from a debugger if we keep
+      // the same debug instructions. Drop non-intrinsic DPValues here,
+      // collect intrinsics for removal later.
+      Val.dropDbgValues();
+
       // We must handle the scoping of called functions 
diff erently than
       // other outlined instructions.
       if (!isa<CallInst>(&Val)) {
@@ -744,10 +750,7 @@ static void moveFunctionData(Function &Old, Function &New,
       // From this point we are only handling call instructions.
       CallInst *CI = cast<CallInst>(&Val);
 
-      // We add any debug statements here, to be removed after.  Since the
-      // instructions originate from many 
diff erent locations in the program,
-      // it will cause incorrect reporting from a debugger if we keep the
-      // same debug instructions.
+      // Collect debug intrinsics for later removal.
       if (isa<DbgInfoIntrinsic>(CI)) {
         DebugInsts.push_back(&Val);
         continue;


        


More information about the llvm-commits mailing list