//===- TestAliasAnalysis.cpp - Test alias analysis results ----------------===// // // 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 // //===----------------------------------------------------------------------===// // // This file contains test passes for constructing and testing alias analysis // results. // //===----------------------------------------------------------------------===// #include "TestAliasAnalysis.h" #include "mlir/Analysis/AliasAnalysis.h" #include "mlir/Analysis/AliasAnalysis/LocalAliasAnalysis.h" #include "mlir/Interfaces/FunctionInterfaces.h" #include "mlir/Pass/Pass.h" usingnamespacemlir; /// Print a value that is used as an operand of an alias query. static void printAliasOperand(Operation *op) { … } static void printAliasOperand(Value value) { … } namespace mlir { namespace test { void printAliasResult(AliasResult result, Value lhs, Value rhs) { … } /// Print the result of an alias query. void printModRefResult(ModRefResult result, Operation *op, Value location) { … } void TestAliasAnalysisBase::runAliasAnalysisOnOperation( Operation *op, AliasAnalysis &aliasAnalysis) { … } void TestAliasAnalysisModRefBase::runAliasAnalysisOnOperation( Operation *op, AliasAnalysis &aliasAnalysis) { … } } // namespace test } // namespace mlir //===----------------------------------------------------------------------===// // Testing AliasResult //===----------------------------------------------------------------------===// namespace { struct TestAliasAnalysisPass : public test::TestAliasAnalysisBase, PassWrapper<TestAliasAnalysisPass, OperationPass<>> { … }; } // namespace //===----------------------------------------------------------------------===// // Testing ModRefResult //===----------------------------------------------------------------------===// namespace { struct TestAliasAnalysisModRefPass : public test::TestAliasAnalysisModRefBase, PassWrapper<TestAliasAnalysisModRefPass, OperationPass<>> { … }; } // namespace //===----------------------------------------------------------------------===// // Testing LocalAliasAnalysis extending //===----------------------------------------------------------------------===// /// Check if value is function argument. static bool isFuncArg(Value val) { … } /// Check if value has "restrict" attribute. Value must be a function argument. static bool isRestrict(Value val) { … } namespace { /// LocalAliasAnalysis extended to support "restrict" attreibute. class LocalAliasAnalysisRestrict : public LocalAliasAnalysis { … }; /// This pass tests adding additional analysis impls to the AliasAnalysis. struct TestAliasAnalysisExtendingPass : public test::TestAliasAnalysisBase, PassWrapper<TestAliasAnalysisExtendingPass, OperationPass<>> { … }; } // namespace //===----------------------------------------------------------------------===// // Pass Registration //===----------------------------------------------------------------------===// namespace mlir { namespace test { void registerTestAliasAnalysisPass() { … } } // namespace test } // namespace mlir