[flang-commits] [flang] [flang][acc] Add tests for implicit `acc declare` of type descriptors (PR #203100)
Razvan Lupusoru via flang-commits
flang-commits at lists.llvm.org
Wed Jun 10 14:51:41 PDT 2026
https://github.com/razvanlupusoru updated https://github.com/llvm/llvm-project/pull/203100
>From 503b1fa081cf56ed5b5974cdc76f8bd4e0cb1ac7 Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Wed, 10 Jun 2026 13:34:06 -0700
Subject: [PATCH 1/2] [flang][acc] Add tests for implicit `acc declare` of type
descriptors
Adds 4 tests to cover different cases which requires implicit
`acc declare` for type descriptors.
---
...mplicit-declare-type-descriptor-alloca.F90 | 27 +++++++++++++++++
...implicit-declare-type-descriptor-embox.F90 | 26 +++++++++++++++++
...implicit-declare-type-descriptor-rebox.F90 | 21 ++++++++++++++
...icit-declare-type-descriptor-type_desc.F90 | 29 +++++++++++++++++++
4 files changed, 103 insertions(+)
create mode 100644 flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
create mode 100644 flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
create mode 100644 flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
create mode 100644 flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
new file mode 100644
index 0000000000000..52e6f6ff3bd26
--- /dev/null
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
@@ -0,0 +1,27 @@
+!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+! Test block construct with local struct to exercise fir.alloca with type descriptors
+
+module mm
+ type struct
+ real :: member
+ end type
+end module
+
+program main
+ use mm
+
+ ! Test block with local struct to test local creation via `fir.alloca`
+ !$acc kernels
+ block
+ type(struct) :: local_struct
+ local_struct%member = 3.0
+ end block
+ !$acc end kernels
+
+end program
+
+! CHECK-DAG: fir.alloca !fir.type<_QMmmTstruct{member:f32}>
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}member {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}c{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}dt{{.+}}struct {acc.declare
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
new file mode 100644
index 0000000000000..1c42b8139778e
--- /dev/null
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
@@ -0,0 +1,26 @@
+!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+! Test pointer association to exercise fir.embox with type descriptors
+
+module mm
+ type struct
+ real :: member
+ end type
+end module
+
+program main
+ use mm
+ type(struct), target :: static_struct
+ type(struct), pointer :: struct_pointer
+
+ ! Test pointer association (to test `fir.embox`)
+ !$acc serial
+ struct_pointer => static_struct
+ !$acc end serial
+
+end program
+
+! CHECK-DAG: fir.embox
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}member {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}c{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}dt{{.+}}struct {acc.declare
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
new file mode 100644
index 0000000000000..4e5163651bbb5
--- /dev/null
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
@@ -0,0 +1,21 @@
+!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+! Test assumed-shape arguments to exercise fir.rebox with type descriptors
+
+module mm
+ type struct
+ real :: member
+ end type
+contains
+ subroutine acc_rout(struct_pointer_arr)
+ !$acc routine
+ ! Tests assumed-shape with dimensions changing (aka `fir.rebox`)
+ type(struct), dimension(0:) :: struct_pointer_arr
+ struct_pointer_arr(0)%member = 1.0
+ end subroutine
+end module
+
+! CHECK-DAG: fir.rebox
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}member {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}c{{.+}}struct {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}dt{{.+}}struct {acc.declare
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
new file mode 100644
index 0000000000000..bae25abb6002d
--- /dev/null
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
@@ -0,0 +1,29 @@
+!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+! Test nullify to exercise fir.type_desc with type descriptors
+
+module mm
+ type p1
+ real :: field
+ end type
+
+ type struct
+ class(p1), pointer :: member
+ end type
+end module
+
+program main
+ use mm
+ class(struct), pointer :: struct_pointer
+
+ ! Test extracting type descriptor to pass to runtime `fir.type_desc`
+ !$acc serial
+ nullify(struct_pointer%member)
+ !$acc end serial
+
+end program
+
+! CHECK-DAG: fir.type_desc
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}field {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}n{{.+}}p1
+! CHECK-DAG: @_QMmmE{{.+}}c{{.+}}p1 {acc.declare
+! CHECK-DAG: @_QMmmE{{.+}}dt{{.+}}p1 {acc.declare
>From bf26971ed5d3f9464e8ef8dc7b332d7253d252bb Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Wed, 10 Jun 2026 14:51:29 -0700
Subject: [PATCH 2/2] Remove % from command line
---
.../OpenACC/acc-implicit-declare-type-descriptor-alloca.F90 | 2 +-
.../OpenACC/acc-implicit-declare-type-descriptor-embox.F90 | 2 +-
.../OpenACC/acc-implicit-declare-type-descriptor-rebox.F90 | 2 +-
.../OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90 | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
index 52e6f6ff3bd26..583615cb3953d 100644
--- a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-alloca.F90
@@ -1,4 +1,4 @@
-!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+!RUN: bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
! Test block construct with local struct to exercise fir.alloca with type descriptors
module mm
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
index 1c42b8139778e..d3691f685fb29 100644
--- a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-embox.F90
@@ -1,4 +1,4 @@
-!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+!RUN: bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
! Test pointer association to exercise fir.embox with type descriptors
module mm
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
index 4e5163651bbb5..b6fb580030e44 100644
--- a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-rebox.F90
@@ -1,4 +1,4 @@
-!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+!RUN: bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
! Test assumed-shape arguments to exercise fir.rebox with type descriptors
module mm
diff --git a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90 b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
index bae25abb6002d..6a1b369df419c 100644
--- a/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
+++ b/flang/test/Transforms/OpenACC/acc-implicit-declare-type-descriptor-type_desc.F90
@@ -1,4 +1,4 @@
-!RUN: %bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
+!RUN: bbc -emit-fir -fopenacc %s -o - | fir-opt --pass-pipeline="builtin.module(acc-initialize-fir-analyses,acc-implicit-declare)" | FileCheck %s
! Test nullify to exercise fir.type_desc with type descriptors
module mm
More information about the flang-commits
mailing list