HomePhabricator

[TableGen] Introduce an if/then/else statement.

Authored by simon_tatham on Jan 14 2020, 1:10 AM.

Description

[TableGen] Introduce an if/then/else statement.

Summary:
This allows you to make some of the defs in a multiclass or foreach
conditional on an expression computed from the parameters or iteration
variables.

It was already possible to simulate an if statement using a foreach
with a dummy iteration variable and a list constructed using !if so
that it had length 0 or 1 depending on the condition, e.g.

foreach unusedIterationVar = !if(condition, [1], []<int>) in { ... }

But this syntax is nicer to read, and also more convenient because it
allows an else clause.

To avoid upheaval in the implementation, I've implemented if as pure
syntactic sugar on the foreach implementation: internally, ParseIf
actually does construct exactly the kind of foreach shown above (and
another reversed one for the else clause if present).

Reviewers: nhaehnle, hfinkel

Reviewed By: hfinkel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

Details

Committed
simon_tathamJan 14 2020, 2:19 AM
Reviewer
hfinkel
Differential Revision
D71474: [TableGen] Introduce an if/then/else statement.
Parents
rG3388b0f59dcc: [TableGen] Introduce a `defvar` statement.
Branches
Unknown
Tags
Unknown