summaryrefslogtreecommitdiff
path: root/flang/lib/Optimizer/Transforms/StackArrays.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'flang/lib/Optimizer/Transforms/StackArrays.cpp')
-rw-r--r--flang/lib/Optimizer/Transforms/StackArrays.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/flang/lib/Optimizer/Transforms/StackArrays.cpp b/flang/lib/Optimizer/Transforms/StackArrays.cpp
index 0c474f463f09..bdcb8199b790 100644
--- a/flang/lib/Optimizer/Transforms/StackArrays.cpp
+++ b/flang/lib/Optimizer/Transforms/StackArrays.cpp
@@ -76,8 +76,9 @@ class InsertionPoint {
/// Get contained pointer type or nullptr
template <class T>
T *tryGetPtr() const {
- if (location.is<T *>())
- return location.get<T *>();
+ // Use llvm::dyn_cast_if_present because location may be null here.
+ if (T *ptr = llvm::dyn_cast_if_present<T *>(location))
+ return ptr;
return nullptr;
}
@@ -793,8 +794,8 @@ void StackArraysPass::runOnOperation() {
config.enableRegionSimplification = mlir::GreedySimplifyRegionLevel::Disabled;
patterns.insert<AllocMemConversion>(&context, *candidateOps);
- if (mlir::failed(mlir::applyOpPatternsAndFold(opsToConvert,
- std::move(patterns), config))) {
+ if (mlir::failed(mlir::applyOpPatternsGreedily(
+ opsToConvert, std::move(patterns), config))) {
mlir::emitError(func->getLoc(), "error in stack arrays optimization\n");
signalPassFailure();
}