[all-commits] [llvm/llvm-project] 86c4c7: [Flang][MLIR][OpenMP] Explicitly represent omp.tar...

Sergio Afonso via All-commits all-commits at lists.llvm.org
Fri Jun 12 04:47:49 PDT 2026


  Branch: refs/heads/users/skatrak/flang-generic-13-explicit-kernel-type
  Home:   https://github.com/llvm/llvm-project
  Commit: 86c4c7cb55303a9d19d9c5ed5f30ccf954450654
      https://github.com/llvm/llvm-project/commit/86c4c7cb55303a9d19d9c5ed5f30ccf954450654
  Author: Sergio Afonso <Sergio.AfonsoFumero at amd.com>
  Date:   2026-06-11 (Thu, 11 Jun 2026)

  Changed paths:
    M flang/lib/Lower/OpenMP/ClauseProcessor.cpp
    M flang/lib/Lower/OpenMP/ClauseProcessor.h
    M flang/lib/Lower/OpenMP/OpenMP.cpp
    M flang/lib/Optimizer/OpenMP/DoConcurrentConversion.cpp
    M flang/lib/Optimizer/OpenMP/LowerWorkdistribute.cpp
    M flang/test/Analysis/AliasAnalysis/alias-analysis-omp-target-1.fir
    M flang/test/Analysis/AliasAnalysis/alias-analysis-omp-target-2.fir
    M flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90
    M flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
    M flang/test/Lower/OpenMP/DelayedPrivatization/target-private-allocatable.f90
    M flang/test/Lower/OpenMP/DelayedPrivatization/target-private-implicit-scalar-map-2.f90
    M flang/test/Lower/OpenMP/DelayedPrivatization/target-private-implicit-scalar-map.f90
    M flang/test/Lower/OpenMP/DelayedPrivatization/target-private-simple.f90
    M flang/test/Lower/OpenMP/DelayedPrivatization/target-teams-private-implicit-scalar-map.f90
    M flang/test/Lower/OpenMP/KernelLanguage/bare-clause.f90
    M flang/test/Lower/OpenMP/allocatable-dtype-intermediate-map-gen.f90
    M flang/test/Lower/OpenMP/allocatable-map.f90
    M flang/test/Lower/OpenMP/array-bounds.f90
    M flang/test/Lower/OpenMP/common-block-map.f90
    M flang/test/Lower/OpenMP/declare-mapper.f90
    M flang/test/Lower/OpenMP/defaultmap.f90
    M flang/test/Lower/OpenMP/derived-type-allocatable-map.f90
    M flang/test/Lower/OpenMP/derived-type-map.f90
    M flang/test/Lower/OpenMP/distribute-parallel-do-simd.f90
    M flang/test/Lower/OpenMP/local-intrinsic-sized-array-map.f90
    M flang/test/Lower/OpenMP/location.f90
    M flang/test/Lower/OpenMP/map-character.f90
    M flang/test/Lower/OpenMP/map-component-ref.f90
    M flang/test/Lower/OpenMP/map-descriptor-deferral.f90
    M flang/test/Lower/OpenMP/map-mapper.f90
    M flang/test/Lower/OpenMP/optional-argument-map-2.f90
    M flang/test/Lower/OpenMP/optional-argument-map-3.f90
    M flang/test/Lower/OpenMP/target-map-complex.f90
    M flang/test/Lower/OpenMP/target-parallel-private.f90
    M flang/test/Lower/OpenMP/target-spmd.f90
    M flang/test/Lower/OpenMP/target-teams-private.f90
    M flang/test/Lower/OpenMP/target.f90
    M flang/test/Lower/OpenMP/workdistribute-target-teams-clauses.f90
    M flang/test/Lower/OpenMP/workdistribute.f90
    M flang/test/Transforms/DoConcurrent/host_eval.f90
    M flang/test/Transforms/DoConcurrent/local_device.mlir
    M flang/test/Transforms/DoConcurrent/map_shape_info.f90
    M flang/test/Transforms/DoConcurrent/multiple_iteration_ranges.f90
    M flang/test/Transforms/DoConcurrent/non_reference_to_device.f90
    M flang/test/Transforms/DoConcurrent/reduce_device.mlir
    M flang/test/Transforms/OpenMP/delete-unreachable-targets.mlir
    M flang/test/Transforms/OpenMP/function-filtering-host-ops.mlir
    M flang/test/Transforms/OpenMP/function-filtering.mlir
    M flang/test/Transforms/OpenMP/lower-workdistribute-fission-host.mlir
    M flang/test/Transforms/OpenMP/lower-workdistribute-fission-target.mlir
    M flang/test/Transforms/OpenMP/lower-workdistribute-runtime-assign-scalar.mlir
    M flang/test/Transforms/OpenMP/simd-only.mlir
    M flang/test/Transforms/debug-omp-target-op-1.fir
    M flang/test/Transforms/debug-omp-target-op-2.fir
    M flang/test/Transforms/omp-function-filtering-todo.mlir
    M flang/test/Transforms/omp-map-info-finalization-implicit-field.fir
    M flang/test/Transforms/omp-map-info-finalization-usm.fir
    M flang/test/Transforms/omp-map-info-finalization.fir
    M flang/test/Transforms/omp-maps-for-privatized-symbols.fir
    M mlir/include/mlir/Dialect/OpenMP/OpenMPClauseOperands.h
    M mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td
    M mlir/include/mlir/Dialect/OpenMP/OpenMPEnums.td
    M mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td
    M mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
    M mlir/lib/Dialect/OpenMP/Utils/Utils.cpp
    M mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
    M mlir/test/Conversion/OpenMPToLLVM/convert-to-llvmir.mlir
    M mlir/test/Dialect/OpenMP/canonicalize.mlir
    M mlir/test/Dialect/OpenMP/invalid.mlir
    M mlir/test/Dialect/OpenMP/omp-offload-privatization-prepare-by-value.mlir
    M mlir/test/Dialect/OpenMP/omp-offload-privatization-prepare.mlir
    M mlir/test/Dialect/OpenMP/ops.mlir
    M mlir/test/Dialect/OpenMP/stack-to-shared.mlir
    M mlir/test/Target/LLVMIR/allocatable_gpu_reduction.mlir
    M mlir/test/Target/LLVMIR/allocatable_gpu_reduction_teams.mlir
    M mlir/test/Target/LLVMIR/omp-target-call-with-repeated-parameter.mlir
    M mlir/test/Target/LLVMIR/omptarget-array-sectioning-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-atomic-capture-control-options.mlir
    M mlir/test/Target/LLVMIR/omptarget-atomic-update-control-options.mlir
    M mlir/test/Target/LLVMIR/omptarget-byref-bycopy-generation-device.mlir
    M mlir/test/Target/LLVMIR/omptarget-byref-bycopy-generation-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-constant-alloca-raise.mlir
    M mlir/test/Target/LLVMIR/omptarget-constant-indexing-device-region.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-147063.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-empty.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-loop-loc.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-map-link-loc.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-nowait.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-var-1.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-var-2.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug2.mlir
    M mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device.mlir
    M mlir/test/Target/LLVMIR/omptarget-declare-target-to-device.mlir
    M mlir/test/Target/LLVMIR/omptarget-declare-target-to-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-depend-host-only.mlir
    M mlir/test/Target/LLVMIR/omptarget-depend.mlir
    M mlir/test/Target/LLVMIR/omptarget-device-shared-memory.mlir
    M mlir/test/Target/LLVMIR/omptarget-device.mlir
    M mlir/test/Target/LLVMIR/omptarget-fortran-common-block-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-if-nowait.mlir
    M mlir/test/Target/LLVMIR/omptarget-if.mlir
    M mlir/test/Target/LLVMIR/omptarget-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-mapper-combined-entry.mlir
    M mlir/test/Target/LLVMIR/omptarget-memcpy-align-metadata.mlir
    M mlir/test/Target/LLVMIR/omptarget-multi-block-reduction.mlir
    M mlir/test/Target/LLVMIR/omptarget-multi-reduction.mlir
    M mlir/test/Target/LLVMIR/omptarget-nested-ptr-record-type-mapping-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-nested-record-type-mapping-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-nowait-host-only.mlir
    M mlir/test/Target/LLVMIR/omptarget-nowait-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-nowait.mlir
    M mlir/test/Target/LLVMIR/omptarget-nullary-record-ptr-member-map.mlir
    M mlir/test/Target/LLVMIR/omptarget-overlapping-record-member-map.mlir
    M mlir/test/Target/LLVMIR/omptarget-parallel-llvm-debug.mlir
    M mlir/test/Target/LLVMIR/omptarget-parallel-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-private-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-record-type-mapping-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir
    M mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-region-host-only.mlir
    M mlir/test/Target/LLVMIR/omptarget-region-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-region-parallel-llvm.mlir
    M mlir/test/Target/LLVMIR/omptarget-runtimecc.mlir
    M mlir/test/Target/LLVMIR/omptarget-target-cpu-features.mlir
    M mlir/test/Target/LLVMIR/omptarget-teams-distribute-reduction-array-descriptor.mlir
    M mlir/test/Target/LLVMIR/omptarget-teams-distribute-reduction.mlir
    M mlir/test/Target/LLVMIR/omptarget-teams-reduction.mlir
    M mlir/test/Target/LLVMIR/openmp-data-target-device.mlir
    M mlir/test/Target/LLVMIR/openmp-llvm-invalid.mlir
    M mlir/test/Target/LLVMIR/openmp-nested-task-target-parallel.mlir
    M mlir/test/Target/LLVMIR/openmp-private-allloca-hoisting.mlir
    M mlir/test/Target/LLVMIR/openmp-target-default-as.mlir
    M mlir/test/Target/LLVMIR/openmp-target-generic-spmd.mlir
    M mlir/test/Target/LLVMIR/openmp-target-has-device-addr.mlir
    M mlir/test/Target/LLVMIR/openmp-target-launch-device.mlir
    M mlir/test/Target/LLVMIR/openmp-target-launch-host.mlir
    M mlir/test/Target/LLVMIR/openmp-target-multiple-private.mlir
    M mlir/test/Target/LLVMIR/openmp-target-private-allocatable.mlir
    M mlir/test/Target/LLVMIR/openmp-target-private-shared-mem.mlir
    M mlir/test/Target/LLVMIR/openmp-target-private.mlir
    M mlir/test/Target/LLVMIR/openmp-target-simd-on_device.mlir
    M mlir/test/Target/LLVMIR/openmp-target-spmd.mlir
    M mlir/test/Target/LLVMIR/openmp-target-wsloop-private.mlir
    M mlir/test/Target/LLVMIR/openmp-teams-clauses-trunc-ext.mlir
    M mlir/test/Target/LLVMIR/openmp-todo.mlir

  Log Message:
  -----------
  [Flang][MLIR][OpenMP] Explicitly represent omp.target kernel types

Currently, the kernel type (i.e. `generic`, `spmd`, `spmd-no-loop` and
`bare`) of an `omp.target` operation is not an explicit attribute of the
operation. Rather, this is inferred based on the contents of its region
and clauses.

The problems with this approach are that it can be a potentially resource
intensive check for large kernels, and misidentifications are prone to
happen based on the presence of arbitrary operations from other dialects.

Since the AST already contains the information needed to identify the
kernel type in a more reliable manner, this patch moves that
responsiblity to the Flang frontend. Other MLIR passes that create
`omp.target` operations are updated as well.

One known limitation of this approach is that the MLIR op verifier for
`omp.target` can't completely check that the contents of its region are
compatible with the declared kernel type without being exposed to the
same pattern-matching limitations that this patch is removing. Also, the
`TargetOp::getInnermostCapturedOmpOp()` function is maintained but,
ideally, a better solution should be implemented to remove its expensive
and potentially flaky checks from MLIR.


  Commit: f87d447942eac55e5d23ff1d9951758f1718940f
      https://github.com/llvm/llvm-project/commit/f87d447942eac55e5d23ff1d9951758f1718940f
  Author: Sergio Afonso <Sergio.AfonsoFumero at amd.com>
  Date:   2026-06-11 (Thu, 11 Jun 2026)

  Changed paths:
    M flang/lib/Lower/OpenMP/OpenMP.cpp

  Log Message:
  -----------
  address review feedback


  Commit: 3356dd354024077510cf5ded0f858d5265da3478
      https://github.com/llvm/llvm-project/commit/3356dd354024077510cf5ded0f858d5265da3478
  Author: Sergio Afonso <Sergio.AfonsoFumero at amd.com>
  Date:   2026-06-11 (Thu, 11 Jun 2026)

  Changed paths:
    M clang/test/CIR/Lowering/omp-target-map.cir
    M clang/test/CIR/Transforms/omp-mark-declare-target.cir
    M flang/test/Lower/OpenMP/attach-and-ref-modifier.f90
    M flang/test/Lower/OpenMP/default-mapper-no-pointer-map.f90
    M flang/test/Lower/OpenMP/depend-iterator.f90
    M flang/test/Lower/OpenMP/dyn-groupprivate-clause.f90
    M flang/test/Lower/OpenMP/implicit-mapper-no-pointer-map.f90
    M flang/test/Lower/OpenMP/target-scope.f90
    M flang/test/Transforms/omp-map-info-finalization-member-record.fir
    M flang/test/Transforms/omp-map-info-finalization-name-loc.fir
    M mlir/test/Dialect/OpenMP/invalid.mlir
    M mlir/test/Target/LLVMIR/omptarget-debug-record-pos.mlir
    M mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device-2.mlir
    M mlir/test/Target/LLVMIR/omptarget-groupprivate.mlir
    M mlir/test/Target/LLVMIR/omptarget-host-ref-semantics.mlir
    M mlir/test/Target/LLVMIR/omptarget-region-host-device-llvm.mlir
    M mlir/test/Target/LLVMIR/openmp-iterator.mlir
    M mlir/test/Target/LLVMIR/openmp-target-dyn-groupprivate.mlir
    M mlir/test/Target/LLVMIR/openmp-target-spmd-num-threads-i64.mlir
    M mlir/test/Target/LLVMIR/openmp-todo.mlir

  Log Message:
  -----------
  Update tests


  Commit: 0e5c89ee190d37db36da4ab25cc533e4cc7aabcd
      https://github.com/llvm/llvm-project/commit/0e5c89ee190d37db36da4ab25cc533e4cc7aabcd
  Author: Sergio Afonso <Sergio.AfonsoFumero at amd.com>
  Date:   2026-06-12 (Fri, 12 Jun 2026)

  Changed paths:
    M flang/lib/Lower/OpenMP/OpenMP.cpp

  Log Message:
  -----------
  address review comments


Compare: https://github.com/llvm/llvm-project/compare/275ca7137934...0e5c89ee190d

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list