14 #include "../PassDetail.h"
17 #include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
18 #include "mlir/Conversion/LLVMCommon/Pattern.h"
19 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
20 #include "mlir/Pass/Pass.h"
21 #include "mlir/Transforms/DialectConversion.h"
24 using namespace circt;
28 struct CombParityOpConversion :
public ConvertToLLVMPattern {
29 explicit CombParityOpConversion(MLIRContext *ctx,
30 LLVMTypeConverter &typeConverter)
31 : ConvertToLLVMPattern(
comb::ParityOp::getOperationName(), ctx,
35 matchAndRewrite(Operation *op, ArrayRef<Value> operands,
36 ConversionPatternRewriter &rewriter)
const override {
37 auto parityOp = cast<comb::ParityOp>(op);
40 rewriter.create<LLVM::CtPopOp>(op->getLoc(), parityOp.getInput());
41 rewriter.replaceOpWithNewOp<LLVM::TruncOp>(
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
void populateCombToLLVMConversionPatterns(mlir::LLVMTypeConverter &converter, RewritePatternSet &patterns)
Get the Comb to LLVM conversion patterns.