aboutsummaryrefslogtreecommitdiff
path: root/flang/lib
diff options
context:
space:
mode:
authorjeanPerier <jperier@nvidia.com>2024-01-15 09:06:46 +0100
committerGitHub <noreply@github.com>2024-01-15 09:06:46 +0100
commit08e4386a2c91befabab317498b50ffc326ff4eae (patch)
tree7c0cb7879df6d55c4fc7b8c1a58faaf0de95f5cc /flang/lib
parent0cb024b357aff294b1ba0f9d3de8f48ab684962b (diff)
downloadllvm-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.cpp13
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 &region : 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);
+ }
});
}
}