[Mlir-commits] [mlir] f0506e4 - [MLIR] Avoid adding debuginfo for a function if it contains calls that has no debug info.

Tim Shen llvmlistbot at llvm.org
Tue Sep 29 13:52:13 PDT 2020


Author: Tim Shen
Date: 2020-09-29T13:51:56-07:00
New Revision: f0506e4923cdbd2b53258bc6c3a2b6bc62c8ccc3

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

LOG: [MLIR] Avoid adding debuginfo for a function if it contains calls that has no debug info.

Also add a verifier pass to ExecutionEngine.

It's hard to come up with a test case, since mlir-opt always add location info after parsing it (?)

Differential Revision: https://reviews.llvm.org/D88135

Added: 
    

Modified: 
    mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
    mlir/lib/Target/LLVMIR/DebugTranslation.cpp
    mlir/test/Target/llvmir-debug.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp b/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
index baf9b5eba2c8..cadd172ace89 100644
--- a/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
+++ b/mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
@@ -17,6 +17,7 @@
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/IR/Module.h"
+#include "llvm/IR/Verifier.h"
 #include "llvm/Support/ToolOutputFile.h"
 
 using namespace mlir;
@@ -24,7 +25,11 @@ using namespace mlir;
 std::unique_ptr<llvm::Module>
 mlir::translateModuleToLLVMIR(ModuleOp m, llvm::LLVMContext &llvmContext,
                               StringRef name) {
-  return LLVM::ModuleTranslation::translateModule<>(m, llvmContext, name);
+  auto llvmModule =
+      LLVM::ModuleTranslation::translateModule<>(m, llvmContext, name);
+  if (verifyModule(*llvmModule))
+    emitError(m.getLoc(), "LLVM IR fails to verify");
+  return llvmModule;
 }
 
 namespace mlir {

diff  --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
index af364ba9048f..a0a19a2c0201 100644
--- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
@@ -71,6 +71,18 @@ void DebugTranslation::translate(LLVMFuncOp func, llvm::Function &llvmFunc) {
   if (!compileUnit || !func.walk(interruptIfValidLocation).wasInterrupted())
     return;
 
+  // If we are to create debug info for the function, we need to ensure that all
+  // inlinable calls in it are with debug info, otherwise the LLVM verifier will
+  // complain. For now, be more restricted and treat all calls as inlinable.
+  const bool hasCallWithoutDebugInfo =
+      func.walk([](LLVM::CallOp call) {
+            return call.getLoc().isa<UnknownLoc>() ? WalkResult::interrupt()
+                                                   : WalkResult::advance();
+          })
+          .wasInterrupted();
+  if (hasCallWithoutDebugInfo)
+    return;
+
   FileLineColLoc fileLoc = extractFileLoc(func.getLoc());
   auto *file = translateFile(fileLoc ? fileLoc.getFilename() : "<unknown>");
   unsigned line = fileLoc ? fileLoc.getLine() : 0;

diff  --git a/mlir/test/Target/llvmir-debug.mlir b/mlir/test/Target/llvmir-debug.mlir
index 2a9444839352..590fb8b2180c 100644
--- a/mlir/test/Target/llvmir-debug.mlir
+++ b/mlir/test/Target/llvmir-debug.mlir
@@ -9,10 +9,6 @@ llvm.func @func_no_debug() {
 // CHECK-LABEL: define void @func_with_debug()
 // CHECK-SAME: !dbg ![[FUNC_LOC:[0-9]+]]
 llvm.func @func_with_debug() {
-  // CHECK: call void @func_no_debug()
-  // CHECK-NOT: !dbg
-  llvm.call @func_no_debug() : () -> () loc(unknown)
-
   // CHECK: call void @func_no_debug(), !dbg ![[CALLSITE_LOC:[0-9]+]]
   llvm.call @func_no_debug() : () -> () loc(callsite("mysource.cc":3:4 at "mysource.cc":5:6))
 


        


More information about the Mlir-commits mailing list