[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