diff options
author | Markus Böck <markus.boeck02@gmail.com> | 2022-04-08 08:17:36 +0200 |
---|---|---|
committer | Markus Böck <markus.boeck02@gmail.com> | 2022-04-08 08:28:16 +0200 |
commit | 0c789db541c236abf47265331a2f2b0945aa7b93 (patch) | |
tree | fe1b58d9c1f48fb2424eef76e0f8667f360f43c3 /clang/lib/Frontend/TestModuleFileExtension.cpp | |
parent | 795b07f5498c7e5783237418f34d7ea69e801f87 (diff) | |
download | llvm-0c789db541c236abf47265331a2f2b0945aa7b93.zip llvm-0c789db541c236abf47265331a2f2b0945aa7b93.tar.gz llvm-0c789db541c236abf47265331a2f2b0945aa7b93.tar.bz2 |
[mlir] Add support for operation-produced successor arguments in BranchOpInterface
This patch revamps the BranchOpInterface a bit and allows a proper implementation of what was previously `getMutableSuccessorOperands` for operations, which internally produce arguments to some of the block arguments. A motivating example for this would be an invoke op with a error handling path:
```
invoke %function(%0)
label ^success ^error(%1 : i32)
^error(%e: !error, %arg0 : i32):
...
```
The advantages of this are that any users of `BranchOpInterface` can still argue over remaining block argument operands (such as `%1` in the example above), as well as make use of the modifying capabilities to add more operands, erase an operand etc.
The way this patch implements that functionality is via a new class called `SuccessorOperands`, which is now returned by `getSuccessorOperands`. It basically contains an `unsigned` denoting how many operator produced operands exist, as well as a `MutableOperandRange`, which are the usual forwarded operands we are used to. The produced operands are assumed to the first few block arguments, followed by the forwarded operands afterwards. The role of `SuccessorOperands` is to provide various utility functions to modify and query the successor arguments from a `BranchOpInterface`.
Differential Revision: https://reviews.llvm.org/D123062
Diffstat (limited to 'clang/lib/Frontend/TestModuleFileExtension.cpp')
0 files changed, 0 insertions, 0 deletions