| //===- RuntimeVerifiableOpInterface.td - Op Verification ---*- tablegen -*-===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MLIR_INTERFACES_RUNTIMEVERIFIABLEOPINTERFACE |
| #define MLIR_INTERFACES_RUNTIMEVERIFIABLEOPINTERFACE |
| |
| include "mlir/IR/OpBase.td" |
| |
| def RuntimeVerifiableOpInterface : OpInterface<"RuntimeVerifiableOpInterface"> { |
| let description = [{ |
| Implementations of this interface generate IR for runtime op verification. |
| |
| Incorrect op usage can often be caught by op verifiers based on static |
| program information. However, in the absence of static program information, |
| it can remain undetected at compile time (e.g., in case of dynamic memref |
| strides instead of static memref strides). Such cases can be checked at |
| runtime. The op-specific checks are generated by this interface. |
| }]; |
| let cppNamespace = "::mlir"; |
| |
| let methods = [ |
| InterfaceMethod< |
| /*desc=*/[{ |
| Generate IR to verify this op at runtime, aborting runtime execution if |
| verification fails. |
| }], |
| /*retTy=*/"void", |
| /*methodName=*/"generateRuntimeVerification", |
| /*args=*/(ins "::mlir::OpBuilder &":$builder, |
| "::mlir::Location":$loc) |
| >, |
| ]; |
| |
| let extraClassDeclaration = [{ |
| /// Generate the error message that will be printed to the user when |
| /// verification fails. |
| static std::string generateErrorMessage(Operation *op, const std::string &msg); |
| }]; |
| } |
| |
| #endif // MLIR_INTERFACES_RUNTIMEVERIFIABLEOPINTERFACE |