[flang-commits] [flang] a427aa9 - [flang][Lower] Treat directives with nested evaluations as constructs (#91614)
via flang-commits
flang-commits at lists.llvm.org
Fri May 10 13:04:43 PDT 2024
Author: Krzysztof Parzyszek
Date: 2024-05-10T15:04:39-05:00
New Revision: a427aa9346295fe7dd3be5955214d28c8be2ad4a
URL: https://github.com/llvm/llvm-project/commit/a427aa9346295fe7dd3be5955214d28c8be2ad4a
DIFF: https://github.com/llvm/llvm-project/commit/a427aa9346295fe7dd3be5955214d28c8be2ad4a.diff
LOG: [flang][Lower] Treat directives with nested evaluations as constructs (#91614)
When generating block terminators in `genFIR(Evaluation)`, treat
`Directives` with nested evaluations the same way as `Constructs` to
determine the successor block.
This fixes https://github.com/llvm/llvm-project/issues/91526
Added:
flang/test/Lower/branching-directive.f90
Modified:
flang/lib/Lower/Bridge.cpp
Removed:
################################################################################
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 4902886712e92..79d6bbf65cbf7 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -4548,9 +4548,13 @@ class FirConverter : public Fortran::lower::AbstractConverter {
// constructs, this can be done for either the end construct statement,
// or for the construct itself, which will skip this code if the
// end statement was visited first and generated a branch.
- Fortran::lower::pft::Evaluation *successor =
- eval.isConstruct() ? eval.getLastNestedEvaluation().lexicalSuccessor
- : eval.lexicalSuccessor;
+ Fortran::lower::pft::Evaluation *successor = [&]() {
+ if (eval.isConstruct() ||
+ (eval.isDirective() && eval.hasNestedEvaluations()))
+ return eval.getLastNestedEvaluation().lexicalSuccessor;
+ return eval.lexicalSuccessor;
+ }();
+
if (successor && blockIsUnterminated()) {
if (successor->isIntermediateConstructStmt() &&
successor->parentConstruct->lowerAsUnstructured())
diff --git a/flang/test/Lower/branching-directive.f90 b/flang/test/Lower/branching-directive.f90
new file mode 100644
index 0000000000000..a0a147f1053a4
--- /dev/null
+++ b/flang/test/Lower/branching-directive.f90
@@ -0,0 +1,25 @@
+!RUN: flang-new -fc1 -emit-hlfir -fopenmp -o - %s | FileCheck %s
+
+!https://github.com/llvm/llvm-project/issues/91526
+
+!CHECK: cf.cond_br %{{[0-9]+}}, ^bb[[THEN:[0-9]+]], ^bb[[ELSE:[0-9]+]]
+!CHECK: ^bb[[THEN]]:
+!CHECK: cf.br ^bb[[EXIT:[0-9]+]]
+!CHECK: ^bb[[ELSE]]:
+!CHECK: fir.call @_FortranAStopStatement
+!CHECK: fir.unreachable
+!CHECK: ^bb[[EXIT]]:
+
+subroutine simple(y)
+ implicit none
+ logical, intent(in) :: y
+ integer :: i
+ if (y) then
+!$omp parallel
+ i = 1
+!$omp end parallel
+ else
+ stop 1
+ end if
+end subroutine simple
+
More information about the flang-commits
mailing list