llvm-project/llvm/utils/TableGen
Hal Finkel 2756dc17a6 Add an OutPatFrag TableGen class
Unfortunately, it is currently impossible to use a PatFrag as part of an output
pattern (the part of the pattern that has instructions in it) in TableGen.
Looking at the current implementation, this was clearly intended to work (there
is already code in place to expand patterns in the output DAG), but is
currently broken by the baked-in type-checking assumption and the order in which
the pattern fragments are processed (output pattern fragments need to be
processed after the instruction definitions are processed).

Fixing this is fairly simple, but requires some way of differentiating output
patterns from the existing input patterns. The simplest way to handle this
seems to be to create a subclass of PatFrag, and so that's what I've done here.

As a simple example, this allows us to write:

def crnot : OutPatFrag<(ops node:$in),
                       (CRNOR $in, $in)>;

def       : Pat<(not i1:$in),
                (crnot $in)>;

which captures the core use case: handling of repeated subexpressions inside
of complicated output patterns.

This will be used by an upcoming commit to the PowerPC backend.

llvm-svn: 202450
2014-02-28 00:26:56 +00:00
..
AsmMatcherEmitter.cpp Add missing #include's to cctype when using isdigit/alpha/etc. 2013-10-12 00:55:57 +00:00
AsmWriterEmitter.cpp Get rid of a vector copy by just making a pointer out of the reference returned by getInstructionsByEnumValue instead of assigning it to a new vector. 2014-02-05 07:56:49 +00:00
AsmWriterInst.cpp Remove dead code. 2013-12-02 05:10:04 +00:00
AsmWriterInst.h Remove dead code. 2013-12-02 05:10:04 +00:00
CMakeLists.txt Remove TGValueTypes.cpp from CMakeLists.txt which I forgot to do in r200036. 2014-01-24 20:51:32 +00:00
CTagsEmitter.cpp Remove unnecessary include. 2014-02-09 07:55:19 +00:00
CallingConvEmitter.cpp LLVM-1163: AAPCS-VFP violation when CPRC allocated to stack 2014-02-07 11:19:53 +00:00
CodeEmitterGen.cpp Propagate MCSubtargetInfo through TableGen's getBinaryCodeForInstr() 2014-01-28 23:13:18 +00:00
CodeGenDAGPatterns.cpp Add an OutPatFrag TableGen class 2014-02-28 00:26:56 +00:00
CodeGenDAGPatterns.h Add an OutPatFrag TableGen class 2014-02-28 00:26:56 +00:00
CodeGenInstruction.cpp Shrink the size of CodeGenInstruction a little bit by using bitfields. 32 bools seemed excessive. 2014-02-05 09:10:40 +00:00
CodeGenInstruction.h Shrink the size of CodeGenInstruction a little bit by using bitfields. 32 bools seemed excessive. 2014-02-05 09:10:40 +00:00
CodeGenIntrinsics.h Extend 'readonly' and 'readnone' to work on function arguments as well as 2013-07-06 00:29:58 +00:00
CodeGenMapTable.cpp Correct word hyphenations 2013-12-05 05:44:44 +00:00
CodeGenRegisters.cpp Replace tablegen uses of EVT with MVT. Add isOverloaded() to MVT to facilitate. Remove TGValueTypes.cpp since its unused now (and may have been before). 2014-01-24 20:50:47 +00:00
CodeGenRegisters.h Fix known typos 2014-01-24 17:20:08 +00:00
CodeGenSchedule.cpp Fix known typos 2014-01-24 17:20:08 +00:00
CodeGenSchedule.h Fix known typos 2014-01-24 17:20:08 +00:00
CodeGenTarget.cpp Delete all of the CodeGenInstructions from CodeGenTarget destructor. 2014-02-06 06:27:59 +00:00
CodeGenTarget.h Support little-endian encodings in the FixedLenDecoderEmitter 2013-12-17 22:37:50 +00:00
DAGISelEmitter.cpp Use ArrayRef to simplify some code. 2014-01-21 07:20:05 +00:00
DAGISelMatcher.cpp Add CheckChildInteger to ISelMatcher operations. Removes nearly 2000 bytes from X86 matcher table. 2014-02-05 05:44:28 +00:00
DAGISelMatcher.h Add CheckChildInteger to ISelMatcher operations. Removes nearly 2000 bytes from X86 matcher table. 2014-02-05 05:44:28 +00:00
DAGISelMatcherEmitter.cpp Add CheckChildInteger to ISelMatcher operations. Removes nearly 2000 bytes from X86 matcher table. 2014-02-05 05:44:28 +00:00
DAGISelMatcherGen.cpp Fix typo in commment tyep->type. 2014-01-25 17:34:23 +00:00
DAGISelMatcherOpt.cpp Add CheckChildInteger to ISelMatcher operations. Removes nearly 2000 bytes from X86 matcher table. 2014-02-05 05:44:28 +00:00
DFAPacketizerEmitter.cpp Fix PR14568: Avoid the DFA packetizer from making an invalid read 2012-12-10 22:45:57 +00:00
DisassemblerEmitter.cpp Don't use PrintFatalError(which calls exit) for 'Primary decode conflict'. Just skip emitting the table. This way the main function will delete the output file instead of it remaining empty and confusing dependency checks if build is invoked a second time. 2014-01-05 01:34:12 +00:00
FastISelEmitter.cpp Rename a DebugLoc variable to DbgLoc and a DataLayout to DL. 2014-02-18 22:05:46 +00:00
FixedLenDecoderEmitter.cpp Remove unnecessary include. 2014-02-09 07:55:19 +00:00
InstrInfoEmitter.cpp Fix a vector that was passed by value instead of reference. 2014-02-05 07:27:49 +00:00
IntrinsicEmitter.cpp Stackmaps are used for OSR exits, which is a custom kind of unwinding. Hence, they 2014-02-20 23:57:31 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
Makefile Remove exception handling usage from tblgen. 2012-10-25 20:33:17 +00:00
OptParserEmitter.cpp Typo. 2013-10-20 03:19:25 +00:00
PseudoLoweringEmitter.cpp Change MCStreamer EmitInstruction interface to take subtarget info 2014-01-28 23:12:42 +00:00
RegisterInfoEmitter.cpp Fix indentation. 2014-02-27 03:30:36 +00:00
SequenceToOffsetTable.h Add missing include 2013-08-28 07:03:02 +00:00
SetTheory.cpp [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
SetTheory.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
SubtargetEmitter.cpp Mark the x86 machine model as incomplete. PR17367. 2013-09-25 18:14:12 +00:00
TableGen.cpp replace LeakSanitizerIsTurnedOffForTheCurrentProcess with __lsan_is_turned_off, but this time hide it under __has_feature(address_sanitizer); also include <sanitizer/lsan_interface.h> 2014-01-15 07:59:37 +00:00
TableGenBackends.h Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
X86DisassemblerShared.h Remove filtering concept from X86 disassembler table generation. It's no longer necessary. 2014-02-13 07:07:16 +00:00
X86DisassemblerTables.cpp Remove A6/A7 opcode maps. They can all be handled with a TB map, opcode of 0xa6/0xa7, and adding MRM_C0/MRM_E0 forms. Removes 376K from the disassembler tables. 2014-02-19 05:34:21 +00:00
X86DisassemblerTables.h Remove A6/A7 opcode maps. They can all be handled with a TB map, opcode of 0xa6/0xa7, and adding MRM_C0/MRM_E0 forms. Removes 376K from the disassembler tables. 2014-02-19 05:34:21 +00:00
X86ModRMFilters.cpp Second attempt at Removing special form of AddRegFrm used by FP instructions. These instructions can be handled by MRMXr instead. 2014-01-01 14:22:37 +00:00
X86ModRMFilters.h Second attempt at Removing special form of AddRegFrm used by FP instructions. These instructions can be handled by MRMXr instead. 2014-01-01 14:22:37 +00:00
X86RecognizableInstr.cpp [x86] Simplify disassembler code slightly. 2014-02-26 06:01:21 +00:00
X86RecognizableInstr.h [x86] Switch PAUSE instruction to use XS prefix instead of HasREPPrefix. Remove HasREPPrefix support from disassembler table generator since its now only used by CodeGenOnly instructions. 2014-02-20 07:59:43 +00:00
tdtags Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00