[flang-commits] [flang] 1f7effc - [mlir][acc][flang] Use SymbolRefAttr for func_name in ACC routine (#146951)
via flang-commits
flang-commits at lists.llvm.org
Thu Jul 3 14:55:52 PDT 2025
Author: delaram-talaashrafi
Date: 2025-07-03T14:55:49-07:00
New Revision: 1f7effc88774eee0c957f0aa6c5092b5dae93069
URL: https://github.com/llvm/llvm-project/commit/1f7effc88774eee0c957f0aa6c5092b5dae93069
DIFF: https://github.com/llvm/llvm-project/commit/1f7effc88774eee0c957f0aa6c5092b5dae93069.diff
LOG: [mlir][acc][flang] Use SymbolRefAttr for func_name in ACC routine (#146951)
Changed the type of the `func_name` attribute from SymbolNameAttr to
SymbolRefAttr. SymbolNameAttr is typically used when defining a symbol
(e.g., `sym_name`), while SymbolRefAttr is appropriate for referencing
existing operations. This change ensures that MLIR can correctly track
the link to the referenced `func.func` operation.
Added:
Modified:
flang/lib/Lower/OpenACC.cpp
mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
Removed:
################################################################################
diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp
index 3ef3330cba2d6..e56d7f7ed9b6f 100644
--- a/flang/lib/Lower/OpenACC.cpp
+++ b/flang/lib/Lower/OpenACC.cpp
@@ -4561,7 +4561,8 @@ void createOpenACCRoutineConstruct(
llvm::SmallVector<mlir::Attribute> &vectorDeviceTypes) {
for (auto routineOp : mod.getOps<mlir::acc::RoutineOp>()) {
- if (routineOp.getFuncName().str().compare(funcName) == 0) {
+ if (routineOp.getFuncName().getLeafReference().str().compare(funcName) ==
+ 0) {
// If the routine is already specified with the same clauses, just skip
// the operation creation.
if (compareDeviceTypeInfo(routineOp, bindNames, bindNameDeviceTypes,
@@ -4579,7 +4580,9 @@ void createOpenACCRoutineConstruct(
mlir::OpBuilder modBuilder(mod.getBodyRegion());
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
modBuilder.create<mlir::acc::RoutineOp>(
- loc, routineOpStr, funcName, getArrayAttrOrNull(builder, bindNames),
+ loc, routineOpStr,
+ mlir::SymbolRefAttr::get(builder.getContext(), funcName),
+ getArrayAttrOrNull(builder, bindNames),
getArrayAttrOrNull(builder, bindNameDeviceTypes),
getArrayAttrOrNull(builder, workerDeviceTypes),
getArrayAttrOrNull(builder, vectorDeviceTypes),
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
index 276b74bd43772..66378f116784e 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
@@ -2771,18 +2771,15 @@ def OpenACC_RoutineOp : OpenACC_Op<"routine", [IsolatedFromAbove]> {
must be modified as well.
}];
- let arguments = (ins SymbolNameAttr:$sym_name,
- SymbolNameAttr:$func_name,
- OptionalAttr<StrArrayAttr>:$bindName,
- OptionalAttr<DeviceTypeArrayAttr>:$bindNameDeviceType,
- OptionalAttr<DeviceTypeArrayAttr>:$worker,
- OptionalAttr<DeviceTypeArrayAttr>:$vector,
- OptionalAttr<DeviceTypeArrayAttr>:$seq,
- UnitAttr:$nohost,
- UnitAttr:$implicit,
- OptionalAttr<DeviceTypeArrayAttr>:$gang,
- OptionalAttr<I64ArrayAttr>:$gangDim,
- OptionalAttr<DeviceTypeArrayAttr>:$gangDimDeviceType);
+ let arguments = (ins SymbolNameAttr:$sym_name, SymbolRefAttr:$func_name,
+ OptionalAttr<StrArrayAttr>:$bindName,
+ OptionalAttr<DeviceTypeArrayAttr>:$bindNameDeviceType,
+ OptionalAttr<DeviceTypeArrayAttr>:$worker,
+ OptionalAttr<DeviceTypeArrayAttr>:$vector,
+ OptionalAttr<DeviceTypeArrayAttr>:$seq, UnitAttr:$nohost,
+ UnitAttr:$implicit, OptionalAttr<DeviceTypeArrayAttr>:$gang,
+ OptionalAttr<I64ArrayAttr>:$gangDim,
+ OptionalAttr<DeviceTypeArrayAttr>:$gangDimDeviceType);
let extraClassDeclaration = [{
static StringRef getGangDimKeyword() { return "dim"; }
More information about the flang-commits
mailing list