brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · a0dcc20 Raw
52 lines · cpp
1//===- AffineScalarReplacement.cpp - Affine scalar replacement pass -------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements a pass to forward affine memref stores to loads, thereby10// potentially getting rid of intermediate memrefs entirely. It also removes11// redundant loads.12//===----------------------------------------------------------------------===//13 14#include "mlir/Dialect/Affine/Passes.h"15 16#include "mlir/Analysis/AliasAnalysis.h"17#include "mlir/Dialect/Affine/Utils.h"18#include "mlir/Dialect/Func/IR/FuncOps.h"19#include "mlir/IR/Dominance.h"20 21namespace mlir {22namespace affine {23#define GEN_PASS_DEF_AFFINESCALARREPLACEMENT24#include "mlir/Dialect/Affine/Passes.h.inc"25} // namespace affine26} // namespace mlir27 28#define DEBUG_TYPE "affine-scalrep"29 30using namespace mlir;31using namespace mlir::affine;32 33namespace {34struct AffineScalarReplacement35    : public affine::impl::AffineScalarReplacementBase<36          AffineScalarReplacement> {37  void runOnOperation() override;38};39 40} // namespace41 42std::unique_ptr<OperationPass<func::FuncOp>>43mlir::affine::createAffineScalarReplacementPass() {44  return std::make_unique<AffineScalarReplacement>();45}46 47void AffineScalarReplacement::runOnOperation() {48  affineScalarReplace(getOperation(), getAnalysis<DominanceInfo>(),49                      getAnalysis<PostDominanceInfo>(),50                      getAnalysis<AliasAnalysis>());51}52