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 | |
| 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')
| -rw-r--r-- | llvm/lib/CodeGen/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LLVMBuild.txt | 4 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LLVMTargetMachine.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/LLVMBuild.txt | 22 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/MIRParser.cpp | 90 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/MIRPrinter.cpp | 66 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/MIRPrinter.h | 29 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/MIRPrintingPass.cpp | 66 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIR/Makefile | 13 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/Makefile | 2 |
11 files changed, 9 insertions, 298 deletions
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt index 59ce702995d..9fc3e0bcec9 100644 --- a/llvm/lib/CodeGen/CMakeLists.txt +++ b/llvm/lib/CodeGen/CMakeLists.txt @@ -129,4 +129,3 @@ add_dependencies(LLVMCodeGen intrinsics_gen) add_subdirectory(SelectionDAG) add_subdirectory(AsmPrinter) -add_subdirectory(MIR) diff --git a/llvm/lib/CodeGen/LLVMBuild.txt b/llvm/lib/CodeGen/LLVMBuild.txt index 02be11af05a..fee0347ea65 100644 --- a/llvm/lib/CodeGen/LLVMBuild.txt +++ b/llvm/lib/CodeGen/LLVMBuild.txt @@ -16,10 +16,10 @@ ;===------------------------------------------------------------------------===; [common] -subdirectories = AsmPrinter SelectionDAG MIR +subdirectories = AsmPrinter SelectionDAG [component_0] type = Library name = CodeGen parent = Libraries -required_libraries = Analysis Core MC Scalar Support Target TransformUtils MIR +required_libraries = Analysis Core MC Scalar Support Target TransformUtils diff --git a/llvm/lib/CodeGen/LLVMTargetMachine.cpp b/llvm/lib/CodeGen/LLVMTargetMachine.cpp index ff5205801bc..610c9f47bac 100644 --- a/llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ b/llvm/lib/CodeGen/LLVMTargetMachine.cpp @@ -150,7 +150,12 @@ bool LLVMTargetMachine::addPassesToEmitFile( return true; if (StopAfter) { - PM.add(createPrintMIRPass(outs())); + // FIXME: The intent is that this should eventually write out a YAML file, + // containing the LLVM IR, the machine-level IR (when stopping after a + // machine-level pass), and whatever other information is needed to + // deserialize the code and resume compilation. For now, just write the + // LLVM IR. + PM.add(createPrintModulePass(Out)); return false; } diff --git a/llvm/lib/CodeGen/MIR/CMakeLists.txt b/llvm/lib/CodeGen/MIR/CMakeLists.txt deleted file mode 100644 index 52b64f3f826..00000000000 --- a/llvm/lib/CodeGen/MIR/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -add_llvm_library(LLVMMIR - MIRPrinter.cpp - MIRPrintingPass.cpp - MIRParser.cpp - ) - -add_dependencies(LLVMMIR intrinsics_gen) diff --git a/llvm/lib/CodeGen/MIR/LLVMBuild.txt b/llvm/lib/CodeGen/MIR/LLVMBuild.txt deleted file mode 100644 index 71aeaffb9bb..00000000000 --- a/llvm/lib/CodeGen/MIR/LLVMBuild.txt +++ /dev/null @@ -1,22 +0,0 @@ -;===- ./lib/CodeGen/MIR/LLVMBuild.txt --------------------------*- Conf -*--===; -; -; The LLVM Compiler Infrastructure -; -; This file is distributed under the University of Illinois Open Source -; License. See LICENSE.TXT for details. -; -;===------------------------------------------------------------------------===; -; -; This is an LLVMBuild description file for the components in this subdirectory. -; -; For more information on the LLVMBuild system, please see: -; -; http://llvm.org/docs/LLVMBuild.html -; -;===------------------------------------------------------------------------===; - -[component_0] -type = Library -name = MIR -parent = CodeGen -required_libraries = Core Support Target AsmParser 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); -} diff --git a/llvm/lib/CodeGen/MIR/MIRPrinter.cpp b/llvm/lib/CodeGen/MIR/MIRPrinter.cpp deleted file mode 100644 index fae22286d61..00000000000 --- a/llvm/lib/CodeGen/MIR/MIRPrinter.cpp +++ /dev/null @@ -1,66 +0,0 @@ -//===- MIRPrinter.cpp - MIR serialization format printer ------------------===// -// -// 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 prints out the LLVM IR and machine -// functions using the MIR serialization format. -// -//===----------------------------------------------------------------------===// - -#include "MIRPrinter.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/IR/Module.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/raw_ostream.h" -#include "llvm/Support/YAMLTraits.h" - -using namespace llvm; - -namespace { - -/// This class prints out the LLVM IR using the MIR serialization format and -/// YAML I/O. -class MIRPrinter { - raw_ostream &OS; - -public: - MIRPrinter(raw_ostream &OS); - - void printModule(const Module &Mod); -}; - -} // end anonymous namespace - -namespace llvm { -namespace yaml { - -/// This struct serializes the LLVM IR module. -template <> struct BlockScalarTraits<Module> { - static void output(const Module &Mod, void *Ctxt, raw_ostream &OS) { - Mod.print(OS, nullptr); - } - static StringRef input(StringRef Str, void *Ctxt, Module &Mod) { - llvm_unreachable("LLVM Module is supposed to be parsed separately"); - return ""; - } -}; - -} // end namespace yaml -} // end namespace llvm - -MIRPrinter::MIRPrinter(raw_ostream &OS) : OS(OS) {} - -void MIRPrinter::printModule(const Module &Mod) { - yaml::Output Out(OS); - Out << const_cast<Module &>(Mod); -} - -void llvm::printMIR(raw_ostream &OS, const Module &Mod) { - MIRPrinter Printer(OS); - Printer.printModule(Mod); -} diff --git a/llvm/lib/CodeGen/MIR/MIRPrinter.h b/llvm/lib/CodeGen/MIR/MIRPrinter.h deleted file mode 100644 index 2e6d645af71..00000000000 --- a/llvm/lib/CodeGen/MIR/MIRPrinter.h +++ /dev/null @@ -1,29 +0,0 @@ -//===- MIRPrinter.h - MIR serialization format printer --------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file declares the function that prints out the LLVM IR using the MIR -// serialization format. -// TODO: Print out machine functions. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_LIB_CODEGEN_MIR_MIRPRINTER_H -#define LLVM_LIB_CODEGEN_MIR_MIRPRINTER_H - -namespace llvm { - -class Module; -class raw_ostream; - -/// Print LLVM IR using the MIR serialization format to the given output stream. -void printMIR(raw_ostream &OS, const Module &Mod); - -} // end namespace llvm - -#endif diff --git a/llvm/lib/CodeGen/MIR/MIRPrintingPass.cpp b/llvm/lib/CodeGen/MIR/MIRPrintingPass.cpp deleted file mode 100644 index f5a67d9e315..00000000000 --- a/llvm/lib/CodeGen/MIR/MIRPrintingPass.cpp +++ /dev/null @@ -1,66 +0,0 @@ -//===- MIRPrintingPass.cpp - Pass that prints out using the MIR format ----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements a pass that prints out the LLVM module using the MIR -// serialization format. -// -//===----------------------------------------------------------------------===// - -#include "MIRPrinter.h" -#include "llvm/CodeGen/Passes.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/Support/Debug.h" -#include "llvm/Support/raw_ostream.h" - -using namespace llvm; - -namespace { - -/// This pass prints out the LLVM IR to an output stream using the MIR -/// serialization format. -struct MIRPrintingPass : public MachineFunctionPass { - static char ID; - raw_ostream &OS; - - MIRPrintingPass() : MachineFunctionPass(ID), OS(dbgs()) {} - MIRPrintingPass(raw_ostream &OS) : MachineFunctionPass(ID), OS(OS) {} - - const char *getPassName() const override { return "MIR Printing Pass"; } - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesAll(); - MachineFunctionPass::getAnalysisUsage(AU); - } - - virtual bool runOnMachineFunction(MachineFunction &MF) override { - // TODO: Print out the machine function. - return false; - } - - virtual bool doFinalization(Module &M) override { - printMIR(OS, M); - return false; - } -}; - -char MIRPrintingPass::ID = 0; - -} // end anonymous namespace - -char &llvm::MIRPrintingPassID = MIRPrintingPass::ID; -INITIALIZE_PASS(MIRPrintingPass, "mir-printer", "MIR Printer", false, false) - -namespace llvm { - -MachineFunctionPass *createPrintMIRPass(raw_ostream &OS) { - return new MIRPrintingPass(OS); -} - -} // end namespace llvm diff --git a/llvm/lib/CodeGen/MIR/Makefile b/llvm/lib/CodeGen/MIR/Makefile deleted file mode 100644 index 72f581c6cfb..00000000000 --- a/llvm/lib/CodeGen/MIR/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -##===- lib/CodeGen/MIR/Makefile ----------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LEVEL = ../../.. -LIBRARYNAME = LLVMMIR - -include $(LEVEL)/Makefile.common diff --git a/llvm/lib/CodeGen/Makefile b/llvm/lib/CodeGen/Makefile index 867a5cf3d0f..4ab3e3c0013 100644 --- a/llvm/lib/CodeGen/Makefile +++ b/llvm/lib/CodeGen/Makefile @@ -9,7 +9,7 @@ LEVEL = ../.. LIBRARYNAME = LLVMCodeGen -PARALLEL_DIRS = SelectionDAG AsmPrinter MIR +PARALLEL_DIRS = SelectionDAG AsmPrinter BUILD_ARCHIVE = 1 include $(LEVEL)/Makefile.common |

