1*c40146c2SMarius Brehler //===- ArithToEmitCPass.cpp - Arith to EmitC Pass ---------------*- C++ -*-===// 2*c40146c2SMarius Brehler // 3*c40146c2SMarius Brehler // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*c40146c2SMarius Brehler // See https://llvm.org/LICENSE.txt for license information. 5*c40146c2SMarius Brehler // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*c40146c2SMarius Brehler // 7*c40146c2SMarius Brehler //===----------------------------------------------------------------------===// 8*c40146c2SMarius Brehler // 9*c40146c2SMarius Brehler // This file implements a pass to convert the Arith dialect to the EmitC 10*c40146c2SMarius Brehler // dialect. 11*c40146c2SMarius Brehler // 12*c40146c2SMarius Brehler //===----------------------------------------------------------------------===// 13*c40146c2SMarius Brehler 14*c40146c2SMarius Brehler #include "mlir/Conversion/ArithToEmitC/ArithToEmitCPass.h" 15*c40146c2SMarius Brehler 16*c40146c2SMarius Brehler #include "mlir/Conversion/ArithToEmitC/ArithToEmitC.h" 17*c40146c2SMarius Brehler #include "mlir/Dialect/Arith/IR/Arith.h" 18*c40146c2SMarius Brehler #include "mlir/Dialect/EmitC/IR/EmitC.h" 19*c40146c2SMarius Brehler #include "mlir/Pass/Pass.h" 20*c40146c2SMarius Brehler #include "mlir/Transforms/DialectConversion.h" 21*c40146c2SMarius Brehler 22*c40146c2SMarius Brehler namespace mlir { 23*c40146c2SMarius Brehler #define GEN_PASS_DEF_CONVERTARITHTOEMITC 24*c40146c2SMarius Brehler #include "mlir/Conversion/Passes.h.inc" 25*c40146c2SMarius Brehler } // namespace mlir 26*c40146c2SMarius Brehler 27*c40146c2SMarius Brehler using namespace mlir; 28*c40146c2SMarius Brehler 29*c40146c2SMarius Brehler namespace { 30*c40146c2SMarius Brehler struct ConvertArithToEmitC 31*c40146c2SMarius Brehler : public impl::ConvertArithToEmitCBase<ConvertArithToEmitC> { 32*c40146c2SMarius Brehler void runOnOperation() override; 33*c40146c2SMarius Brehler }; 34*c40146c2SMarius Brehler } // namespace 35*c40146c2SMarius Brehler runOnOperation()36*c40146c2SMarius Brehlervoid ConvertArithToEmitC::runOnOperation() { 37*c40146c2SMarius Brehler ConversionTarget target(getContext()); 38*c40146c2SMarius Brehler 39*c40146c2SMarius Brehler target.addLegalDialect<emitc::EmitCDialect>(); 40*c40146c2SMarius Brehler target.addIllegalDialect<arith::ArithDialect>(); 41*c40146c2SMarius Brehler 42*c40146c2SMarius Brehler RewritePatternSet patterns(&getContext()); 43*c40146c2SMarius Brehler 44*c40146c2SMarius Brehler TypeConverter typeConverter; 45*c40146c2SMarius Brehler typeConverter.addConversion([](Type type) { return type; }); 46*c40146c2SMarius Brehler 47*c40146c2SMarius Brehler populateArithToEmitCPatterns(typeConverter, patterns); 48*c40146c2SMarius Brehler 49*c40146c2SMarius Brehler if (failed( 50*c40146c2SMarius Brehler applyPartialConversion(getOperation(), target, std::move(patterns)))) 51*c40146c2SMarius Brehler signalPassFailure(); 52*c40146c2SMarius Brehler } 53