diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -146,12 +146,10 @@ mlir::Value baseLb = fir::factory::readLowerBound(builder, loc, dataExv, dim, one); mlir::Value ext = fir::factory::readExtent(builder, loc, dataExv, dim); - mlir::Value lb = - baseLb == one ? builder.createIntegerConstant(loc, idxTy, 0) : baseLb; + mlir::Value lb = builder.createIntegerConstant(loc, idxTy, 0); - // ub = baseLb + extent - 1 - mlir::Value lbExt = builder.create(loc, ext, baseLb); - mlir::Value ub = builder.create(loc, lbExt, one); + // ub = extent - 1 + mlir::Value ub = builder.create(loc, ext, one); mlir::Value bound = builder.create( loc, boundTy, lb, ub, mlir::Value(), one, false, baseLb); bounds.push_back(bound); diff --git a/flang/test/Lower/OpenACC/acc-data-operands.f90 b/flang/test/Lower/OpenACC/acc-data-operands.f90 --- a/flang/test/Lower/OpenACC/acc-data-operands.f90 +++ b/flang/test/Lower/OpenACC/acc-data-operands.f90 @@ -73,8 +73,7 @@ ! CHECK: %[[EXT:.*]] = arith.constant 100 : index ! CHECK: %[[ONE:.*]] = arith.constant 1 : index ! CHECK: %[[LB:.*]] = arith.constant 0 : index -! CHECK: %[[LBEXT:.*]] = arith.addi %[[EXT]], %[[ONE]] : index -! CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +! CHECK: %[[UB:.*]] = arith.subi %[[EXT]], %[[ONE]] : index ! CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) ! CHECK: %[[COPY_COPYIN:.*]] = acc.copyin varPtr(%[[COORD_DATA]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {dataClause = 3 : i64, name = "w%data"} ! CHECK: acc.data dataOperands(%[[COPY_COPYIN]] : !fir.ref>) { @@ -102,8 +101,7 @@ ! CHECK: %[[EXT:.*]] = arith.constant 100 : index ! CHECK: %[[ONE:.*]] = arith.constant 1 : index ! CHECK: %[[LB:.*]] = arith.constant 0 : index -! CHECK: %[[LBEXT:.*]] = arith.addi %[[EXT]], %[[ONE]] : index -! CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +! CHECK: %[[UB:.*]] = arith.subi %[[EXT]], %[[ONE]] : index ! CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) ! CHECK: %[[COPY_COPYIN:.*]] = acc.copyin varPtr(%[[COORD_W1_DATA]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {dataClause = 3 : i64, name = "w(1_8)%data"} ! CHECK: acc.data dataOperands(%[[COPY_COPYIN]] : !fir.ref>) { diff --git a/flang/test/Lower/OpenACC/acc-enter-data.f90 b/flang/test/Lower/OpenACC/acc-enter-data.f90 --- a/flang/test/Lower/OpenACC/acc-enter-data.f90 +++ b/flang/test/Lower/OpenACC/acc-enter-data.f90 @@ -18,12 +18,10 @@ !$acc enter data create(a) !CHECK: %[[ONE:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[ONE]] : index !CHECK: %[[BOUND0:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[EXTENT_C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[EXTENT_C10]], %[[ONE]] : index !CHECK: %[[BOUND1:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[A]] : !fir.ref>) bounds(%[[BOUND0]], %[[BOUND1]]) -> !fir.ref> {name = "a", structured = false} !CHECK: acc.enter_data dataOperands(%[[CREATE_A]] : !fir.ref>){{$}} @@ -31,12 +29,10 @@ !$acc enter data create(a) if(.true.) !CHECK: %[[ONE:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[ONE]] : index !CHECK: %[[BOUND0:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[EXTENT_C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[EXTENT_C10]], %[[ONE]] : index !CHECK: %[[BOUND1:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[A]] : !fir.ref>) bounds(%[[BOUND0]], %[[BOUND1]]) -> !fir.ref> {name = "a", structured = false} !CHECK: [[IF1:%.*]] = arith.constant true @@ -45,12 +41,10 @@ !$acc enter data create(a) if(ifCondition) !CHECK: %[[ONE:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[ONE]] : index !CHECK: %[[BOUND0:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[EXTENT_C10]], %[[ONE]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[EXTENT_C10]], %[[ONE]] : index !CHECK: %[[BOUND1:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[ONE]] : index) !CHECK: %[[CREATE_A:.*]] = acc.create varPtr(%[[A]] : !fir.ref>) bounds(%[[BOUND0]], %[[BOUND1]]) -> !fir.ref> {name = "a", structured = false} !CHECK: [[IFCOND:%.*]] = fir.load %{{.*}} : !fir.ref> @@ -266,6 +260,7 @@ ! Test lowering of array section for non default lower bound. subroutine acc_enter_data_non_default_lb() integer :: a(0:9) + integer :: b(11:20) !CHECK-LABEL: func.func @_QPacc_enter_data_non_default_lb() { !CHECK: %[[BASELB:.*]] = arith.constant 0 : index @@ -306,6 +301,14 @@ !CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[ONE]] : index !CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%[[BASELB]] : index) !CHECK: %[[CREATE:.*]] = acc.create varPtr(%[[A]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {name = "a(4:)", structured = false} +!CHECK: acc.enter_data dataOperands(%[[CREATE]] : !fir.ref>) + + !$acc enter data create(b) +!CHECK: %[[ONE:.*]] = arith.constant 1 : index +!CHECK: %[[LB:.*]] = arith.constant 0 : index +!CHECK: %[[UB:.*]] = arith.subi %c10{{.*}}, %[[ONE]] : index +!CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[ONE]] : index) startIdx(%c11{{.*}} : index) +!CHECK: %[[CREATE:.*]] = acc.create varPtr(%1 : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {name = "b", structured = false} !CHECK: acc.enter_data dataOperands(%[[CREATE]] : !fir.ref>) end subroutine @@ -598,8 +601,7 @@ !CHECK: %[[C10:.*]] = arith.constant 10 : index !CHECK: %[[C1:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[C1]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[C1]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[C1]] : index !CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[C1]] : index) startIdx(%[[C1]] : index) !CHECK: %[[CREATE:.*]] = acc.create varPtr(%[[ARRAY_COORD]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {name = "a%array", structured = false} !CHECK: acc.enter_data dataOperands(%[[CREATE]] : !fir.ref>) @@ -655,8 +657,7 @@ !CHECK: %[[C10:.*]] = arith.constant 10 : index !CHECK: %[[C1:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[C1]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[C1]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[C1]] : index !CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[C1]] : index) startIdx(%[[C1]] : index) !CHECK: %[[CREATE:.*]] = acc.create varPtr(%[[ARRAY_COORD]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {name = "b%d%array", structured = false} @@ -687,8 +688,7 @@ !CHECK: %[[C10:.*]] = arith.constant 10 : index !CHECK: %[[C1:.*]] = arith.constant 1 : index !CHECK: %[[LB:.*]] = arith.constant 0 : index -!CHECK: %[[LBEXT:.*]] = arith.addi %[[C10]], %[[C1]] : index -!CHECK: %[[UB:.*]] = arith.subi %[[LBEXT]], %[[C1]] : index +!CHECK: %[[UB:.*]] = arith.subi %[[C10]], %[[C1]] : index !CHECK: %[[BOUND:.*]] = acc.bounds lowerbound(%[[LB]] : index) upperbound(%[[UB]] : index) stride(%[[C1]] : index) startIdx(%[[C1]] : index) !CHECK: %[[CREATE:.*]] = acc.create varPtr(%[[ARRAY_COORD]] : !fir.ref>) bounds(%[[BOUND]]) -> !fir.ref> {name = "d%d(1_8)%array", structured = false} !CHECK: acc.enter_data dataOperands(%[[CREATE]] : !fir.ref>)