summaryrefslogtreecommitdiffstats
path: root/mlir/test/lib/Transforms
diff options
context:
space:
mode:
authorRiver Riddle <riverriddle@google.com>2019-09-23 11:43:43 -0700
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-09-23 11:44:13 -0700
commit8cb405a8bed4a6a3782591c5eb447a83857f94c8 (patch)
tree46cfeaaec3c25341950d693f6455a29c3ebc4d29 /mlir/test/lib/Transforms
parent8965011fadf24f4986b0d9c00fc6af0f2b13ee28 (diff)
downloadbcm5719-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.txt1
-rw-r--r--mlir/test/lib/Transforms/TestCallGraph.cpp39
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.");
OpenPOWER on IntegriCloud