MLIR 23.0.0git
Dominance.cpp
Go to the documentation of this file.
1//===- Dominance.cpp - C API for Dominance Analysis -----------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "mlir-c/Dominance.h"
10#include "mlir/CAPI/Dominance.h"
11#include "mlir/CAPI/IR.h"
12
13using namespace mlir;
14
15//===----------------------------------------------------------------------===//
16// DominanceInfo API
17//===----------------------------------------------------------------------===//
18
19MlirDominanceInfo mlirDominanceInfoCreate(MlirOperation op) {
20 return wrap(new DominanceInfo(unwrap(op)));
21}
22
23void mlirDominanceInfoDestroy(MlirDominanceInfo info) { delete unwrap(info); }
24
26 MlirOperation a,
27 MlirOperation b) {
28 return unwrap(info)->properlyDominates(unwrap(a), unwrap(b));
29}
30
31bool mlirDominanceInfoDominatesOperation(MlirDominanceInfo info,
32 MlirOperation a, MlirOperation b) {
33 return unwrap(info)->dominates(unwrap(a), unwrap(b));
34}
35
36bool mlirDominanceInfoValueProperlyDominates(MlirDominanceInfo info,
37 MlirValue a, MlirOperation b) {
38 return unwrap(info)->properlyDominates(unwrap(a), unwrap(b));
39}
40
41bool mlirDominanceInfoValueDominates(MlirDominanceInfo info, MlirValue a,
42 MlirOperation b) {
43 return unwrap(info)->dominates(unwrap(a), unwrap(b));
44}
45
46bool mlirDominanceInfoProperlyDominatesBlock(MlirDominanceInfo info,
47 MlirBlock a, MlirBlock b) {
48 return unwrap(info)->properlyDominates(unwrap(a), unwrap(b));
49}
50
51bool mlirDominanceInfoDominatesBlock(MlirDominanceInfo info, MlirBlock a,
52 MlirBlock b) {
53 return unwrap(info)->dominates(unwrap(a), unwrap(b));
54}
55
56MlirBlock mlirDominanceInfoFindNearestCommonDominator(MlirDominanceInfo info,
57 MlirBlock a,
58 MlirBlock b) {
59 return wrap(unwrap(info)->findNearestCommonDominator(unwrap(a), unwrap(b)));
60}
61
62bool mlirDominanceInfoIsReachableFromEntry(MlirDominanceInfo info,
63 MlirBlock block) {
64 return unwrap(info)->isReachableFromEntry(unwrap(block));
65}
66
67void mlirDominanceInfoInvalidate(MlirDominanceInfo info) {
68 unwrap(info)->invalidate();
69}
70
71//===----------------------------------------------------------------------===//
72// PostDominanceInfo API
73//===----------------------------------------------------------------------===//
74
75MlirPostDominanceInfo mlirPostDominanceInfoCreate(MlirOperation op) {
76 return wrap(new PostDominanceInfo(unwrap(op)));
77}
78
79void mlirPostDominanceInfoDestroy(MlirPostDominanceInfo info) {
80 delete unwrap(info);
81}
82
84 MlirPostDominanceInfo info, MlirOperation a, MlirOperation b) {
85 return unwrap(info)->properlyPostDominates(unwrap(a), unwrap(b));
86}
87
88bool mlirPostDominanceInfoPostDominatesOperation(MlirPostDominanceInfo info,
89 MlirOperation a,
90 MlirOperation b) {
91 return unwrap(info)->postDominates(unwrap(a), unwrap(b));
92}
93
95 MlirBlock a, MlirBlock b) {
96 return unwrap(info)->properlyPostDominates(unwrap(a), unwrap(b));
97}
98
99bool mlirPostDominanceInfoPostDominatesBlock(MlirPostDominanceInfo info,
100 MlirBlock a, MlirBlock b) {
101 return unwrap(info)->postDominates(unwrap(a), unwrap(b));
102}
103
104void mlirPostDominanceInfoInvalidate(MlirPostDominanceInfo info) {
105 unwrap(info)->invalidate();
106}
void mlirPostDominanceInfoInvalidate(MlirPostDominanceInfo info)
Invalidates all cached post-dominance information.
MlirDominanceInfo mlirDominanceInfoCreate(MlirOperation op)
Creates a DominanceInfo for the given operation (typically a FuncOp or ModuleOp).
Definition Dominance.cpp:19
MlirPostDominanceInfo mlirPostDominanceInfoCreate(MlirOperation op)
Creates a PostDominanceInfo for the given operation.
Definition Dominance.cpp:75
bool mlirDominanceInfoValueProperlyDominates(MlirDominanceInfo info, MlirValue a, MlirOperation b)
Returns true if value A properly dominates operation B.
Definition Dominance.cpp:36
bool mlirDominanceInfoIsReachableFromEntry(MlirDominanceInfo info, MlirBlock block)
Returns true if the given block is reachable from the entry block of its region.
Definition Dominance.cpp:62
bool mlirDominanceInfoDominatesOperation(MlirDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A dominates operation B (A == B or A properly dominates B).
Definition Dominance.cpp:31
void mlirDominanceInfoInvalidate(MlirDominanceInfo info)
Invalidates all cached dominance information.
Definition Dominance.cpp:67
MlirBlock mlirDominanceInfoFindNearestCommonDominator(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Finds the nearest common dominator of blocks A and B.
Definition Dominance.cpp:56
bool mlirDominanceInfoProperlyDominatesOperation(MlirDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A properly dominates operation B.
Definition Dominance.cpp:25
bool mlirDominanceInfoProperlyDominatesBlock(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A properly dominates block B.
Definition Dominance.cpp:46
bool mlirPostDominanceInfoPostDominatesBlock(MlirPostDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A post-dominates block B.
Definition Dominance.cpp:99
bool mlirPostDominanceInfoProperlyPostDominatesBlock(MlirPostDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A properly post-dominates block B.
Definition Dominance.cpp:94
void mlirPostDominanceInfoDestroy(MlirPostDominanceInfo info)
Destroys the given PostDominanceInfo.
Definition Dominance.cpp:79
bool mlirDominanceInfoDominatesBlock(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A dominates block B.
Definition Dominance.cpp:51
void mlirDominanceInfoDestroy(MlirDominanceInfo info)
Destroys the given DominanceInfo.
Definition Dominance.cpp:23
bool mlirDominanceInfoValueDominates(MlirDominanceInfo info, MlirValue a, MlirOperation b)
Returns true if value A dominates operation B (the operation defining A is B or A properly dominates ...
Definition Dominance.cpp:41
bool mlirPostDominanceInfoPostDominatesOperation(MlirPostDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A post-dominates operation B.
Definition Dominance.cpp:88
bool mlirPostDominanceInfoProperlyPostDominatesOperation(MlirPostDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A properly post-dominates operation B.
Definition Dominance.cpp:83
b
Return true if permutation is a valid permutation of the outer_dims_perm (case OuterOrInnerPerm::Oute...
A class for computing basic dominance information.
Definition Dominance.h:143
A class for computing basic postdominance information.
Definition Dominance.h:207
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
Definition Diagnostics.h:24
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition Diagnostics.h:19
Include the generated interface declarations.