[PATCH] D53880: [tblgen][PredicateExpander] Add the ability to describe more complex constraints on instruction operands.

Andrea Di Biagio via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 30 12:04:03 PDT 2018


andreadb created this revision.
andreadb added reviewers: mattd, RKSimon, courbet, gchatelet, ab, craig.topper.

Before this patch, class PredicateExpander only knew how to expand simple predicates that performed checks on instruction operands.
In particular, the new scheduling predicate syntax was not rich enough to express checks like this one:

  Foo(MI->getOperand(0).getImm()) == ExpectedVal;

Here, the immediate operand value at index zero is passed in input to function `Foo`, and `ExpectedVal` is compared against the value returned by function `Foo`.

While this predicate pattern doesn't show up in any X86 model, it shows up in other upstream targets. So, being able to support those predicates is fundamental if we want to be able to modernize all the scheduling models upstream.

With this patch, we allow users to specify if a register/immediate operand value needs to be passed in input to a function as part of the predicate check. Now, register/immediate operand checks all derive from base class `CheckOperandBase`.

This patch also changes where TIIPredicate definitions are expanded by the instructon info emitter. Before, definitions were expanded in class XXXGenInstrInfo (where XXX is a target name).
With the introduction of this new syntax, we may want to have TIIPredicates expanded directly in XXXInstrInfo. That is because functions used by the new operand predicates may only exist in the derived class (i.e. XXXInstrInfo).

This patch is a non functional change for the existing scheduling models.
In future, we will be able to use this richer syntax to better describe complex scheduling predicates, and expose them to llvm-mca

Please, let me know if okay to commit,

Thanks,
-Andrea


https://reviews.llvm.org/D53880

Files:
  lib/Target/X86/X86InstrInfo.cpp
  lib/Target/X86/X86InstrInfo.h
  utils/TableGen/InstrInfoEmitter.cpp
  utils/TableGen/PredicateExpander.cpp
  utils/TableGen/PredicateExpander.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53880.171756.patch
Type: text/x-patch
Size: 9281 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181030/042d4570/attachment.bin>


More information about the llvm-commits mailing list