diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
index d038c467b166a..a7e47239036ba 100644
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
+++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
@@ -679,26 +679,37 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertPointerLikeType(
/*optional
=*/std::nullopt, /*extra data=*/nullptr);
}
+static mlir::StringAttr getBasicTypeName(mlir::MLIRContext *context,
+ llvm::StringRef baseName,
+ unsigned bitSize) {
+ std::string name(baseName.str());
+ if (bitSize != 32)
+ name += "*" + std::to_string(bitSize / 8);
+ return mlir::StringAttr::get(context, name);
+}
+
mlir::LLVM::DITypeAttr
DebugTypeGenerator::convertType(mlir::Type Ty, mlir::LLVM::DIFileAttr fileAttr,
mlir::LLVM::DIScopeAttr scope,
fir::cg::XDeclareOp declOp) {
mlir::MLIRContext *context = module.getContext();
if (Ty.isInteger()) {
- return genBasicType(context, mlir::StringAttr::get(context, "integer"),
- Ty.getIntOrFloatBitWidth(), llvm::dwarf::DW_ATE_signed);
+ unsigned bitWidth = Ty.getIntOrFloatBitWidth();
+ return genBasicType(context, getBasicTypeName(context, "integer", bitWidth),
+ bitWidth, llvm::dwarf::DW_ATE_signed);
} else if (mlir::isa(Ty)) {
- return genBasicType(context, mlir::StringAttr::get(context, "real"),
- Ty.getIntOrFloatBitWidth(), llvm::dwarf::DW_ATE_float);
+ unsigned bitWidth = Ty.getIntOrFloatBitWidth();
+ return genBasicType(context, getBasicTypeName(context, "real", bitWidth),
+ bitWidth, llvm::dwarf::DW_ATE_float);
} else if (auto logTy = mlir::dyn_cast_if_present(Ty)) {
- return genBasicType(context,
- mlir::StringAttr::get(context, logTy.getMnemonic()),
- kindMapping.getLogicalBitsize(logTy.getFKind()),
- llvm::dwarf::DW_ATE_boolean);
+ unsigned bitWidth = kindMapping.getLogicalBitsize(logTy.getFKind());
+ return genBasicType(
+ context, getBasicTypeName(context, logTy.getMnemonic(), bitWidth),
+ bitWidth, llvm::dwarf::DW_ATE_boolean);
} else if (auto cplxTy = mlir::dyn_cast_if_present(Ty)) {
auto floatTy = mlir::cast(cplxTy.getElementType());
unsigned bitWidth = floatTy.getWidth();
- return genBasicType(context, mlir::StringAttr::get(context, "complex"),
+ return genBasicType(context, getBasicTypeName(context, "complex", bitWidth),
bitWidth * 2, llvm::dwarf::DW_ATE_complex_float);
} else if (auto seqTy = mlir::dyn_cast_if_present(Ty)) {
return convertSequenceType(seqTy, fileAttr, scope, declOp);
diff --git a/flang/test/Integration/debug-complex-1.f90 b/flang/test/Integration/debug-complex-1.f90
index 1ec4b7fe33990..48ea0295eb250 100644
--- a/flang/test/Integration/debug-complex-1.f90
+++ b/flang/test/Integration/debug-complex-1.f90
@@ -17,8 +17,8 @@ function fn1(a, b) result (c)
end program
! CHECK-DAG: ![[C4:.*]] = !DIBasicType(name: "complex", size: 64, encoding: DW_ATE_complex_float)
-! CHECK-DAG: ![[C8:.*]] = !DIBasicType(name: "complex", size: 128, encoding: DW_ATE_complex_float)
-! CHECK-DAG: ![[C16:.*]] = !DIBasicType(name: "complex", size: 256, encoding: DW_ATE_complex_float)
+! CHECK-DAG: ![[C8:.*]] = !DIBasicType(name: "complex*8", size: 128, encoding: DW_ATE_complex_float)
+! CHECK-DAG: ![[C16:.*]] = !DIBasicType(name: "complex*16", size: 256, encoding: DW_ATE_complex_float)
! CHECK-DAG: !DILocalVariable(name: "c4"{{.*}}type: ![[C4]])
! CHECK-DAG: !DILocalVariable(name: "c8"{{.*}}type: ![[C8]])
! CHECK-DAG: !DILocalVariable(name: "r"{{.*}}type: ![[C16]])
diff --git a/flang/test/Integration/debug-local-var-2.f90 b/flang/test/Integration/debug-local-var-2.f90
index 0ddac633a5b1e..93659a56c7275 100644
--- a/flang/test/Integration/debug-local-var-2.f90
+++ b/flang/test/Integration/debug-local-var-2.f90
@@ -40,11 +40,11 @@ program mn
! BOTH-DAG: ![[MAIN:.*]] = distinct !DISubprogram(name: "MN", {{.*}})
! BOTH-DAG: ![[TYI32:.*]] = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed)
-! BOTH-DAG: ![[TYI64:.*]] = !DIBasicType(name: "integer", size: 64, encoding: DW_ATE_signed)
-! BOTH-DAG: ![[TYL8:.*]] = !DIBasicType(name: "logical", size: 8, encoding: DW_ATE_boolean)
+! BOTH-DAG: ![[TYI64:.*]] = !DIBasicType(name: "integer*8", size: 64, encoding: DW_ATE_signed)
+! BOTH-DAG: ![[TYL8:.*]] = !DIBasicType(name: "logical*1", size: 8, encoding: DW_ATE_boolean)
! BOTH-DAG: ![[TYL32:.*]] = !DIBasicType(name: "logical", size: 32, encoding: DW_ATE_boolean)
! BOTH-DAG: ![[TYR32:.*]] = !DIBasicType(name: "real", size: 32, encoding: DW_ATE_float)
-! BOTH-DAG: ![[TYR64:.*]] = !DIBasicType(name: "real", size: 64, encoding: DW_ATE_float)
+! BOTH-DAG: ![[TYR64:.*]] = !DIBasicType(name: "real*8", size: 64, encoding: DW_ATE_float)
! BOTH-DAG: ![[I4]] = !DILocalVariable(name: "i4", scope: ![[MAIN]], file: !{{.*}}, line: [[@LINE+6]], type: ![[TYI32]])
! BOTH-DAG: ![[I8]] = !DILocalVariable(name: "i8", scope: ![[MAIN]], file: !{{.*}}, line: [[@LINE+6]], type: ![[TYI64]])
diff --git a/flang/test/Transforms/debug-complex-1.fir b/flang/test/Transforms/debug-complex-1.fir
index f7be6b2d4a931..7a288fec69be3 100644
--- a/flang/test/Transforms/debug-complex-1.fir
+++ b/flang/test/Transforms/debug-complex-1.fir
@@ -26,9 +26,9 @@ module {
#loc3 = loc("./simple.f90":8:1)
#loc4 = loc("./simple.f90":11:1)
-// CHECK-DAG: #[[CMPX8:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[CMPX8:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[CMPX4:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[CMPX16:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[CMPX16:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[TY1:.*]] = #llvm.di_subroutine_type<{{.*}}types = #[[CMPX8]], #[[CMPX4]]>
// CHECK-DAG: #[[TY2:.*]] = #llvm.di_subroutine_type<{{.*}}types = #[[CMPX16]], #[[CMPX4]]>
diff --git a/flang/test/Transforms/debug-derived-type-1.fir b/flang/test/Transforms/debug-derived-type-1.fir
index cfbd361a91e72..672b6cf2819d2 100644
--- a/flang/test/Transforms/debug-derived-type-1.fir
+++ b/flang/test/Transforms/debug-derived-type-1.fir
@@ -45,12 +45,12 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry, d
// CHECK-DAG: #[[INT_TY:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[INT8_TY:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[INT8_TY:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[REAL4_TY:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[CMX8_TY:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[CMX_ARR:.*]] = #llvm.di_composite_type
-// CHECK-DAG: #[[LOG_TY:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[REAL8_TY:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[LOG_TY:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[REAL8_TY:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[STR_TY:.*]] = #llvm.di_string_type
// CHECK-DAG: #[[MOD:.*]] = #llvm.di_module<{{.*}}name = "m_employee"{{.*}}>
// CHECK-DAG: #[[MOD1:.*]] = #llvm.di_module<{{.*}}name = "t1"{{.*}}>
diff --git a/flang/test/Transforms/debug-fn-info.fir b/flang/test/Transforms/debug-fn-info.fir
index c02835be50af5..d82cef1acc423 100644
--- a/flang/test/Transforms/debug-fn-info.fir
+++ b/flang/test/Transforms/debug-fn-info.fir
@@ -64,10 +64,10 @@ module {
#loc4 = loc("test2.f90":53:22)
-// CHECK-DAG: #[[INT8:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[INT8:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[INT4:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[REAL8:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[REAL8:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[REAL4:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[LOG4:.*]] = #llvm.di_basic_type
// CHECK: #[[TY0:.*]] = #llvm.di_subroutine_type
diff --git a/flang/test/Transforms/debug-local-var.fir b/flang/test/Transforms/debug-local-var.fir
index 06c9b01e75a61..466f79c6ed879 100644
--- a/flang/test/Transforms/debug-local-var.fir
+++ b/flang/test/Transforms/debug-local-var.fir
@@ -71,10 +71,10 @@ module {
#loc15 = loc("test.f90":21:24)
#loc16 = loc("test.f90":22:5)
-// CHECK-DAG: #[[INT8:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[INT8:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[INT4:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[REAL8:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[REAL8:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[REAL4:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[LOG4:.*]] = #llvm.di_basic_type
// CHECK-DAG: #[[MAIN:.*]] = #llvm.di_subprogram<{{.*}}name = "mn"{{.*}}>
diff --git a/flang/test/Transforms/debug-ref-type.fir b/flang/test/Transforms/debug-ref-type.fir
index 745aebee778be..2164a40c7c111 100644
--- a/flang/test/Transforms/debug-ref-type.fir
+++ b/flang/test/Transforms/debug-ref-type.fir
@@ -5,6 +5,6 @@ module {
}
#loc1 = loc("test.f90":5:1)
-// CHECK: #[[INT8_TY:.*]] = #llvm.di_basic_type
+// CHECK: #[[INT8_TY:.*]] = #llvm.di_basic_type
// CHECK: #[[REF_TY:.*]] = #llvm.di_derived_type
// CHECK: #llvm.di_subroutine_type<{{.*}}types = #[[REF_TY]], #[[INT8_TY]]>
diff --git a/flang/test/Transforms/debug-tuple-type.fir b/flang/test/Transforms/debug-tuple-type.fir
index e3b0bafdf3cd4..b865d492b6696 100644
--- a/flang/test/Transforms/debug-tuple-type.fir
+++ b/flang/test/Transforms/debug-tuple-type.fir
@@ -5,7 +5,7 @@ module {
func.func private @_FortranAioOutputDerivedType(!fir.ref>)
}
-// CHECK: #[[F64:.*]] = #llvm.di_basic_type
+// CHECK: #[[F64:.*]] = #llvm.di_basic_type
// CHECK: #[[CU:.*]] = #llvm.di_compile_unit<{{.*}}>
// CHECK: #[[DTY1:.*]] = #llvm.di_derived_type
// CHECK: #[[DTY2:.*]] = #llvm.di_derived_type
diff --git a/flang/test/Transforms/debug-vector-type.fir b/flang/test/Transforms/debug-vector-type.fir
index d3e1f6ec28d0f..cfb97ea46ba61 100644
--- a/flang/test/Transforms/debug-vector-type.fir
+++ b/flang/test/Transforms/debug-vector-type.fir
@@ -2,22 +2,22 @@
module {
func.func private @foo1(%arg0: !fir.vector<20:bf16>)
-// CHECK-DAG: #[[F16:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #llvm.di_composite_type>
+// CHECK-DAG: #[[F16:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #llvm.di_composite_type>
func.func private @foo2(%arg0: !fir.vector<30:f32>)
// CHECK-DAG: #[[F32:.*]] = #llvm.di_basic_type
// CHECK-DAG: #llvm.di_composite_type>
func.func private @foo3(%arg0: !fir.vector<10:f64>)
-// CHECK-DAG: #[[F64:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #llvm.di_composite_type>
+// CHECK-DAG: #[[F64:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #llvm.di_composite_type>
func.func private @foo4(%arg0: !fir.vector<5:i32>)
// CHECK-DAG: #[[I32:.*]] = #llvm.di_basic_type
// CHECK-DAG: #llvm.di_composite_type>
func.func private @foo5(%arg0: !fir.vector<2:i64>)
-// CHECK-DAG: #[[I64:.*]] = #llvm.di_basic_type
-// CHECK-DAG: #llvm.di_composite_type>
+// CHECK-DAG: #[[I64:.*]] = #llvm.di_basic_type
+// CHECK-DAG: #llvm.di_composite_type>
}