xref: /llvm-project/flang/test/lib/Analysis/AliasAnalysis/TestAliasAnalysis.cpp (revision ba65584d1545951ce958ea5729692374055d6b9f)
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-K void registerTestFIRAliasAnalysisPass() {
68*ba65584dSRenaud-K   PassRegistration<TestFIRAliasAnalysisPass>();
69*ba65584dSRenaud-K   PassRegistration<TestFIRAliasAnalysisModRefPass>();
70*ba65584dSRenaud-K }
71*ba65584dSRenaud-K } // namespace test
72*ba65584dSRenaud-K } // namespace fir