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