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"
33struct CombParityOpConversion :
public ConvertToLLVMPattern {
34 explicit CombParityOpConversion(MLIRContext *ctx,
35 LLVMTypeConverter &typeConverter)
36 : ConvertToLLVMPattern(
comb::ParityOp::getOperationName(), ctx,
40 matchAndRewrite(Operation *op, ArrayRef<Value> operands,
41 ConversionPatternRewriter &rewriter)
const override {
42 auto parityOp = cast<comb::ParityOp>(op);
45 LLVM::CtPopOp::create(rewriter, op->getLoc(), parityOp.getInput());
46 rewriter.replaceOpWithNewOp<LLVM::TruncOp>(
47 op, IntegerType::get(rewriter.getContext(), 1), popCount);
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
void populateCombToLLVMConversionPatterns(mlir::LLVMTypeConverter &converter, RewritePatternSet &patterns)
Get the Comb to LLVM conversion patterns.