blob: a1cb4272debf057b4065edd572d88fa0758fb9dd [file] [log] [blame]
Peter Collingbourne7c788882011-10-01 16:41:13 +00001//===- TableGen.cpp - Top-Level TableGen implementation for LLVM ----------===//
Misha Brukman3da94ae2005-04-22 00:00:37 +00002//
John Criswell01d45822003-10-20 20:20:30 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattner30609102007-12-29 20:37:13 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Misha Brukman3da94ae2005-04-22 00:00:37 +00007//
John Criswell01d45822003-10-20 20:20:30 +00008//===----------------------------------------------------------------------===//
Chris Lattner1d1adea2003-08-01 04:39:05 +00009//
Peter Collingbourne7c788882011-10-01 16:41:13 +000010// This file contains the main function for LLVM's TableGen.
Chris Lattner1d1adea2003-08-01 04:39:05 +000011//
12//===----------------------------------------------------------------------===//
13
Daniel Dunbard51ffcf2009-07-11 19:39:44 +000014#include "AsmMatcherEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000015#include "AsmWriterEmitter.h"
16#include "CallingConvEmitter.h"
Sean Hunt84e2f952010-05-05 04:13:08 +000017#include "ClangASTNodesEmitter.h"
Sean Hunt16171442010-06-16 23:45:50 +000018#include "ClangAttrEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000019#include "ClangDiagnosticsEmitter.h"
Argyrios Kyrtzidis50a47e92011-02-14 17:58:52 +000020#include "ClangSACheckersEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000021#include "CodeEmitterGen.h"
Chris Lattner4a24c642005-09-03 01:14:03 +000022#include "DAGISelEmitter.h"
Daniel Dunbar40588742009-11-25 02:13:23 +000023#include "DisassemblerEmitter.h"
Sean Callanan95fcebd2010-01-29 00:21:04 +000024#include "EDEmitter.h"
Dan Gohmanb0cf29c2008-08-13 20:19:35 +000025#include "FastISelEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000026#include "InstrInfoEmitter.h"
Chris Lattner9e493cf2006-03-03 02:32:46 +000027#include "IntrinsicEmitter.h"
Nate Begeman5ddb0872010-05-28 01:08:32 +000028#include "NeonEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000029#include "OptParserEmitter.h"
Jim Grosbach86f9adb2011-07-08 17:36:35 +000030#include "PseudoLoweringEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000031#include "RegisterInfoEmitter.h"
Johnny Chenb68a3ee2010-04-02 22:27:38 +000032#include "ARMDecoderEmitter.h"
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000033#include "SubtargetEmitter.h"
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +000034#include "SetTheory.h"
Peter Collingbourne7c788882011-10-01 16:41:13 +000035
Chris Lattner81cb8ca2009-07-08 18:44:05 +000036#include "llvm/Support/CommandLine.h"
Chris Lattner81cb8ca2009-07-08 18:44:05 +000037#include "llvm/Support/PrettyStackTrace.h"
Michael J. Spencer1f6efa32010-11-29 18:16:10 +000038#include "llvm/Support/Signals.h"
Peter Collingbourne7c788882011-10-01 16:41:13 +000039#include "llvm/TableGen/Error.h"
40#include "llvm/TableGen/Main.h"
41#include "llvm/TableGen/Record.h"
42#include "llvm/TableGen/TableGenAction.h"
43
Chris Lattner2082ebe2004-08-01 03:55:39 +000044using namespace llvm;
Brian Gaeked0fde302003-11-11 22:41:34 +000045
Chris Lattnerbc520132003-06-03 04:56:29 +000046enum ActionType {
47 PrintRecords,
48 GenEmitter,
Evan Cheng73f50d92011-06-27 18:32:37 +000049 GenRegisterInfo,
Evan Cheng22fee2d2011-06-28 20:07:07 +000050 GenInstrInfo,
51 GenAsmWriter,
52 GenAsmMatcher,
Johnny Chenb68a3ee2010-04-02 22:27:38 +000053 GenARMDecoder,
Daniel Dunbar40588742009-11-25 02:13:23 +000054 GenDisassembler,
Jim Grosbach86f9adb2011-07-08 17:36:35 +000055 GenPseudoLowering,
Chris Lattner50d45652007-02-27 22:08:27 +000056 GenCallingConv,
Sean Hunt16171442010-06-16 23:45:50 +000057 GenClangAttrClasses,
Sean Hunt726a3d22010-08-18 23:23:09 +000058 GenClangAttrImpl,
Sean Hunt16171442010-06-16 23:45:50 +000059 GenClangAttrList,
Sean Hunt726a3d22010-08-18 23:23:09 +000060 GenClangAttrPCHRead,
61 GenClangAttrPCHWrite,
Anders Carlsson238777e2010-10-20 01:21:53 +000062 GenClangAttrSpellingList,
Caitlin Sadowski5d97ee32011-09-08 17:40:49 +000063 GenClangAttrLateParsedList,
Ted Kremenek04a847e2009-03-13 22:21:17 +000064 GenClangDiagsDefs,
Chris Lattnerac9e7da2009-04-15 20:02:32 +000065 GenClangDiagGroups,
Douglas Gregor4954e9f2011-04-15 22:04:07 +000066 GenClangDiagsIndexName,
Sean Huntc10a62b2010-05-30 07:21:42 +000067 GenClangDeclNodes,
Sean Hunt84e2f952010-05-05 04:13:08 +000068 GenClangStmtNodes,
Argyrios Kyrtzidis50a47e92011-02-14 17:58:52 +000069 GenClangSACheckers,
Chris Lattner4a24c642005-09-03 01:14:03 +000070 GenDAGISel,
Dan Gohmanb0cf29c2008-08-13 20:19:35 +000071 GenFastISel,
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +000072 GenOptParserDefs, GenOptParserImpl,
Jim Laskeyf5fc2cb2005-10-21 19:05:19 +000073 GenSubtarget,
Chris Lattner9e493cf2006-03-03 02:32:46 +000074 GenIntrinsic,
Dale Johannesen49de9822009-02-05 01:49:45 +000075 GenTgtIntrinsic,
Chris Lattner444e2f52010-07-20 19:45:21 +000076 GenEDInfo,
Nate Begemanf8c4c272010-06-17 04:15:13 +000077 GenArmNeon,
78 GenArmNeonSema,
Bob Wilson333f5192010-12-15 16:58:45 +000079 GenArmNeonTest,
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +000080 PrintEnums,
81 PrintSets
Chris Lattnerbc520132003-06-03 04:56:29 +000082};
83
84namespace {
85 cl::opt<ActionType>
86 Action(cl::desc("Action to perform:"),
87 cl::values(clEnumValN(PrintRecords, "print-records",
Chris Lattner85df2252003-06-03 05:07:28 +000088 "Print all records to stdout (default)"),
Chris Lattnerbc520132003-06-03 04:56:29 +000089 clEnumValN(GenEmitter, "gen-emitter",
90 "Generate machine code emitter"),
Evan Chenga347f852011-06-24 01:44:41 +000091 clEnumValN(GenRegisterInfo, "gen-register-info",
Evan Cheng73f50d92011-06-27 18:32:37 +000092 "Generate registers and register classes info"),
Evan Cheng22fee2d2011-06-28 20:07:07 +000093 clEnumValN(GenInstrInfo, "gen-instr-info",
Chris Lattner15de32d2003-08-03 21:58:28 +000094 "Generate instruction descriptions"),
Chris Lattner50d45652007-02-27 22:08:27 +000095 clEnumValN(GenCallingConv, "gen-callingconv",
96 "Generate calling convention descriptions"),
Chris Lattner2e1f51b2004-08-01 05:59:33 +000097 clEnumValN(GenAsmWriter, "gen-asm-writer",
98 "Generate assembly writer"),
Johnny Chenb68a3ee2010-04-02 22:27:38 +000099 clEnumValN(GenARMDecoder, "gen-arm-decoder",
100 "Generate decoders for ARM/Thumb"),
Daniel Dunbar40588742009-11-25 02:13:23 +0000101 clEnumValN(GenDisassembler, "gen-disassembler",
102 "Generate disassembler"),
Jim Grosbach86f9adb2011-07-08 17:36:35 +0000103 clEnumValN(GenPseudoLowering, "gen-pseudo-lowering",
104 "Generate pseudo instruction lowering"),
Daniel Dunbard51ffcf2009-07-11 19:39:44 +0000105 clEnumValN(GenAsmMatcher, "gen-asm-matcher",
106 "Generate assembly instruction matcher"),
Chris Lattner4a24c642005-09-03 01:14:03 +0000107 clEnumValN(GenDAGISel, "gen-dag-isel",
108 "Generate a DAG instruction selector"),
Dan Gohmanb0cf29c2008-08-13 20:19:35 +0000109 clEnumValN(GenFastISel, "gen-fast-isel",
110 "Generate a \"fast\" instruction selector"),
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +0000111 clEnumValN(GenOptParserDefs, "gen-opt-parser-defs",
112 "Generate option definitions"),
113 clEnumValN(GenOptParserImpl, "gen-opt-parser-impl",
114 "Generate option parser implementation"),
Jim Laskeyf5fc2cb2005-10-21 19:05:19 +0000115 clEnumValN(GenSubtarget, "gen-subtarget",
116 "Generate subtarget enumerations"),
Chris Lattner9e493cf2006-03-03 02:32:46 +0000117 clEnumValN(GenIntrinsic, "gen-intrinsic",
118 "Generate intrinsic information"),
Dale Johannesen49de9822009-02-05 01:49:45 +0000119 clEnumValN(GenTgtIntrinsic, "gen-tgt-intrinsic",
120 "Generate target intrinsic information"),
Sean Hunt16171442010-06-16 23:45:50 +0000121 clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
122 "Generate clang attribute clases"),
Sean Hunt726a3d22010-08-18 23:23:09 +0000123 clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
124 "Generate clang attribute implementations"),
Sean Hunt16171442010-06-16 23:45:50 +0000125 clEnumValN(GenClangAttrList, "gen-clang-attr-list",
126 "Generate a clang attribute list"),
Sean Hunt726a3d22010-08-18 23:23:09 +0000127 clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
128 "Generate clang PCH attribute reader"),
129 clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
130 "Generate clang PCH attribute writer"),
Douglas Gregor4954e9f2011-04-15 22:04:07 +0000131 clEnumValN(GenClangAttrSpellingList,
132 "gen-clang-attr-spelling-list",
Anders Carlsson238777e2010-10-20 01:21:53 +0000133 "Generate a clang attribute spelling list"),
Caitlin Sadowski5d97ee32011-09-08 17:40:49 +0000134 clEnumValN(GenClangAttrLateParsedList,
135 "gen-clang-attr-late-parsed-list",
136 "Generate a clang attribute LateParsed list"),
Ted Kremenek04a847e2009-03-13 22:21:17 +0000137 clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
138 "Generate Clang diagnostics definitions"),
Chris Lattnerac9e7da2009-04-15 20:02:32 +0000139 clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
140 "Generate Clang diagnostic groups"),
Douglas Gregor4954e9f2011-04-15 22:04:07 +0000141 clEnumValN(GenClangDiagsIndexName,
142 "gen-clang-diags-index-name",
143 "Generate Clang diagnostic name index"),
Sean Huntc10a62b2010-05-30 07:21:42 +0000144 clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
Douglas Gregor348c9752011-01-19 15:57:47 +0000145 "Generate Clang AST declaration nodes"),
Sean Hunt84e2f952010-05-05 04:13:08 +0000146 clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
147 "Generate Clang AST statement nodes"),
Argyrios Kyrtzidis50a47e92011-02-14 17:58:52 +0000148 clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
149 "Generate Clang Static Analyzer checkers"),
Sean Callanan95fcebd2010-01-29 00:21:04 +0000150 clEnumValN(GenEDInfo, "gen-enhanced-disassembly-info",
151 "Generate enhanced disassembly info"),
Nate Begemanf8c4c272010-06-17 04:15:13 +0000152 clEnumValN(GenArmNeon, "gen-arm-neon",
Nate Begeman5ddb0872010-05-28 01:08:32 +0000153 "Generate arm_neon.h for clang"),
Nate Begemanf8c4c272010-06-17 04:15:13 +0000154 clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
155 "Generate ARM NEON sema support for clang"),
Bob Wilson333f5192010-12-15 16:58:45 +0000156 clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
157 "Generate ARM NEON tests for clang"),
Chris Lattnerbc520132003-06-03 04:56:29 +0000158 clEnumValN(PrintEnums, "print-enums",
159 "Print enum values for a class"),
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +0000160 clEnumValN(PrintSets, "print-sets",
161 "Print expanded sets for testing DAG exprs"),
Chris Lattnerbd935332004-07-16 00:02:21 +0000162 clEnumValEnd));
Chris Lattnerbc520132003-06-03 04:56:29 +0000163
164 cl::opt<std::string>
Chris Lattner85df2252003-06-03 05:07:28 +0000165 Class("class", cl::desc("Print Enum list for this class"),
166 cl::value_desc("class name"));
Chris Lattner9a886382003-06-03 05:04:42 +0000167
Chris Lattner90523902003-07-30 19:48:02 +0000168 cl::opt<std::string>
Ted Kremenek557f7f82009-03-13 22:53:41 +0000169 ClangComponent("clang-component",
170 cl::desc("Only use warnings from specified component"),
171 cl::value_desc("component"), cl::Hidden);
Chris Lattnerbc520132003-06-03 04:56:29 +0000172}
173
Peter Collingbourne7c788882011-10-01 16:41:13 +0000174class LLVMTableGenAction : public TableGenAction {
175public:
176 bool operator()(raw_ostream &OS, RecordKeeper &Records) {
Chris Lattner1d1adea2003-08-01 04:39:05 +0000177 switch (Action) {
Chris Lattneraccd8ab2003-08-01 04:47:20 +0000178 case PrintRecords:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000179 OS << Records; // No argument, dump all contents
Chris Lattneraccd8ab2003-08-01 04:47:20 +0000180 break;
Chris Lattner1d1adea2003-08-01 04:39:05 +0000181 case GenEmitter:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000182 CodeEmitterGen(Records).run(OS);
Chris Lattner1d1adea2003-08-01 04:39:05 +0000183 break;
Evan Chenga347f852011-06-24 01:44:41 +0000184 case GenRegisterInfo:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000185 RegisterInfoEmitter(Records).run(OS);
Chris Lattner1d1adea2003-08-01 04:39:05 +0000186 break;
Evan Cheng22fee2d2011-06-28 20:07:07 +0000187 case GenInstrInfo:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000188 InstrInfoEmitter(Records).run(OS);
Chris Lattner15de32d2003-08-03 21:58:28 +0000189 break;
Chris Lattner50d45652007-02-27 22:08:27 +0000190 case GenCallingConv:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000191 CallingConvEmitter(Records).run(OS);
Chris Lattner50d45652007-02-27 22:08:27 +0000192 break;
Chris Lattner2e1f51b2004-08-01 05:59:33 +0000193 case GenAsmWriter:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000194 AsmWriterEmitter(Records).run(OS);
Chris Lattner2e1f51b2004-08-01 05:59:33 +0000195 break;
Johnny Chenb68a3ee2010-04-02 22:27:38 +0000196 case GenARMDecoder:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000197 ARMDecoderEmitter(Records).run(OS);
Johnny Chenb68a3ee2010-04-02 22:27:38 +0000198 break;
Daniel Dunbard51ffcf2009-07-11 19:39:44 +0000199 case GenAsmMatcher:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000200 AsmMatcherEmitter(Records).run(OS);
Daniel Dunbard51ffcf2009-07-11 19:39:44 +0000201 break;
Sean Hunt16171442010-06-16 23:45:50 +0000202 case GenClangAttrClasses:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000203 ClangAttrClassEmitter(Records).run(OS);
Sean Hunt16171442010-06-16 23:45:50 +0000204 break;
Sean Hunt726a3d22010-08-18 23:23:09 +0000205 case GenClangAttrImpl:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000206 ClangAttrImplEmitter(Records).run(OS);
Sean Hunt726a3d22010-08-18 23:23:09 +0000207 break;
Sean Hunt16171442010-06-16 23:45:50 +0000208 case GenClangAttrList:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000209 ClangAttrListEmitter(Records).run(OS);
Sean Hunt16171442010-06-16 23:45:50 +0000210 break;
Sean Hunt726a3d22010-08-18 23:23:09 +0000211 case GenClangAttrPCHRead:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000212 ClangAttrPCHReadEmitter(Records).run(OS);
Sean Hunt726a3d22010-08-18 23:23:09 +0000213 break;
214 case GenClangAttrPCHWrite:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000215 ClangAttrPCHWriteEmitter(Records).run(OS);
Sean Hunt726a3d22010-08-18 23:23:09 +0000216 break;
Anders Carlsson238777e2010-10-20 01:21:53 +0000217 case GenClangAttrSpellingList:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000218 ClangAttrSpellingListEmitter(Records).run(OS);
Anders Carlsson238777e2010-10-20 01:21:53 +0000219 break;
Caitlin Sadowski5d97ee32011-09-08 17:40:49 +0000220 case GenClangAttrLateParsedList:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000221 ClangAttrLateParsedListEmitter(Records).run(OS);
Caitlin Sadowski5d97ee32011-09-08 17:40:49 +0000222 break;
Ted Kremenek04a847e2009-03-13 22:21:17 +0000223 case GenClangDiagsDefs:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000224 ClangDiagsDefsEmitter(Records, ClangComponent).run(OS);
Ted Kremenek04a847e2009-03-13 22:21:17 +0000225 break;
Chris Lattnerac9e7da2009-04-15 20:02:32 +0000226 case GenClangDiagGroups:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000227 ClangDiagGroupsEmitter(Records).run(OS);
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +0000228 break;
Douglas Gregor4954e9f2011-04-15 22:04:07 +0000229 case GenClangDiagsIndexName:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000230 ClangDiagsIndexNameEmitter(Records).run(OS);
Douglas Gregor4954e9f2011-04-15 22:04:07 +0000231 break;
Sean Huntc10a62b2010-05-30 07:21:42 +0000232 case GenClangDeclNodes:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000233 ClangASTNodesEmitter(Records, "Decl", "Decl").run(OS);
234 ClangDeclContextEmitter(Records).run(OS);
Sean Huntc10a62b2010-05-30 07:21:42 +0000235 break;
Sean Hunt84e2f952010-05-05 04:13:08 +0000236 case GenClangStmtNodes:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000237 ClangASTNodesEmitter(Records, "Stmt", "").run(OS);
Sean Hunt84e2f952010-05-05 04:13:08 +0000238 break;
Argyrios Kyrtzidis50a47e92011-02-14 17:58:52 +0000239 case GenClangSACheckers:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000240 ClangSACheckersEmitter(Records).run(OS);
Argyrios Kyrtzidis50a47e92011-02-14 17:58:52 +0000241 break;
Daniel Dunbar40588742009-11-25 02:13:23 +0000242 case GenDisassembler:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000243 DisassemblerEmitter(Records).run(OS);
Daniel Dunbar40588742009-11-25 02:13:23 +0000244 break;
Jim Grosbach86f9adb2011-07-08 17:36:35 +0000245 case GenPseudoLowering:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000246 PseudoLoweringEmitter(Records).run(OS);
Jim Grosbach86f9adb2011-07-08 17:36:35 +0000247 break;
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +0000248 case GenOptParserDefs:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000249 OptParserEmitter(Records, true).run(OS);
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +0000250 break;
251 case GenOptParserImpl:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000252 OptParserEmitter(Records, false).run(OS);
Daniel Dunbar2d6a8fb2009-11-18 21:29:51 +0000253 break;
Chris Lattner4a24c642005-09-03 01:14:03 +0000254 case GenDAGISel:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000255 DAGISelEmitter(Records).run(OS);
Chris Lattner4a24c642005-09-03 01:14:03 +0000256 break;
Dan Gohmanb0cf29c2008-08-13 20:19:35 +0000257 case GenFastISel:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000258 FastISelEmitter(Records).run(OS);
Dan Gohmanb0cf29c2008-08-13 20:19:35 +0000259 break;
Jim Laskeyf5fc2cb2005-10-21 19:05:19 +0000260 case GenSubtarget:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000261 SubtargetEmitter(Records).run(OS);
Jim Laskeyf5fc2cb2005-10-21 19:05:19 +0000262 break;
Chris Lattner9e493cf2006-03-03 02:32:46 +0000263 case GenIntrinsic:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000264 IntrinsicEmitter(Records).run(OS);
Chris Lattner9e493cf2006-03-03 02:32:46 +0000265 break;
Dale Johannesen49de9822009-02-05 01:49:45 +0000266 case GenTgtIntrinsic:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000267 IntrinsicEmitter(Records, true).run(OS);
Dale Johannesen49de9822009-02-05 01:49:45 +0000268 break;
Sean Callanan95fcebd2010-01-29 00:21:04 +0000269 case GenEDInfo:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000270 EDEmitter(Records).run(OS);
Sean Callanan95fcebd2010-01-29 00:21:04 +0000271 break;
Nate Begemanf8c4c272010-06-17 04:15:13 +0000272 case GenArmNeon:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000273 NeonEmitter(Records).run(OS);
Nate Begeman5ddb0872010-05-28 01:08:32 +0000274 break;
Nate Begemanf8c4c272010-06-17 04:15:13 +0000275 case GenArmNeonSema:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000276 NeonEmitter(Records).runHeader(OS);
Nate Begeman73cef3e2010-06-04 01:26:15 +0000277 break;
Bob Wilson333f5192010-12-15 16:58:45 +0000278 case GenArmNeonTest:
Peter Collingbourne7c788882011-10-01 16:41:13 +0000279 NeonEmitter(Records).runTests(OS);
Bob Wilson333f5192010-12-15 16:58:45 +0000280 break;
Chris Lattner1d1adea2003-08-01 04:39:05 +0000281 case PrintEnums:
Brian Gaeked0fde302003-11-11 22:41:34 +0000282 {
Chris Lattner1d1adea2003-08-01 04:39:05 +0000283 std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
Chris Lattner1d1adea2003-08-01 04:39:05 +0000284 for (unsigned i = 0, e = Recs.size(); i != e; ++i)
Peter Collingbourne7c788882011-10-01 16:41:13 +0000285 OS << Recs[i]->getName() << ", ";
286 OS << "\n";
Chris Lattner1d1adea2003-08-01 04:39:05 +0000287 break;
Chris Lattnere62c1182002-12-02 01:23:04 +0000288 }
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +0000289 case PrintSets:
290 {
Jakob Stoklund Olesenc017bc12011-06-04 07:49:55 +0000291 SetTheory Sets;
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +0000292 Sets.addFieldExpander("Set", "Elements");
293 std::vector<Record*> Recs = Records.getAllDerivedDefinitions("Set");
294 for (unsigned i = 0, e = Recs.size(); i != e; ++i) {
Peter Collingbourne7c788882011-10-01 16:41:13 +0000295 OS << Recs[i]->getName() << " = [";
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +0000296 const std::vector<Record*> *Elts = Sets.expand(Recs[i]);
297 assert(Elts && "Couldn't expand Set instance");
298 for (unsigned ei = 0, ee = Elts->size(); ei != ee; ++ei)
Peter Collingbourne7c788882011-10-01 16:41:13 +0000299 OS << ' ' << (*Elts)[ei]->getName();
300 OS << " ]\n";
Jakob Stoklund Olesen1de99822011-06-04 04:11:37 +0000301 }
302 break;
303 }
Brian Gaeked0fde302003-11-11 22:41:34 +0000304 default:
305 assert(1 && "Invalid Action");
Peter Collingbourne7c788882011-10-01 16:41:13 +0000306 return true;
Brian Gaeked0fde302003-11-11 22:41:34 +0000307 }
Sean Hunt84e2f952010-05-05 04:13:08 +0000308
Peter Collingbourne7c788882011-10-01 16:41:13 +0000309 return false;
Chris Lattnere62c1182002-12-02 01:23:04 +0000310 }
Peter Collingbourne7c788882011-10-01 16:41:13 +0000311};
Sean Hunt84e2f952010-05-05 04:13:08 +0000312
Peter Collingbourne7c788882011-10-01 16:41:13 +0000313int main(int argc, char **argv) {
314 sys::PrintStackTraceOnErrorSignal();
315 PrettyStackTraceProgram X(argc, argv);
316 cl::ParseCommandLineOptions(argc, argv);
317
318 LLVMTableGenAction Action;
319 return TableGenMain(argv[0], Action);
Chris Lattnere62c1182002-12-02 01:23:04 +0000320}