diff options
| author | NAKAMURA Takumi <geek4civic@gmail.com> | 2015-05-22 07:17:07 +0000 |
|---|---|---|
| committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2015-05-22 07:17:07 +0000 |
| commit | 263b27997d5a1d4bab75c2cd20a397ed80e32925 (patch) | |
| tree | 30cb6219ee41aad451b75ef876accc1096797317 /llvm/lib/CodeGen/MIR/MIRParser.cpp | |
| parent | e8d762e148480a0bf5c76e5fd73082040c36ffbd (diff) | |
| download | bcm5719-llvm-263b27997d5a1d4bab75c2cd20a397ed80e32925.tar.gz bcm5719-llvm-263b27997d5a1d4bab75c2cd20a397ed80e32925.zip | |
Revert r237954, "Resubmit r237708 (MIR Serialization: print and parse LLVM IR using MIR format)."
It brought cyclic dependencies between LLVMCodeGen and LLVMMIR.
llvm-svn: 238007
Diffstat (limited to 'llvm/lib/CodeGen/MIR/MIRParser.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MIR/MIRParser.cpp | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/llvm/lib/CodeGen/MIR/MIRParser.cpp b/llvm/lib/CodeGen/MIR/MIRParser.cpp deleted file mode 100644 index e484046b23b..00000000000 --- a/llvm/lib/CodeGen/MIR/MIRParser.cpp +++ /dev/null @@ -1,90 +0,0 @@ -//===- MIRParser.cpp - MIR serialization format parser implementation -----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the class that parses the optional LLVM IR and machine -// functions that are stored in MIR files. -// -//===----------------------------------------------------------------------===// - -#include "llvm/CodeGen/MIR/MIRParser.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/AsmParser/Parser.h" -#include "llvm/IR/Module.h" -#include "llvm/Support/SMLoc.h" -#include "llvm/Support/SourceMgr.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/YAMLTraits.h" -#include <memory> - -using namespace llvm; - -namespace { - -/// This class implements the parsing of LLVM IR that's embedded inside a MIR -/// file. -class MIRParserImpl { - SourceMgr SM; - StringRef Filename; - LLVMContext &Context; - -public: - MIRParserImpl(std::unique_ptr<MemoryBuffer> Contents, StringRef Filename, - LLVMContext &Context); - - /// Try to parse the optional LLVM module in the MIR file. - /// - /// Return null if an error occurred while parsing the LLVM module. - std::unique_ptr<Module> parseLLVMModule(SMDiagnostic &Error); -}; - -} // end anonymous namespace - -MIRParserImpl::MIRParserImpl(std::unique_ptr<MemoryBuffer> Contents, - StringRef Filename, LLVMContext &Context) - : SM(), Filename(Filename), Context(Context) { - SM.AddNewSourceBuffer(std::move(Contents), SMLoc()); -} - -std::unique_ptr<Module> MIRParserImpl::parseLLVMModule(SMDiagnostic &Error) { - yaml::Input In(SM.getMemoryBuffer(SM.getMainFileID())->getBuffer()); - - // Parse the block scalar manually so that we can return unique pointer - // without having to go trough YAML traits. - if (In.setCurrentDocument()) { - if (const auto *BSN = - dyn_cast_or_null<yaml::BlockScalarNode>(In.getCurrentNode())) { - return parseAssembly(MemoryBufferRef(BSN->getValue(), Filename), Error, - Context); - } - } - - // Create an new, empty module. - return llvm::make_unique<Module>(Filename, Context); -} - -std::unique_ptr<Module> llvm::parseMIRFile(StringRef Filename, - SMDiagnostic &Error, - LLVMContext &Context) { - auto FileOrErr = MemoryBuffer::getFile(Filename); - if (std::error_code EC = FileOrErr.getError()) { - Error = SMDiagnostic(Filename, SourceMgr::DK_Error, - "Could not open input file: " + EC.message()); - return std::unique_ptr<Module>(); - } - return parseMIR(std::move(FileOrErr.get()), Error, Context); -} - -std::unique_ptr<Module> llvm::parseMIR(std::unique_ptr<MemoryBuffer> Contents, - SMDiagnostic &Error, - LLVMContext &Context) { - auto Filename = Contents->getBufferIdentifier(); - MIRParserImpl Parser(std::move(Contents), Filename, Context); - return Parser.parseLLVMModule(Error); -} |

