[flang-commits] [flang] [FIRToMemRef] copy ACC Variable Name attribute (PR #187724)
Scott Manley via flang-commits
flang-commits at lists.llvm.org
Fri Mar 20 09:36:24 PDT 2026
https://github.com/rscottmanley updated https://github.com/llvm/llvm-project/pull/187724
>From 926263ff4ec9ce359df978e45cb155b073f51227 Mon Sep 17 00:00:00 2001
From: Scott Manley <scmanley at nvidia.com>
Date: Fri, 20 Mar 2026 08:51:19 -0700
Subject: [PATCH 1/3] [FIRToMemRef] copy ACC Variable Name attribute
When converting from fir.alloca to memref.alloca, also copy the acc
variable name attribute if it exists
---
flang/lib/Optimizer/Transforms/FIRToMemRef.cpp | 1 +
flang/test/Transforms/FIRToMemRef/alloca.mlir | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/flang/lib/Optimizer/Transforms/FIRToMemRef.cpp b/flang/lib/Optimizer/Transforms/FIRToMemRef.cpp
index 90b4b01e30f62..ee6f644aea911 100644
--- a/flang/lib/Optimizer/Transforms/FIRToMemRef.cpp
+++ b/flang/lib/Optimizer/Transforms/FIRToMemRef.cpp
@@ -330,6 +330,7 @@ void FIRToMemRef::rewriteAlloca(fir::AllocaOp firAlloca,
copyAttribute(firAlloca, alloca, firAlloca.getBindcNameAttrName());
copyAttribute(firAlloca, alloca, firAlloca.getUniqNameAttrName());
copyAttribute(firAlloca, alloca, cuf::getDataAttrName());
+ copyAttribute(firAlloca, alloca, acc::getVarNameAttrName());
auto convert = fir::ConvertOp::create(rewriter, loc, type, alloca);
diff --git a/flang/test/Transforms/FIRToMemRef/alloca.mlir b/flang/test/Transforms/FIRToMemRef/alloca.mlir
index b2859370903f4..2c76c4a9b3849 100644
--- a/flang/test/Transforms/FIRToMemRef/alloca.mlir
+++ b/flang/test/Transforms/FIRToMemRef/alloca.mlir
@@ -86,11 +86,11 @@ func.func @peep_declare() {
// check that attributes are copied when they exist
// CHECK-LABEL: func.func @no_peep_declare
-// CHECK: memref.alloca() {bindc_name = "x", uniq_name = "y"} : memref<i32>
+// CHECK: memref.alloca() {acc.var_name = #acc.var_name<"z">, bindc_name = "x", uniq_name = "y"} : memref<i32>
// CHECK-NOT: memref.store %c1_i32, %alloca[] : memref<i32>
func.func @no_peep_declare() {
%c1_i32 = arith.constant 1 : i32
- %0 = fir.alloca i32 {bindc_name = "x", uniq_name = "y"}
+ %0 = fir.alloca i32 {acc.var_name = #acc.var_name<"z">, bindc_name = "x", uniq_name = "y"}
%1 = fir.declare %0 {uniq_name = "some_name"} : (!fir.ref<i32>) -> !fir.ref<i32>
fir.store %c1_i32 to %1 : !fir.ref<i32>
return
>From b42d2da7a553962642337b5002047d31799eee67 Mon Sep 17 00:00:00 2001
From: Scott Manley <scmanley at nvidia.com>
Date: Fri, 20 Mar 2026 09:06:07 -0700
Subject: [PATCH 2/3] improved test(s)
---
flang/test/Transforms/FIRToMemRef/alloca.mlir | 32 +++++++++++++++----
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/flang/test/Transforms/FIRToMemRef/alloca.mlir b/flang/test/Transforms/FIRToMemRef/alloca.mlir
index 2c76c4a9b3849..359db260b9573 100644
--- a/flang/test/Transforms/FIRToMemRef/alloca.mlir
+++ b/flang/test/Transforms/FIRToMemRef/alloca.mlir
@@ -71,6 +71,7 @@ func.func @alloca_nonconvertible() {
return
}
+// compiler generated alloca will not perserve declare
// CHECK-LABEL: func.func @peep_declare
// CHECK: [[ALLOCA:%.+]] = memref.alloca() : memref<i32>
// CHECK-NOT: fircg.ext_declare
@@ -83,14 +84,33 @@ func.func @peep_declare() {
return
}
-
// check that attributes are copied when they exist
-// CHECK-LABEL: func.func @no_peep_declare
-// CHECK: memref.alloca() {acc.var_name = #acc.var_name<"z">, bindc_name = "x", uniq_name = "y"} : memref<i32>
-// CHECK-NOT: memref.store %c1_i32, %alloca[] : memref<i32>
-func.func @no_peep_declare() {
+// CHECK-LABEL: func.func @perserve_declare
+// CHECK: [[ALLOCA:%.*]] = memref.alloca() {bindc_name = "x", uniq_name = "y"} : memref<i32>
+// CHECK-NOT: memref.store %c1_i32, [[ALLOCA]][] : memref<i32>
+func.func @perserve_declare() {
+ %c1_i32 = arith.constant 1 : i32
+ %0 = fir.alloca i32 {bindc_name = "x", uniq_name = "y"}
+ %1 = fir.declare %0 {uniq_name = "some_name"} : (!fir.ref<i32>) -> !fir.ref<i32>
+ fir.store %c1_i32 to %1 : !fir.ref<i32>
+ return
+}
+
+// CHECK-LABEL: func.func @copy_cuf_data_attr
+// CHECK: memref.alloca() {cuf.data_attr = #cuf.cuda<device>} : memref<i32>
+func.func @copy_cuf_data_attr() {
+ %c1_i32 = arith.constant 1 : i32
+ %0 = fir.alloca i32 {cuf.data_attr = #cuf.cuda<device>}
+ %1 = fir.declare %0 {uniq_name = "some_name"} : (!fir.ref<i32>) -> !fir.ref<i32>
+ fir.store %c1_i32 to %1 : !fir.ref<i32>
+ return
+}
+
+// CHECK-LABEL: func.func @copy_acc_var_name_attr
+// CHECK: memref.alloca() {acc.var_name = #acc.var_name<"x">} : memref<i32>
+func.func @copy_acc_var_name_attr() {
%c1_i32 = arith.constant 1 : i32
- %0 = fir.alloca i32 {acc.var_name = #acc.var_name<"z">, bindc_name = "x", uniq_name = "y"}
+ %0 = fir.alloca i32 {acc.var_name = #acc.var_name<"x">}
%1 = fir.declare %0 {uniq_name = "some_name"} : (!fir.ref<i32>) -> !fir.ref<i32>
fir.store %c1_i32 to %1 : !fir.ref<i32>
return
>From dbc625e5ea4c288427ad8ab284e5902bb6e0e125 Mon Sep 17 00:00:00 2001
From: Scott Manley <scmanley at nvidia.com>
Date: Fri, 20 Mar 2026 09:36:01 -0700
Subject: [PATCH 3/3] test fixes
---
flang/test/Transforms/FIRToMemRef/alloca.mlir | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/flang/test/Transforms/FIRToMemRef/alloca.mlir b/flang/test/Transforms/FIRToMemRef/alloca.mlir
index 359db260b9573..10f79b7aab41d 100644
--- a/flang/test/Transforms/FIRToMemRef/alloca.mlir
+++ b/flang/test/Transforms/FIRToMemRef/alloca.mlir
@@ -71,10 +71,10 @@ func.func @alloca_nonconvertible() {
return
}
-// compiler generated alloca will not perserve declare
+// compiler generated alloca will not preserve declare
// CHECK-LABEL: func.func @peep_declare
// CHECK: [[ALLOCA:%.+]] = memref.alloca() : memref<i32>
-// CHECK-NOT: fircg.ext_declare
+// CHECK-NOT: fir.declare
// CHECK: memref.store %c1_i32, [[ALLOCA]][] : memref<i32>
func.func @peep_declare() {
%c1_i32 = arith.constant 1 : i32
@@ -85,10 +85,10 @@ func.func @peep_declare() {
}
// check that attributes are copied when they exist
-// CHECK-LABEL: func.func @perserve_declare
+// CHECK-LABEL: func.func @preserve_declare
// CHECK: [[ALLOCA:%.*]] = memref.alloca() {bindc_name = "x", uniq_name = "y"} : memref<i32>
// CHECK-NOT: memref.store %c1_i32, [[ALLOCA]][] : memref<i32>
-func.func @perserve_declare() {
+func.func @preserve_declare() {
%c1_i32 = arith.constant 1 : i32
%0 = fir.alloca i32 {bindc_name = "x", uniq_name = "y"}
%1 = fir.declare %0 {uniq_name = "some_name"} : (!fir.ref<i32>) -> !fir.ref<i32>
More information about the flang-commits
mailing list