[PATCH] D74681: [mlir][DeclarativeParser] Add basic support for optional groups in the assembly format.

River Riddle via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 15 23:19:50 PST 2020


rriddle created this revision.
rriddle added reviewers: jpienaar, antiagainst.
Herald added subscribers: llvm-commits, Joonsoo, liufengdb, lucyrfox, mgester, arpith-jacob, nicolasvasilache, shauheen, burmako, mehdi_amini.
Herald added a project: LLVM.

When operations have optional attributes, or optional operands(i.e. empty variadic operands), the assembly format often has an optional section to represent these arguments. This revision adds basic support for defining an "optional group" in the assembly format to support this. An optional group is defined by wrapping a set of elements in `()` and requires the following:

- The first element of the group must be either a literal or an operand argument.
  - This is because the first element was be optionally parsable.
- There must be exactly one argument variable within the group that is marked as the anchor of the group. The anchor is the element whose presence controls whether the group should be printed/parsed. An element is marked as the anchor by adding a trailing `?`.
- The group must only contain literals, variables, and type directives.
  - Any attribute variables may be used, but only optional attributes can be marked as the anchor.
  - Only variadic, i.e. optional, operand arguments can be used.
  - The elements of the type directive must be defined within the same optional group.

An example of this can be seen with the assembly format for ReturnOp, which has a variadic number of operands.

  def ReturnOp : ... {
    let arguments = (ins Variadic<AnyType>:$operands);
  
    // We only print the operands+types if there are a non-zero number
    // of operands.
    let assemblyFormat = "attr-dict ($operands? `:` type($operands))";
  }

Depends On D74648 <https://reviews.llvm.org/D74648>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D74681

Files:
  mlir/docs/OpDefinitions.md
  mlir/include/mlir/Dialect/StandardOps/Ops.td
  mlir/lib/Dialect/StandardOps/Ops.cpp
  mlir/test/mlir-tblgen/op-format-spec.td
  mlir/tools/mlir-tblgen/OpFormatGen.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74681.244853.patch
Type: text/x-patch
Size: 35403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200216/dc0ce075/attachment.bin>


More information about the llvm-commits mailing list