llvm-project/llvm/test/TableGen
Simon Tatham c74322a11b [TableGen] Allow DAG isel patterns to override default operands.
When a Tablegen instruction description uses `OperandWithDefaultOps`,
isel patterns for that instruction don't have to fill in the default
value for the operand in question. But the flip side is that they
actually //can't// override the defaults even if they want to.

This will be very inconvenient for the Arm backend, when we start
wanting to write isel patterns that generate the many MVE predicated
vector instructions, in the form with predication actually enabled. So
this small Tablegen fix makes it possible to write an isel pattern
either with or without values for a defaulted operand, and have the
default values filled in only if they are not overridden.

If all the defaulted operands come at the end of the instruction's
operand list, there's a natural way to match them up to the arguments
supplied in the pattern: consume pattern arguments until you run out,
then fill in any missing instruction operands with their default
values. But if defaulted and non-defaulted operands are interleaved,
it's less clear what to do. This does happen in existing targets (the
first example I came across was KILLGT, in the AMDGPU/R600 backend),
and of course they expect the previous behaviour (that the default for
those operands is used and a pattern argument is not consumed), so for
backwards compatibility I've stuck with that.

Reviewers: nhaehnle, hfinkel, dmgreen

Subscribers: mehdi_amini, javed.absar, tpr, kristof.beyls, steven_wu, dexonsmith, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63814

llvm-svn: 365114
2019-07-04 08:43:20 +00:00
..
FixedLenDecoderEmitter [tblgen][disasm] Emit record names again when decoder conflicts occur. 2019-01-03 00:14:33 +00:00
2003-08-03-PassCode.td
2006-09-18-LargeInt.td
2010-03-24-PrematureDefaults.td
AllowDuplicateRegisterNames.td [TableGen] Give the option of tolerating duplicate register names 2017-12-07 09:51:55 +00:00
AnonDefinitionOnDemand.td TableGen: Delay instantiating inline anonymous records 2018-03-06 13:49:01 +00:00
AsmPredicateCondsEmission.td
AsmVariant.td
BitOffsetDecoder.td TableGen: Explicitly check whether a record has been resolved 2018-03-06 13:48:47 +00:00
BitsInit.td TableGen: Allow !cast of records, cleanup conversion machinery 2018-03-06 13:48:39 +00:00
BitsInitOverflow.td TableGen: Explicitly check whether a record has been resolved 2018-03-06 13:48:47 +00:00
CStyleComment.td
ClassInstanceValue.td
ConcatenatedSubregs.td
ConstraintChecking.inc [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking1.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking2.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking3.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking4.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking5.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking6.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
ConstraintChecking7.td [TableGen] Better error checking for TIED_TO constraints. 2018-11-28 11:43:49 +00:00
DAGDefaultOps.td [TableGen] Allow DAG isel patterns to override default operands. 2019-07-04 08:43:20 +00:00
Dag.td TableGen: Streamline the semantics of NAME 2018-06-04 14:26:05 +00:00
DefmInherit.td
DefmInsideMultiClass.td
DuplicateFieldValues.td
FastISelEmitter.td [FastISel] Permit instructions to be skipped for FastISel generation. 2018-05-22 14:36:58 +00:00
FieldAccess.td TableGen: Allow !cast of records, cleanup conversion machinery 2018-03-06 13:48:39 +00:00
ForeachList.td TableGen: Allow arbitrary list values as ranges of foreach 2018-03-09 12:24:30 +00:00
ForeachLoop.td
ForwardRef.td
GeneralList.td
GlobalISelEmitter-PR39045.td [globalisel][tblgen] Table optimization should consider the C++ code in C++ predicates 2018-09-25 17:59:02 +00:00
GlobalISelEmitter.td Add support for pointer types in patterns 2019-02-20 19:43:47 +00:00
GlobalISelEmitterSkippedPatterns.td [GlobalISel] Skip patterns that define complex suboperands twice instead of dying 2019-02-09 00:29:13 +00:00
HwModeSelect.td
Include.inc
Include.td
IntBitInit.td
IntSpecialValues.td [TableGen] Allow 2^63-1 and 2^63-2 as int literals. 2019-03-12 09:28:19 +00:00
JSON-check.py [TableGen] Add a general-purpose JSON backend. 2018-07-11 08:40:19 +00:00
JSON.td [lit, python] Always add quotes around the python path in lit 2018-08-06 22:37:44 +00:00
LazyChange.td
LetInsideMultiClasses.td
ListArgs.td [TableGen] Let list elements have a trailing comma 2019-03-26 11:16:01 +00:00
ListArgsSimple.td
ListConversion.td
ListManip.td
ListOfList.td
ListSlices.td
LoLoL.td
MultiClass-def-fail.td [TableGen] Give meaningful msg for def use in multiclass 2019-03-26 10:49:09 +00:00
MultiClass-defm-fail.td TableGen: Streamline how defs are instantiated 2018-03-21 17:12:53 +00:00
MultiClass-defm.td TableGen: Allow NAME in template arguments in defm in multiclass 2018-03-05 14:01:38 +00:00
MultiClass.td
MultiClassDefName.td TableGen: Streamline the semantics of NAME 2018-06-04 14:26:05 +00:00
MultiClassInherit.td
MultiPat.td TableGen: Reimplement !foreach using the resolving mechanism 2018-03-05 15:21:04 +00:00
NestedForeach.td TableGen: Allow foreach in multiclass to depend on template args 2018-06-21 13:35:44 +00:00
Paste.td TableGen: Type-check BinOps 2018-03-14 11:00:43 +00:00
RegisterBankEmitter.td
RegisterEncoder.td
RelTest.td [mips] Improve diagnostics for instruction mapping 2018-01-08 16:25:40 +00:00
SchedModelError.td [TableGen] Include schedule model name in diagnostic. 2019-04-15 10:06:26 +00:00
SetTheory.td
SiblingForeach.td
Slice.td
String.td
SuperSubclassSameName.td
TargetInstrInfo.td
TargetInstrSpec.td TableGen: Reimplement !foreach using the resolving mechanism 2018-03-05 15:21:04 +00:00
TemplateArgRename.td
Tree.td
TreeNames.td
TwoLevelName.td
UnsetBitInit.td TableGen: Simplify BitsInit::resolveReferences 2018-03-06 13:48:30 +00:00
UnterminatedComment.td
ValidIdentifiers.td
ambiguous-composition.td [TableGen] Examine entire subreg compositions to detect ambiguity 2018-11-29 18:20:08 +00:00
arithmetic.td TableGen: Type-check BinOps 2018-03-14 11:00:43 +00:00
cast-list-initializer.td
cast-multiclass.td [TableGen] fix assert in !cast when used out of definition in a multiclass 2018-10-10 10:52:57 +00:00
cast-typeerror.td TableGen: Check the dynamic type of !cast<Rec>(string) 2018-03-19 14:14:20 +00:00
cast.td
code.td TableGen: Allow !cast of records, cleanup conversion machinery 2018-03-06 13:48:39 +00:00
compare.td TableGen: Add !ne, !le, !lt, !ge, and !gt comparisons 2018-03-14 11:00:57 +00:00
cond-bitlist.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-default.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-empty-list-arg.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-inheritance.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-let.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-list.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-subclass.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-type.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
cond-usage.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
condsbit.td [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
dag-functional.td TableGen: Allow dag operators to be resolved late 2018-03-14 11:00:48 +00:00
dag-isel-res-order.td [TableGen] Preserve order of output operands in DAGISelMatcherGen 2018-12-05 00:47:59 +00:00
defmclass.td
defset-typeerror.td TableGen: Add a defset statement 2018-03-09 12:24:42 +00:00
defset.td TableGen: Add a defset statement 2018-03-09 12:24:42 +00:00
eq.td TableGen: Add !ne, !le, !lt, !ge, and !gt comparisons 2018-03-14 11:00:57 +00:00
eqbit.td TableGen: Add !ne, !le, !lt, !ge, and !gt comparisons 2018-03-14 11:00:57 +00:00
foldl.td TableGen: Add !foldl operation 2018-03-06 13:49:16 +00:00
foreach-eval.td TableGen: Reimplement !foreach using the resolving mechanism 2018-03-05 15:21:04 +00:00
foreach-leak.td [TableGen] Don't quote variable name when printing !foreach. 2018-05-02 13:17:26 +00:00
foreach-multiclass.td TableGen: Allow foreach in multiclass to depend on template args 2018-06-21 13:35:44 +00:00
foreach-range-parse-errors0.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-range-parse-errors1.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-range-parse-errors2.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-range-parse-errors3.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-range-parse-errors4.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-range-parse-errors5.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach-variable-range.td TableGen: Handle nontrivial foreach range bounds 2019-05-22 21:28:20 +00:00
foreach.td TableGen: Reimplement !foreach using the resolving mechanism 2018-03-05 15:21:04 +00:00
generic-tables-instruction.td TableGen/SearchableTables: Support more generic enums and tables 2018-06-21 13:36:22 +00:00
generic-tables.td TableGen/SearchableTables: Support more generic enums and tables 2018-06-21 13:36:22 +00:00
if-empty-list-arg.td
if-type.td TableGen: Generalize record types to fix typeIsConvertibleTo et al. 2018-03-06 13:48:20 +00:00
if.td TableGen: Generalize record types to fix typeIsConvertibleTo et al. 2018-03-06 13:48:20 +00:00
ifbit.td
intrinsic-long-name.td [IR] Split Intrinsics.inc into enums and implementations 2018-06-23 02:02:38 +00:00
intrinsic-pointer-to-any.td Teach TableGen Intrin Emitter to handle LLVMPointerType<llvm_any_ty> 2019-06-26 00:08:22 +00:00
intrinsic-struct.td [IR] Split Intrinsics.inc into enums and implementations 2018-06-23 02:02:38 +00:00
intrinsic-varargs.td [CodeGen] Defined MVTs v3i32, v3f32, v5i32, v5f32 2019-03-17 22:56:38 +00:00
isa.td TableGen: add !isa operation 2018-03-09 12:24:06 +00:00
lisp.td TableGen: Streamline the semantics of NAME 2018-06-04 14:26:05 +00:00
list-element-bitref.td
listconcat.td TableGen: Type-check BinOps 2018-03-14 11:00:43 +00:00
listpaste.td TableGen: Allow lists to be concatenated through '#' 2019-03-05 17:16:07 +00:00
listsplat.td [TableGen] Introduce !listsplat 'binary' operator 2019-04-10 18:26:36 +00:00
lit.local.cfg
math.td [Tablegen] Add support for the !mul operator. 2019-03-01 09:46:29 +00:00
name-resolution-consistency.td TableGen: Streamline the semantics of NAME 2018-06-04 14:26:05 +00:00
nested-comment.td
pr8330.td
prep-diag1.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag2.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag3.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag4.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag5.td TableGen: support #ifndef in addition to #ifdef. 2019-05-14 13:04:25 +00:00
prep-diag6.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag7.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag8.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag9.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag10.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag11-include.inc [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag11.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag12-include.inc [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag12.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag13.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-diag14.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-ifndef-diag-1.td TableGen: support #ifndef in addition to #ifdef. 2019-05-14 13:04:25 +00:00
prep-ifndef-diag-2.td TableGen: support #ifndef in addition to #ifdef. 2019-05-14 13:04:25 +00:00
prep-ifndef.td TableGen: support #ifndef in addition to #ifdef. 2019-05-14 13:04:25 +00:00
prep-region-include.inc [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
prep-region-processing.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
searchabletables-intrinsic.td TableGen/SearchableTables: Support more generic enums and tables 2018-06-21 13:36:22 +00:00
self-reference-recursion.td TableGen: Explicitly forbid self-references to field members 2018-03-19 14:14:28 +00:00
self-reference-typeerror.td TableGen: Explicitly test some cases of self-references and !cast errors 2018-03-19 14:14:10 +00:00
self-reference.td TableGen: Streamline how defs are instantiated 2018-03-21 17:12:53 +00:00
size.td TableGen: Add !size operation 2018-02-23 10:46:07 +00:00
strconcat.td
subst.td TableGen: Streamline the semantics of NAME 2018-06-04 14:26:05 +00:00
subst2.td
template-arg-dependency.td TableGen: Resolve all template args simultaneously in AddSubClass 2018-03-05 15:21:11 +00:00
trydecode-emission.td [GISel]: Add Opcodes for CTLZ/CTTZ/CTPOP 2018-08-04 01:22:12 +00:00
trydecode-emission2.td [GISel]: Add Opcodes for CTLZ/CTTZ/CTPOP 2018-08-04 01:22:12 +00:00
trydecode-emission3.td [GISel]: Add Opcodes for CTLZ/CTTZ/CTPOP 2018-08-04 01:22:12 +00:00
unterminated-c-comment-include.inc [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
unterminated-c-comment.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
unterminated-code-block-include.inc [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
unterminated-code-block.td [TableGen] Preprocessing support 2018-11-27 18:57:43 +00:00
usevalname.td