diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-13 01:20:38 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-13 01:20:38 +0000 |
| commit | 171d077ae44a4a16d12f32db0c3cb100864949c7 (patch) | |
| tree | a60f51a46f716106b68906efb84f4b4c72d1b021 /llvm/lib/IR/AsmWriter.cpp | |
| parent | d6346e6f3ef8d46d91b582b089a6aabe91369624 (diff) | |
| download | bcm5719-llvm-171d077ae44a4a16d12f32db0c3cb100864949c7.tar.gz bcm5719-llvm-171d077ae44a4a16d12f32db0c3cb100864949c7.zip | |
AsmWriter/Bitcode: MDDerivedType and MDCompositeType
llvm-svn: 229009
Diffstat (limited to 'llvm/lib/IR/AsmWriter.cpp')
| -rw-r--r-- | llvm/lib/IR/AsmWriter.cpp | 96 |
1 files changed, 89 insertions, 7 deletions
diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp index 826794a2c04..77e2b2d64b9 100644 --- a/llvm/lib/IR/AsmWriter.cpp +++ b/llvm/lib/IR/AsmWriter.cpp @@ -1387,15 +1387,97 @@ static void writeMDBasicType(raw_ostream &Out, const MDBasicType *N, Out << ")"; } -static void writeMDDerivedType(raw_ostream &, const MDDerivedType *, - TypePrinting *, SlotTracker *, const Module *) { - llvm_unreachable("write not implemented"); +static void writeMDDerivedType(raw_ostream &Out, const MDDerivedType *N, + TypePrinting *TypePrinter, SlotTracker *Machine, + const Module *Context) { + Out << "!MDDerivedType("; + FieldSeparator FS; + writeTag(Out, FS, N); + if (!N->getName().empty()) + Out << FS << "name: \"" << N->getName() << "\""; + if (N->getFile()) { + Out << FS << "file: "; + writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine, + Context); + } + if (N->getLine()) + Out << FS << "line: " << N->getLine(); + if (N->getScope()) { + Out << FS << "scope: "; + writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context); + } + Out << FS << "baseType: "; + writeMetadataAsOperand(Out, N->getBaseType(), TypePrinter, Machine, Context); + if (N->getSizeInBits()) + Out << FS << "size: " << N->getSizeInBits(); + if (N->getAlignInBits()) + Out << FS << "align: " << N->getAlignInBits(); + if (N->getOffsetInBits()) + Out << FS << "offset: " << N->getOffsetInBits(); + if (N->getFlags()) + Out << FS << "flags: " << N->getFlags(); + if (N->getExtraData()) { + Out << FS << "extraData: "; + writeMetadataAsOperand(Out, N->getExtraData(), TypePrinter, Machine, + Context); + } + Out << ")"; } -static void writeMDCompositeType(raw_ostream &, const MDCompositeType *, - TypePrinting *, SlotTracker *, - const Module *) { - llvm_unreachable("write not implemented"); + +static void writeMDCompositeType(raw_ostream &Out, const MDCompositeType *N, + TypePrinting *TypePrinter, + SlotTracker *Machine, const Module *Context) { + Out << "!MDCompositeType("; + FieldSeparator FS; + writeTag(Out, FS, N); + if (!N->getName().empty()) + Out << FS << "name: \"" << N->getName() << "\""; + if (N->getFile()) { + Out << FS << "file: "; + writeMetadataAsOperand(Out, N->getFile(), TypePrinter, Machine, + Context); + } + if (N->getLine()) + Out << FS << "line: " << N->getLine(); + if (N->getScope()) { + Out << FS << "scope: "; + writeMetadataAsOperand(Out, N->getScope(), TypePrinter, Machine, Context); + } + if (N->getBaseType()) { + Out << FS << "baseType: "; + writeMetadataAsOperand(Out, N->getBaseType(), TypePrinter, Machine, + Context); + } + if (N->getSizeInBits()) + Out << FS << "size: " << N->getSizeInBits(); + if (N->getAlignInBits()) + Out << FS << "align: " << N->getAlignInBits(); + if (N->getOffsetInBits()) + Out << FS << "offset: " << N->getOffsetInBits(); + if (N->getFlags()) + Out << FS << "flags: " << N->getFlags(); + if (N->getElements()) { + Out << FS << "elements: "; + writeMetadataAsOperand(Out, N->getElements(), TypePrinter, Machine, + Context); + } + if (N->getRuntimeLang()) + Out << FS << "runtimeLang: " << N->getRuntimeLang(); + if (N->getVTableHolder()) { + Out << FS << "vtableHolder: "; + writeMetadataAsOperand(Out, N->getVTableHolder(), TypePrinter, Machine, + Context); + } + if (N->getTemplateParams()) { + Out << FS << "templateParams: "; + writeMetadataAsOperand(Out, N->getTemplateParams(), TypePrinter, Machine, + Context); + } + if (!N->getIdentifier().empty()) + Out << FS << "identifier: \"" << N->getIdentifier() << "\""; + Out << ")"; } + static void writeMDSubroutineType(raw_ostream &, const MDSubroutineType *, TypePrinting *, SlotTracker *, const Module *) { |

