1*108b08f2SMatthias Springer //===- RuntimeOpVerification.cpp - Op Verification ------------------------===// 2*108b08f2SMatthias Springer // 3*108b08f2SMatthias Springer // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*108b08f2SMatthias Springer // See https://llvm.org/LICENSE.txt for license information. 5*108b08f2SMatthias Springer // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*108b08f2SMatthias Springer // 7*108b08f2SMatthias Springer //===----------------------------------------------------------------------===// 8*108b08f2SMatthias Springer 9*108b08f2SMatthias Springer #include "mlir/Transforms/Passes.h" 10*108b08f2SMatthias Springer 11*108b08f2SMatthias Springer #include "mlir/IR/Builders.h" 12*108b08f2SMatthias Springer #include "mlir/IR/Operation.h" 13*108b08f2SMatthias Springer #include "mlir/Interfaces/RuntimeVerifiableOpInterface.h" 14*108b08f2SMatthias Springer 15*108b08f2SMatthias Springer namespace mlir { 16*108b08f2SMatthias Springer #define GEN_PASS_DEF_GENERATERUNTIMEVERIFICATION 17*108b08f2SMatthias Springer #include "mlir/Transforms/Passes.h.inc" 18*108b08f2SMatthias Springer } // namespace mlir 19*108b08f2SMatthias Springer 20*108b08f2SMatthias Springer using namespace mlir; 21*108b08f2SMatthias Springer 22*108b08f2SMatthias Springer namespace { 23*108b08f2SMatthias Springer struct GenerateRuntimeVerificationPass 24*108b08f2SMatthias Springer : public impl::GenerateRuntimeVerificationBase< 25*108b08f2SMatthias Springer GenerateRuntimeVerificationPass> { 26*108b08f2SMatthias Springer void runOnOperation() override; 27*108b08f2SMatthias Springer }; 28*108b08f2SMatthias Springer } // namespace 29*108b08f2SMatthias Springer runOnOperation()30*108b08f2SMatthias Springervoid GenerateRuntimeVerificationPass::runOnOperation() { 31*108b08f2SMatthias Springer getOperation()->walk([&](RuntimeVerifiableOpInterface verifiableOp) { 32*108b08f2SMatthias Springer OpBuilder builder(getOperation()->getContext()); 33*108b08f2SMatthias Springer builder.setInsertionPoint(verifiableOp); 34*108b08f2SMatthias Springer verifiableOp.generateRuntimeVerification(builder, verifiableOp.getLoc()); 35*108b08f2SMatthias Springer }); 36*108b08f2SMatthias Springer } 37*108b08f2SMatthias Springer createGenerateRuntimeVerificationPass()38*108b08f2SMatthias Springerstd::unique_ptr<Pass> mlir::createGenerateRuntimeVerificationPass() { 39*108b08f2SMatthias Springer return std::make_unique<GenerateRuntimeVerificationPass>(); 40*108b08f2SMatthias Springer } 41