[llvm] r230057 - IR: Change MDFile to directly store the filename/directory
Duncan P. N. Exon Smith
dexonsmith at apple.com
Fri Feb 20 12:35:18 PST 2015
Author: dexonsmith
Date: Fri Feb 20 14:35:17 2015
New Revision: 230057
URL: http://llvm.org/viewvc/llvm-project?rev=230057&view=rev
Log:
IR: Change MDFile to directly store the filename/directory
In the old (well, current) schema, there are two types of file
references: untagged and tagged (the latter references the former).
!0 = !{!"filename", !"/directory"}
!1 = !{!"0x29", !1} ; DW_TAG_file_type [filename] [/directory]
The interface to `DIBuilder` universally takes the tagged version,
described by `DIFile`. However, most `file:` references actually use
the untagged version directly.
In the new hierarchy, I'm merging this into a single node: `MDFile`.
Originally I'd planned to keep the old schema unchanged until after I
moved the new hierarchy into place.
However, it turns out to be trivial to make `MDFile` match both nodes at
the same time.
- Anyone referencing !1 does so through `DIFile`, whose implementation
I need to gut anyway (as I do the rest of the `DIDescriptor`s).
- Anyone referencing !0 just references an `MDNode`, and expects a
node with two `MDString` operands.
This commit achieves that, and updates all the testcases for the parts
of the new hierarchy that used the two-node schema (I've replaced the
untagged nodes with `distinct !{}` to make the diff clear (otherwise the
metadata all gets renumbered); it might be worthwhile to come back and
delete those nodes and renumber the world, not sure).
Modified:
llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
llvm/trunk/lib/IR/DebugInfoMetadata.cpp
llvm/trunk/test/Assembler/debug-info.ll
llvm/trunk/test/Assembler/mdcompileunit.ll
llvm/trunk/test/Assembler/mdglobalvariable.ll
llvm/trunk/test/Assembler/mdlexicalblock.ll
llvm/trunk/test/Assembler/mdlocalvariable.ll
llvm/trunk/test/Assembler/mdnamespace.ll
llvm/trunk/test/Assembler/mdobjcproperty.ll
llvm/trunk/test/Assembler/mdsubprogram.ll
Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfoMetadata.h?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
+++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Fri Feb 20 14:35:17 2015
@@ -754,25 +754,11 @@ public:
TempMDFile clone() const { return cloneImpl(); }
- MDTuple *getFileNode() const { return cast<MDTuple>(getOperand(0)); }
+ StringRef getFilename() const { return getStringOperand(0); }
+ StringRef getDirectory() const { return getStringOperand(1); }
- StringRef getFilename() const {
- if (auto *S = getRawFilename())
- return S->getString();
- return StringRef();
- }
- StringRef getDirectory() const {
- if (auto *S = getRawDirectory())
- return S->getString();
- return StringRef();
- }
-
- MDString *getRawFilename() const {
- return cast_or_null<MDString>(getFileNode()->getOperand(0));
- }
- MDString *getRawDirectory() const {
- return cast_or_null<MDString>(getFileNode()->getOperand(1));
- }
+ MDString *getRawFilename() const { return getOperandAs<MDString>(0); }
+ MDString *getRawDirectory() const { return getOperandAs<MDString>(1); }
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == MDFileKind;
Modified: llvm/trunk/lib/IR/DebugInfoMetadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfoMetadata.cpp?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugInfoMetadata.cpp (original)
+++ llvm/trunk/lib/IR/DebugInfoMetadata.cpp Fri Feb 20 14:35:17 2015
@@ -210,11 +210,8 @@ MDFile *MDFile::getImpl(LLVMContext &Con
assert(isCanonical(Filename) && "Expected canonical MDString");
assert(isCanonical(Directory) && "Expected canonical MDString");
DEFINE_GETIMPL_LOOKUP(MDFile, (getString(Filename), getString(Directory)));
- Metadata *NodeOps[] = {Filename, Directory};
- Metadata *Ops[] = {MDTuple::get(Context, NodeOps)};
- return storeImpl(new (ArrayRef<Metadata *>(Ops).size())
- MDFile(Context, Storage, Ops),
- Storage, Context.pImpl->MDFiles);
+ Metadata *Ops[] = {Filename, Directory};
+ DEFINE_GETIMPL_STORE_NO_CONSTRUCTOR_ARGS(MDFile, Ops);
}
MDCompileUnit *MDCompileUnit::getImpl(
Modified: llvm/trunk/test/Assembler/debug-info.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/debug-info.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/debug-info.ll (original)
+++ llvm/trunk/test/Assembler/debug-info.ll Fri Feb 20 14:35:17 2015
@@ -28,35 +28,35 @@
!9 = !MDBasicType(tag: DW_TAG_base_type)
!10 = !MDBasicType(tag: DW_TAG_base_type, name: "", size: 0, align: 0, encoding: 0)
-; CHECK-NEXT: !9 = !{!"path/to/file", !"/path/to/dir"}
+; CHECK-NEXT: !9 = distinct !{}
; CHECK-NEXT: !10 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
-; CHECK-NEXT: !11 = !{null, null}
+; CHECK-NEXT: !11 = distinct !{}
; CHECK-NEXT: !12 = !MDFile(filename: "", directory: "")
-!11 = !{!"path/to/file", !"/path/to/dir"}
+!11 = distinct !{}
!12 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
-!13 = !{null, null}
+!13 = distinct !{}
!14 = !MDFile(filename: "", directory: "")
; CHECK-NEXT: !13 = !MDDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 32, align: 32)
!15 = !MDDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 32, align: 32)
-; CHECK-NEXT: !14 = !MDCompositeType(tag: DW_TAG_structure_type, name: "MyType", file: !9, line: 2, size: 32, align: 32, identifier: "MangledMyType")
-; CHECK-NEXT: !15 = distinct !MDCompositeType(tag: DW_TAG_structure_type, name: "Base", file: !9, line: 3, scope: !14, size: 128, align: 32, offset: 64, flags: 3, elements: !16, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !15, templateParams: !18, identifier: "MangledBase")
+; CHECK-NEXT: !14 = !MDCompositeType(tag: DW_TAG_structure_type, name: "MyType", file: !10, line: 2, size: 32, align: 32, identifier: "MangledMyType")
+; CHECK-NEXT: !15 = distinct !MDCompositeType(tag: DW_TAG_structure_type, name: "Base", file: !10, line: 3, scope: !14, size: 128, align: 32, offset: 64, flags: 3, elements: !16, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !15, templateParams: !18, identifier: "MangledBase")
; CHECK-NEXT: !16 = !{!17}
-; CHECK-NEXT: !17 = !MDDerivedType(tag: DW_TAG_member, name: "field", file: !9, line: 4, scope: !15, baseType: !6, size: 32, align: 32, offset: 32, flags: 3)
+; CHECK-NEXT: !17 = !MDDerivedType(tag: DW_TAG_member, name: "field", file: !10, line: 4, scope: !15, baseType: !6, size: 32, align: 32, offset: 32, flags: 3)
; CHECK-NEXT: !18 = !{!6}
-; CHECK-NEXT: !19 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Derived", file: !9, line: 3, scope: !14, baseType: !15, size: 128, align: 32, offset: 64, flags: 3, elements: !20, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !15, templateParams: !18, identifier: "MangledBase")
+; CHECK-NEXT: !19 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Derived", file: !10, line: 3, scope: !14, baseType: !15, size: 128, align: 32, offset: 64, flags: 3, elements: !20, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !15, templateParams: !18, identifier: "MangledBase")
; CHECK-NEXT: !20 = !{!21}
; CHECK-NEXT: !21 = !MDDerivedType(tag: DW_TAG_inheritance, scope: !19, baseType: !15)
; CHECK-NEXT: !22 = !MDDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !6, size: 32, align: 32, extraData: !15)
; CHECK-NEXT: !23 = !MDCompositeType(tag: DW_TAG_structure_type)
; CHECK-NEXT: !24 = !MDCompositeType(tag: DW_TAG_structure_type, runtimeLang: DW_LANG_Cobol85)
-!16 = !MDCompositeType(tag: DW_TAG_structure_type, name: "MyType", file: !11, line: 2, size: 32, align: 32, identifier: "MangledMyType")
-!17 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Base", file: !11, line: 3, scope: !16, size: 128, align: 32, offset: 64, flags: 3, elements: !18, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !17, templateParams: !20, identifier: "MangledBase")
+!16 = !MDCompositeType(tag: DW_TAG_structure_type, name: "MyType", file: !12, line: 2, size: 32, align: 32, identifier: "MangledMyType")
+!17 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Base", file: !12, line: 3, scope: !16, size: 128, align: 32, offset: 64, flags: 3, elements: !18, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !17, templateParams: !20, identifier: "MangledBase")
!18 = !{!19}
-!19 = !MDDerivedType(tag: DW_TAG_member, name: "field", file: !11, line: 4, scope: !17, baseType: !7, size: 32, align: 32, offset: 32, flags: 3)
+!19 = !MDDerivedType(tag: DW_TAG_member, name: "field", file: !12, line: 4, scope: !17, baseType: !7, size: 32, align: 32, offset: 32, flags: 3)
!20 = !{!7}
-!21 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Derived", file: !11, line: 3, scope: !16, baseType: !17, size: 128, align: 32, offset: 64, flags: 3, elements: !22, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !17, templateParams: !20, identifier: "MangledBase")
+!21 = !MDCompositeType(tag: DW_TAG_structure_type, name: "Derived", file: !12, line: 3, scope: !16, baseType: !17, size: 128, align: 32, offset: 64, flags: 3, elements: !22, runtimeLang: DW_LANG_C_plus_plus_11, vtableHolder: !17, templateParams: !20, identifier: "MangledBase")
!22 = !{!23}
!23 = !MDDerivedType(tag: DW_TAG_inheritance, scope: !21, baseType: !17)
!24 = !MDDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: !7, size: 32, align: 32, extraData: !17)
Modified: llvm/trunk/test/Assembler/mdcompileunit.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdcompileunit.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdcompileunit.ll (original)
+++ llvm/trunk/test/Assembler/mdcompileunit.ll Fri Feb 20 14:35:17 2015
@@ -4,7 +4,7 @@
; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !7, !8, !8}
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10}
-!0 = !{!"path/to/file", !"/path/to/dir"}
+!0 = distinct !{}
!1 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
!2 = distinct !{}
!3 = distinct !{}
Modified: llvm/trunk/test/Assembler/mdglobalvariable.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdglobalvariable.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdglobalvariable.ll (original)
+++ llvm/trunk/test/Assembler/mdglobalvariable.ll Fri Feb 20 14:35:17 2015
@@ -7,14 +7,14 @@
!named = !{!0, !1, !2, !3, !4, !5, !6}
!0 = distinct !{}
-!1 = !{!"path/to/file", !"/path/to/dir"}
+!1 = distinct !{}
!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
!3 = distinct !{}
!4 = distinct !{}
-; CHECK: !5 = !MDGlobalVariable(scope: !0, name: "foo", linkageName: "foo", file: !1, line: 7, type: !3, isLocal: true, isDefinition: false, variable: i32* @foo, declaration: !4)
+; CHECK: !5 = !MDGlobalVariable(scope: !0, name: "foo", linkageName: "foo", file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, variable: i32* @foo, declaration: !4)
!5 = !MDGlobalVariable(scope: !0, name: "foo", linkageName: "foo",
- file: !1, line: 7, type: !3, isLocal: true,
+ file: !2, line: 7, type: !3, isLocal: true,
isDefinition: false, variable: i32* @foo,
declaration: !4)
Modified: llvm/trunk/test/Assembler/mdlexicalblock.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdlexicalblock.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdlexicalblock.ll (original)
+++ llvm/trunk/test/Assembler/mdlexicalblock.ll Fri Feb 20 14:35:17 2015
@@ -5,7 +5,7 @@
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
!0 = distinct !{}
-!1 = !{!"path/to/file", !"/path/to/dir"}
+!1 = distinct !{}
!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
; CHECK: !3 = !MDLexicalBlock(scope: !0, file: !2, line: 7, column: 35)
Modified: llvm/trunk/test/Assembler/mdlocalvariable.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdlocalvariable.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdlocalvariable.ll (original)
+++ llvm/trunk/test/Assembler/mdlocalvariable.ll Fri Feb 20 14:35:17 2015
@@ -7,18 +7,18 @@
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
!0 = distinct !{}
-!1 = !{!"path/to/file", !"/path/to/dir"}
+!1 = distinct !{}
!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
!3 = distinct !{}
!4 = distinct !{}
-; CHECK: !5 = !MDLocalVariable(tag: DW_TAG_arg_variable, scope: !0, name: "foo", file: !1, line: 7, type: !3, arg: 3, flags: 8, inlinedAt: !4)
-; CHECK: !6 = !MDLocalVariable(tag: DW_TAG_auto_variable, scope: !0, name: "foo", file: !1, line: 7, type: !3, flags: 8, inlinedAt: !4)
+; CHECK: !5 = !MDLocalVariable(tag: DW_TAG_arg_variable, scope: !0, name: "foo", file: !2, line: 7, type: !3, arg: 3, flags: 8, inlinedAt: !4)
+; CHECK: !6 = !MDLocalVariable(tag: DW_TAG_auto_variable, scope: !0, name: "foo", file: !2, line: 7, type: !3, flags: 8, inlinedAt: !4)
!5 = !MDLocalVariable(tag: DW_TAG_arg_variable, scope: !0, name: "foo",
- file: !1, line: 7, type: !3, arg: 3,
+ file: !2, line: 7, type: !3, arg: 3,
flags: 8, inlinedAt: !4)
!6 = !MDLocalVariable(tag: DW_TAG_auto_variable, scope: !0, name: "foo",
- file: !1, line: 7, type: !3, flags: 8, inlinedAt: !4)
+ file: !2, line: 7, type: !3, flags: 8, inlinedAt: !4)
; CHECK: !7 = !MDLocalVariable(tag: DW_TAG_arg_variable, scope: null, name: "", arg: 0)
; CHECK: !8 = !MDLocalVariable(tag: DW_TAG_auto_variable, scope: null, name: "")
Modified: llvm/trunk/test/Assembler/mdnamespace.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdnamespace.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdnamespace.ll (original)
+++ llvm/trunk/test/Assembler/mdnamespace.ll Fri Feb 20 14:35:17 2015
@@ -5,7 +5,7 @@
!named = !{!0, !1, !2, !3, !4, !5}
!0 = distinct !{}
-!1 = !{!"path/to/file", !"/path/to/dir"}
+!1 = distinct !{}
!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
; CHECK: !3 = !MDNamespace(scope: !0, file: !2, name: "Namespace", line: 7)
Modified: llvm/trunk/test/Assembler/mdobjcproperty.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdobjcproperty.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdobjcproperty.ll (original)
+++ llvm/trunk/test/Assembler/mdobjcproperty.ll Fri Feb 20 14:35:17 2015
@@ -4,14 +4,14 @@
; CHECK: !named = !{!0, !1, !2, !3, !4, !4}
!named = !{!0, !1, !2, !3, !4, !5}
-!0 = !{!"path/to/file", !"/path/to/dir"}
+!0 = distinct !{}
!1 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
!2 = distinct !{}
; CHECK: !2 = distinct !{}
-; CHECK-NEXT: !3 = !MDObjCProperty(name: "foo", file: !0, line: 7, setter: "setFoo", getter: "getFoo", attributes: 7, type: !2)
-!3 = !MDObjCProperty(name: "foo", file: !0, line: 7, setter: "setFoo",
+; CHECK-NEXT: !3 = !MDObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo", getter: "getFoo", attributes: 7, type: !2)
+!3 = !MDObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo",
getter: "getFoo", attributes: 7, type: !2)
; CHECK-NEXT: !4 = !MDObjCProperty(name: "foo")
Modified: llvm/trunk/test/Assembler/mdsubprogram.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdsubprogram.ll?rev=230057&r1=230056&r2=230057&view=diff
==============================================================================
--- llvm/trunk/test/Assembler/mdsubprogram.ll (original)
+++ llvm/trunk/test/Assembler/mdsubprogram.ll Fri Feb 20 14:35:17 2015
@@ -7,7 +7,7 @@ declare void @_Z3foov()
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
!0 = distinct !{}
-!1 = !{!"path/to/file", !"/path/to/dir"}
+!1 = distinct !{}
!2 = !MDFile(filename: "path/to/file", directory: "/path/to/dir")
!3 = distinct !{}
!4 = distinct !{}
More information about the llvm-commits
mailing list