1*ba65584dSRenaud-K //===- TestAliasAnalysis.cpp - Test FIR lias analysis -----------------===// 2*ba65584dSRenaud-K // 3*ba65584dSRenaud-K // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*ba65584dSRenaud-K // See https://llvm.org/LICENSE.txt for license information. 5*ba65584dSRenaud-K // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*ba65584dSRenaud-K // 7*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 8*ba65584dSRenaud-K 9*ba65584dSRenaud-K #include "mlir/test/lib/Analysis/TestAliasAnalysis.h" 10*ba65584dSRenaud-K #include "mlir/Analysis/AliasAnalysis.h" 11*ba65584dSRenaud-K #include "mlir/Pass/Pass.h" 12*ba65584dSRenaud-K #include "flang/Optimizer/Analysis/AliasAnalysis.h" 13*ba65584dSRenaud-K 14*ba65584dSRenaud-K using namespace mlir; 15*ba65584dSRenaud-K 16*ba65584dSRenaud-K namespace { 17*ba65584dSRenaud-K 18*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 19*ba65584dSRenaud-K // Testing AliasResult 20*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 21*ba65584dSRenaud-K 22*ba65584dSRenaud-K struct TestFIRAliasAnalysisPass 23*ba65584dSRenaud-K : public test::TestAliasAnalysisBase, 24*ba65584dSRenaud-K PassWrapper<TestFIRAliasAnalysisPass, OperationPass<>> { MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anonfdd471fd0111::TestFIRAliasAnalysisPass25*ba65584dSRenaud-K MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestFIRAliasAnalysisPass) 26*ba65584dSRenaud-K 27*ba65584dSRenaud-K StringRef getArgument() const final { return "test-fir-alias-analysis"; } getDescription__anonfdd471fd0111::TestFIRAliasAnalysisPass28*ba65584dSRenaud-K StringRef getDescription() const final { 29*ba65584dSRenaud-K return "Test alias analysis results."; 30*ba65584dSRenaud-K } runOnOperation__anonfdd471fd0111::TestFIRAliasAnalysisPass31*ba65584dSRenaud-K void runOnOperation() override { 32*ba65584dSRenaud-K mlir::AliasAnalysis aliasAnalysis(getOperation()); 33*ba65584dSRenaud-K aliasAnalysis.addAnalysisImplementation(fir::AliasAnalysis()); 34*ba65584dSRenaud-K runAliasAnalysisOnOperation(getOperation(), aliasAnalysis); 35*ba65584dSRenaud-K } 36*ba65584dSRenaud-K }; 37*ba65584dSRenaud-K 38*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 39*ba65584dSRenaud-K // Testing ModRefResult 40*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 41*ba65584dSRenaud-K 42*ba65584dSRenaud-K struct TestFIRAliasAnalysisModRefPass 43*ba65584dSRenaud-K : public test::TestAliasAnalysisModRefBase, 44*ba65584dSRenaud-K PassWrapper<TestFIRAliasAnalysisModRefPass, OperationPass<>> { MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anonfdd471fd0111::TestFIRAliasAnalysisModRefPass45*ba65584dSRenaud-K MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestFIRAliasAnalysisModRefPass) 46*ba65584dSRenaud-K 47*ba65584dSRenaud-K StringRef getArgument() const final { 48*ba65584dSRenaud-K return "test-fir-alias-analysis-modref"; 49*ba65584dSRenaud-K } getDescription__anonfdd471fd0111::TestFIRAliasAnalysisModRefPass50*ba65584dSRenaud-K StringRef getDescription() const final { 51*ba65584dSRenaud-K return "Test alias analysis ModRef results."; 52*ba65584dSRenaud-K } runOnOperation__anonfdd471fd0111::TestFIRAliasAnalysisModRefPass53*ba65584dSRenaud-K void runOnOperation() override { 54*ba65584dSRenaud-K mlir::AliasAnalysis aliasAnalysis(getOperation()); 55*ba65584dSRenaud-K aliasAnalysis.addAnalysisImplementation(fir::AliasAnalysis()); 56*ba65584dSRenaud-K runAliasAnalysisOnOperation(getOperation(), aliasAnalysis); 57*ba65584dSRenaud-K } 58*ba65584dSRenaud-K }; 59*ba65584dSRenaud-K } // namespace 60*ba65584dSRenaud-K 61*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 62*ba65584dSRenaud-K // Pass Registration 63*ba65584dSRenaud-K //===----------------------------------------------------------------------===// 64*ba65584dSRenaud-K 65*ba65584dSRenaud-K namespace fir { 66*ba65584dSRenaud-K namespace test { registerTestFIRAliasAnalysisPass()67*ba65584dSRenaud-Kvoid registerTestFIRAliasAnalysisPass() { 68*ba65584dSRenaud-K PassRegistration<TestFIRAliasAnalysisPass>(); 69*ba65584dSRenaud-K PassRegistration<TestFIRAliasAnalysisModRefPass>(); 70*ba65584dSRenaud-K } 71*ba65584dSRenaud-K } // namespace test 72*ba65584dSRenaud-K } // namespace fir