MLIR 23.0.0git
Dominance.h
Go to the documentation of this file.
1//===- Dominance.h - C API for Dominance Analysis -----------------*- C -*-===//
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#ifndef MLIR_C_DOMINANCE_H
10#define MLIR_C_DOMINANCE_H
11
12#include "mlir-c/IR.h"
13#include "mlir-c/Support.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#define DEFINE_C_API_STRUCT(name, storage) \
20 struct name { \
21 storage *ptr; \
22 }; \
23 typedef struct name name
24
25DEFINE_C_API_STRUCT(MlirDominanceInfo, void);
26DEFINE_C_API_STRUCT(MlirPostDominanceInfo, void);
27
28#undef DEFINE_C_API_STRUCT
29
30//===----------------------------------------------------------------------===//
31// DominanceInfo API
32//===----------------------------------------------------------------------===//
33
34/// Creates a DominanceInfo for the given operation (typically a FuncOp or
35/// ModuleOp). The caller owns the returned object and must destroy it.
36MLIR_CAPI_EXPORTED MlirDominanceInfo mlirDominanceInfoCreate(MlirOperation op);
37
38/// Destroys the given DominanceInfo.
39MLIR_CAPI_EXPORTED void mlirDominanceInfoDestroy(MlirDominanceInfo info);
40
41/// Returns true if operation A properly dominates operation B.
44 MlirOperation a, MlirOperation b);
45
46/// Returns true if operation A dominates operation B (A == B or A properly
47/// dominates B).
49mlirDominanceInfoDominatesOperation(MlirDominanceInfo info, MlirOperation a,
50 MlirOperation b);
51
52/// Returns true if value A properly dominates operation B.
54mlirDominanceInfoValueProperlyDominates(MlirDominanceInfo info, MlirValue a,
55 MlirOperation b);
56
57/// Returns true if value A dominates operation B (the operation defining A is B
58/// or A properly dominates B).
59MLIR_CAPI_EXPORTED bool mlirDominanceInfoValueDominates(MlirDominanceInfo info,
60 MlirValue a,
61 MlirOperation b);
62
63/// Returns true if block A properly dominates block B.
65mlirDominanceInfoProperlyDominatesBlock(MlirDominanceInfo info, MlirBlock a,
66 MlirBlock b);
67
68/// Returns true if block A dominates block B.
69MLIR_CAPI_EXPORTED bool mlirDominanceInfoDominatesBlock(MlirDominanceInfo info,
70 MlirBlock a,
71 MlirBlock b);
72
73/// Finds the nearest common dominator of blocks A and B. Returns a null block
74/// if none exists.
76 MlirDominanceInfo info, MlirBlock a, MlirBlock b);
77
78/// Returns true if the given block is reachable from the entry block of its
79/// region.
81mlirDominanceInfoIsReachableFromEntry(MlirDominanceInfo info, MlirBlock block);
82
83/// Invalidates all cached dominance information.
84MLIR_CAPI_EXPORTED void mlirDominanceInfoInvalidate(MlirDominanceInfo info);
85
86//===----------------------------------------------------------------------===//
87// PostDominanceInfo API
88//===----------------------------------------------------------------------===//
89
90/// Creates a PostDominanceInfo for the given operation.
91MLIR_CAPI_EXPORTED MlirPostDominanceInfo
92mlirPostDominanceInfoCreate(MlirOperation op);
93
94/// Destroys the given PostDominanceInfo.
96mlirPostDominanceInfoDestroy(MlirPostDominanceInfo info);
97
98/// Returns true if operation A properly post-dominates operation B.
100 MlirPostDominanceInfo info, MlirOperation a, MlirOperation b);
101
102/// Returns true if operation A post-dominates operation B.
104mlirPostDominanceInfoPostDominatesOperation(MlirPostDominanceInfo info,
105 MlirOperation a, MlirOperation b);
106
107/// Returns true if block A properly post-dominates block B.
109mlirPostDominanceInfoProperlyPostDominatesBlock(MlirPostDominanceInfo info,
110 MlirBlock a, MlirBlock b);
111
112/// Returns true if block A post-dominates block B.
114mlirPostDominanceInfoPostDominatesBlock(MlirPostDominanceInfo info, MlirBlock a,
115 MlirBlock b);
116
117/// Invalidates all cached post-dominance information.
119mlirPostDominanceInfoInvalidate(MlirPostDominanceInfo info);
120
121#ifdef __cplusplus
122}
123#endif
124
125#endif // MLIR_C_DOMINANCE_H
b
Return true if permutation is a valid permutation of the outer_dims_perm (case OuterOrInnerPerm::Oute...
MLIR_CAPI_EXPORTED bool mlirDominanceInfoProperlyDominatesBlock(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A properly dominates block B.
Definition Dominance.cpp:46
MLIR_CAPI_EXPORTED bool mlirPostDominanceInfoPostDominatesOperation(MlirPostDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A post-dominates operation B.
Definition Dominance.cpp:88
MLIR_CAPI_EXPORTED MlirDominanceInfo mlirDominanceInfoCreate(MlirOperation op)
Creates a DominanceInfo for the given operation (typically a FuncOp or ModuleOp).
Definition Dominance.cpp:19
#define DEFINE_C_API_STRUCT(name, storage)
Definition Dominance.h:19
MLIR_CAPI_EXPORTED bool mlirDominanceInfoValueProperlyDominates(MlirDominanceInfo info, MlirValue a, MlirOperation b)
Returns true if value A properly dominates operation B.
Definition Dominance.cpp:36
MLIR_CAPI_EXPORTED bool mlirDominanceInfoDominatesBlock(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A dominates block B.
Definition Dominance.cpp:51
MLIR_CAPI_EXPORTED bool mlirPostDominanceInfoProperlyPostDominatesOperation(MlirPostDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A properly post-dominates operation B.
Definition Dominance.cpp:83
MLIR_CAPI_EXPORTED void mlirPostDominanceInfoInvalidate(MlirPostDominanceInfo info)
Invalidates all cached post-dominance information.
MLIR_CAPI_EXPORTED bool mlirDominanceInfoProperlyDominatesOperation(MlirDominanceInfo info, MlirOperation a, MlirOperation b)
Returns true if operation A properly dominates operation B.
Definition Dominance.cpp:25
MLIR_CAPI_EXPORTED bool mlirPostDominanceInfoProperlyPostDominatesBlock(MlirPostDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A properly post-dominates block B.
Definition Dominance.cpp:94
MLIR_CAPI_EXPORTED bool mlirPostDominanceInfoPostDominatesBlock(MlirPostDominanceInfo info, MlirBlock a, MlirBlock b)
Returns true if block A post-dominates block B.
Definition Dominance.cpp:99
MLIR_CAPI_EXPORTED 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
MLIR_CAPI_EXPORTED void mlirPostDominanceInfoDestroy(MlirPostDominanceInfo info)
Destroys the given PostDominanceInfo.
Definition Dominance.cpp:79
MLIR_CAPI_EXPORTED 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
MLIR_CAPI_EXPORTED void mlirDominanceInfoDestroy(MlirDominanceInfo info)
Destroys the given DominanceInfo.
Definition Dominance.cpp:23
MLIR_CAPI_EXPORTED void mlirDominanceInfoInvalidate(MlirDominanceInfo info)
Invalidates all cached dominance information.
Definition Dominance.cpp:67
MLIR_CAPI_EXPORTED MlirPostDominanceInfo mlirPostDominanceInfoCreate(MlirOperation op)
Creates a PostDominanceInfo for the given operation.
Definition Dominance.cpp:75
MLIR_CAPI_EXPORTED 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
MLIR_CAPI_EXPORTED MlirBlock mlirDominanceInfoFindNearestCommonDominator(MlirDominanceInfo info, MlirBlock a, MlirBlock b)
Finds the nearest common dominator of blocks A and B.
Definition Dominance.cpp:56
#define MLIR_CAPI_EXPORTED
Definition Support.h:46