This dialect contains various structured control flow operaitons, not only loops, reflect this in the name. Drop the Ops suffix for consistency with other dialects. Note that this only moves the files and changes the C++ namespace from 'loop' to 'scf'. The visible IR prefix remains the same and will be updated separately. The conversions will also be updated separately. Differential Revision: https://reviews.llvm.org/D79578
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
//===- ParallelLoopCollapsing.cpp - Pass collapsing parallel loop indices -===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "PassDetail.h"
|
|
#include "mlir/Dialect/SCF/SCF.h"
|
|
#include "mlir/Transforms/LoopUtils.h"
|
|
#include "mlir/Transforms/Passes.h"
|
|
#include "mlir/Transforms/RegionUtils.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/Debug.h"
|
|
|
|
#define DEBUG_TYPE "parallel-loop-collapsing"
|
|
|
|
using namespace mlir;
|
|
|
|
namespace {
|
|
struct ParallelLoopCollapsing
|
|
: public ParallelLoopCollapsingBase<ParallelLoopCollapsing> {
|
|
void runOnOperation() override {
|
|
Operation *module = getOperation();
|
|
|
|
module->walk([&](scf::ParallelOp op) {
|
|
// The common case for GPU dialect will be simplifying the ParallelOp to 3
|
|
// arguments, so we do that here to simplify things.
|
|
llvm::SmallVector<std::vector<unsigned>, 3> combinedLoops;
|
|
if (clCollapsedIndices0.size())
|
|
combinedLoops.push_back(clCollapsedIndices0);
|
|
if (clCollapsedIndices1.size())
|
|
combinedLoops.push_back(clCollapsedIndices1);
|
|
if (clCollapsedIndices2.size())
|
|
combinedLoops.push_back(clCollapsedIndices2);
|
|
collapseParallelLoops(op, combinedLoops);
|
|
});
|
|
}
|
|
};
|
|
} // namespace
|
|
|
|
std::unique_ptr<Pass> mlir::createParallelLoopCollapsingPass() {
|
|
return std::make_unique<ParallelLoopCollapsing>();
|
|
}
|