[flang-commits] [flang] [flang][OpenMP][Lower] lower array subscripts for task depend (PR #132994)
Tom Eccles via flang-commits
flang-commits at lists.llvm.org
Wed Mar 26 03:13:41 PDT 2025
================
@@ -830,18 +845,38 @@ bool ClauseProcessor::processDepend(mlir::omp::DependClauseOps &result) const {
for (const omp::Object &object : objects) {
assert(object.ref() && "Expecting designator");
+ mlir::Value dependVar;
if (evaluate::ExtractSubstring(*object.ref())) {
TODO(converter.getCurrentLocation(),
"substring not supported for task depend");
} else if (evaluate::IsArrayElement(*object.ref())) {
- TODO(converter.getCurrentLocation(),
- "array sections not supported for task depend");
+ // Array Section
+ SomeExpr expr = *object.ref();
+ if (isVectorSubscript(expr))
+ TODO(converter.getCurrentLocation(),
+ "Vector subscripted array section for task dependency");
+
+ hlfir::EntityWithAttributes entity = convertExprToHLFIR(
+ converter.getCurrentLocation(), converter, expr, symMap, stmtCtx);
+ dependVar = entity.getBase();
+ } else {
+ semantics::Symbol *sym = object.sym();
+ dependVar = converter.getSymbolAddress(*sym);
}
- semantics::Symbol *sym = object.sym();
- const mlir::Value variable = converter.getSymbolAddress(*sym);
- result.dependVars.push_back(variable);
+ // The openmp dialect doesn't know what to do with boxes (and it would
+ // break layering to teach it about them). The dependency variable can be
+ // a box because it was an array section or because the original symbol
+ // was mapped to a box.
+ // Getting the address of the box data is okay because all the runtime
+ // ultimately cares about is the base address of the array.
+ if (fir::isa_box_type(dependVar.getType())) {
----------------
tblah wrote:
The standard says that using an unallocated allocatable is undefined behavior. So I don't think this needs any special handling here.
https://github.com/llvm/llvm-project/pull/132994
More information about the flang-commits
mailing list