-
- Downloads
[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
Showing
- flang/include/flang/Optimizer/Dialect/FIROps.td 1 addition, 5 deletionsflang/include/flang/Optimizer/Dialect/FIROps.td
- flang/lib/Optimizer/Dialect/FIROps.cpp 12 additions, 16 deletionsflang/lib/Optimizer/Dialect/FIROps.cpp
- mlir/include/mlir/IR/OperationSupport.h 5 additions, 0 deletionsmlir/include/mlir/IR/OperationSupport.h
- mlir/include/mlir/Interfaces/ControlFlowInterfaces.h 102 additions, 2 deletionsmlir/include/mlir/Interfaces/ControlFlowInterfaces.h
- mlir/include/mlir/Interfaces/ControlFlowInterfaces.td 27 additions, 18 deletionsmlir/include/mlir/Interfaces/ControlFlowInterfaces.td
- mlir/lib/Analysis/AliasAnalysis/LocalAliasAnalysis.cpp 3 additions, 4 deletionsmlir/lib/Analysis/AliasAnalysis/LocalAliasAnalysis.cpp
- mlir/lib/Analysis/BufferViewFlowAnalysis.cpp 3 additions, 3 deletionsmlir/lib/Analysis/BufferViewFlowAnalysis.cpp
- mlir/lib/Analysis/DataFlowAnalysis.cpp 8 additions, 5 deletionsmlir/lib/Analysis/DataFlowAnalysis.cpp
- mlir/lib/Dialect/Bufferization/Transforms/BufferDeallocation.cpp 8 additions, 13 deletions...b/Dialect/Bufferization/Transforms/BufferDeallocation.cpp
- mlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp 8 additions, 11 deletionsmlir/lib/Dialect/ControlFlow/IR/ControlFlowOps.cpp
- mlir/lib/Dialect/Func/Transforms/FuncConversions.cpp 7 additions, 6 deletionsmlir/lib/Dialect/Func/Transforms/FuncConversions.cpp
- mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp 11 additions, 15 deletionsmlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
- mlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp 11 additions, 12 deletionsmlir/lib/Dialect/Linalg/Transforms/Detensorize.cpp
- mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp 6 additions, 7 deletionsmlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp
- mlir/lib/Interfaces/ControlFlowInterfaces.cpp 20 additions, 13 deletionsmlir/lib/Interfaces/ControlFlowInterfaces.cpp
- mlir/lib/Target/LLVMIR/ModuleTranslation.cpp 2 additions, 3 deletionsmlir/lib/Target/LLVMIR/ModuleTranslation.cpp
- mlir/lib/Transforms/Utils/RegionUtils.cpp 12 additions, 14 deletionsmlir/lib/Transforms/Utils/RegionUtils.cpp
- mlir/test/Transforms/sccp.mlir 18 additions, 0 deletionsmlir/test/Transforms/sccp.mlir
- mlir/test/lib/Dialect/Test/TestDialect.cpp 16 additions, 7 deletionsmlir/test/lib/Dialect/Test/TestDialect.cpp
- mlir/test/lib/Dialect/Test/TestOps.td 11 additions, 0 deletionsmlir/test/lib/Dialect/Test/TestOps.td
Loading
Please register or sign in to comment