aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Conversion/OpenMPToLLVM/OpenMPToLLVM.cpp
AgeCommit message (Collapse)AuthorFilesLines
12 days[mlir][NFC] update `Conversion` create APIs (6/n) (#149888)Maksim Levental1-2/+2
See https://github.com/llvm/llvm-project/pull/147168 for more info.
2025-07-11[MLIR][OpenMP] Add canonical loop LLVM-IR lowering (#147069)Michael Kruse1-0/+10
Support for translating the operations introduced in #144785 to LLVM-IR. In order to keep the lowering simple, `OpenMPIRBuider::unrollLoopHeuristic` is applied when encountering the `omp.unroll_heuristic` op. As a result, the operation that unrolling is applied to (`omp.canonical_loop`) must have been emitted before even though logically there is no such requirement. Eventually, all transformations on a loop must be applied directly after emitting `omp.canonical_loop`, i.e. future transformations must be looked-up when encountering `omp.canonical_loop` itself. This is because many OpenMPIRBuilder methods (e.g. `createParallel`) expect all the region code to be emitted withing a callback. In the case of `createParallel`, the region code is getting outlined into a new function. Therefore, making the operation order a formal requirement would not make the implementation any easier.
2025-07-04[mlir] Remove unused includes (NFC) (#147101)Kazu Hirata1-1/+0
These are identified by misc-include-cleaner. I've filtered out those that break builds. Also, I'm staying away from llvm-config.h, config.h, and Compiler.h, which likely cause platform- or compiler-specific build failures.
2025-05-18[mlir] Use llvm::all_of (NFC) (#140464)Kazu Hirata1-10/+8
2025-03-20[MLIR][OpenMP] Simplify OpenMP to LLVM dialect conversion (#132009)Sergio Afonso1-252/+77
This patch makes a few changes to unify the conversion process from the 'omp' to the 'llvm' dialect. The main goal of this change is to consolidate the logic used to identify legal and illegal ops, and to consolidate the conversion logic into a single class. Changes introduced are the following: - Removal of `getNumVariableOperands()` and `getVariableOperand()` extra class declarations from OpenMP operations. These are redundant, as they are equivalent to `mlir::Operation::getNumOperands()` and `mlir::Operation::getOperands()`, respectively. - Consolidation of `RegionOpConversion`, `RegionLessOpWithVarOperandsConversion`, `RegionOpWithVarOperandsConversion`, `RegionLessOpConversion`, `AtomicReadOpConversion`, `MapInfoOpConversion`, `DeclMapperOpConversion` and `MultiRegionOpConversion` into a single `OpenMPOpConversion` class. This is possible because all of the previous were doing parts of the same set of operations based on whether they defined any regions, whether they took operands, type attributes, etc. - Update of `mlir::configureOpenMPToLLVMConversionLegality` to use a single generic set of checks for all operations, removing the need to list every operation manually. - Update of `mlir::populateOpenMPToLLVMConversionPatterns` to automatically populate the list of patterns to include all dialect operations.
2025-02-18[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP ↵Akash Banerjee1-13/+42
DeclareMapper (#121005) Add conversion support from FIR to LLVM Dialect for OMP DeclareMapper. Depends on #121001
2025-02-05[flang][openmp] Changes for invoking scan Op (#123254)Anchu Rajendran S1-1/+2
2025-01-31[mlir][OpenMP][flang] make private variable allocation implicit in ↵Tom Eccles1-4/+14
omp.private (#124019) The intention of this work is to give MLIR->LLVMIR conversion freedom to control how the private variable is allocated so that it can be allocated on the stack in ordinary cases or as part of a structure used to give closure context for tasks which might outlive the current stack frame. See RFC: https://discourse.llvm.org/t/rfc-openmp-supporting-delayed-task-execution-with-firstprivate-variables/83084 For example, a privatizer for an integer used to look like ```mlir omp.private {type = private} @x.privatizer : !fir.ref<i32> alloc { ^bb0(%arg0: !fir.ref<i32>): %0 = ... allocate proper memory for the private clone ... omp.yield(%0 : !fir.ref<i32>) } ``` After this change, allocation become implicit in the operation: ```mlir omp.private {type = private} @x.privatizer : i32 ``` For more complex types that require initialization after allocation, an init region can be used: ``` mlir omp.private {type = private} @x.privatizer : !some.type init { ^bb0(%arg0: !some.pointer<!some.type>, %arg1: !some.pointer<!some.type>): // initialize %arg1, using %arg0 as a mold for allocations omp.yield(%arg1 : !some.pointer<!some.type>) } dealloc { ^bb0(%arg0: !some.pointer<!some.type>): ... deallocate memory allocated by the init region ... omp.yield } ``` This patch lays the groundwork for delayed task execution but is not enough on its own. After this patch all gfortran tests which previously passed still pass. There are the following changes to the Fujitsu test suite: - 0380_0009 and 0435_0009 are fixed - 0688_0041 now fails at runtime. This patch is testing firstprivate variables with tasks. Previously we got lucky with the undefined behavior and won the race. After these changes we no longer get lucky. This patch lays the groundwork for a proper fix for this issue. In flang the lowering re-uses the existing lowering used for reduction init and dealloc regions. In flang, before this patch we hit a TODO with the same wording when generating the copy region for firstprivate polymorphic variables. After this patch the box-like fir.class is passed by reference into the copy region, leading to a different path that didn't hit that old TODO but the generated code still didn't work so I added a new TODO in DataSharingProcessor.
2025-01-06[mlir][GPU] Add NVVM-specific `cf.assert` lowering (#120431)Matthias Springer1-0/+1
This commit add an NVIDIA-specific lowering of `cf.assert` to to `__assertfail`. Note: `getUniqueFormatGlobalName`, `getOrCreateFormatStringConstant` and `getOrDefineFunction` are moved to `GPUOpsLowering.h`, so that they can be reused.
2024-11-18[flang][OpenMP] Add basic support to lower `loop` directive to MLIR (#114199)Kareem Ergawy1-7/+7
Adds initial support for lowering the `loop` directive to MLIR. The PR includes basic suport and testing for the following clauses: * `collapse` * `order` * `private` * `reduction` Parent PR: #113911, only the latest commit is relevant to this PR.
2024-10-11[mlir][OpenMP] Implement the ConvertToLLVMPatternInterface (#101997)Fabian Mora1-0/+29
This patch implements the `ConvertToLLVMPatternInterface` for the OpenMP dialect, allowing `convert-to-llvm` to act on the OpenMP dialect.
2024-10-05[mlir][NFC] Mark type converter in `populate...` functions as `const` (#111250)Matthias Springer1-1/+1
This commit marks the type converter in `populate...` functions as `const`. This is useful for debugging. Patterns already take a `const` type converter. However, some `populate...` functions do not only add new patterns, but also add additional type conversion rules. That makes it difficult to find the place where a type conversion was added in the code base. With this change, all `populate...` functions that only populate pattern now have a `const` type converter. Programmers can then conclude from the function signature that these functions do not register any new type conversion rules. Also some minor cleanups around the 1:N dialect conversion infrastructure, which did not always pass the type converter as a `const` object internally.
2024-08-21[MLIR][OpenMP] Add missing OpenMP to LLVM conversion patterns (#104440)Sergio Afonso1-31/+38
This patch adds conversion patterns to LLVM for the following OpenMP dialect operations: - `omp.critical.declare` - `omp.cancel` - `omp.cancellation_point` - `omp.distribute` - `omp.teams` - `omp.ordered` - `omp.taskloop` Also, arbitrary sorting of operations when passing them as template argument lists when configuring that pass is replaced by alphabetical sorting.
2024-05-23[mlir][OpenMP] Remove deprecated omp.reduction (#92732)Tom Eccles1-20/+2
This operation did not model the behaviour of reductions in the openmp standard. It has since been replaced by block arguments on the outer operation. See https://github.com/llvm/llvm-project/pull/79308 and https://github.com/llvm/llvm-project/pull/80019
2024-04-17[MLIR][Flang][OpenMP] Make omp.simdloop into a loop wrapper (#87365)Sergio Afonso1-8/+9
This patch updates the definition of `omp.simdloop` to enforce the restrictions of a wrapper operation. It has been renamed to `omp.simd`, to better reflect the naming used in the spec. All uses of "simdloop" in function names have been updated accordingly. Some changes to Flang lowering and OpenMP to LLVM IR translation are introduced to prevent the introduction of compilation/test failures. The eventual long term solution might be different.
2024-03-20[MLIR][OpenMP] NFC: Uniformize OpenMP ops names (#85393)Sergio Afonso1-19/+21
This patch proposes the renaming of certain OpenMP dialect operations with the goal of improving readability and following a uniform naming convention for MLIR operations and associated classes. In particular, the following operations are renamed: - `omp.map_info` -> `omp.map.info` - `omp.target_update_data` -> `omp.target_update` - `omp.ordered_region` -> `omp.ordered.region` - `omp.cancellationpoint` -> `omp.cancellation_point` - `omp.bounds` -> `omp.map.bounds` - `omp.reduction.declare` -> `omp.declare_reduction` Also, the following MLIR operation classes have been renamed: - `omp::TaskLoopOp` -> `omp::TaskloopOp` - `omp::TaskGroupOp` -> `omp::TaskgroupOp` - `omp::DataBoundsOp` -> `omp::MapBoundsOp` - `omp::DataOp` -> `omp::TargetDataOp` - `omp::EnterDataOp` -> `omp::TargetEnterDataOp` - `omp::ExitDataOp` -> `omp::TargetExitDataOp` - `omp::UpdateDataOp` -> `omp::TargetUpdateOp` - `omp::ReductionDeclareOp` -> `omp::DeclareReductionOp` - `omp::WsLoopOp` -> `omp::WsloopOp`
2024-02-16[MLIR][OpenMP] Support `llvm` conversion for `omp.private` regions (#81414)Kareem Ergawy1-26/+34
Introduces conversion of `omp.private`'s regions to the LLVM dialect. This reuses the already existing conversion pattern for `ReducetionDeclareOp` and repurposes it to be used for multi-region ops as well.
2024-01-02[flang][OpenMP][Offloading][AMDGPU] Add test for `target update` (#76355)Kareem Ergawy1-5/+6
Adds a new test for offloading `target update` directive to AMD GPUs.
2023-10-23[MLIR,Flang,OpenMP] Remove usage of getElementType in OpenMPTranslation (#69772)Kiran Chandramohan1-3/+31
Remove usage of getElementType in OpenMPTranslation to pave way for switching to opaque pointers in MLIR and Flang. The approach chosen stores the elementType in a new field in MapInfo called varType. A similar approach was chosen for AtomicReadOp in https://github.com/llvm/llvm-project/commit/81767f52f49339be2c78fc9bf831856b9f57e2f0
2023-09-19[OpenMP][MLIR] Refactor and extend current map support by adding MapInfoOp ↵Andrew Gozillon1-5/+13
and DataBoundsOp operations to the OpenMP Dialect This patch adds two new operations: The first is the DataBoundsOp, which is based on OpenACC's DataBoundsOp, which holds stride, index, extent, lower bound and upper bounds which will be used in future follow up patches to perform initial array sectioning of mapped arrays, and Fortran pointer and allocatable mapping. Similarly to OpenACC, this new OpenMP DataBoundsOp also comes with a new OpenMP type, which helps to restrict operations to accepting only DataBoundsOp as an input or output where necessary (or other related operations that implement this type as a return). The patch also adds the MapInfoOp which rolls up some of the old map information stored in target operations into this new operation, and adds new information that will be utilised in the lowering of mapped variables, e.g. the aforementioned DataBoundsOp, but also a new ByCapture OpenMP MLIR attribute, and isImplicit boolean attribute. Both the ByCapture and isImplicit arguments will affect the lowering from the OpenMP dialect to LLVM-IR in minor but important ways, such as shifting the final maptype or generating different load/store combinations to maintain semantics with the OpenMP standard and alignment with the current Clang OpenMP output as best as possible. This MapInfoOp operation is slightly based on OpenACC's DataEntryOp, the main difference other than some slightly different fields (e,g, isImplicit/MapType/ByCapture) is that OpenACC's data operations "inherit" (the MLIR ODS equivalent) from this operation, whereas in OpenMP operations that utilise MapInfoOp's are composed of/contain them. A series of these MapInfoOp (one per map clause list item) is now held by target operations that represent OpenMP directives that utilise map clauses, e.g. TargetOp. MapInfoOp's do not have their own specialised lowering to LLVM-IR, instead the lowering is dependent on the particular container of the MapInfoOp's, e.g. TargetOp has its own lowering to LLVM-IR which utilised the information stored inside of MapInfoOp's to affect it's lowering and the end result of the LLVM-IR generated, which in turn can differ for host and device. This patch contains these operations, minor changes to the printing and parsing to support them, changes to tests (only those relevant to this segment of the patch, other test additions and changes are in other dependent patches in this series) and some alterations to the OpenMPToLLVM rewriter to support the new OpenMP type and operations. This patch is one in a series that are dependent on each other: https://reviews.llvm.org/D158734 https://reviews.llvm.org/D158735 https://reviews.llvm.org/D158737 Reviewers: kiranchandramohan, TIFitis, razvanlupusoru Differential Revision: https://reviews.llvm.org/D158732
2023-09-18[Flang][OpenMP] Add trivial conversion pattern for omp.ordered_region (#66085)Kiran Chandramohan1-4/+5
Fixes #65570
2023-08-14[mlir][Conversion] Store const type converter in ConversionPatternMatthias Springer1-4/+4
ConversionPatterns do not (and should not) modify the type converter that they are using. * Make `ConversionPattern::typeConverter` const. * Make member functions of the `LLVMTypeConverter` const. * Conversion patterns take a const type converter. * Various helper functions (that are called from patterns) now also take a const type converter. Differential Revision: https://reviews.llvm.org/D157601
2023-08-03[Flang][OpenMP] Convert elementTypeAttr for AtomicRead OpKiran Chandramohan1-9/+26
Convert the elementTypeAttr of AtomicRead Op for LLVMConversion. This is required when the elementType is non-integer, non-real. Reviewed By: NimishMishra Differential Revision: https://reviews.llvm.org/D155817
2023-05-24Add OpenMPToLLVM conversion pattern for taskgroupKiran Chandramohan1-8/+9
Fixes part of the issue in https://github.com/llvm/llvm-project/issues/62013 Reviewed By: psoni2628 Differential Revision: https://reviews.llvm.org/D151206
2023-05-12[mlir] Move casting calls from methods to function callsTres Popp1-3/+3
The MLIR classes Type/Attribute/Operation/Op/Value support cast/dyn_cast/isa/dyn_cast_or_null functionality through llvm's doCast functionality in addition to defining methods with the same name. This change begins the migration of uses of the method to the corresponding function call as has been decided as more consistent. Note that there still exist classes that only define methods directly, such as AffineExpr, and this does not include work currently to support a functional cast/isa call. Caveats include: - This clang-tidy script probably has more problems. - This only touches C++ code, so nothing that is being generated. Context: - https://mlir.llvm.org/deprecation/ at "Use the free function variants for dyn_cast/cast/isa/…" - Original discussion at https://discourse.llvm.org/t/preferred-casting-style-going-forward/68443 Implementation: This first patch was created with the following steps. The intention is to only do automated changes at first, so I waste less time if it's reverted, and so the first mass change is more clear as an example to other teams that will need to follow similar steps. Steps are described per line, as comments are removed by git: 0. Retrieve the change from the following to build clang-tidy with an additional check: https://github.com/llvm/llvm-project/compare/main...tpopp:llvm-project:tidy-cast-check 1. Build clang-tidy 2. Run clang-tidy over your entire codebase while disabling all checks and enabling the one relevant one. Run on all header files also. 3. Delete .inc files that were also modified, so the next build rebuilds them to a pure state. 4. Some changes have been deleted for the following reasons: - Some files had a variable also named cast - Some files had not included a header file that defines the cast functions - Some files are definitions of the classes that have the casting methods, so the code still refers to the method instead of the function without adding a prefix or removing the method declaration at the same time. ``` ninja -C $BUILD_DIR clang-tidy run-clang-tidy -clang-tidy-binary=$BUILD_DIR/bin/clang-tidy -checks='-*,misc-cast-functions'\ -header-filter=mlir/ mlir/* -fix rm -rf $BUILD_DIR/tools/mlir/**/*.inc git restore mlir/lib/IR mlir/lib/Dialect/DLTI/DLTI.cpp\ mlir/lib/Dialect/Complex/IR/ComplexDialect.cpp\ mlir/lib/**/IR/\ mlir/lib/Dialect/SparseTensor/Transforms/SparseVectorization.cpp\ mlir/lib/Dialect/Vector/Transforms/LowerVectorMultiReduction.cpp\ mlir/test/lib/Dialect/Test/TestTypes.cpp\ mlir/test/lib/Dialect/Transform/TestTransformDialectExtension.cpp\ mlir/test/lib/Dialect/Test/TestAttributes.cpp\ mlir/unittests/TableGen/EnumsGenTest.cpp\ mlir/test/python/lib/PythonTestCAPI.cpp\ mlir/include/mlir/IR/ ``` Differential Revision: https://reviews.llvm.org/D150123
2023-04-11[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP TargetAkash Banerjee1-30/+19
This enables conversion of OpenMP Target op with region from FIR Dialect to LLVM IR Dialect. Differential Revision: https://reviews.llvm.org/D147439
2023-03-09[Flang][MLIR][OpenMP] Add support for logical eqv in worksharing-loopDylan Fleming1-11/+60
The patch adds the lowering from Flang parse-tree to FIR+OpenMP. The conversion code is also added in MLIR. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D133442 Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
2023-02-23[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP ↵Akash Banerjee1-28/+27
Target Data with region This enables conversion of OpenMP Target Data op with region from FIR Dialect to LLVM IR Dialect. Differential Revision: https://reviews.llvm.org/D144380
2023-02-22[MLIR,OpenMP,Flang] Add Conversion to LLVM for Section OpKiran Chandramohan1-6/+7
Fixes #60911 Reviewed By: psoni2628 Differential Revision: https://reviews.llvm.org/D144554
2023-02-16[MLIR][OpenMP] Add Conversion for Atomic Update OpKiran Chandramohan1-7/+47
Reviewed By: TIFitis Differential Revision: https://reviews.llvm.org/D143964
2023-02-14[MLIR][OpenMP] Add support for depend clausePrabhdeep Singh Soni1-4/+5
This patch adds support for the OpenMP 4.0 depend clause (in, out, inout) of the task construct to the definition of the OpenMP MLIR dialect and translation from MLIR to LLVM IR using OMPIRBuilder. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D142730
2023-02-10[mlir] Port Conversion Passes to LLVM to use TableGen generated constructors ↵Markus Böck1-6/+4
and options See https://github.com/llvm/llvm-project/issues/57475 for more context. Using auto-generated constructors and options has significant advantages: * It forces a uniform style and expectation for consuming a pass * It allows to very easily add, remove or change options to a pass by simply making the changes in TableGen * Its less code This patch in particular ports all the conversion passes which lower to LLVM to use the auto generated constructors and options. For the most part, care was taken so that auto generated constructor functions have the same name as they previously did. Only following slight breaking changes (which I consider as worth the churn) have been made: * `mlir::cf::createConvertControlFlowToLLVMPass` has been moved to the `mlir` namespace. This is consistent with basically all conversion passes * `createGpuToLLVMConversionPass` now takes a proper options struct array for its pass options. The pass options are now also autogenerated. * `LowerVectorToLLVMOptions` has been replaced by the autogenerated `ConvertVectorToLLVMPassOptions` which is automatically kept up to date by TableGen * I had to move one function in the GPU to LLVM lowering as it is used as default value for an option. * All passes that previously returned `unique_ptr<OperationPass<...>>` now simply return `unique_ptr<Pass>` Differential Revision: https://reviews.llvm.org/D143773
2023-01-28[MLIR][OpenMP] Add conversion support from FIR to LLVM Dialect for OMP ↵Akash Banerjee1-8/+24
Target Data directives This enables conversion of OpenMP Target Data, Enter Data and Exit Data from FIR Dialect to LLVM IR Dialect. Differential Revision: https://reviews.llvm.org/D142629
2023-01-27[mlir][Conversion] Rename the MemRefToLLVM passQuentin Colombet1-1/+1
Since the recent MemRef refactoring that centralizes the lowering of complex MemRef operations outside of the conversion framework, the MemRefToLLVM pass doesn't directly convert these complex operations. Instead, to fully convert the whole MemRef dialect space, MemRefToLLVM needs to run after `expand-strided-metadata`. Make this more obvious by changing the name of the pass and the option associated with it from `convert-memref-to-llvm` to `finalize-memref-to-llvm`. The word "finalize" conveys that this pass needs to run after something else and that something else is documented in its tablegen description. This is a follow-up patch related to the conversation at: https://discourse.llvm.org/t/psa-you-need-to-run-expand-strided-metadata-before-memref-to-llvm-now/66956/14 Differential Revision: https://reviews.llvm.org/D142463
2022-09-30[mlir:OpenMP][NFC] Update OpenMP API to use prefixed accessorsRiver Riddle1-4/+4
This doesn't flip the switch for prefix generation yet, that'll be done in a followup.
2022-09-29[mlir][arith] Change dialect name from Arithmetic to ArithJakub Kuderski1-2/+2
Suggested by @lattner in https://discourse.llvm.org/t/rfc-define-precise-arith-semantics/65507/22. Tested with: `ninja check-mlir check-mlir-integration check-mlir-mlir-spirv-cpu-runner check-mlir-mlir-vulkan-runner check-mlir-examples` and `bazel build --config=generic_clang @llvm-project//mlir:all`. Reviewed By: lattner, Mogball, rriddle, jpienaar, mehdi_amini Differential Revision: https://reviews.llvm.org/D134762
2022-08-31[MLIR] Update pass declarations to new autogenerated filesMichele Scuttari1-2/+7
The patch introduces the required changes to update the pass declarations and definitions to use the new autogenerated files and allow dropping the old infrastructure. Reviewed By: mehdi_amini, rriddle Differential Review: https://reviews.llvm.org/D132838
2022-08-30Revert "[MLIR] Update pass declarations to new autogenerated files"Michele Scuttari1-9/+2
This reverts commit 2be8af8f0e0780901213b6fd3013a5268ddc3359.
2022-08-30[MLIR] Update pass declarations to new autogenerated filesMichele Scuttari1-2/+9
The patch introduces the required changes to update the pass declarations and definitions to use the new autogenerated files and allow dropping the old infrastructure. Reviewed By: mehdi_amini, rriddle Differential Review: https://reviews.llvm.org/D132838
2022-08-10[Flang][OpenMP] Fix conversion of nested loops for SIMD directiveDominik Adamski1-8/+8
Flang was not able to convert simd directive which contains nested Fortran loops. The nested Fortran loops inside SIMD directive are modelled as FIR loops and they need to be translated into LLVM MLIR dialect. Differential Revision: https://reviews.llvm.org/D131402 Reviewed by: peixin Signed-off-by: Dominik Adamski <dominik.adamski@amd.com>
2022-07-25[Flang][OpenMP] Initial support for integer reduction in worksharing-loopKiran Chandramohan1-3/+23
Lower the Flang parse-tree containing OpenMP reductions to the OpenMP dialect. The OpenMP dialect models reductions with, 1) A reduction declaration operation that specifies how to initialize, combine, and atomically combine private reduction variables. 2) The OpenMP operation (like wsloop) that supports reductions has an array of reduction accumulator variables (operands) and an array attribute of the same size that points to the reduction declaration to be used for the reduction accumulation. 3) The OpenMP reduction operation that takes a value and an accumulator. This operation replaces the original reduction operation in the source. (1) is implemented by the `createReductionDecl` in OpenMP.cpp, (2) is implemented while creating the OpenMP operation, (3) is implemented by the `genOpenMPReduction` function in OpenMP.cpp, and called from Bridge.cpp. The implementation of (3) is not very robust. NOTE 1: The patch currently supports only reductions for integer type addition. NOTE 2: Only supports reduction in the worksharing loop. NOTE 3: Does not generate atomic combination region. NOTE 4: Other options for creating the reduction operation include a) having the reduction operation as a construct containing an assignment and then handling it appropriately in the Bridge. b) we can modify `genAssignment` or `genFIR(AssignmentStmt)` in the Bridge to handle OpenMP reduction but so far we have tried not to mix OpenMP and non-OpenMP code and this will break that. I will try (b) in a separate patch. NOTE 5: OpenMP dialect gained support for reduction with the patches: D105358, D107343. See https://discourse.llvm.org/t/rfc-openmp-reduction-support/3367 for more details. Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D130077 Co-authored-by: Peixin-Qiao <qiaopeixin@huawei.com>
2022-07-22[MLIR,OpenMP] : Add Conversion pattern for Critical OpKiran Chandramohan1-10/+11
The Conversion pattern enables conversion of Critical Op with block arguments. Fixes https://github.com/llvm/llvm-project/issues/56629 Reviewed By: shraiysh Differential Revision: https://reviews.llvm.org/D130343
2022-06-07[Flang,MLIR,OpenMP] Fix a few tests that were not converting to LLVMKiran Chandramohan1-12/+24
A few OpenMP tests were retaining the FIR operands even after running the LLVM conversion pass. To fix these tests the legality checkes for OpenMP conversion are made stricter to include operands and results. The Flush, Single and Sections operations are added to conversions or legality checks. The RegionLessOpConversion is appropriately renamed to clarify that it works only for operations with Variable operands. The operands of the flush operation are changed to match those of Variable Operands. Fix for an OpenMP issue mentioned in https://github.com/llvm/llvm-project/issues/55210. Reviewed By: shraiysh, peixin, awarzynski Differential Revision: https://reviews.llvm.org/D127092
2022-05-30Apply clang-tidy fixes for llvm-else-after-return in OpenMPToLLVM.cpp (NFC)Mehdi Amini1-2/+1
2022-05-27[OpenMP][mlir] fix broken buildAart Bik1-1/+2
Reviewed By: Mogball Differential Revision: https://reviews.llvm.org/D126556
2022-05-28[OpenMP] Support operation conversion to LLVM for threadprivate directivePeixinQiao1-6/+23
This supports the operation conversion for threadprivate directive. The support for memref type conversion is not implemented. Reviewed By: kiranchandramohan, shraiysh Differential Revision: https://reviews.llvm.org/D124610
2022-04-21Added lowering support for atomic read and write constructsNimish Mishra1-3/+28
This patch adds lowering support for atomic read and write constructs. Also added is pointer modelling code to allow FIR pointer like types to be inferred and converted while lowering. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D122725 Co-authored-by: Kiran Chandramohan <kiran.chandramohan@arm.com>
2022-03-07[mlir][NFC] Rename StandardToLLVM to FuncToLLVMRiver Riddle1-3/+3
The current StandardToLLVM conversion patterns only really handle the Func dialect. The pass itself adds patterns for Arithmetic/CFToLLVM, but those should be/will be split out in a followup. This commit focuses solely on being an NFC rename. Aside from the directory change, the pattern and pass creation API have been renamed: * populateStdToLLVMFuncOpConversionPattern -> populateFuncToLLVMFuncOpConversionPattern * populateStdToLLVMConversionPatterns -> populateFuncToLLVMConversionPatterns * createLowerToLLVMPass -> createConvertFuncToLLVMPass Differential Revision: https://reviews.llvm.org/D120778
2022-02-06[mlir] Split out a new ControlFlow dialect from StandardRiver Riddle1-1/+3
This dialect is intended to model lower level/branch based control-flow constructs. The initial set of operations are: AssertOp, BranchOp, CondBranchOp, SwitchOp; all split out from the current standard dialect. See https://discourse.llvm.org/t/standard-dialect-the-final-chapter/6061 Differential Revision: https://reviews.llvm.org/D118966
2021-10-13[MLIR] Replace std ops with arith dialect opsMogball1-0/+2
Precursor: https://reviews.llvm.org/D110200 Removed redundant ops from the standard dialect that were moved to the `arith` or `math` dialects. Renamed all instances of operations in the codebase and in tests. Reviewed By: rriddle, jpienaar Differential Revision: https://reviews.llvm.org/D110797