[flang-commits] [flang] [flang][openacc] Check trip count invariance with other IVs (PR #79906)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Tue Jan 30 11:14:56 PST 2024
================
@@ -1250,10 +1256,41 @@ void AccAttributeVisitor::CheckAssociatedLoopIndex(
return nullptr;
};
- const auto &outer{std::get<std::optional<parser::DoConstruct>>(x.t)};
- for (const parser::DoConstruct *loop{&*outer}; loop && level > 0;) {
+ auto checkExprHasSymbols = [&](llvm::SmallVector<Symbol *> &ivs,
+ semantics::UnorderedSymbolSet &symbols) {
+ for (auto iv : ivs) {
+ if (symbols.count(*iv) != 0) {
+ context_.Say(GetContext().directiveSource,
+ "Trip count must be computable and invariant"_err_en_US);
+ }
+ }
+ };
+
+ Symbol::Flag flag;
+ llvm::SmallVector<Symbol *> ivs;
+ using Bounds = parser::LoopControl::Bounds;
+ for (const parser::DoConstruct *loop{&outerDoConstruct}; loop && level > 0;) {
// Go through all nested loops to ensure index variable exists.
- GetLoopIndex(*loop);
+ if (const parser::Name * ivName{GetLoopIndex(*loop)}) {
+ if (auto *symbol{ResolveAcc(*ivName, flag, currScope())}) {
+ if (auto &control{loop->GetLoopControl()}) {
+ if (const Bounds * b{std::get_if<Bounds>(&control->u)}) {
+ if (auto lowerExpr = semantics::AnalyzeExpr(context_, b->lower)) {
----------------
clementval wrote:
```suggestion
if (auto lowerExpr{semantics::AnalyzeExpr(context_, b->lower)}) {
```
https://github.com/llvm/llvm-project/pull/79906
More information about the flang-commits
mailing list