projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added support to have TableGen provide information if an intrinsic (core
[oota-llvm.git]
/
utils
/
TableGen
/
TableGen.cpp
diff --git
a/utils/TableGen/TableGen.cpp
b/utils/TableGen/TableGen.cpp
index 28e4a8a86f6d6c967b7500569246ab462e099e8f..98a188ed837189452fb177cf82cc446535e4440c 100644
(file)
--- a/
utils/TableGen/TableGen.cpp
+++ b/
utils/TableGen/TableGen.cpp
@@
-26,10
+26,13
@@
#include "CodeEmitterGen.h"
#include "RegisterInfoEmitter.h"
#include "InstrInfoEmitter.h"
#include "CodeEmitterGen.h"
#include "RegisterInfoEmitter.h"
#include "InstrInfoEmitter.h"
+#include "InstrEnumEmitter.h"
#include "AsmWriterEmitter.h"
#include "DAGISelEmitter.h"
#include "AsmWriterEmitter.h"
#include "DAGISelEmitter.h"
+#include "FastISelEmitter.h"
#include "SubtargetEmitter.h"
#include "IntrinsicEmitter.h"
#include "SubtargetEmitter.h"
#include "IntrinsicEmitter.h"
+#include "LLVMCConfigurationEmitter.h"
#include <algorithm>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <fstream>
@@
-40,11
+43,14
@@
enum ActionType {
PrintRecords,
GenEmitter,
GenRegisterEnums, GenRegister, GenRegisterHeader,
PrintRecords,
GenEmitter,
GenRegisterEnums, GenRegister, GenRegisterHeader,
- GenInstrEnums, GenInstrs, GenAsmWriter,
+ GenInstrEnums, GenInstrs, GenAsmWriter,
GenCallingConv,
GenDAGISel,
GenCallingConv,
GenDAGISel,
+ GenFastISel,
GenSubtarget,
GenIntrinsic,
GenSubtarget,
GenIntrinsic,
+ GenTgtIntrinsic,
+ GenLLVMCConf,
PrintEnums
};
PrintEnums
};
@@
-71,10
+77,16
@@
namespace {
"Generate assembly writer"),
clEnumValN(GenDAGISel, "gen-dag-isel",
"Generate a DAG instruction selector"),
"Generate assembly writer"),
clEnumValN(GenDAGISel, "gen-dag-isel",
"Generate a DAG instruction selector"),
+ clEnumValN(GenFastISel, "gen-fast-isel",
+ "Generate a \"fast\" instruction selector"),
clEnumValN(GenSubtarget, "gen-subtarget",
"Generate subtarget enumerations"),
clEnumValN(GenIntrinsic, "gen-intrinsic",
"Generate intrinsic information"),
clEnumValN(GenSubtarget, "gen-subtarget",
"Generate subtarget enumerations"),
clEnumValN(GenIntrinsic, "gen-intrinsic",
"Generate intrinsic information"),
+ clEnumValN(GenTgtIntrinsic, "gen-tgt-intrinsic",
+ "Generate target intrinsic information"),
+ clEnumValN(GenLLVMCConf, "gen-llvmc",
+ "Generate LLVMC configuration library"),
clEnumValN(PrintEnums, "print-enums",
"Print enum values for a class"),
clEnumValEnd));
clEnumValN(PrintEnums, "print-enums",
"Print enum values for a class"),
clEnumValEnd));
@@
-99,22
+111,21
@@
RecordKeeper llvm::Records;
/// ParseFile - this function begins the parsing of the specified tablegen
/// file.
/// ParseFile - this function begins the parsing of the specified tablegen
/// file.
-static bool ParseFile(const std::string &Filename,
+static bool ParseFile(const std::string &Filename,
const std::vector<std::string> &IncludeDirs) {
std::string ErrorStr;
const std::vector<std::string> &IncludeDirs) {
std::string ErrorStr;
- MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(&Filename[0], Filename.size(),
- &ErrorStr);
+ MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr);
if (F == 0) {
cerr << "Could not open input file '" + Filename + "': " << ErrorStr <<"\n";
return true;
}
if (F == 0) {
cerr << "Could not open input file '" + Filename + "': " << ErrorStr <<"\n";
return true;
}
-
+
TGParser Parser(F);
TGParser Parser(F);
-
+
// Record the location of the include directory so that the lexer can find
// it later.
Parser.setIncludeDirs(IncludeDirs);
// Record the location of the include directory so that the lexer can find
// it later.
Parser.setIncludeDirs(IncludeDirs);
-
+
return Parser.ParseFile();
}
return Parser.ParseFile();
}
@@
-158,7
+169,7
@@
int main(int argc, char **argv) {
break;
case GenInstrEnums:
break;
case GenInstrEnums:
- Instr
InfoEmitter(Records).runEnums
(*Out);
+ Instr
EnumEmitter(Records).run
(*Out);
break;
case GenInstrs:
InstrInfoEmitter(Records).run(*Out);
break;
case GenInstrs:
InstrInfoEmitter(Records).run(*Out);
@@
-173,12
+184,21
@@
int main(int argc, char **argv) {
case GenDAGISel:
DAGISelEmitter(Records).run(*Out);
break;
case GenDAGISel:
DAGISelEmitter(Records).run(*Out);
break;
+ case GenFastISel:
+ FastISelEmitter(Records).run(*Out);
+ break;
case GenSubtarget:
SubtargetEmitter(Records).run(*Out);
break;
case GenIntrinsic:
IntrinsicEmitter(Records).run(*Out);
break;
case GenSubtarget:
SubtargetEmitter(Records).run(*Out);
break;
case GenIntrinsic:
IntrinsicEmitter(Records).run(*Out);
break;
+ case GenTgtIntrinsic:
+ IntrinsicEmitter(Records, true).run(*Out);
+ break;
+ case GenLLVMCConf:
+ LLVMCConfigurationEmitter(Records).run(*Out);
+ break;
case PrintEnums:
{
std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
case PrintEnums:
{
std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
@@
-198,6
+218,13
@@
int main(int argc, char **argv) {
std::remove(OutputFilename.c_str()); // Remove the file, it's broken
}
return 1;
std::remove(OutputFilename.c_str()); // Remove the file, it's broken
}
return 1;
+ } catch (const char *Error) {
+ cerr << argv[0] << ": " << Error << "\n";
+ if (Out != cout.stream()) {
+ delete Out; // Close the file
+ std::remove(OutputFilename.c_str()); // Remove the file, it's broken
+ }
+ return 1;
} catch (...) {
cerr << argv[0] << ": Unknown unexpected exception occurred.\n";
if (Out != cout.stream()) {
} catch (...) {
cerr << argv[0] << ": Unknown unexpected exception occurred.\n";
if (Out != cout.stream()) {