llvm-mirror/utils/TableGen
Ulrich Weigand 7e7b549cf2 Handle tied sub-operands in AsmMatcherEmitter
The problem this patch addresses is the handling of register tie
constraints in AsmMatcherEmitter, where one operand is tied to a
sub-operand of another operand.  The typical scenario for this to
happen is the tie between the "write-back" register of a pre-inc
instruction, and the base register sub-operand of the memory address
operand of that instruction.

The current AsmMatcherEmitter code attempts to handle tied
operands by emitting the operand as usual first, and emitting
a CVT_Tied node when handling the second (tied) operand.  However,
this really only works correctly if the tied operand does not
have sub-operands (and isn't a sub-operand itself).  Under those
circumstances, a wrong MC operand list is generated.

In discussions with Jim Grosbach, it turned out that the MC operand
list really ought not to contain tied operands in the first place;
instead, it ought to consist of exactly those operands that are
named in the AsmString.  However, getting there requires significant
rework of (some) targets.

This patch fixes the immediate problem, and at the same time makes
one (small) step in the direction of the long-term solution, by
implementing two changes:

1. Restricts the AsmMatcherEmitter handling of tied operands to
   apply solely to simple operands (not complex operands or
   sub-operand of such).

This means that at least we don't get silently corrupt MC operand
lists as output.  However, if we do have tied sub-operands, they
would now no longer be handled at all, except for:

2. If we have an operand that does not occur in the AsmString,
   and also isn't handled as tied operand, simply emit a dummy
   MC operand (constant 0).

This works as long as target code never attempts to access
MC operands that do no not occur in the AsmString (and are
not tied simple operands), which happens to be the case for
all targets where this situation can occur (ARM and PowerPC).

[ Note that this change means that many of the ARM custom
  converters are now superfluous, since the implement the
  same "hack" now performed already by common code. ]

Longer term, we ought to fix targets to never access *any*
MC operand that does not occur in the AsmString (including
tied simple operands), and then finally completely remove
all such operands from the MC operand list.

Patch approved by Jim Grosbach.

llvm-svn: 180677
2013-04-27 18:48:23 +00:00
..
AsmMatcherEmitter.cpp Handle tied sub-operands in AsmMatcherEmitter 2013-04-27 18:48:23 +00:00
AsmWriterEmitter.cpp This patch that sets the EmitAlias flag in td files 2013-02-05 08:32:10 +00:00
AsmWriterInst.cpp Remove exception handling usage from tblgen. 2012-10-25 20:33:17 +00:00
AsmWriterInst.h
CallingConvEmitter.cpp Remove exception handling usage from tblgen. 2012-10-25 20:33:17 +00:00
CMakeLists.txt Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
CodeEmitterGen.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
CodeGenDAGPatterns.cpp Allow types to be omitted in output patterns. 2013-03-24 19:37:00 +00:00
CodeGenDAGPatterns.h Make all unnamed RegisterClass TreePatternNodes typed MVT::i32. 2013-03-23 18:08:44 +00:00
CodeGenInstruction.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
CodeGenInstruction.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
CodeGenIntrinsics.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
CodeGenMapTable.cpp Fix for bug 15246 -- out-of-bound error in the TableGen backend, CodeGenMapTable.cpp. 2013-02-14 17:58:13 +00:00
CodeGenRegisters.cpp [TableGen] Fix ICE on MSVC 2012 Release builds. 2013-02-26 21:29:47 +00:00
CodeGenRegisters.h Use ArrayRef<MVT::SimpleValueType> when possible. 2013-03-17 17:26:09 +00:00
CodeGenSchedule.cpp Machine model: verify well-formed processor resource groups. 2013-04-23 23:45:14 +00:00
CodeGenSchedule.h Machine model: verify well-formed processor resource groups. 2013-04-23 23:45:14 +00:00
CodeGenTarget.cpp Use ArrayRef<MVT::SimpleValueType> when possible. 2013-03-17 17:26:09 +00:00
CodeGenTarget.h Use ArrayRef<MVT::SimpleValueType> when possible. 2013-03-17 17:26:09 +00:00
CTagsEmitter.cpp Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
DAGISelEmitter.cpp Write llvm-tblgen backends as functions instead of sub-classes. 2012-06-11 15:37:55 +00:00
DAGISelMatcher.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
DAGISelMatcher.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
DAGISelMatcherEmitter.cpp Fix comments 2013-02-05 16:53:11 +00:00
DAGISelMatcherGen.cpp Allow types to be omitted in output patterns. 2013-03-24 19:37:00 +00:00
DAGISelMatcherOpt.cpp Remove unused STL header includes. 2011-04-23 19:53:52 +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 Add AArch64 as an experimental target. 2013-01-31 12:12:40 +00:00
FastISelEmitter.cpp Remove exception handling usage from tblgen. 2012-10-25 20:33:17 +00:00
FixedLenDecoderEmitter.cpp TableGen/FixedLenDecoderEmitter.cpp: Fix a potential mask overflow in fieldFromInstruction(). 2012-12-26 06:43:14 +00:00
InstrInfoEmitter.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
IntrinsicEmitter.cpp Use the AttributeSet instead of AttributeWithIndex. 2013-01-27 03:25:05 +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 Sort a few more #include lines in tools/... unittests/... and utils/... 2013-01-02 10:26:28 +00:00
PseudoLoweringEmitter.cpp PR14992 - Tablegen incorrectly converts ARM tLDMIA_UPD pseudo to tLDMIA 2013-02-13 19:21:47 +00:00
RegisterInfoEmitter.cpp Use ArrayRef<MVT::SimpleValueType> when possible. 2013-03-17 17:26:09 +00:00
SequenceToOffsetTable.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
SetTheory.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
SetTheory.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
StringToOffsetTable.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
SubtargetEmitter.cpp Machine model: Generate table entries for super-resources. 2013-04-23 23:45:16 +00:00
TableGen.cpp Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
TableGenBackends.h Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
tdtags Add TableGen ctags(1) emitter and helper script. 2013-03-21 23:40:38 +00:00
TGValueTypes.cpp Remove extra semicolons. 2012-10-11 22:25:56 +00:00
X86DisassemblerShared.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
X86DisassemblerTables.cpp Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
X86DisassemblerTables.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00
X86ModRMFilters.cpp Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch 2011-12-20 02:50:00 +00:00
X86ModRMFilters.h Fix Doxygen issues: 2012-09-13 12:34:29 +00:00
X86RecognizableInstr.cpp Add CLAC/STAC instruction encoding/decoding support 2013-04-11 04:52:28 +00:00
X86RecognizableInstr.h Sort the #include lines for utils/... 2012-12-04 10:37:14 +00:00