X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FTableGen.cpp;h=7c8d288db937769d209796989e97ef9f4375d403;hb=9e6d1d1f5034347d237941f1bf08fba5c1583cd3;hp=22c5d50415544d6f446a1e4136d1fde952c9e341;hpb=557f7f88ba686886278f83159b7a629c24a47176;p=oota-llvm.git diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp index 22c5d504155..7c8d288db93 100644 --- a/utils/TableGen/TableGen.cpp +++ b/utils/TableGen/TableGen.cpp @@ -15,41 +15,45 @@ // //===----------------------------------------------------------------------===// -#include "Record.h" -#include "TGParser.h" -#include "llvm/Support/CommandLine.h" -#include "llvm/Support/Streams.h" -#include "llvm/System/Signals.h" -#include "llvm/Support/FileUtilities.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/PrettyStackTrace.h" +#include "AsmMatcherEmitter.h" +#include "AsmWriterEmitter.h" #include "CallingConvEmitter.h" +#include "ClangDiagnosticsEmitter.h" #include "CodeEmitterGen.h" -#include "RegisterInfoEmitter.h" -#include "InstrInfoEmitter.h" -#include "InstrEnumEmitter.h" -#include "AsmWriterEmitter.h" #include "DAGISelEmitter.h" +#include "DisassemblerEmitter.h" #include "FastISelEmitter.h" -#include "SubtargetEmitter.h" +#include "InstrEnumEmitter.h" +#include "InstrInfoEmitter.h" #include "IntrinsicEmitter.h" #include "LLVMCConfigurationEmitter.h" -#include "ClangDiagnosticsEmitter.h" +#include "OptParserEmitter.h" +#include "Record.h" +#include "RegisterInfoEmitter.h" +#include "SubtargetEmitter.h" +#include "TGParser.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/FileUtilities.h" +#include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/System/Signals.h" #include #include -#include -#include using namespace llvm; enum ActionType { PrintRecords, GenEmitter, GenRegisterEnums, GenRegister, GenRegisterHeader, - GenInstrEnums, GenInstrs, GenAsmWriter, + GenInstrEnums, GenInstrs, GenAsmWriter, GenAsmMatcher, + GenDisassembler, GenCallingConv, GenClangDiagsDefs, + GenClangDiagGroups, GenDAGISel, GenFastISel, + GenOptParserDefs, GenOptParserImpl, GenSubtarget, GenIntrinsic, GenTgtIntrinsic, @@ -78,10 +82,18 @@ namespace { "Generate calling convention descriptions"), clEnumValN(GenAsmWriter, "gen-asm-writer", "Generate assembly writer"), + clEnumValN(GenDisassembler, "gen-disassembler", + "Generate disassembler"), + clEnumValN(GenAsmMatcher, "gen-asm-matcher", + "Generate assembly instruction matcher"), clEnumValN(GenDAGISel, "gen-dag-isel", "Generate a DAG instruction selector"), clEnumValN(GenFastISel, "gen-fast-isel", "Generate a \"fast\" instruction selector"), + clEnumValN(GenOptParserDefs, "gen-opt-parser-defs", + "Generate option definitions"), + clEnumValN(GenOptParserImpl, "gen-opt-parser-impl", + "Generate option parser implementation"), clEnumValN(GenSubtarget, "gen-subtarget", "Generate subtarget enumerations"), clEnumValN(GenIntrinsic, "gen-intrinsic", @@ -90,6 +102,8 @@ namespace { "Generate target intrinsic information"), clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", "Generate Clang diagnostics definitions"), + clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups", + "Generate Clang diagnostic groups"), clEnumValN(GenLLVMCConf, "gen-llvmc", "Generate LLVMC configuration library"), clEnumValN(PrintEnums, "print-enums", @@ -121,10 +135,10 @@ namespace { // FIXME: Eliminate globals from tblgen. RecordKeeper llvm::Records; -static TGSourceMgr SrcMgr; +static SourceMgr SrcMgr; -void llvm::PrintError(TGLoc ErrorLoc, const std::string &Msg) { - SrcMgr.PrintError(ErrorLoc, Msg); +void llvm::PrintError(SMLoc ErrorLoc, const std::string &Msg) { + SrcMgr.PrintMessage(ErrorLoc, Msg, "error"); } @@ -133,22 +147,23 @@ void llvm::PrintError(TGLoc ErrorLoc, const std::string &Msg) { /// file. static bool ParseFile(const std::string &Filename, const std::vector &IncludeDirs, - TGSourceMgr &SrcMgr) { + SourceMgr &SrcMgr) { std::string ErrorStr; MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr); if (F == 0) { - cerr << "Could not open input file '" + Filename + "': " << ErrorStr <<"\n"; + errs() << "Could not open input file '" << Filename << "': " + << ErrorStr <<"\n"; return true; } // Tell SrcMgr about this buffer, which is what TGParser will pick up. - SrcMgr.AddNewSourceBuffer(F, TGLoc()); - - TGParser Parser(SrcMgr); + SrcMgr.AddNewSourceBuffer(F, SMLoc()); // Record the location of the include directory so that the lexer can find // it later. - Parser.setIncludeDirs(IncludeDirs); + SrcMgr.setIncludeDirs(IncludeDirs); + + TGParser Parser(SrcMgr); return Parser.ParseFile(); } @@ -163,12 +178,14 @@ int main(int argc, char **argv) { if (ParseFile(InputFilename, IncludeDirs, SrcMgr)) return 1; - std::ostream *Out = cout.stream(); + raw_ostream *Out = &outs(); if (OutputFilename != "-") { - Out = new std::ofstream(OutputFilename.c_str()); + std::string Error; + Out = new raw_fd_ostream(OutputFilename.c_str(), Error); - if (!Out->good()) { - cerr << argv[0] << ": error opening " << OutputFilename << "!\n"; + if (!Error.empty()) { + errs() << argv[0] << ": error opening " << OutputFilename + << ":" << Error << "\n"; return 1; } @@ -206,9 +223,24 @@ int main(int argc, char **argv) { case GenAsmWriter: AsmWriterEmitter(Records).run(*Out); break; + case GenAsmMatcher: + AsmMatcherEmitter(Records).run(*Out); + break; case GenClangDiagsDefs: ClangDiagsDefsEmitter(Records, ClangComponent).run(*Out); break; + case GenClangDiagGroups: + ClangDiagGroupsEmitter(Records).run(*Out); + break; + case GenDisassembler: + DisassemblerEmitter(Records).run(*Out); + break; + case GenOptParserDefs: + OptParserEmitter(Records, true).run(*Out); + break; + case GenOptParserImpl: + OptParserEmitter(Records, false).run(*Out); + break; case GenDAGISel: DAGISelEmitter(Records).run(*Out); break; @@ -240,23 +272,23 @@ int main(int argc, char **argv) { return 1; } - if (Out != cout.stream()) + if (Out != &outs()) delete Out; // Close the file return 0; } catch (const TGError &Error) { - cerr << argv[0] << ": error:\n"; + errs() << argv[0] << ": error:\n"; PrintError(Error.getLoc(), Error.getMessage()); } catch (const std::string &Error) { - cerr << argv[0] << ": " << Error << "\n"; + errs() << argv[0] << ": " << Error << "\n"; } catch (const char *Error) { - cerr << argv[0] << ": " << Error << "\n"; + errs() << argv[0] << ": " << Error << "\n"; } catch (...) { - cerr << argv[0] << ": Unknown unexpected exception occurred.\n"; + errs() << argv[0] << ": Unknown unexpected exception occurred.\n"; } - if (Out != cout.stream()) { + if (Out != &outs()) { delete Out; // Close the file std::remove(OutputFilename.c_str()); // Remove the file, it's broken }