57 lines · cpp
1//===- ACCInitializeFIRAnalyses.cpp - Initialize FIR analyses ------------===//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 pass initializes analyses that can be reused by subsequent OpenACC10// passes in the pipeline.11//12//===----------------------------------------------------------------------===//13 14#include "flang/Optimizer/Analysis/AliasAnalysis.h"15#include "flang/Optimizer/OpenACC/Analysis/FIROpenACCSupportAnalysis.h"16#include "flang/Optimizer/OpenACC/Passes.h"17#include "mlir/Analysis/AliasAnalysis.h"18#include "mlir/Dialect/OpenACC/Analysis/OpenACCSupport.h"19 20namespace fir {21namespace acc {22#define GEN_PASS_DEF_ACCINITIALIZEFIRANALYSES23#include "flang/Optimizer/OpenACC/Passes.h.inc"24} // namespace acc25} // namespace fir26 27#define DEBUG_TYPE "acc-initialize-fir-analyses"28 29namespace {30 31/// This pass initializes analyses for reuse by subsequent OpenACC passes in the32/// pipeline. It creates and caches analyses like OpenACCSupport so they can be33/// retrieved by later passes using getAnalysis() or getCachedAnalysis().34class ACCInitializeFIRAnalysesPass35 : public fir::acc::impl::ACCInitializeFIRAnalysesBase<36 ACCInitializeFIRAnalysesPass> {37public:38 void runOnOperation() override {39 // Initialize OpenACCSupport with FIR-specific implementation.40 auto &openACCSupport = getAnalysis<mlir::acc::OpenACCSupport>();41 openACCSupport.setImplementation(fir::acc::FIROpenACCSupportAnalysis());42 43 // Initialize AliasAnalysis with FIR-specific implementation.44 auto &aliasAnalysis = getAnalysis<mlir::AliasAnalysis>();45 aliasAnalysis.addAnalysisImplementation(fir::AliasAnalysis());46 47 // Mark all analyses as preserved since this pass only initializes them48 markAllAnalysesPreserved();49 }50};51 52} // namespace53 54std::unique_ptr<mlir::Pass> fir::acc::createACCInitializeFIRAnalysesPass() {55 return std::make_unique<ACCInitializeFIRAnalysesPass>();56}57