| //===- Dominance.cpp - C API for Dominance Analysis -----------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "mlir-c/Dominance.h" |
| #include "mlir/CAPI/Dominance.h" |
| #include "mlir/CAPI/IR.h" |
| |
| using namespace mlir; |
| |
| //===----------------------------------------------------------------------===// |
| // DominanceInfo API |
| //===----------------------------------------------------------------------===// |
| |
| MlirDominanceInfo mlirDominanceInfoCreate(MlirOperation op) { |
| return wrap(new DominanceInfo(unwrap(op))); |
| } |
| |
| void mlirDominanceInfoDestroy(MlirDominanceInfo info) { delete unwrap(info); } |
| |
| bool mlirDominanceInfoProperlyDominatesOperation(MlirDominanceInfo info, |
| MlirOperation a, |
| MlirOperation b) { |
| return unwrap(info)->properlyDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirDominanceInfoDominatesOperation(MlirDominanceInfo info, |
| MlirOperation a, MlirOperation b) { |
| return unwrap(info)->dominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirDominanceInfoValueProperlyDominates(MlirDominanceInfo info, |
| MlirValue a, MlirOperation b) { |
| return unwrap(info)->properlyDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirDominanceInfoValueDominates(MlirDominanceInfo info, MlirValue a, |
| MlirOperation b) { |
| return unwrap(info)->dominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirDominanceInfoProperlyDominatesBlock(MlirDominanceInfo info, |
| MlirBlock a, MlirBlock b) { |
| return unwrap(info)->properlyDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirDominanceInfoDominatesBlock(MlirDominanceInfo info, MlirBlock a, |
| MlirBlock b) { |
| return unwrap(info)->dominates(unwrap(a), unwrap(b)); |
| } |
| |
| MlirBlock mlirDominanceInfoFindNearestCommonDominator(MlirDominanceInfo info, |
| MlirBlock a, |
| MlirBlock b) { |
| return wrap(unwrap(info)->findNearestCommonDominator(unwrap(a), unwrap(b))); |
| } |
| |
| bool mlirDominanceInfoIsReachableFromEntry(MlirDominanceInfo info, |
| MlirBlock block) { |
| return unwrap(info)->isReachableFromEntry(unwrap(block)); |
| } |
| |
| void mlirDominanceInfoInvalidate(MlirDominanceInfo info) { |
| unwrap(info)->invalidate(); |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // PostDominanceInfo API |
| //===----------------------------------------------------------------------===// |
| |
| MlirPostDominanceInfo mlirPostDominanceInfoCreate(MlirOperation op) { |
| return wrap(new PostDominanceInfo(unwrap(op))); |
| } |
| |
| void mlirPostDominanceInfoDestroy(MlirPostDominanceInfo info) { |
| delete unwrap(info); |
| } |
| |
| bool mlirPostDominanceInfoProperlyPostDominatesOperation( |
| MlirPostDominanceInfo info, MlirOperation a, MlirOperation b) { |
| return unwrap(info)->properlyPostDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirPostDominanceInfoPostDominatesOperation(MlirPostDominanceInfo info, |
| MlirOperation a, |
| MlirOperation b) { |
| return unwrap(info)->postDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirPostDominanceInfoProperlyPostDominatesBlock(MlirPostDominanceInfo info, |
| MlirBlock a, MlirBlock b) { |
| return unwrap(info)->properlyPostDominates(unwrap(a), unwrap(b)); |
| } |
| |
| bool mlirPostDominanceInfoPostDominatesBlock(MlirPostDominanceInfo info, |
| MlirBlock a, MlirBlock b) { |
| return unwrap(info)->postDominates(unwrap(a), unwrap(b)); |
| } |
| |
| void mlirPostDominanceInfoInvalidate(MlirPostDominanceInfo info) { |
| unwrap(info)->invalidate(); |
| } |