diff options
| author | River Riddle <riverriddle@google.com> | 2019-09-23 11:43:43 -0700 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-09-23 11:44:13 -0700 |
| commit | 8cb405a8bed4a6a3782591c5eb447a83857f94c8 (patch) | |
| tree | 46cfeaaec3c25341950d693f6455a29c3ebc4d29 /mlir/test/lib/Transforms | |
| parent | 8965011fadf24f4986b0d9c00fc6af0f2b13ee28 (diff) | |
| download | bcm5719-llvm-8cb405a8bed4a6a3782591c5eb447a83857f94c8.tar.gz bcm5719-llvm-8cb405a8bed4a6a3782591c5eb447a83857f94c8.zip | |
Add initial callgraph support.
Using the two call interfaces, CallOpInterface and CallableOpInterface, this change adds support for an initial multi-level CallGraph. This call graph builds a set of nodes for each callable region, and connects them via edges. An edge may be any of the following types:
* Abstract
- An edge not produced by a call operation, used for connecting to internal nodes from external nodes.
* Call
- A call edge is an edge defined via a call-like operation.
* Child
- This is an artificial edge connecting nested callgraph nodes.
This callgraph will be used, and improved upon, to begin supporting more interesting interprocedural analyses and transformation. In a followup, this callgraph will be used to support more complex inlining support.
PiperOrigin-RevId: 270724968
Diffstat (limited to 'mlir/test/lib/Transforms')
| -rw-r--r-- | mlir/test/lib/Transforms/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | mlir/test/lib/Transforms/TestCallGraph.cpp | 39 |
2 files changed, 40 insertions, 0 deletions
diff --git a/mlir/test/lib/Transforms/CMakeLists.txt b/mlir/test/lib/Transforms/CMakeLists.txt index 275283b2c18..a475526978b 100644 --- a/mlir/test/lib/Transforms/CMakeLists.txt +++ b/mlir/test/lib/Transforms/CMakeLists.txt @@ -1,4 +1,5 @@ add_llvm_library(MLIRTestTransforms + TestCallGraph.cpp TestConstantFold.cpp TestLoopFusion.cpp TestInlining.cpp diff --git a/mlir/test/lib/Transforms/TestCallGraph.cpp b/mlir/test/lib/Transforms/TestCallGraph.cpp new file mode 100644 index 00000000000..debf5e77645 --- /dev/null +++ b/mlir/test/lib/Transforms/TestCallGraph.cpp @@ -0,0 +1,39 @@ +//===- TestCallGraph.cpp - Test callgraph construction and iteration ------===// +// +// Copyright 2019 The MLIR Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= +// +// This file contains test passes for constructing and iterating over a +// callgraph. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Analysis/CallGraph.h" +#include "mlir/Pass/Pass.h" + +using namespace mlir; + +namespace { +struct TestCallGraphPass : public ModulePass<TestCallGraphPass> { + void runOnModule() { + llvm::errs() << "Testing : " << getModule().getAttr("test.name") << "\n"; + getAnalysis<CallGraph>().print(llvm::errs()); + } +}; +} // end anonymous namespace + +static PassRegistration<TestCallGraphPass> + pass("test-print-callgraph", + "Print the contents of a constructed callgraph."); |

