@@ -19,6 +19,7 @@ namespace circt {
1919#include " circt/Conversion/Passes.h.inc"
2020} // namespace circt
2121
22+ using namespace mlir ;
2223using namespace circt ;
2324using namespace comb ;
2425
@@ -34,8 +35,8 @@ struct CombReplicateOpConversion : OpConversionPattern<ReplicateOp> {
3435 LogicalResult
3536 matchAndRewrite (ReplicateOp op, OpAdaptor adaptor,
3637 ConversionPatternRewriter &rewriter) const override {
37- rewriter.replaceOpWithNewOp <mlir:: smt::RepeatOp>(op, op.getMultiple (),
38- adaptor.getInput ());
38+ rewriter.replaceOpWithNewOp <smt::RepeatOp>(op, op.getMultiple (),
39+ adaptor.getInput ());
3940 return success ();
4041 }
4142};
@@ -56,49 +57,49 @@ struct IcmpOpConversion : OpConversionPattern<ICmpOp> {
5657 " comparison predicate not supported" );
5758
5859 if (adaptor.getPredicate () == ICmpPredicate::eq) {
59- rewriter.replaceOpWithNewOp <mlir:: smt::EqOp>(op, adaptor.getLhs (),
60- adaptor.getRhs ());
60+ rewriter.replaceOpWithNewOp <smt::EqOp>(op, adaptor.getLhs (),
61+ adaptor.getRhs ());
6162 return success ();
6263 }
6364
6465 if (adaptor.getPredicate () == ICmpPredicate::ne) {
65- rewriter.replaceOpWithNewOp <mlir:: smt::DistinctOp>(op, adaptor.getLhs (),
66- adaptor.getRhs ());
66+ rewriter.replaceOpWithNewOp <smt::DistinctOp>(op, adaptor.getLhs (),
67+ adaptor.getRhs ());
6768 return success ();
6869 }
6970
70- mlir:: smt::BVCmpPredicate pred;
71+ smt::BVCmpPredicate pred;
7172 switch (adaptor.getPredicate ()) {
7273 case ICmpPredicate::sge:
73- pred = mlir:: smt::BVCmpPredicate::sge;
74+ pred = smt::BVCmpPredicate::sge;
7475 break ;
7576 case ICmpPredicate::sgt:
76- pred = mlir:: smt::BVCmpPredicate::sgt;
77+ pred = smt::BVCmpPredicate::sgt;
7778 break ;
7879 case ICmpPredicate::sle:
79- pred = mlir:: smt::BVCmpPredicate::sle;
80+ pred = smt::BVCmpPredicate::sle;
8081 break ;
8182 case ICmpPredicate::slt:
82- pred = mlir:: smt::BVCmpPredicate::slt;
83+ pred = smt::BVCmpPredicate::slt;
8384 break ;
8485 case ICmpPredicate::uge:
85- pred = mlir:: smt::BVCmpPredicate::uge;
86+ pred = smt::BVCmpPredicate::uge;
8687 break ;
8788 case ICmpPredicate::ugt:
88- pred = mlir:: smt::BVCmpPredicate::ugt;
89+ pred = smt::BVCmpPredicate::ugt;
8990 break ;
9091 case ICmpPredicate::ule:
91- pred = mlir:: smt::BVCmpPredicate::ule;
92+ pred = smt::BVCmpPredicate::ule;
9293 break ;
9394 case ICmpPredicate::ult:
94- pred = mlir:: smt::BVCmpPredicate::ult;
95+ pred = smt::BVCmpPredicate::ult;
9596 break ;
9697 default :
9798 llvm_unreachable (" all cases handled above" );
9899 }
99100
100- rewriter.replaceOpWithNewOp <mlir:: smt::BVCmpOp>(op, pred, adaptor.getLhs (),
101- adaptor.getRhs ());
101+ rewriter.replaceOpWithNewOp <smt::BVCmpOp>(op, pred, adaptor.getLhs (),
102+ adaptor.getRhs ());
102103 return success ();
103104 }
104105};
@@ -111,7 +112,7 @@ struct ExtractOpConversion : OpConversionPattern<ExtractOp> {
111112 matchAndRewrite (ExtractOp op, OpAdaptor adaptor,
112113 ConversionPatternRewriter &rewriter) const override {
113114
114- rewriter.replaceOpWithNewOp <mlir:: smt::ExtractOp>(
115+ rewriter.replaceOpWithNewOp <smt::ExtractOp>(
115116 op, typeConverter->convertType (op.getResult ().getType ()),
116117 adaptor.getLowBitAttr (), adaptor.getInput ());
117118 return success ();
@@ -126,9 +127,9 @@ struct MuxOpConversion : OpConversionPattern<MuxOp> {
126127 matchAndRewrite (MuxOp op, OpAdaptor adaptor,
127128 ConversionPatternRewriter &rewriter) const override {
128129 Value condition = typeConverter->materializeTargetConversion (
129- rewriter, op.getLoc (), mlir:: smt::BoolType::get (getContext ()),
130+ rewriter, op.getLoc (), smt::BoolType::get (getContext ()),
130131 adaptor.getCond ());
131- rewriter.replaceOpWithNewOp <mlir:: smt::IteOp>(
132+ rewriter.replaceOpWithNewOp <smt::IteOp>(
132133 op, condition, adaptor.getTrueValue (), adaptor.getFalseValue ());
133134 return success ();
134135 }
@@ -141,10 +142,8 @@ struct SubOpConversion : OpConversionPattern<SubOp> {
141142 LogicalResult
142143 matchAndRewrite (SubOp op, OpAdaptor adaptor,
143144 ConversionPatternRewriter &rewriter) const override {
144- Value negRhs =
145- rewriter.create <mlir::smt::BVNegOp>(op.getLoc (), adaptor.getRhs ());
146- rewriter.replaceOpWithNewOp <mlir::smt::BVAddOp>(op, adaptor.getLhs (),
147- negRhs);
145+ Value negRhs = rewriter.create <smt::BVNegOp>(op.getLoc (), adaptor.getRhs ());
146+ rewriter.replaceOpWithNewOp <smt::BVAddOp>(op, adaptor.getLhs (), negRhs);
148147 return success ();
149148 }
150149};
@@ -158,17 +157,17 @@ struct ParityOpConversion : OpConversionPattern<ParityOp> {
158157 ConversionPatternRewriter &rewriter) const override {
159158 Location loc = op.getLoc ();
160159 unsigned bitwidth =
161- cast<mlir:: smt::BitVectorType>(adaptor.getInput ().getType ()).getWidth ();
160+ cast<smt::BitVectorType>(adaptor.getInput ().getType ()).getWidth ();
162161
163162 // Note: the SMT bitvector type does not support 0 bitwidth vectors and thus
164163 // the type conversion should already fail.
165- Type oneBitTy = mlir:: smt::BitVectorType::get (getContext (), 1 );
166- Value runner = rewriter. create <mlir::smt::ExtractOp>(loc, oneBitTy, 0 ,
167- adaptor.getInput ());
164+ Type oneBitTy = smt::BitVectorType::get (getContext (), 1 );
165+ Value runner =
166+ rewriter. create <smt::ExtractOp>(loc, oneBitTy, 0 , adaptor.getInput ());
168167 for (unsigned i = 1 ; i < bitwidth; ++i) {
169- Value ext = rewriter. create <mlir::smt::ExtractOp>(loc, oneBitTy, i,
170- adaptor.getInput ());
171- runner = rewriter.create <mlir:: smt::BVXOrOp>(loc, runner, ext);
168+ Value ext =
169+ rewriter. create <smt::ExtractOp>(loc, oneBitTy, i, adaptor.getInput ());
170+ runner = rewriter.create <smt::BVXOrOp>(loc, runner, ext);
172171 }
173172
174173 rewriter.replaceOp (op, runner);
@@ -206,22 +205,19 @@ struct DivisionOpConversion : OpConversionPattern<SourceOp> {
206205 matchAndRewrite (SourceOp op, OpAdaptor adaptor,
207206 ConversionPatternRewriter &rewriter) const override {
208207 Location loc = op.getLoc ();
209- auto type = dyn_cast<mlir:: smt::BitVectorType>(adaptor.getRhs ().getType ());
208+ auto type = dyn_cast<smt::BitVectorType>(adaptor.getRhs ().getType ());
210209 if (!type)
211210 return failure ();
212211
213212 auto resultType = OpConversionPattern<SourceOp>::typeConverter->convertType (
214213 op.getResult ().getType ());
215- Value zero = rewriter.create <mlir::smt::BVConstantOp>(
216- loc, APInt (type.getWidth (), 0 ));
217- Value isZero =
218- rewriter.create <mlir::smt::EqOp>(loc, adaptor.getRhs (), zero);
219- Value symbolicVal =
220- rewriter.create <mlir::smt::DeclareFunOp>(loc, resultType);
214+ Value zero =
215+ rewriter.create <smt::BVConstantOp>(loc, APInt (type.getWidth (), 0 ));
216+ Value isZero = rewriter.create <smt::EqOp>(loc, adaptor.getRhs (), zero);
217+ Value symbolicVal = rewriter.create <smt::DeclareFunOp>(loc, resultType);
221218 Value division =
222219 rewriter.create <TargetOp>(loc, resultType, adaptor.getOperands ());
223- rewriter.replaceOpWithNewOp <mlir::smt::IteOp>(op, isZero, symbolicVal,
224- division);
220+ rewriter.replaceOpWithNewOp <smt::IteOp>(op, isZero, symbolicVal, division);
225221 return success ();
226222 }
227223};
@@ -267,19 +263,19 @@ void circt::populateCombToSMTConversionPatterns(TypeConverter &converter,
267263 RewritePatternSet &patterns) {
268264 patterns.add <CombReplicateOpConversion, IcmpOpConversion, ExtractOpConversion,
269265 SubOpConversion, MuxOpConversion, ParityOpConversion,
270- OneToOneOpConversion<ShlOp, mlir:: smt::BVShlOp>,
271- OneToOneOpConversion<ShrUOp, mlir:: smt::BVLShrOp>,
272- OneToOneOpConversion<ShrSOp, mlir:: smt::BVAShrOp>,
273- DivisionOpConversion<DivSOp, mlir:: smt::BVSDivOp>,
274- DivisionOpConversion<DivUOp, mlir:: smt::BVUDivOp>,
275- DivisionOpConversion<ModSOp, mlir:: smt::BVSRemOp>,
276- DivisionOpConversion<ModUOp, mlir:: smt::BVURemOp>,
277- VariadicToBinaryOpConversion<ConcatOp, mlir:: smt::ConcatOp>,
278- VariadicToBinaryOpConversion<AddOp, mlir:: smt::BVAddOp>,
279- VariadicToBinaryOpConversion<MulOp, mlir:: smt::BVMulOp>,
280- VariadicToBinaryOpConversion<AndOp, mlir:: smt::BVAndOp>,
281- VariadicToBinaryOpConversion<OrOp, mlir:: smt::BVOrOp>,
282- VariadicToBinaryOpConversion<XorOp, mlir:: smt::BVXOrOp>>(
266+ OneToOneOpConversion<ShlOp, smt::BVShlOp>,
267+ OneToOneOpConversion<ShrUOp, smt::BVLShrOp>,
268+ OneToOneOpConversion<ShrSOp, smt::BVAShrOp>,
269+ DivisionOpConversion<DivSOp, smt::BVSDivOp>,
270+ DivisionOpConversion<DivUOp, smt::BVUDivOp>,
271+ DivisionOpConversion<ModSOp, smt::BVSRemOp>,
272+ DivisionOpConversion<ModUOp, smt::BVURemOp>,
273+ VariadicToBinaryOpConversion<ConcatOp, smt::ConcatOp>,
274+ VariadicToBinaryOpConversion<AddOp, smt::BVAddOp>,
275+ VariadicToBinaryOpConversion<MulOp, smt::BVMulOp>,
276+ VariadicToBinaryOpConversion<AndOp, smt::BVAndOp>,
277+ VariadicToBinaryOpConversion<OrOp, smt::BVOrOp>,
278+ VariadicToBinaryOpConversion<XorOp, smt::BVXOrOp>>(
283279 converter, patterns.getContext ());
284280
285281 // TODO: there are two unsupported operations in the comb dialect: 'parity'
@@ -289,7 +285,7 @@ void circt::populateCombToSMTConversionPatterns(TypeConverter &converter,
289285void ConvertCombToSMTPass::runOnOperation () {
290286 ConversionTarget target (getContext ());
291287 target.addIllegalDialect <comb::CombDialect>();
292- target.addLegalDialect <mlir:: smt::SMTDialect>();
288+ target.addLegalDialect <smt::SMTDialect>();
293289
294290 RewritePatternSet patterns (&getContext ());
295291 TypeConverter converter;
0 commit comments