[flang-commits] [flang] Revert "[flang] Improve debug info for functions." (PR #90444)
David Spickett via flang-commits
flang-commits at lists.llvm.org
Mon Apr 29 03:02:14 PDT 2024
https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/90444
Reverts llvm/llvm-project#90083 due to a test suite failure:
https://lab.llvm.org/buildbot/#/builders/184/builds/11961
```
flang-new: ../llvm/mlir/lib/IR/Types.cpp:126: unsigned int mlir::Type::getIntOrFloatBitWidth() const: Assertion `isIntOrFloat() && "only integers and floats have a bitwidth"' failed.
```
>From acc59b62bc10fe034faf876c9a23f92dd4146505 Mon Sep 17 00:00:00 2001
From: David Spickett <spickettdavid at googlemail.com>
Date: Mon, 29 Apr 2024 11:01:28 +0100
Subject: [PATCH] Revert "[flang] Improve debug info for functions. (#90083)"
This reverts commit f029da5cfce66e2d460d5f54b17582810a9111ad.
---
.../lib/Optimizer/Transforms/AddDebugInfo.cpp | 36 +++--------
flang/lib/Optimizer/Transforms/CMakeLists.txt | 1 -
.../Transforms/DebugTypeGenerator.cpp | 63 -------------------
.../Optimizer/Transforms/DebugTypeGenerator.h | 40 ------------
flang/test/Transforms/debug-fn-info.f90 | 43 -------------
.../Transforms/debug-line-table-inc-file.fir | 2 +-
6 files changed, 11 insertions(+), 174 deletions(-)
delete mode 100644 flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
delete mode 100644 flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
delete mode 100644 flang/test/Transforms/debug-fn-info.f90
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index 5108469cb6c84a..18d98a11ef3c40 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -11,7 +11,6 @@
/// This pass populates some debug information for the module and functions.
//===----------------------------------------------------------------------===//
-#include "DebugTypeGenerator.h"
#include "flang/Common/Version.h"
#include "flang/Optimizer/Builder/FIRBuilder.h"
#include "flang/Optimizer/Builder/Todo.h"
@@ -107,27 +106,14 @@ void AddDebugInfoPass::runOnOperation() {
filePath = llvm::sys::path::parent_path(funcLoc.getFilename().getValue());
}
- mlir::StringAttr fullName =
- mlir::StringAttr::get(context, funcOp.getName());
- auto result = fir::NameUniquer::deconstruct(funcOp.getName());
mlir::StringAttr funcName =
- mlir::StringAttr::get(context, result.second.name);
-
- llvm::SmallVector<mlir::LLVM::DITypeAttr> types;
- fir::DebugTypeGenerator typeGen(module);
- for (auto resTy : funcOp.getResultTypes()) {
- auto tyAttr =
- typeGen.convertType(resTy, fileAttr, cuAttr, funcOp.getLoc());
- types.push_back(tyAttr);
- }
- for (auto inTy : funcOp.getArgumentTypes()) {
- auto tyAttr = typeGen.convertType(fir::unwrapRefType(inTy), fileAttr,
- cuAttr, funcOp.getLoc());
- types.push_back(tyAttr);
- }
-
+ mlir::StringAttr::get(context, funcOp.getName());
+ mlir::LLVM::DIBasicTypeAttr bT = mlir::LLVM::DIBasicTypeAttr::get(
+ context, llvm::dwarf::DW_TAG_base_type, "void", /*sizeInBits=*/0,
+ /*encoding=*/1);
+ // FIXME: Provide proper type for subroutine
mlir::LLVM::DISubroutineTypeAttr subTypeAttr =
- mlir::LLVM::DISubroutineTypeAttr::get(context, CC, types);
+ mlir::LLVM::DISubroutineTypeAttr::get(context, CC, {bT, bT});
mlir::LLVM::DIFileAttr funcFileAttr =
mlir::LLVM::DIFileAttr::get(context, fileName, filePath);
@@ -144,13 +130,11 @@ void AddDebugInfoPass::runOnOperation() {
subprogramFlags =
subprogramFlags | mlir::LLVM::DISubprogramFlags::Definition;
}
- unsigned line = 1;
- if (auto funcLoc = l.dyn_cast<mlir::FileLineColLoc>())
- line = funcLoc.getLine();
-
+ // FIXME: Provide proper line and scopeline.
auto spAttr = mlir::LLVM::DISubprogramAttr::get(
- context, id, compilationUnit, fileAttr, funcName, fullName,
- funcFileAttr, line, line, subprogramFlags, subTypeAttr);
+ context, id, compilationUnit, fileAttr, funcName, funcName,
+ funcFileAttr, /*line=*/1, /*scopeline=*/1, subprogramFlags,
+ subTypeAttr);
funcOp->setLoc(builder.getFusedLoc({funcOp->getLoc()}, spAttr));
});
}
diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt
index 5a542f237f8f98..fc08d67540ceb0 100644
--- a/flang/lib/Optimizer/Transforms/CMakeLists.txt
+++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt
@@ -22,7 +22,6 @@ add_flang_library(FIRTransforms
OMPMarkDeclareTarget.cpp
VScaleAttr.cpp
FunctionAttr.cpp
- DebugTypeGenerator.cpp
DEPENDS
FIRDialect
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
deleted file mode 100644
index 0057e08f8a763b..00000000000000
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-//===-- DebugTypeGenerator.cpp -- type conversion ---------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
-//
-//===----------------------------------------------------------------------===//
-
-#define DEBUG_TYPE "flang-debug-type-generator"
-
-#include "DebugTypeGenerator.h"
-#include "llvm/ADT/ScopeExit.h"
-#include "llvm/BinaryFormat/Dwarf.h"
-#include "llvm/Support/Debug.h"
-
-namespace fir {
-
-DebugTypeGenerator::DebugTypeGenerator(mlir::ModuleOp m)
- : module(m), kindMapping(getKindMapping(m)) {
- LLVM_DEBUG(llvm::dbgs() << "DITypeAttr generator\n");
-}
-
-static mlir::LLVM::DITypeAttr genPlaceholderType(mlir::MLIRContext *context) {
- return mlir::LLVM::DIBasicTypeAttr::get(
- context, llvm::dwarf::DW_TAG_base_type, "void", 32, 1);
-}
-
-static mlir::LLVM::DITypeAttr genBasicType(mlir::MLIRContext *context,
- mlir::StringAttr name,
- unsigned bitSize,
- unsigned decoding) {
- return mlir::LLVM::DIBasicTypeAttr::get(
- context, llvm::dwarf::DW_TAG_base_type, name, bitSize, decoding);
-}
-
-mlir::LLVM::DITypeAttr
-DebugTypeGenerator::convertType(mlir::Type Ty, mlir::LLVM::DIFileAttr fileAttr,
- mlir::LLVM::DIScopeAttr scope,
- mlir::Location loc) {
- mlir::MLIRContext *context = module.getContext();
- if (Ty.isIntOrIndex()) {
- return genBasicType(context, mlir::StringAttr::get(context, "integer"),
- Ty.getIntOrFloatBitWidth(), llvm::dwarf::DW_ATE_signed);
- } else if (Ty.isa<mlir::FloatType>() || Ty.isa<fir::RealType>()) {
- return genBasicType(context, mlir::StringAttr::get(context, "real"),
- Ty.getIntOrFloatBitWidth(), llvm::dwarf::DW_ATE_float);
- } else if (auto logTy = Ty.dyn_cast_or_null<fir::LogicalType>()) {
- return genBasicType(context,
- mlir::StringAttr::get(context, logTy.getMnemonic()),
- kindMapping.getLogicalBitsize(logTy.getFKind()),
- llvm::dwarf::DW_ATE_boolean);
- } else {
- // FIXME: These types are currently unhandled. We are generating a
- // placeholder type to allow us to test supported bits.
- return genPlaceholderType(context);
- }
-}
-
-} // namespace fir
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
deleted file mode 100644
index 5a2bb201db47a3..00000000000000
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//===-- DebugTypeGenerator.h -- type conversion ------------------- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Coding style: https://mlir.llvm.org/getting_started/DeveloperGuide/
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H
-#define FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H
-
-#include "flang/Optimizer/Dialect/FIRType.h"
-#include "flang/Optimizer/Dialect/Support/FIRContext.h"
-#include "flang/Optimizer/Dialect/Support/KindMapping.h"
-#include "llvm/Support/Debug.h"
-
-namespace fir {
-
-/// This converts FIR/mlir type to DITypeAttr.
-class DebugTypeGenerator {
-public:
- DebugTypeGenerator(mlir::ModuleOp module);
-
- mlir::LLVM::DITypeAttr convertType(mlir::Type Ty,
- mlir::LLVM::DIFileAttr fileAttr,
- mlir::LLVM::DIScopeAttr scope,
- mlir::Location loc);
-
-private:
- mlir::ModuleOp module;
- KindMapping kindMapping;
-};
-
-} // namespace fir
-
-#endif // FORTRAN_OPTIMIZER_TRANSFORMS_DEBUGTYPEGENERATOR_H
diff --git a/flang/test/Transforms/debug-fn-info.f90 b/flang/test/Transforms/debug-fn-info.f90
deleted file mode 100644
index c1a817312c959c..00000000000000
--- a/flang/test/Transforms/debug-fn-info.f90
+++ /dev/null
@@ -1,43 +0,0 @@
-! RUN: %flang_fc1 -emit-fir -debug-info-kind=standalone -mmlir --mlir-print-debuginfo %s -o - | fir-opt --add-debug-info --mlir-print-debuginfo | FileCheck %s
-
-
-! CHECK-DAG: #[[INT8:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "integer", sizeInBits = 64, encoding = DW_ATE_signed>
-! CHECK-DAG: #[[INT4:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "integer", sizeInBits = 32, encoding = DW_ATE_signed>
-! CHECK-DAG: #[[REAL8:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "real", sizeInBits = 64, encoding = DW_ATE_float>
-! CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "logical", sizeInBits = 8, encoding = DW_ATE_boolean>
-! CHECK-DAG: #[[REAL4:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "real", sizeInBits = 32, encoding = DW_ATE_float>
-! CHECK-DAG: #[[LOG4:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "logical", sizeInBits = 32, encoding = DW_ATE_boolean>
-! CHECK: #[[TY1:.*]] = #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #[[INT8]], #[[INT4]], #[[REAL8]], #[[LOG1]]>
-! CHECK: #[[TY2:.*]] = #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #[[INT4]], #[[INT8]], #[[REAL4]], #[[LOG4]]>
-
-program mn
- integer(kind=4) :: i4
- integer(kind=8) :: i8
- real(kind=4) :: r4
- real(kind=8) :: r8
- logical(kind=1) :: l1
- logical(kind=4) :: l4
- i8 = fn1(i4, r8, l1)
- i4 = fn2(i8, r4, l4)
-contains
- ! CHECK: #di_subprogram1 = #llvm.di_subprogram<id = {{.*}}, compileUnit = {{.*}}, scope = {{.*}}, name = "fn1", linkageName = "_QFPfn1", file = {{.*}}, line = [[@LINE+1]], scopeLine = [[@LINE+1]], subprogramFlags = Definition, type = #[[TY1]]>
- function fn1(a, b, c) result (res)
- implicit none
- integer(kind=4), intent(in) :: a
- real(kind=8), intent(in) :: b
- logical(kind=1), intent(in) :: c
- integer(kind=8) :: res
- res = a + b
- end function
-
-! CHECK: #di_subprogram2 = #llvm.di_subprogram<id = {{.*}}, compileUnit = {{.*}}, scope = {{.*}}, name = "fn2", linkageName = "_QFPfn2", file = {{.*}}, line = [[@LINE+1]], scopeLine = [[@LINE+1]], subprogramFlags = Definition, type = #[[TY2]]>
- function fn2(a, b, c) result (res)
- implicit none
- integer(kind=8), intent(in) :: a
- real(kind=4), intent(in) :: b
- logical(kind=4), intent(in) :: c
- integer(kind=4) :: res
- res = a + b
- end function
-end program
-
diff --git a/flang/test/Transforms/debug-line-table-inc-file.fir b/flang/test/Transforms/debug-line-table-inc-file.fir
index d7f60a1a86dbf0..dc75482d4f8a7f 100644
--- a/flang/test/Transforms/debug-line-table-inc-file.fir
+++ b/flang/test/Transforms/debug-line-table-inc-file.fir
@@ -31,7 +31,7 @@ module attributes {} {
// CHECK: #[[LOC_INC_FILE:.*]] = loc("{{.*}}inc.f90":1:1)
// CHECK: #[[LOC_FILE:.*]] = loc("{{.*}}simple.f90":3:1)
// CHECK: #[[DI_CU:.*]] = #llvm.di_compile_unit<id = distinct[{{.*}}]<>, sourceLanguage = DW_LANG_Fortran95, file = #[[DI_FILE]], producer = "flang{{.*}}", isOptimized = false, emissionKind = LineTablesOnly>
-// CHECK: #[[DI_SP_INC:.*]] = #llvm.di_subprogram<id = distinct[{{.*}}]<>, compileUnit = #[[DI_CU]], scope = #[[DI_FILE]], name = "sinc", linkageName = "_QPsinc", file = #[[DI_INC_FILE]], {{.*}}>
+// CHECK: #[[DI_SP_INC:.*]] = #llvm.di_subprogram<id = distinct[{{.*}}]<>, compileUnit = #[[DI_CU]], scope = #[[DI_FILE]], name = "_QPsinc", linkageName = "_QPsinc", file = #[[DI_INC_FILE]], {{.*}}>
// CHECK: #[[DI_SP:.*]] = #llvm.di_subprogram<id = distinct[{{.*}}]<>, compileUnit = #[[DI_CU]], scope = #[[DI_FILE]], name = "_QQmain", linkageName = "_QQmain", file = #[[DI_FILE]], {{.*}}>
// CHECK: #[[FUSED_LOC_INC_FILE]] = loc(fused<#[[DI_SP_INC]]>[#[[LOC_INC_FILE]]])
// CHECK: #[[FUSED_LOC_FILE]] = loc(fused<#[[DI_SP]]>[#[[LOC_FILE]]])
More information about the flang-commits
mailing list