Skip to content

Commit 27d3596

Browse files
committed
pr: Implement CondYieldOp conversion.
1 parent 19cbd7d commit 27d3596

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

lib/vast/Conversion/Parser/ToParser.cpp

+34-1
Original file line numberDiff line numberDiff line change
@@ -565,9 +565,41 @@ namespace vast::conv {
565565
op_t op, adaptor_t adaptor, conversion_rewriter &rewriter
566566
) const override {
567567
auto args = realized_operand_values(adaptor.getOperands(), rewriter);
568-
rewriter.replaceOpWithNewOp< pr::Assign >(op, std::vector< mlir_type >(), args);
568+
rewriter.create< pr::Assign >(op.getLoc(), std::vector< mlir_type >(), args);
569+
rewriter.replaceAllUsesWith(op, args[0]);
570+
rewriter.eraseOp(op);
571+
return mlir::success();
572+
}
573+
};
574+
575+
struct CondYieldConversion
576+
: parser_conversion_pattern_base< hl::CondYieldOp >
577+
{
578+
using op_t = hl::CondYieldOp;
579+
using base = parser_conversion_pattern_base< op_t >;
580+
using base::base;
581+
582+
using adaptor_t = typename op_t::Adaptor;
583+
584+
logical_result matchAndRewrite(
585+
op_t op, adaptor_t adaptor, conversion_rewriter &rewriter
586+
) const override {
587+
auto operand = adaptor.getResult().getDefiningOp();
588+
if (auto cast = mlir::dyn_cast< mlir::UnrealizedConversionCastOp >(operand)) {
589+
if (pr::is_parser_type(cast.getOperand(0).getType())) {
590+
rewriter.replaceOpWithNewOp< op_t >(op, cast.getOperand(0));
591+
return mlir::success();
592+
}
593+
}
594+
569595
return mlir::success();
570596
}
597+
598+
static void legalize(parser_conversion_config &cfg) {
599+
cfg.target.addDynamicallyLegalOp< op_t >([](op_t op) {
600+
return pr::is_parser_type(op.getResult().getType());
601+
});
602+
}
571603
};
572604

573605
struct ExprConversion
@@ -662,6 +694,7 @@ namespace vast::conv {
662694
ToNoParse< hl::RemFOp >,
663695
// Other operations
664696
AssignConversion,
697+
CondYieldConversion,
665698
ExprConversion,
666699
FuncConversion,
667700
ParamConversion,

0 commit comments

Comments
 (0)