16#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
17#include "mlir/Conversion/LLVMCommon/Pattern.h"
18#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
19#include "mlir/Pass/Pass.h"
20#include "mlir/Transforms/DialectConversion.h"
32struct CombParityOpConversion :
public ConvertToLLVMPattern {
33 explicit CombParityOpConversion(MLIRContext *ctx,
34 LLVMTypeConverter &typeConverter)
35 : ConvertToLLVMPattern(
comb::ParityOp::getOperationName(), ctx,
39 matchAndRewrite(Operation *op, ArrayRef<Value> operands,
40 ConversionPatternRewriter &rewriter)
const override {
41 auto parityOp = cast<comb::ParityOp>(op);
44 LLVM::CtPopOp::create(rewriter, op->getLoc(), parityOp.getInput());
45 rewriter.replaceOpWithNewOp<LLVM::TruncOp>(
46 op, IntegerType::get(rewriter.getContext(), 1), popCount);
53struct CombReverseOpConversion
54 :
public ConvertOpToLLVMPattern<comb::ReverseOp> {
55 using ConvertOpToLLVMPattern<comb::ReverseOp>::ConvertOpToLLVMPattern;
58 matchAndRewrite(comb::ReverseOp op, OpAdaptor adaptor,
59 ConversionPatternRewriter &rewriter)
const override {
60 rewriter.replaceOpWithNewOp<LLVM::BitReverseOp>(
61 op, adaptor.getInput().getType(), adaptor.getInput());
78 patterns.add<CombReverseOpConversion>(converter);
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
void populateCombToLLVMConversionPatterns(mlir::LLVMTypeConverter &converter, RewritePatternSet &patterns)
Get the Comb to LLVM conversion patterns.