[flang-commits] [flang] [flang] Do not hoist all scalar sub-expressions from WHERE constructs (PR #91395)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Fri May 10 09:46:10 PDT 2024
================
@@ -1594,6 +1595,27 @@ def hlfir_ForallMaskOp : hlfir_AssignmentMaskOp<"forall_mask"> {
let hasVerifier = 1;
}
+def hlfir_ExactlyOnceOp : hlfir_Op<"exactly_once", [RecursiveMemoryEffects]> {
+ let summary = "Execute exactly once its region in a WhereOp";
+ let description = [{
+ Inside a Where assignment, Fortran requires a non elemental call and its
+ arguments to be executed exactly once, regardless of the mask values.
+ This operation allows holding these evaluations that cannot be hoisted
+ until potential parent Forall loops have been created.
+ It also allows inlining the calls without losing the information that
+ these calls must be hoisted.
+ }];
+
+ let regions = (region SizedRegion<1>:$body);
+
+ let results = (outs AnyFortranEntity:$result);
+
+ let assemblyFormat = [{
+ attr-dict `:` type($result)
+ $body
+ }];
----------------
clementval wrote:
```suggestion
}];
```
https://github.com/llvm/llvm-project/pull/91395
More information about the flang-commits
mailing list