diff options
author | jeanPerier <jperier@nvidia.com> | 2024-01-15 09:06:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-15 09:06:46 +0100 |
commit | 08e4386a2c91befabab317498b50ffc326ff4eae (patch) | |
tree | 7c0cb7879df6d55c4fc7b8c1a58faaf0de95f5cc /flang/lib | |
parent | 0cb024b357aff294b1ba0f9d3de8f48ab684962b (diff) | |
download | llvm-08e4386a2c91befabab317498b50ffc326ff4eae.zip llvm-08e4386a2c91befabab317498b50ffc326ff4eae.tar.gz llvm-08e4386a2c91befabab317498b50ffc326ff4eae.tar.bz2 |
[flang][fir] update block argument types in boxed-procedure pass (#77914)
The boxed-procedure pass is lowering the fir.boxproc type. Although this
is not common, this types may end-up as block arguments (or be part of
derived type that are block arguments).
Update the pass to update block argument types too.
Diffstat (limited to 'flang/lib')
-rw-r--r-- | flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp index d4cc2b5..24cf2f3 100644 --- a/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp +++ b/flang/lib/Optimizer/CodeGen/BoxedProcedure.cpp @@ -347,6 +347,19 @@ public: } rewriter.finalizeRootUpdate(op); } + // Ensure block arguments are updated if needed. + if (op->getNumRegions() != 0) { + rewriter.startRootUpdate(op); + for (mlir::Region ®ion : op->getRegions()) + for (mlir::Block &block : region.getBlocks()) + for (mlir::BlockArgument blockArg : block.getArguments()) + if (typeConverter.needsConversion(blockArg.getType())) { + mlir::Type toTy = + typeConverter.convertType(blockArg.getType()); + blockArg.setType(toTy); + } + rewriter.finalizeRootUpdate(op); + } }); } } |