Skip to content

Commit 8f0d8d2

Browse files
authored
Delete duplicated hlfir.declare op of induction variables of do concurrent when inside cuf kernel directive. (#134467)
Delete duplicated creation of hlfir.declare op of do concurrent induction variables when inside cuf kernel directive. Obtain the correct hlfir.declare op generated from bindSymbol, and add it to ivValues.
1 parent da6e245 commit 8f0d8d2

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

flang/lib/Lower/Bridge.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3209,13 +3209,11 @@ class FirConverter : public Fortran::lower::AbstractConverter {
32093209
builder->restoreInsertionPoint(insPt);
32103210
}
32113211

3212-
// Create the hlfir.declare operation using the symbol's name
3213-
auto declareOp = builder->create<hlfir::DeclareOp>(
3214-
loc, ivValue, toStringRef(name.symbol->name()));
3215-
ivValue = declareOp.getResult(0);
3216-
32173212
// Bind the symbol to the declared variable
32183213
bindSymbol(*name.symbol, ivValue);
3214+
Fortran::lower::SymbolBox hsb = localSymbols.lookupSymbol(*name.symbol);
3215+
fir::ExtendedValue extIvValue = symBoxToExtendedValue(hsb);
3216+
ivValue = fir::getBase(extIvValue);
32193217
ivValues.push_back(ivValue);
32203218
ivTypes.push_back(idxTy);
32213219
ivLocs.push_back(loc);

flang/test/Lower/CUDA/cuda-doconc.cuf

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ subroutine doconc1
1515
end
1616

1717
! CHECK: func.func @_QPdoconc1() {
18-
! CHECK: %[[DECL:.*]]:2 = hlfir.declare %{{.*}}#0 {uniq_name = "_QFdoconc1Ei"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
19-
! CHECK: cuf.kernel<<<*, *>>>
18+
! CHECK: %[[DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFdoconc1Ei"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
19+
! CHECK: cuf.kernel<<<*, *>>> (%arg0 : index)
20+
! CHECK: fir.store %arg0 to %[[DECL]]#0 : !fir.ref<index>
2021
! CHECK: %{{.*}} = fir.load %[[DECL]]#0 : !fir.ref<index>
2122

2223
subroutine doconc2
@@ -32,8 +33,10 @@ subroutine doconc2
3233
end
3334

3435
! CHECK: func.func @_QPdoconc2() {
35-
! CHECK: %[[DECLI:.*]]:2 = hlfir.declare %{{.*}}#0 {uniq_name = "_QFdoconc2Ei"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
36-
! CHECK: %[[DECLJ:.*]]:2 = hlfir.declare %{{.*}}#0 {uniq_name = "_QFdoconc2Ej"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
36+
! CHECK: %[[DECLI:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFdoconc2Ei"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
37+
! CHECK: %[[DECLJ:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFdoconc2Ej"} : (!fir.ref<index>) -> (!fir.ref<index>, !fir.ref<index>)
3738
! CHECK: cuf.kernel<<<*, *>>> (%arg0 : index, %arg1 : index) = (%{{.*}}, %{{.*}} : index, index) to (%{{.*}}, %{{.*}} : index, index) step (%{{.*}}, %{{.*}} : index, index) {
39+
! CHECK: fir.store %arg0 to %[[DECLI]]#0 : !fir.ref<index>
40+
! CHECK: fir.store %arg1 to %[[DECLJ]]#0 : !fir.ref<index>
3841
! CHECK: %{{.*}} = fir.load %[[DECLI]]#0 : !fir.ref<index>
3942
! CHECK: %{{.*}} = fir.load %[[DECLJ]]#0 : !fir.ref<index>

0 commit comments

Comments
 (0)