Skip to content

Commit ac10f17

Browse files
authored
Merge branch 'main' into implement-countlsfx
2 parents c3c1c13 + cd26c11 commit ac10f17

File tree

15 files changed

+245
-18
lines changed

15 files changed

+245
-18
lines changed

clang/lib/AST/ASTContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3902,7 +3902,7 @@ QualType ASTContext::getArrayParameterType(QualType Ty) const {
39023902
if (Ty->isArrayParameterType())
39033903
return Ty;
39043904
assert(Ty->isConstantArrayType() && "Ty must be an array type.");
3905-
const auto *ATy = cast<ConstantArrayType>(Ty);
3905+
const auto *ATy = cast<ConstantArrayType>(Ty.getDesugaredType(*this));
39063906
llvm::FoldingSetNodeID ID;
39073907
ATy->Profile(ID, *this, ATy->getElementType(), ATy->getZExtSize(),
39083908
ATy->getSizeExpr(), ATy->getSizeModifier(),
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -finclude-default-header -x hlsl -ast-dump %s | FileCheck %s
2+
3+
typedef uint4 uint32_t4;
4+
typedef uint32_t4 uint32_t8[2];
5+
6+
// CHECK-LABEL: FunctionDecl {{.*}} used Accumulate 'uint32_t (uint32_t4[2])'
7+
// CHECK-NEXT: ParmVarDecl {{.*}} used V 'uint32_t4[2]'
8+
uint32_t Accumulate(uint32_t8 V) {
9+
uint32_t4 SumVec = V[0] + V[1];
10+
return SumVec.x + SumVec.y + SumVec.z + SumVec.w;
11+
}
12+
13+
// CHECK-LABEL: FunctionDecl {{.*}} used InOutAccu 'void (inout uint32_t4[2])'
14+
// CHECK-NEXT: ParmVarDecl {{.*}} used V 'uint32_t4[2]'
15+
// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout
16+
void InOutAccu(inout uint32_t8 V) {
17+
uint32_t4 SumVec = V[0] + V[1];
18+
V[0] = SumVec;
19+
}
20+
21+
// CHECK-LABEL: call1
22+
// CHECK: CallExpr {{.*}} 'void'
23+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(inout uint32_t4[2])' <FunctionToPointerDecay>
24+
// CHECK-NEXT: DeclRefExpr {{.*}} 'void (inout uint32_t4[2])' lvalue Function {{.*}} 'InOutAccu' 'void (inout uint32_t4[2])'
25+
// CHECK-NEXT: HLSLOutArgExpr {{.*}} 'uint32_t4[2]' lvalue inout
26+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue
27+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue Var {{.*}} 'B' 'uint32_t8':'uint32_t4[2]'
28+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t4[2]' lvalue
29+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'uint32_t4[2]' <HLSLArrayRValue>
30+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue
31+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue Var {{.*}} 'B' 'uint32_t8':'uint32_t4[2]'
32+
// CHECK-NEXT: BinaryOperator {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue '='
33+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue
34+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue Var {{.*}} 'B' 'uint32_t8':'uint32_t4[2]'
35+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'uint32_t4[2]' <HLSLArrayRValue>
36+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t4[2]' lvalue
37+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'uint32_t4[2]' <HLSLArrayRValue>
38+
// CHECK-NEXT: OpaqueValueExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue
39+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint32_t8':'uint32_t4[2]' lvalue Var {{.*}} 'B' 'uint32_t8':'uint32_t4[2]'
40+
void call1() {
41+
uint32_t4 A = {1,2,3,4};
42+
uint32_t8 B = {A,A};
43+
InOutAccu(B);
44+
}
45+
46+
// CHECK-LABEL: call2
47+
// CHECK: VarDecl {{.*}} D 'uint32_t':'unsigned int' cinit
48+
// CHECK-NEXT: CallExpr {{.*}} 'uint32_t':'unsigned int'
49+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'uint32_t (*)(uint32_t4[2])' <FunctionToPointerDecay>
50+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint32_t (uint32_t4[2])' lvalue Function {{.*}} 'Accumulate' 'uint32_t (uint32_t4[2])'
51+
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'uint4[2]' <HLSLArrayRValue>
52+
// CHECK-NEXT: DeclRefExpr {{.*}} 'uint4[2]' lvalue Var {{.*}} 'C' 'uint4[2]'
53+
void call2() {
54+
uint4 A = {1,2,3,4};
55+
uint4 C[2] = {A,A};
56+
uint32_t D = Accumulate(C);
57+
}

flang/lib/Lower/OpenACC.cpp

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2281,8 +2281,8 @@ static Op createComputeOp(
22812281
mlir::Value selfCond;
22822282
llvm::SmallVector<mlir::Value> waitOperands, attachEntryOperands,
22832283
copyEntryOperands, copyinEntryOperands, copyoutEntryOperands,
2284-
createEntryOperands, dataClauseOperands, numGangs, numWorkers,
2285-
vectorLength, async;
2284+
createEntryOperands, nocreateEntryOperands, presentEntryOperands,
2285+
dataClauseOperands, numGangs, numWorkers, vectorLength, async;
22862286
llvm::SmallVector<mlir::Attribute> numGangsDeviceTypes, numWorkersDeviceTypes,
22872287
vectorLengthDeviceTypes, asyncDeviceTypes, asyncOnlyDeviceTypes,
22882288
waitOperandsDeviceTypes, waitOnlyDeviceTypes;
@@ -2457,19 +2457,25 @@ static Op createComputeOp(
24572457
} else if (const auto *noCreateClause =
24582458
std::get_if<Fortran::parser::AccClause::NoCreate>(
24592459
&clause.u)) {
2460+
auto crtDataStart = dataClauseOperands.size();
24602461
genDataOperandOperations<mlir::acc::NoCreateOp>(
24612462
noCreateClause->v, converter, semanticsContext, stmtCtx,
24622463
dataClauseOperands, mlir::acc::DataClause::acc_no_create,
24632464
/*structured=*/true, /*implicit=*/false, async, asyncDeviceTypes,
24642465
asyncOnlyDeviceTypes);
2466+
nocreateEntryOperands.append(dataClauseOperands.begin() + crtDataStart,
2467+
dataClauseOperands.end());
24652468
} else if (const auto *presentClause =
24662469
std::get_if<Fortran::parser::AccClause::Present>(
24672470
&clause.u)) {
2471+
auto crtDataStart = dataClauseOperands.size();
24682472
genDataOperandOperations<mlir::acc::PresentOp>(
24692473
presentClause->v, converter, semanticsContext, stmtCtx,
24702474
dataClauseOperands, mlir::acc::DataClause::acc_present,
24712475
/*structured=*/true, /*implicit=*/false, async, asyncDeviceTypes,
24722476
asyncOnlyDeviceTypes);
2477+
presentEntryOperands.append(dataClauseOperands.begin() + crtDataStart,
2478+
dataClauseOperands.end());
24732479
} else if (const auto *devicePtrClause =
24742480
std::get_if<Fortran::parser::AccClause::Deviceptr>(
24752481
&clause.u)) {
@@ -2634,6 +2640,10 @@ static Op createComputeOp(
26342640
builder, attachEntryOperands, /*structured=*/true);
26352641
genDataExitOperations<mlir::acc::CreateOp, mlir::acc::DeleteOp>(
26362642
builder, createEntryOperands, /*structured=*/true);
2643+
genDataExitOperations<mlir::acc::NoCreateOp, mlir::acc::DeleteOp>(
2644+
builder, nocreateEntryOperands, /*structured=*/true);
2645+
genDataExitOperations<mlir::acc::PresentOp, mlir::acc::DeleteOp>(
2646+
builder, presentEntryOperands, /*structured=*/true);
26372647

26382648
builder.restoreInsertionPoint(insPt);
26392649
return computeOp;
@@ -2648,7 +2658,8 @@ static void genACCDataOp(Fortran::lower::AbstractConverter &converter,
26482658
mlir::Value ifCond;
26492659
llvm::SmallVector<mlir::Value> attachEntryOperands, createEntryOperands,
26502660
copyEntryOperands, copyinEntryOperands, copyoutEntryOperands,
2651-
dataClauseOperands, waitOperands, async;
2661+
nocreateEntryOperands, presentEntryOperands, dataClauseOperands,
2662+
waitOperands, async;
26522663
llvm::SmallVector<mlir::Attribute> asyncDeviceTypes, asyncOnlyDeviceTypes,
26532664
waitOperandsDeviceTypes, waitOnlyDeviceTypes;
26542665
llvm::SmallVector<int32_t> waitOperandsSegments;
@@ -2745,19 +2756,25 @@ static void genACCDataOp(Fortran::lower::AbstractConverter &converter,
27452756
} else if (const auto *noCreateClause =
27462757
std::get_if<Fortran::parser::AccClause::NoCreate>(
27472758
&clause.u)) {
2759+
auto crtDataStart = dataClauseOperands.size();
27482760
genDataOperandOperations<mlir::acc::NoCreateOp>(
27492761
noCreateClause->v, converter, semanticsContext, stmtCtx,
27502762
dataClauseOperands, mlir::acc::DataClause::acc_no_create,
27512763
/*structured=*/true, /*implicit=*/false, async, asyncDeviceTypes,
27522764
asyncOnlyDeviceTypes);
2765+
nocreateEntryOperands.append(dataClauseOperands.begin() + crtDataStart,
2766+
dataClauseOperands.end());
27532767
} else if (const auto *presentClause =
27542768
std::get_if<Fortran::parser::AccClause::Present>(
27552769
&clause.u)) {
2770+
auto crtDataStart = dataClauseOperands.size();
27562771
genDataOperandOperations<mlir::acc::PresentOp>(
27572772
presentClause->v, converter, semanticsContext, stmtCtx,
27582773
dataClauseOperands, mlir::acc::DataClause::acc_present,
27592774
/*structured=*/true, /*implicit=*/false, async, asyncDeviceTypes,
27602775
asyncOnlyDeviceTypes);
2776+
presentEntryOperands.append(dataClauseOperands.begin() + crtDataStart,
2777+
dataClauseOperands.end());
27612778
} else if (const auto *deviceptrClause =
27622779
std::get_if<Fortran::parser::AccClause::Deviceptr>(
27632780
&clause.u)) {
@@ -2837,6 +2854,10 @@ static void genACCDataOp(Fortran::lower::AbstractConverter &converter,
28372854
builder, attachEntryOperands, /*structured=*/true);
28382855
genDataExitOperations<mlir::acc::CreateOp, mlir::acc::DeleteOp>(
28392856
builder, createEntryOperands, /*structured=*/true);
2857+
genDataExitOperations<mlir::acc::NoCreateOp, mlir::acc::DeleteOp>(
2858+
builder, nocreateEntryOperands, /*structured=*/true);
2859+
genDataExitOperations<mlir::acc::PresentOp, mlir::acc::DeleteOp>(
2860+
builder, presentEntryOperands, /*structured=*/true);
28402861

28412862
builder.restoreInsertionPoint(insPt);
28422863
}
@@ -3814,7 +3835,7 @@ genDeclareInFunction(Fortran::lower::AbstractConverter &converter,
38143835
const Fortran::parser::AccClauseList &accClauseList) {
38153836
llvm::SmallVector<mlir::Value> dataClauseOperands, copyEntryOperands,
38163837
copyinEntryOperands, createEntryOperands, copyoutEntryOperands,
3817-
deviceResidentEntryOperands;
3838+
presentEntryOperands, deviceResidentEntryOperands;
38183839
Fortran::lower::StatementContext stmtCtx;
38193840
fir::FirOpBuilder &builder = converter.getFirOpBuilder();
38203841

@@ -3845,11 +3866,14 @@ genDeclareInFunction(Fortran::lower::AbstractConverter &converter,
38453866
} else if (const auto *presentClause =
38463867
std::get_if<Fortran::parser::AccClause::Present>(
38473868
&clause.u)) {
3869+
auto crtDataStart = dataClauseOperands.size();
38483870
genDeclareDataOperandOperations<mlir::acc::PresentOp,
3849-
mlir::acc::PresentOp>(
3871+
mlir::acc::DeleteOp>(
38503872
presentClause->v, converter, semanticsContext, stmtCtx,
38513873
dataClauseOperands, mlir::acc::DataClause::acc_present,
38523874
/*structured=*/true, /*implicit=*/false);
3875+
presentEntryOperands.append(dataClauseOperands.begin() + crtDataStart,
3876+
dataClauseOperands.end());
38533877
} else if (const auto *copyinClause =
38543878
std::get_if<Fortran::parser::AccClause::Copyin>(&clause.u)) {
38553879
auto crtDataStart = dataClauseOperands.size();
@@ -3928,14 +3952,15 @@ genDeclareInFunction(Fortran::lower::AbstractConverter &converter,
39283952

39293953
openAccCtx.attachCleanup([&builder, loc, createEntryOperands,
39303954
copyEntryOperands, copyinEntryOperands,
3931-
copyoutEntryOperands, deviceResidentEntryOperands,
3932-
declareToken]() {
3955+
copyoutEntryOperands, presentEntryOperands,
3956+
deviceResidentEntryOperands, declareToken]() {
39333957
llvm::SmallVector<mlir::Value> operands;
39343958
operands.append(createEntryOperands);
39353959
operands.append(deviceResidentEntryOperands);
39363960
operands.append(copyEntryOperands);
39373961
operands.append(copyinEntryOperands);
39383962
operands.append(copyoutEntryOperands);
3963+
operands.append(presentEntryOperands);
39393964

39403965
mlir::func::FuncOp funcOp = builder.getFunction();
39413966
auto ops = funcOp.getOps<mlir::acc::DeclareExitOp>();
@@ -3957,6 +3982,8 @@ genDeclareInFunction(Fortran::lower::AbstractConverter &converter,
39573982
builder, copyinEntryOperands, /*structured=*/true);
39583983
genDataExitOperations<mlir::acc::CreateOp, mlir::acc::CopyoutOp>(
39593984
builder, copyoutEntryOperands, /*structured=*/true);
3985+
genDataExitOperations<mlir::acc::PresentOp, mlir::acc::DeleteOp>(
3986+
builder, presentEntryOperands, /*structured=*/true);
39603987
});
39613988
}
39623989

flang/test/Lower/OpenACC/acc-declare-unwrap-defaultbounds.f90

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,10 @@ subroutine acc_declare_present(a)
6565
! CHECK-DAG: %[[DECL:.*]]:2 = hlfir.declare %[[ARG0]](%{{.*}}) dummy_scope %{{[0-9]+}} {acc.declare = #acc.declare<dataClause = acc_present>, uniq_name = "_QMacc_declareFacc_declare_presentEa"} : (!fir.ref<!fir.array<100xi32>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<100xi32>>, !fir.ref<!fir.array<100xi32>>)
6666
! CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%{{.*}} : index) upperbound(%{{.*}} : index) extent(%{{.*}} : index) stride(%{{.*}} : index) startIdx(%[[C1]] : index)
6767
! CHECK: %[[PRESENT:.*]] = acc.present varPtr(%[[DECL]]#0 : !fir.ref<!fir.array<100xi32>>) bounds(%[[BOUND]]) -> !fir.ref<!fir.array<100xi32>> {name = "a"}
68-
! CHECK: acc.declare_enter dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
68+
! CHECK: %[[TOKEN:.*]] = acc.declare_enter dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
6969
! CHECK: %{{.*}}:2 = fir.do_loop %{{.*}} = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%arg{{.*}} = %{{.*}}) -> (index, i32)
70+
! CHECK: acc.declare_exit token(%[[TOKEN]]) dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
71+
! CHECK: acc.delete accPtr(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>) bounds(%[[BOUND]]) {dataClause = #acc<data_clause acc_present>, name = "a"}
7072

7173
subroutine acc_declare_copyin()
7274
integer :: a(100), b(10), i

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ subroutine acc_declare_present(a)
5959
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.array<100xi32>> {fir.bindc_name = "a"})
6060
! CHECK: %[[DECL:.*]]:2 = hlfir.declare %[[ARG0]](%{{.*}}) dummy_scope %{{[0-9]+}} {acc.declare = #acc.declare<dataClause = acc_present>, uniq_name = "_QMacc_declareFacc_declare_presentEa"} : (!fir.ref<!fir.array<100xi32>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<100xi32>>, !fir.ref<!fir.array<100xi32>>)
6161
! CHECK: %[[PRESENT:.*]] = acc.present varPtr(%[[DECL]]#0 : !fir.ref<!fir.array<100xi32>>) -> !fir.ref<!fir.array<100xi32>> {name = "a"}
62-
! CHECK: acc.declare_enter dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
62+
! CHECK: %[[TOKEN:.*]] = acc.declare_enter dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
6363
! CHECK: %{{.*}}:2 = fir.do_loop %{{.*}} = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%arg{{.*}} = %{{.*}}) -> (index, i32)
64+
! CHECK: acc.declare_exit token(%[[TOKEN]]) dataOperands(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>)
65+
! CHECK: acc.delete accPtr(%[[PRESENT]] : !fir.ref<!fir.array<100xi32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
6466

6567
subroutine acc_declare_copyin()
6668
integer :: a(100), b(10), i

flang/test/Lower/OpenACC/acc-kernels-loop.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,8 @@ subroutine acc_kernels_loop
393393
! CHECK-NEXT: }{{$}}
394394
! CHECK: acc.terminator
395395
! CHECK-NEXT: }{{$}}
396+
! CHECK: acc.delete accPtr(%[[NOCREATE_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "a"}
397+
! CHECK: acc.delete accPtr(%[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "b"}
396398

397399
!$acc kernels loop present(a, b)
398400
DO i = 1, n
@@ -407,6 +409,8 @@ subroutine acc_kernels_loop
407409
! CHECK-NEXT: }{{$}}
408410
! CHECK: acc.terminator
409411
! CHECK-NEXT: }{{$}}
412+
! CHECK: acc.delete accPtr(%[[PRESENT_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
413+
! CHECK: acc.delete accPtr(%[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "b"}
410414

411415
!$acc kernels loop deviceptr(a) deviceptr(b)
412416
DO i = 1, n

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ subroutine acc_kernels
253253
! CHECK: acc.kernels dataOperands(%[[NO_CREATE_A]], %[[NO_CREATE_B]], %[[CREATE_C]] : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
254254
! CHECK: acc.terminator
255255
! CHECK-NEXT: }{{$}}
256+
! CHECK: acc.delete accPtr(%[[CREATE_C]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_create_zero>, name = "c"}
257+
! CHECK: acc.delete accPtr(%[[NO_CREATE_A]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "a"}
258+
! CHECK: acc.delete accPtr(%[[NO_CREATE_B]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "b"}
256259

257260
!$acc kernels present(a, b, c)
258261
!$acc end kernels
@@ -263,6 +266,9 @@ subroutine acc_kernels
263266
! CHECK: acc.kernels dataOperands(%[[PRESENT_A]], %[[PRESENT_B]], %[[PRESENT_C]] : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
264267
! CHECK: acc.terminator
265268
! CHECK-NEXT: }{{$}}
269+
! CHECK: acc.delete accPtr(%[[PRESENT_A]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
270+
! CHECK: acc.delete accPtr(%[[PRESENT_B]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "b"}
271+
! CHECK: acc.delete accPtr(%[[PRESENT_C]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "c"}
266272

267273
!$acc kernels deviceptr(a) deviceptr(c)
268274
!$acc end kernels

flang/test/Lower/OpenACC/acc-parallel-loop.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,8 @@ subroutine acc_parallel_loop
393393
! CHECK-NEXT: }{{$}}
394394
! CHECK: acc.yield
395395
! CHECK-NEXT: }{{$}}
396+
! CHECK: acc.delete accPtr(%[[NOCREATE_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "a"}
397+
! CHECK: acc.delete accPtr(%[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "b"}
396398

397399
!$acc parallel loop present(a, b)
398400
DO i = 1, n
@@ -407,6 +409,8 @@ subroutine acc_parallel_loop
407409
! CHECK-NEXT: }{{$}}
408410
! CHECK: acc.yield
409411
! CHECK-NEXT: }{{$}}
412+
! CHECK: acc.delete accPtr(%[[PRESENT_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
413+
! CHECK: acc.delete accPtr(%[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "b"}
410414

411415
!$acc parallel loop deviceptr(a) deviceptr(b)
412416
DO i = 1, n

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ subroutine acc_parallel
291291
! CHECK: acc.yield
292292
! CHECK-NEXT: }{{$}}
293293
! CHECK: acc.delete accPtr(%[[CREATE_C]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_create_zero>, name = "c"}
294-
294+
! CHECK: acc.delete accPtr(%[[NO_CREATE_A]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "a"}
295+
! CHECK: acc.delete accPtr(%[[NO_CREATE_B]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "b"}
295296

296297
!$acc parallel present(a, b, c)
297298
!$acc end parallel
@@ -302,6 +303,9 @@ subroutine acc_parallel
302303
! CHECK: acc.parallel dataOperands(%[[PRESENT_A]], %[[PRESENT_B]], %[[PRESENT_C]] : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
303304
! CHECK: acc.yield
304305
! CHECK-NEXT: }{{$}}
306+
! CHECK: acc.delete accPtr(%[[PRESENT_A]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
307+
! CHECK: acc.delete accPtr(%[[PRESENT_B]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "b"}
308+
! CHECK: acc.delete accPtr(%[[PRESENT_C]] : !fir.ref<!fir.array<10x10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "c"}
305309

306310
!$acc parallel deviceptr(a) deviceptr(c)
307311
!$acc end parallel

flang/test/Lower/OpenACC/acc-serial-loop.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,8 @@ subroutine acc_serial_loop
334334
! CHECK-NEXT: }{{$}}
335335
! CHECK: acc.yield
336336
! CHECK-NEXT: }{{$}}
337+
! CHECK: acc.delete accPtr(%[[NOCREATE_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "a"}
338+
! CHECK: acc.delete accPtr(%[[NOCREATE_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_no_create>, name = "b"}
337339

338340
!$acc serial loop present(a, b)
339341
DO i = 1, n
@@ -348,6 +350,8 @@ subroutine acc_serial_loop
348350
! CHECK-NEXT: }{{$}}
349351
! CHECK: acc.yield
350352
! CHECK-NEXT: }{{$}}
353+
! CHECK: acc.delete accPtr(%[[PRESENT_A]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "a"}
354+
! CHECK: acc.delete accPtr(%[[PRESENT_B]] : !fir.ref<!fir.array<10xf32>>) {dataClause = #acc<data_clause acc_present>, name = "b"}
351355

352356
!$acc serial loop deviceptr(a) deviceptr(b)
353357
DO i = 1, n

0 commit comments

Comments
 (0)