Skip to content

Commit 2615de5

Browse files
committed
Revert "[flang][openacc] Support allocatable and pointer array in private recipe (#68422)"
This reverts commit e85cdb9. This fails some buildbots
1 parent e85cdb9 commit 2615de5

File tree

3 files changed

+16
-73
lines changed

3 files changed

+16
-73
lines changed

flang/lib/Lower/OpenACC.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -356,19 +356,6 @@ fir::ShapeOp genShapeOp(mlir::OpBuilder &builder, fir::SequenceType seqTy,
356356
return builder.create<fir::ShapeOp>(loc, extents);
357357
}
358358

359-
/// Return the nested sequence type if any.
360-
static mlir::Type extractSequenceType(mlir::Type ty) {
361-
if (mlir::isa<fir::SequenceType>(ty))
362-
return ty;
363-
if (auto boxTy = mlir::dyn_cast<fir::BaseBoxType>(ty))
364-
return extractSequenceType(boxTy.getEleTy());
365-
if (auto heapTy = mlir::dyn_cast<fir::HeapType>(ty))
366-
return extractSequenceType(heapTy.getEleTy());
367-
if (auto ptrTy = mlir::dyn_cast<fir::PointerType>(ty))
368-
return extractSequenceType(ptrTy.getEleTy());
369-
return mlir::Type{};
370-
}
371-
372359
template <typename RecipeOp>
373360
static void genPrivateLikeInitRegion(mlir::OpBuilder &builder, RecipeOp recipe,
374361
mlir::Type ty, mlir::Location loc) {
@@ -394,8 +381,7 @@ static void genPrivateLikeInitRegion(mlir::OpBuilder &builder, RecipeOp recipe,
394381
}
395382
}
396383
} else if (auto boxTy = mlir::dyn_cast_or_null<fir::BaseBoxType>(ty)) {
397-
mlir::Type innerTy = extractSequenceType(boxTy);
398-
if (!innerTy)
384+
if (!mlir::isa<fir::SequenceType>(boxTy.getEleTy()))
399385
TODO(loc, "Unsupported boxed type in OpenACC privatization");
400386
fir::FirOpBuilder firBuilder{builder, recipe.getOperation()};
401387
hlfir::Entity source = hlfir::Entity{retVal};
@@ -765,6 +751,19 @@ static mlir::Value getReductionInitValue(fir::FirOpBuilder &builder,
765751
llvm::report_fatal_error("Unsupported OpenACC reduction type");
766752
}
767753

754+
/// Return the nested sequence type if any.
755+
static mlir::Type extractSequenceType(mlir::Type ty) {
756+
if (mlir::isa<fir::SequenceType>(ty))
757+
return ty;
758+
if (auto boxTy = mlir::dyn_cast<fir::BaseBoxType>(ty))
759+
return extractSequenceType(boxTy.getEleTy());
760+
if (auto heapTy = mlir::dyn_cast<fir::HeapType>(ty))
761+
return extractSequenceType(heapTy.getEleTy());
762+
if (auto ptrTy = mlir::dyn_cast<fir::PointerType>(ty))
763+
return extractSequenceType(ptrTy.getEleTy());
764+
return mlir::Type{};
765+
}
766+
768767
static mlir::Value genReductionInitRegion(fir::FirOpBuilder &builder,
769768
mlir::Location loc, mlir::Type ty,
770769
mlir::acc::ReductionOperator op) {

flang/test/Lower/OpenACC/acc-private.f90

Lines changed: 1 addition & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,6 @@
33
! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s --check-prefixes=CHECK,FIR
44
! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK,HLFIR
55

6-
! CHECK-LABEL: acc.private.recipe @privatization_box_ptr_Uxi32 : !fir.box<!fir.ptr<!fir.array<?xi32>>> init {
7-
! CHECK: ^bb0(%[[ARG0:.*]]: !fir.box<!fir.ptr<!fir.array<?xi32>>>):
8-
! HLFIR: %[[C0:.*]] = arith.constant 0 : index
9-
! HLFIR: %[[BOX_DIMS:.*]]:3 = fir.box_dims %arg0, %c0 : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> (index, index, index)
10-
! HLFIR: %[[SHAPE:.*]] = fir.shape %[[BOX_DIMS]]#1 : (index) -> !fir.shape<1>
11-
! HLFIR: %[[TEMP:.*]] = fir.allocmem !fir.array<?xi32>, %0#1 {bindc_name = ".tmp", uniq_name = ""}
12-
! HLFIR: %[[DECLARE:.*]]:2 = hlfir.declare %[[TEMP]](%[[SHAPE]]) {uniq_name = ".tmp"} : (!fir.heap<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.heap<!fir.array<?xi32>>)
13-
! HLFIR: acc.yield %[[DECLARE]]#0 : !fir.box<!fir.array<?xi32>>
14-
! CHECK: }
15-
16-
! CHECK-LABEL: acc.private.recipe @privatization_box_heap_Uxi32 : !fir.box<!fir.heap<!fir.array<?xi32>>> init {
17-
! CHECK: ^bb0(%[[ARG0:.*]]: !fir.box<!fir.heap<!fir.array<?xi32>>>):
18-
! HLFIR: %[[C0:.*]] = arith.constant 0 : index
19-
! HLFIR: %[[BOX_DIMS:.*]]:3 = fir.box_dims %[[ARG0]], %[[C0]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>, index) -> (index, index, index)
20-
! HLFIR: %[[SHAPE:.*]] = fir.shape %[[BOX_DIMS]]#1 : (index) -> !fir.shape<1>
21-
! HLFIR: %[[TEMP:.*]] = fir.allocmem !fir.array<?xi32>, %[[BOX_DIMS]]#1 {bindc_name = ".tmp", uniq_name = ""}
22-
! HLFIR: %[[DECLARE:.*]]:2 = hlfir.declare %[[TEMP]](%[[SHAPE]]) {uniq_name = ".tmp"} : (!fir.heap<!fir.array<?xi32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xi32>>, !fir.heap<!fir.array<?xi32>>)
23-
! HLFIR: acc.yield %[[DECLARE]]#0 : !fir.box<!fir.array<?xi32>>
24-
! CHECK: }
25-
266
! CHECK-LABEL: acc.private.recipe @privatization_box_Uxi32 : !fir.box<!fir.array<?xi32>> init {
277
! CHECK: ^bb0(%[[ARG0:.*]]: !fir.box<!fir.array<?xi32>>):
288
! HLFIR: %[[C0:.*]] = arith.constant 0 : index
@@ -211,43 +191,7 @@ subroutine acc_private_assumed_shape(a, n)
211191

212192
! CHECK-LABEL: func.func @_QPacc_private_assumed_shape(
213193
! CHECK-SAME: %[[ARG0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}
214-
! HLFIR: %[[DECL_A:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFacc_private_assumed_shapeEa"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
194+
! HLFIR: %[[DECL_A:.*]]:2 = hlfir.declare %arg0 {uniq_name = "_QFacc_private_assumed_shapeEa"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
215195
! HLFIR: %[[ADDR:.*]] = fir.box_addr %[[DECL_A]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.ref<!fir.array<?xi32>>
216196
! HLFIR: %[[PRIVATE:.*]] = acc.private varPtr(%[[ADDR]] : !fir.ref<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<?xi32>> {name = "a"}
217197
! HLFIR: acc.parallel private(@privatization_box_Uxi32 -> %[[PRIVATE]] : !fir.ref<!fir.array<?xi32>>) {
218-
219-
subroutine acc_private_allocatable_array(a, n)
220-
integer, allocatable :: a(:)
221-
integer :: i, n
222-
223-
!$acc parallel loop private(a)
224-
do i = 1, n
225-
a(i) = i
226-
end do
227-
end subroutine
228-
229-
! CHECK-LABEL: func.func @_QPacc_private_allocatable_array(
230-
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>> {fir.bindc_name = "a"}
231-
! HLFIR: %[[DECLA_A:.*]]:2 = hlfir.declare %[[ARG0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFacc_private_allocatable_arrayEa"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>)
232-
! HLFIR: %[[BOX:.*]] = fir.load %[[DECLA_A]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
233-
! HLFIR: %[[BOX_ADDR:.*]] = fir.box_addr %[[BOX]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
234-
! HLFIR: %[[PRIVATE:.*]] = acc.private varPtr(%[[BOX_ADDR]] : !fir.heap<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.heap<!fir.array<?xi32>> {name = "a"}
235-
! HLFIR: acc.parallel private(@privatization_box_heap_Uxi32 -> %[[PRIVATE]] : !fir.heap<!fir.array<?xi32>>) {
236-
237-
subroutine acc_private_pointer_array(a, n)
238-
integer, pointer :: a(:)
239-
integer :: i, n
240-
241-
!$acc parallel loop private(a)
242-
do i = 1, n
243-
a(i) = i
244-
end do
245-
end subroutine
246-
247-
! CHECK-LABEL: func.func @_QPacc_private_pointer_array(
248-
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>> {fir.bindc_name = "a"}, %arg1: !fir.ref<i32> {fir.bindc_name = "n"}) {
249-
! HLFIR: %[[DECL_A:.*]]:2 = hlfir.declare %arg0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFacc_private_pointer_arrayEa"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)
250-
! HLFIR: %[[BOX:.*]] = fir.load %[[DECLA_A]]#1 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>
251-
! HLFIR: %[[BOX_ADDR:.*]] = fir.box_addr %[[BOX]] : (!fir.box<!fir.ptr<!fir.array<?xi32>>>) -> !fir.ptr<!fir.array<?xi32>>
252-
! HLFIR: %[[PRIVATE:.*]] = acc.private varPtr(%[[BOX_ADDR]] : !fir.ptr<!fir.array<?xi32>>) bounds(%{{.*}}) -> !fir.ptr<!fir.array<?xi32>> {name = "a"}
253-
! HLFIR: acc.parallel private(@privatization_box_ptr_Uxi32 -> %[[PRIVATE]] : !fir.ptr<!fir.array<?xi32>>)

mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ static LogicalResult verifyInitLikeSingleArgRegion(
435435
LogicalResult acc::PrivateRecipeOp::verifyRegions() {
436436
if (failed(verifyInitLikeSingleArgRegion(*this, getInitRegion(),
437437
"privatization", "init", getType(),
438-
/*verifyYield=*/false)))
438+
/*verifyYield=*/true)))
439439
return failure();
440440
if (failed(verifyInitLikeSingleArgRegion(
441441
*this, getDestroyRegion(), "privatization", "destroy", getType(),

0 commit comments

Comments
 (0)