LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
CallGraphAnalyses.h
Go to the documentation of this file.
1
//===-- CallGraphAnalyses.h -------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLZK Project, under the Apache License v2.0.
4
// See LICENSE.txt for license information.
5
// Copyright 2025 Veridise Inc.
6
// SPDX-License-Identifier: Apache-2.0
7
//
8
//===----------------------------------------------------------------------===//
9
10
#pragma once
11
12
#include "
llzk/Analysis/CallGraph.h
"
13
#include "
llzk/Dialect/Function/IR/Ops.h
"
14
15
#include <mlir/Pass/AnalysisManager.h>
16
17
#include <llvm/ADT/DenseMap.h>
18
#include <llvm/ADT/DenseSet.h>
19
#include <llvm/ADT/SCCIterator.h>
20
#include <llvm/ADT/STLExtras.h>
21
22
namespace
mlir
{
23
24
class
Operation;
25
26
}
// namespace mlir
27
28
namespace
llzk
{
29
35
class
CallGraphAnalysis
{
36
std::unique_ptr<llzk::CallGraph> cg;
37
38
public
:
39
CallGraphAnalysis
(mlir::Operation *op);
40
41
llzk::CallGraph
&
getCallGraph
() {
return
*cg; }
42
const
llzk::CallGraph
&
getCallGraph
()
const
{
return
*cg; }
43
};
44
46
class
CallGraphReachabilityAnalysis
{
47
48
// Maps function -> callees
49
using
CalleeMapTy =
50
mlir::DenseMap<mlir::CallableOpInterface, mlir::DenseSet<mlir::CallableOpInterface>>;
51
52
mutable
CalleeMapTy reachabilityMap;
53
54
std::reference_wrapper<llzk::CallGraph> callGraph;
55
56
public
:
57
CallGraphReachabilityAnalysis
(mlir::Operation *, mlir::AnalysisManager &am);
58
59
static
bool
isInvalidated
(
const
mlir::AnalysisManager::PreservedAnalyses &pa) {
60
return
!pa.isPreserved<
CallGraphReachabilityAnalysis
>() || !pa.isPreserved<
CallGraphAnalysis
>();
61
}
62
64
bool
isReachable
(mlir::CallableOpInterface A, mlir::CallableOpInterface B)
const
;
65
66
const
llzk::CallGraph
&
getCallGraph
()
const
{
return
callGraph.get(); }
67
68
private
:
69
inline
bool
isReachableCached(mlir::CallableOpInterface A, mlir::CallableOpInterface B)
const
{
70
auto
it = reachabilityMap.find(A);
71
return
it != reachabilityMap.
end
() && it->second.find(B) != it->second.end();
72
}
73
};
74
75
}
// namespace llzk
CallGraph.h
Ops.h
llzk::CallGraphAnalysis
An analysis wrapper to compute the CallGraph for a Module.
Definition
CallGraphAnalyses.h:35
llzk::CallGraphAnalysis::getCallGraph
llzk::CallGraph & getCallGraph()
Definition
CallGraphAnalyses.h:41
llzk::CallGraphAnalysis::getCallGraph
const llzk::CallGraph & getCallGraph() const
Definition
CallGraphAnalyses.h:42
llzk::CallGraphAnalysis::CallGraphAnalysis
CallGraphAnalysis(mlir::Operation *op)
Definition
CallGraphAnalyses.cpp:29
llzk::CallGraphReachabilityAnalysis::getCallGraph
const llzk::CallGraph & getCallGraph() const
Definition
CallGraphAnalyses.h:66
llzk::CallGraphReachabilityAnalysis::isInvalidated
static bool isInvalidated(const mlir::AnalysisManager::PreservedAnalyses &pa)
Definition
CallGraphAnalyses.h:59
llzk::CallGraphReachabilityAnalysis::CallGraphReachabilityAnalysis
CallGraphReachabilityAnalysis(mlir::Operation *, mlir::AnalysisManager &am)
NOTE: the need for the mlir::Operation argument is a requirement of the mlir::getAnalysis method,...
Definition
CallGraphAnalyses.cpp:47
llzk::CallGraphReachabilityAnalysis::isReachable
bool isReachable(mlir::CallableOpInterface A, mlir::CallableOpInterface B) const
Returns whether B is reachable from A.
Definition
CallGraphAnalyses.cpp:53
llzk::CallGraph
This is a port of mlir::CallGraph that has been adapted to use the custom symbol lookup helpers (see ...
Definition
CallGraph.h:164
llzk::CallGraph::end
iterator end() const
Definition
CallGraph.h:218
llzk
Definition
AnalysisPassEnums.cpp:19
mlir
Definition
ValueModel.h:30
include
llzk
Analysis
CallGraphAnalyses.h
Generated by
1.17.0
Copyright 2025 Veridise Inc. under the Apache License v2.0. Copyright 2026 Project LLZK under the Apache License v2.0.