llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-flang-openmp @llvm/pr-subscribers-mlir-openmp Author: Sergio Afonso (skatrak) <details> <summary>Changes</summary> The changes introduced by this patch are intended to avoid triggering multiple by name lookups to the "omp.declare_target" attribute every time any data from the `DeclareTargetInterface` is queried, remove the need for keeping multiple default values for the same data, clean up the assembly format and generally improve the usage of the interface. List of changes: - `DeclareTargetInterface` only provides `setDeclareTarget` and `getDeclareTarget` methods to handle the "omp.declare_target" attribute, maintaining a single canonical way of accessing it. - `DeclareTargetAttr` provides direct access to the capture clause and device type enums, rather than wrapping them into an `Attribute`. These are now mandatory as well. Both changes together make accessing them more straightforward and simplify the attribute representation. --- Patch is 195.38 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/217295.diff 63 Files Affected: - (modified) clang/test/CIR/CodeGenOpenMP/emit-device-functions.cpp (+1-1) - (modified) clang/test/CIR/Transforms/omp-mark-declare-target.cir (+4-4) - (modified) flang/docs/OpenMP-declare-target.md (+6-3) - (modified) flang/lib/Lower/OpenMP/OpenMP.cpp (+8-5) - (modified) flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp (+5-3) - (modified) flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp (+4-3) - (modified) flang/test/Fir/omp-declare-target-data.fir (+22-22) - (modified) flang/test/Integration/OpenMP/declare-target-funcs.f90 (+2-2) - (modified) flang/test/Integration/OpenMP/function-filtering-2.f90 (+4-4) - (modified) flang/test/Lower/OpenMP/common-block-map.f90 (+1-1) - (modified) flang/test/Lower/OpenMP/declare-target-data.f90 (+20-20) - (modified) flang/test/Lower/OpenMP/declare-target-deferred-marking-reductions.f90 (+2-2) - (modified) flang/test/Lower/OpenMP/declare-target-deferred-marking.f90 (+4-4) - (modified) flang/test/Lower/OpenMP/declare-target-func-and-subr.f90 (+23-23) - (modified) flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90 (+19-19) - (modified) flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90 (+21-21) - (modified) flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90 (+7-7) - (modified) flang/test/Lower/OpenMP/declare-target-multiple-entry.f90 (+3-3) - (modified) flang/test/Lower/OpenMP/declare-target-named-main-interface.f90 (+3-3) - (modified) flang/test/Lower/OpenMP/declare-target-unnamed-main.f90 (+1-1) - (modified) flang/test/Lower/OpenMP/omp-declare-target-program-var.f90 (+1-1) - (modified) flang/test/Transforms/omp-automap-to-target-data.fir (+3-3) - (modified) flang/test/Transforms/omp-function-filtering-todo.mlir (+1-1) - (modified) mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td (+2-2) - (modified) mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td (+15-60) - (modified) mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp (+1-1) - (modified) mlir/lib/Dialect/OpenMP/Transforms/FunctionFiltering.cpp (+5-3) - (modified) mlir/lib/Dialect/OpenMP/Transforms/HostOpFiltering.cpp (+4-2) - (modified) mlir/lib/Dialect/OpenMP/Transforms/MarkDeclareTarget.cpp (+10-6) - (modified) mlir/lib/Dialect/OpenMP/Utils/Utils.cpp (+4-3) - (modified) mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp (+25-19) - (modified) mlir/test/Dialect/OpenMP/attr.mlir (+30-48) - (modified) mlir/test/Dialect/OpenMP/function-filter.mlir (+11-11) - (modified) mlir/test/Dialect/OpenMP/host-op-filtering.mlir (+7-7) - (modified) mlir/test/Dialect/OpenMP/invalid-interface.mlir (+4-4) - (modified) mlir/test/Dialect/OpenMP/mark-declare-target.mlir (+44-44) - (modified) mlir/test/Dialect/OpenMP/stack-to-shared.mlir (+2-2) - (modified) mlir/test/Target/LLVMIR/omptarget-atomic-capture-control-options.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-atomic-update-control-options.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-constant-alloca-raise.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-debug-map-link-loc.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-all-device-types-device.mlir (+12-12) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-func-visibility.mlir (+4-4) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device-2.mlir (+3-3) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-host.mlir (+17-17) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-module-rewrite-device.mlir (+12-12) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-to-device.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-to-host.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-device-shared-mem.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-multi-reduction.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-parallel-llvm.mlir (+2-2) - (modified) mlir/test/Target/LLVMIR/omptarget-parallel-wsloop.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-private-llvm.mlir (+2-2) - (modified) mlir/test/Target/LLVMIR/omptarget-teams-distribute-reduction-array-descriptor.mlir (+2-2) - (modified) mlir/test/Target/LLVMIR/omptarget-teams-distribute-reduction.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-teams-llvm.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-teams-reduction.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-wsloop-collapsed.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/omptarget-wsloop.mlir (+2-2) - (modified) mlir/test/Target/LLVMIR/openmp-data-target-device.mlir (+1-1) - (modified) mlir/test/Target/LLVMIR/openmp-llvm.mlir (+9-9) - (modified) mlir/test/Target/LLVMIR/openmp-target-private-shared-mem.mlir (+2-2) ``````````diff diff --git a/clang/test/CIR/CodeGenOpenMP/emit-device-functions.cpp b/clang/test/CIR/CodeGenOpenMP/emit-device-functions.cpp index 53a8e2b7aab71..014529d2104d3 100644 --- a/clang/test/CIR/CodeGenOpenMP/emit-device-functions.cpp +++ b/clang/test/CIR/CodeGenOpenMP/emit-device-functions.cpp @@ -33,7 +33,7 @@ void caller() { #pragma omp end declare target -// CIR-DAG: cir.func {{.*}} @_Z12regular_funcv() {{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to) +// CIR-DAG: cir.func {{.*}} @_Z12regular_funcv() {{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to // CIR-DAG: cir.func {{.*}} @_Z6callerv() {{.*}}omp.declare_target // CIR-DAG: cir.func {{.*}} @_ZN1SC2Ev({{.*}}) // CIR-DAG: cir.func {{.*}} @_ZN1SC1Ev({{.*}}) diff --git a/clang/test/CIR/Transforms/omp-mark-declare-target.cir b/clang/test/CIR/Transforms/omp-mark-declare-target.cir index a32fccc20f970..daa082683d03a 100644 --- a/clang/test/CIR/Transforms/omp-mark-declare-target.cir +++ b/clang/test/CIR/Transforms/omp-mark-declare-target.cir @@ -10,22 +10,22 @@ module { // A helper function with no declare_target attribute initially. // After the pass, it should be marked because @caller calls it. // CHECK-LABEL: cir.func private @helper - // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to) + // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = host, capture_clause = to cir.func private @helper() { cir.return } // Explicitly marked as declare_target; calls @helper. // CHECK-LABEL: cir.func @caller - // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)> - cir.func @caller() attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)>} { + // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = host, capture_clause = to> + cir.func @caller() attributes {omp.declare_target = #omp.declaretarget<device_type = host, capture_clause = to>} { cir.call @helper() : () -> () cir.return } // Called from within an omp.target region; should be marked as nohost. // CHECK-LABEL: cir.func private @device_helper - // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to) + // CHECK-SAME: omp.declare_target = #omp.declaretarget<device_type = nohost, capture_clause = to cir.func private @device_helper() { cir.return } diff --git a/flang/docs/OpenMP-declare-target.md b/flang/docs/OpenMP-declare-target.md index e43a623cc9fb9..1e98068a2961b 100644 --- a/flang/docs/OpenMP-declare-target.md +++ b/flang/docs/OpenMP-declare-target.md @@ -79,7 +79,7 @@ would find on the `declare target` directive i.e. device type (`nohost`, ``` fir.global internal @_QFEi {omp.declare_target = -#omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32 { +#omp.declaretarget<device_type = any, capture_clause = to>} : f32 { %0 = fir.undefined f32 fir.has_value %0 : f32 } @@ -93,8 +93,11 @@ operations to access the appropriate interface functions, e.g.: ```C++ auto declareTargetGlobal = -llvm::dyn_cast<mlir::omp::DeclareTargetInterface>(Op.getOperation()); -declareTargetGlobal.isDeclareTarget(); + llvm::cast<mlir::omp::DeclareTargetInterface>(op.getOperation()); +auto declareTargetAttr = declareTargetGlobal.getDeclareTarget(); +if (declareTargetAttr) { + auto deviceType = declareTargetAttr.getDeviceType(); +} ``` ## Declare Target Fortran OpenMP Lowering diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index 40317d4b53624..9eb86e91ea612 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -1756,10 +1756,12 @@ getImplicitMapTypeAndKind(fir::FirOpBuilder &firOpBuilder, } } - if (declareTargetOp && declareTargetOp.isDeclareTarget()) { - if (declareTargetOp.getDeclareTargetCaptureClause() == + mlir::omp::DeclareTargetAttr declareTargetAttr = + declareTargetOp ? declareTargetOp.getDeclareTarget() : nullptr; + if (declareTargetAttr) { + if (declareTargetAttr.getCaptureClause() == mlir::omp::DeclareTargetCaptureClause::link && - declareTargetOp.getDeclareTargetDeviceType() != + declareTargetAttr.getDeviceType() != mlir::omp::DeclareTargetDeviceType::nohost) { mapFlag |= mlir::omp::ClauseMapFlags::to; mapFlag |= mlir::omp::ClauseMapFlags::from; @@ -1839,8 +1841,9 @@ markDeclareTarget(mlir::Operation *op, lower::AbstractConverter &converter, // likely through implicit capture (usage in another declare target // function/subroutine). It should be marked as any if it has been assigned // both host and nohost, else we skip, as there is no change - if (declareTargetOp.isDeclareTarget()) { - if (declareTargetOp.getDeclareTargetDeviceType() != deviceType) + if (mlir::omp::DeclareTargetAttr declareTargetAttr = + declareTargetOp.getDeclareTarget()) { + if (declareTargetAttr.getDeviceType() != deviceType) declareTargetOp.setDeclareTarget(mlir::omp::DeclareTargetDeviceType::any, captureClause, automap, /*implicit=*/false); diff --git a/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp b/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp index bf269b5dd3ff2..0ec0c9193e969 100644 --- a/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp +++ b/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp @@ -97,11 +97,13 @@ class AutomapToTargetDataPass llvm::DenseSet<fir::GlobalOp> automapGlobals; module.walk([&](fir::GlobalOp globalOp) { if (auto iface = - dyn_cast<omp::DeclareTargetInterface>(globalOp.getOperation())) - if (iface.isDeclareTarget() && iface.getDeclareTargetAutomap() && - iface.getDeclareTargetDeviceType() != + dyn_cast<omp::DeclareTargetInterface>(globalOp.getOperation())) { + omp::DeclareTargetAttr declareTargetAttr = iface.getDeclareTarget(); + if (declareTargetAttr && declareTargetAttr.getAutomap() && + declareTargetAttr.getDeviceType() != omp::DeclareTargetDeviceType::host) automapGlobals.insert(globalOp); + } }); auto addMapInfo = [&](auto globalOp, auto memOp) { diff --git a/flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp b/flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp index c393e2f90f88f..faf7274444104 100644 --- a/flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp +++ b/flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp @@ -37,9 +37,10 @@ static bool allUsesInHostCode(Operation *moduleOp, SymbolOpInterface symOp) { if (auto declareTargetOp = symUser->getParentOfType<omp::DeclareTargetInterface>()) { - if (declareTargetOp.isDeclareTarget() && - declareTargetOp.getDeclareTargetDeviceType() != - omp::DeclareTargetDeviceType::host) + omp::DeclareTargetAttr declareTargetAttr = + declareTargetOp.getDeclareTarget(); + if (declareTargetAttr && declareTargetAttr.getDeviceType() != + omp::DeclareTargetDeviceType::host) return false; } } diff --git a/flang/test/Fir/omp-declare-target-data.fir b/flang/test/Fir/omp-declare-target-data.fir index 171ea8fe4fcc2..539a7acf267f2 100644 --- a/flang/test/Fir/omp-declare-target-data.fir +++ b/flang/test/Fir/omp-declare-target-data.fir @@ -2,11 +2,11 @@ module attributes {omp.is_target_device = false} { - // CHECK: llvm.mlir.global external @_QMtest_0Earray_1d(dense<[1, 2, 3]> : tensor<3xi32>) {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : !llvm.array<3 x i32> - fir.global @_QMtest_0Earray_1d(dense<[1, 2, 3]> : tensor<3xi32>) {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<3xi32> + // CHECK: llvm.mlir.global external @_QMtest_0Earray_1d(dense<[1, 2, 3]> : tensor<3xi32>) {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : !llvm.array<3 x i32> + fir.global @_QMtest_0Earray_1d(dense<[1, 2, 3]> : tensor<3xi32>) {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : !fir.array<3xi32> - // CHECK: llvm.mlir.global external @_QMtest_0Earray_2d() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : !llvm.array<2 x array<2 x i32>> - fir.global @_QMtest_0Earray_2d {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<2x2xi32> { + // CHECK: llvm.mlir.global external @_QMtest_0Earray_2d() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : !llvm.array<2 x array<2 x i32>> + fir.global @_QMtest_0Earray_2d {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : !fir.array<2x2xi32> { %0 = fir.undefined !fir.array<2x2xi32> %c1_i32 = arith.constant 1 : i32 %1 = fir.insert_value %0, %c1_i32, [0 : index, 0 : index] : (!fir.array<2x2xi32>, i32) -> !fir.array<2x2xi32> @@ -21,57 +21,57 @@ module attributes {omp.is_target_device = false} { fir.has_value %4 : !fir.array<2x2xi32> } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_link_1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : f32 - fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_link_1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : f32 + fir.global @_QMtest_0Edata_extended_link_1 {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : f32 { %cst = arith.constant 2.000000e+00 : f32 fir.has_value %cst : f32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_link_2() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : f32 - fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : f32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_link_2() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : f32 + fir.global @_QMtest_0Edata_extended_link_2 {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : f32 { %cst = arith.constant 3.000000e+00 : f32 fir.has_value %cst : f32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_to_1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}} : f32 - fir.global @_QMtest_0Edata_extended_to_1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_to_1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>{{.*}}} : f32 + fir.global @_QMtest_0Edata_extended_to_1 {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>} : f32 { %cst = arith.constant 2.000000e+00 : f32 fir.has_value %cst : f32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_to_2() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}} : f32 { - fir.global @_QMtest_0Edata_extended_to_2 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : f32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_extended_to_2() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>{{.*}}} : f32 { + fir.global @_QMtest_0Edata_extended_to_2 {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>} : f32 { %cst = arith.constant 3.000000e+00 : f32 fir.has_value %cst : f32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_int() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : i32 - fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : i32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_int() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : i32 + fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : i32 { %c10_i32 = arith.constant 10 : i32 fir.has_value %c10_i32 : i32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_int_clauseless() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}} : i32 - fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_int_clauseless() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>{{.*}}} : i32 + fir.global @_QMtest_0Edata_int_clauseless {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>} : i32 { %c1_i32 = arith.constant 1 : i32 fir.has_value %c1_i32 : i32 } - // CHECK: llvm.mlir.global external @_QMtest_0Edata_int_to() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}} : i32 - fir.global @_QMtest_0Edata_int_to {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>} : i32 { + // CHECK: llvm.mlir.global external @_QMtest_0Edata_int_to() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>{{.*}}} : i32 + fir.global @_QMtest_0Edata_int_to {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = to>} : i32 { %c5_i32 = arith.constant 5 : i32 fir.has_value %c5_i32 : i32 } - // CHECK: llvm.mlir.global external @_QMtest_0Ept1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> { - fir.global @_QMtest_0Ept1 {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.box<!fir.ptr<i32>> { + // CHECK: llvm.mlir.global external @_QMtest_0Ept1() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> { + fir.global @_QMtest_0Ept1 {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : !fir.box<!fir.ptr<i32>> { %0 = fir.zero_bits !fir.ptr<i32> %1 = fir.embox %0 : (!fir.ptr<i32>) -> !fir.box<!fir.ptr<i32>> fir.has_value %1 : !fir.box<!fir.ptr<i32>> } - // CHECK: llvm.mlir.global external @_QMtest_0Ept2_tar() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>{{.*}}} : i32 - fir.global @_QMtest_0Ept2_tar {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} target : i32 { + // CHECK: llvm.mlir.global external @_QMtest_0Ept2_tar() {{{.*}}omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>{{.*}}} : i32 + fir.global @_QMtest_0Ept2_tar {omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} target : i32 { %c5_i32 = arith.constant 5 : i32 fir.has_value %c5_i32 : i32 } diff --git a/flang/test/Integration/OpenMP/declare-target-funcs.f90 b/flang/test/Integration/OpenMP/declare-target-funcs.f90 index 66010b9b0838f..6a4ac0538c06b 100644 --- a/flang/test/Integration/OpenMP/declare-target-funcs.f90 +++ b/flang/test/Integration/OpenMP/declare-target-funcs.f90 @@ -16,8 +16,8 @@ ! CHECK-LABEL: IR Dump Before HostOpFilteringPass: omp-host-op-filter ! CHECK: llvm.func{{.*}}@__mlir_math_ipowi_i32 -! CHECK-SAME: attributes{{.*}}omp.declare_target{{.*}}device_type = -! CHECK-NOT: (host) +! CHECK-SAME: attributes{{.*}}omp.declare_target = #omp.declaretarget< +! CHECK-NOT: device_type = host module m contains diff --git a/flang/test/Integration/OpenMP/function-filtering-2.f90 b/flang/test/Integration/OpenMP/function-filtering-2.f90 index a5bb5d2165fe7..cc6fa0b938e1e 100644 --- a/flang/test/Integration/OpenMP/function-filtering-2.f90 +++ b/flang/test/Integration/OpenMP/function-filtering-2.f90 @@ -24,13 +24,13 @@ program main !$omp end target contains - ! MLIR-ALL: llvm.func{{.*}} @{{.*}}implicit_invocation() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to), implicit = true>{{.*}}} + ! MLIR-ALL: llvm.func{{.*}} @{{.*}}implicit_invocation() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = nohost, capture_clause = to, implicit = true>{{.*}}} ! MLIR-ALL: llvm.return ! LLVM-ALL: define {{.*}} @{{.*}}implicit_invocation{{.*}}( subroutine implicit_invocation() end subroutine implicit_invocation - ! MLIR-ALL: llvm.func{{.*}} @{{.*}}declaretarget() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}} + ! MLIR-ALL: llvm.func{{.*}} @{{.*}}declaretarget() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = nohost, capture_clause = to>{{.*}}} ! MLIR-ALL: llvm.return ! LLVM-ALL: define {{.*}} @{{.*}}declaretarget{{.*}}( subroutine declaretarget() @@ -38,7 +38,7 @@ subroutine declaretarget() call implicit_invocation() end subroutine declaretarget - ! MLIR-ALL: llvm.func{{.*}} @{{.*}}declaretarget_enter() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (enter)>{{.*}}} + ! MLIR-ALL: llvm.func{{.*}} @{{.*}}declaretarget_enter() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = nohost, capture_clause = enter>{{.*}}} ! MLIR-ALL: llvm.return ! LLVM-ALL: define {{.*}} @{{.*}}declaretarget_enter{{.*}}( subroutine declaretarget_enter() @@ -46,7 +46,7 @@ subroutine declaretarget_enter() call implicit_invocation() end subroutine declaretarget_enter - ! MLIR-ALL: llvm.func{{.*}} @{{.*}}no_declaretarget() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to), implicit = true>{{.*}}} + ! MLIR-ALL: llvm.func{{.*}} @{{.*}}no_declaretarget() attributes {{{.*}}omp.declare_target = #omp.declaretarget<device_type = nohost, capture_clause = to, implicit = true>{{.*}}} ! MLIR-ALL: llvm.return ! LLVM-ALL: define {{.*}} @{{.*}}no_declaretarget{{.*}}( subroutine no_declaretarget() diff --git a/flang/test/Lower/OpenMP/common-block-map.f90 b/flang/test/Lower/OpenMP/common-block-map.f90 index a1d9a1430141a..f74f3ff5f92a0 100644 --- a/flang/test/Lower/OpenMP/common-block-map.f90 +++ b/flang/test/Lower/OpenMP/common-block-map.f90 @@ -1,7 +1,7 @@ !RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s !CHECK: fir.global common @var_common_(dense<0> : vector<8xi8>) {{.*}} : !fir.array<8xi8> -!CHECK: fir.global common @var_common_link_(dense<0> : vector<8xi8>) {{{.*}} omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (link)>} : !fir.array<8xi8> +!CHECK: fir.global common @var_common_link_(dense<0> : vector<8xi8>) {{{.*}} omp.declare_target = #omp.declaretarget<device_type = any, capture_clause = link>} : !fir.array<8xi8> !CHECK-LABEL: func.func @_QPmap_full_block !CHECK: %[[CB_ADDR:.*]] = fir.address_of(@var_common_) : !fir.ref<!fir.array<8xi8>> diff --git a/flang/test/Lower/OpenMP/declare-target-data.f90 b/flang/test/Lower/OpenMP/declare-target-data.f90 index d4f1fb273e068..6bfcbb09427d2 100644 --- a/flang/test/Lower/OpenMP/declare-target-data.f90 +++ b/flang/test/Lower/OpenMP/declare-target-data.f90 @@ -4,61 +4,61 @@ module test_0 implicit none -!CHECK-DAG: fir.global @_QMtest_0Edata_int {omp.declare_target = #omp.declaretarget<device_type = (any), cap... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/217295 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
