[flang-commits] [flang] [flang] Implement !DIR$ UNROLL [N] (PR #123331)
via flang-commits
flang-commits at lists.llvm.org
Mon Jan 20 01:47:50 PST 2025
================
@@ -2153,14 +2153,42 @@ class FirConverter : public Fortran::lower::AbstractConverter {
return builder->createIntegerConstant(loc, controlType, 1); // step
}
- void addLoopAnnotationAttr(IncrementLoopInfo &info) {
+ void addLoopAnnotationAttr(
+ IncrementLoopInfo &info,
+ llvm::SmallVectorImpl<const Fortran::parser::CompilerDirective *> &dirs) {
mlir::BoolAttr f = mlir::BoolAttr::get(builder->getContext(), false);
- mlir::LLVM::LoopVectorizeAttr va = mlir::LLVM::LoopVectorizeAttr::get(
- builder->getContext(), /*disable=*/f, {}, {}, {}, {}, {}, {});
- mlir::LLVM::LoopAnnotationAttr la = mlir::LLVM::LoopAnnotationAttr::get(
- builder->getContext(), {}, /*vectorize=*/va, {}, {}, {}, {}, {}, {}, {},
- {}, {}, {}, {}, {}, {});
- info.doLoop.setLoopAnnotationAttr(la);
+ mlir::BoolAttr t = mlir::BoolAttr::get(builder->getContext(), true);
+ mlir::LLVM::LoopVectorizeAttr va;
+ mlir::LLVM::LoopUnrollAttr ua;
+ bool has_attrs = false;
+ for (const auto *dir : dirs) {
+ Fortran::common::visit(
+ Fortran::common::visitors{
+ [&](const Fortran::parser::CompilerDirective::VectorAlways &) {
+ va = mlir::LLVM::LoopVectorizeAttr::get(builder->getContext(),
+ /*disable=*/f, {}, {},
+ {}, {}, {}, {});
+ has_attrs = true;
+ },
+ [&](const Fortran::parser::CompilerDirective::Unroll &u) {
+ mlir::IntegerAttr countAttr;
+ if (u.v.has_value()) {
+ countAttr = builder->getIntegerAttr(builder->getI64Type(),
+ u.v.value());
+ }
+ ua = mlir::LLVM::LoopUnrollAttr::get(
+ builder->getContext(), /*disable=*/f, /*count*/ countAttr,
+ {}, /*full*/ u.v.has_value() ? f : t, {}, {}, {});
+ has_attrs = true;
+ },
+ [&](const auto &) {}},
+ dir->u);
+ }
+ mlir::LLVM::LoopAnnotationAttr la = mlir::LLVM::LoopAnnotationAttr::get(
----------------
jeanPerier wrote:
There are some formatting issues here and is other parts of the change (see https://github.com/llvm/llvm-project/actions/runs/12829292318/job/35862676664?pr=123331).
Be sure to run the latest git-clang-format on the change.
https://github.com/llvm/llvm-project/pull/123331
More information about the flang-commits
mailing list