xref: /llvm-project/mlir/lib/Conversion/ArithToEmitC/ArithToEmitCPass.cpp (revision 0ddb1221471ae481cc0c7dfd57b71d98e7e60a27)
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 Brehler void 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