aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Ulmann <christianulmann@gmail.com>2024-04-19 17:12:22 +0200
committerGitHub <noreply@github.com>2024-04-19 17:12:22 +0200
commitf76475c026acbc30ef42834b3956bfa7bd61052b (patch)
treeb096748463659e74653346a8d8378bb35b1430db
parent97c71247312c7e5261168283c13cd7e3ecd039a5 (diff)
downloadllvm-f76475c026acbc30ef42834b3956bfa7bd61052b.zip
llvm-f76475c026acbc30ef42834b3956bfa7bd61052b.tar.gz
llvm-f76475c026acbc30ef42834b3956bfa7bd61052b.tar.bz2
[MLIR][LLVM] Add vector exception to composite type element ignore mode (#89385)
This commit fixes a bug in the DICompositeType element ignore mode. It seems that vectors require the presence of elements, as they otherwise do not pass the verifier.
-rw-r--r--mlir/lib/Target/LLVMIR/DebugImporter.cpp5
-rw-r--r--mlir/test/Target/LLVMIR/Import/ignore-composite-type-elements.ll24
2 files changed, 27 insertions, 2 deletions
diff --git a/mlir/lib/Target/LLVMIR/DebugImporter.cpp b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
index b4c0115..1ab55b0 100644
--- a/mlir/lib/Target/LLVMIR/DebugImporter.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
@@ -71,7 +71,10 @@ DICompileUnitAttr DebugImporter::translateImpl(llvm::DICompileUnit *node) {
DICompositeTypeAttr DebugImporter::translateImpl(llvm::DICompositeType *node) {
std::optional<DIFlags> flags = symbolizeDIFlags(node->getFlags());
SmallVector<DINodeAttr> elements;
- if (!dropDICompositeTypeElements) {
+
+ // A vector always requires an element.
+ bool isVectorType = flags && bitEnumContainsAll(*flags, DIFlags::Vector);
+ if (isVectorType || !dropDICompositeTypeElements) {
for (llvm::DINode *element : node->getElements()) {
assert(element && "expected a non-null element type");
elements.push_back(translate(element));
diff --git a/mlir/test/Target/LLVMIR/Import/ignore-composite-type-elements.ll b/mlir/test/Target/LLVMIR/Import/ignore-composite-type-elements.ll
index a249f22..d92d070 100644
--- a/mlir/test/Target/LLVMIR/Import/ignore-composite-type-elements.ll
+++ b/mlir/test/Target/LLVMIR/Import/ignore-composite-type-elements.ll
@@ -1,4 +1,4 @@
-; RUN: mlir-translate -import-llvm -mlir-print-debuginfo -split-input-file -drop-di-composite-type-elements %s | FileCheck %s
+; RUN: mlir-translate -import-llvm -mlir-print-debuginfo -split-input-file -drop-di-composite-type-elements -split-input-file %s | FileCheck %s
; Verifies that the according flag avoids the conversion of the elements of the
; DICompositeType.
@@ -23,3 +23,25 @@ define void @composite_type() !dbg !3 {
!7 = !{!9}
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, flags: DIFlagArtificial | DIFlagObjectPointer)
!9 = !DIDerivedType(tag: DW_TAG_member, name: "call_field", file: !2, baseType: !8)
+
+; // -----
+
+; CHECK: #{{.+}} = #llvm.di_composite_type<tag = DW_TAG_array_type, name = "vector",
+; CHECK-SAME: baseType = #{{.*}}, flags = Vector, elements = #llvm.di_subrange<count = 4 : i64>
+
+define void @composite_type() !dbg !3 {
+ ret void
+}
+
+!llvm.dbg.cu = !{!1}
+!llvm.module.flags = !{!0}
+!0 = !{i32 2, !"Debug Info Version", i32 3}
+!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
+!2 = !DIFile(filename: "debug-info.ll", directory: "/")
+!3 = distinct !DISubprogram(name: "composite_type", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !4)
+!4 = !DISubroutineType(types: !5)
+!5 = !{!7}
+!6 = !DIBasicType(name: "int")
+!7 = !DICompositeType(tag: DW_TAG_array_type, name: "vector", flags: DIFlagVector, elements: !8, baseType: !6)
+!8 = !{!9}
+!9 = !DISubrange(count: 4)