@@ -275,172 +275,52 @@ class CIRStoreOpLowering : public mlir::OpConversionPattern<cir::StoreOp> {
275
275
}
276
276
};
277
277
278
- class CIRACosOpLowering : public mlir ::OpConversionPattern<cir::ACosOp> {
279
- public:
280
- using OpConversionPattern<cir::ACosOp>::OpConversionPattern;
281
-
282
- mlir::LogicalResult
283
- matchAndRewrite (cir::ACosOp op, OpAdaptor adaptor,
284
- mlir::ConversionPatternRewriter &rewriter) const override {
285
- rewriter.replaceOpWithNewOp <mlir::math::AcosOp>(op, adaptor.getSrc ());
286
- return mlir::LogicalResult::success ();
287
- }
288
- };
289
-
290
- class CIRATanOpLowering : public mlir ::OpConversionPattern<cir::ATanOp> {
291
- public:
292
- using OpConversionPattern<cir::ATanOp>::OpConversionPattern;
293
-
294
- mlir::LogicalResult
295
- matchAndRewrite (cir::ATanOp op, OpAdaptor adaptor,
296
- mlir::ConversionPatternRewriter &rewriter) const override {
297
- rewriter.replaceOpWithNewOp <mlir::math::AtanOp>(op, adaptor.getSrc ());
298
- return mlir::LogicalResult::success ();
299
- }
300
- };
301
-
302
- class CIRCosOpLowering : public mlir ::OpConversionPattern<cir::CosOp> {
303
- public:
304
- using OpConversionPattern<cir::CosOp>::OpConversionPattern;
305
-
306
- mlir::LogicalResult
307
- matchAndRewrite (cir::CosOp op, OpAdaptor adaptor,
308
- mlir::ConversionPatternRewriter &rewriter) const override {
309
- rewriter.replaceOpWithNewOp <mlir::math::CosOp>(op, adaptor.getSrc ());
310
- return mlir::LogicalResult::success ();
311
- }
312
- };
313
-
314
- class CIRTanOpLowering : public mlir ::OpConversionPattern<cir::TanOp> {
315
- public:
316
- using OpConversionPattern<cir::TanOp>::OpConversionPattern;
317
-
318
- mlir::LogicalResult
319
- matchAndRewrite (cir::TanOp op, OpAdaptor adaptor,
320
- mlir::ConversionPatternRewriter &rewriter) const override {
321
- rewriter.replaceOpWithNewOp <mlir::math::TanOp>(op, adaptor.getSrc ());
322
- return mlir::LogicalResult::success ();
323
- }
324
- };
325
-
326
- class CIRSqrtOpLowering : public mlir ::OpConversionPattern<cir::SqrtOp> {
327
- public:
328
- using mlir::OpConversionPattern<cir::SqrtOp>::OpConversionPattern;
278
+ // / Converts CIR unary math ops (e.g., cir::SinOp) to their MLIR equivalents
279
+ // / (e.g., math::SinOp) using a generic template to avoid redundant boilerplate
280
+ // / matchAndRewrite definitions.
329
281
330
- mlir::LogicalResult
331
- matchAndRewrite (cir::SqrtOp op, OpAdaptor adaptor,
332
- mlir::ConversionPatternRewriter &rewriter) const override {
333
- rewriter.replaceOpWithNewOp <mlir::math::SqrtOp>(op, adaptor.getSrc ());
334
- return mlir::LogicalResult::success ();
335
- }
336
- };
337
-
338
- class CIRFAbsOpLowering : public mlir ::OpConversionPattern<cir::FAbsOp> {
339
- public:
340
- using mlir::OpConversionPattern<cir::FAbsOp>::OpConversionPattern;
341
-
342
- mlir::LogicalResult
343
- matchAndRewrite (cir::FAbsOp op, OpAdaptor adaptor,
344
- mlir::ConversionPatternRewriter &rewriter) const override {
345
- rewriter.replaceOpWithNewOp <mlir::math::AbsFOp>(op, adaptor.getSrc ());
346
- return mlir::LogicalResult::success ();
347
- }
348
- };
349
- class CIRAbsOpLowering : public mlir ::OpConversionPattern<cir::AbsOp> {
350
- public:
351
- using mlir::OpConversionPattern<cir::AbsOp>::OpConversionPattern;
352
-
353
- mlir::LogicalResult
354
- matchAndRewrite (cir::AbsOp op, OpAdaptor adaptor,
355
- mlir::ConversionPatternRewriter &rewriter) const override {
356
- rewriter.replaceOpWithNewOp <mlir::math::AbsIOp>(op, adaptor.getSrc ());
357
- return mlir::LogicalResult::success ();
358
- }
359
- };
360
-
361
- class CIRFloorOpLowering : public mlir ::OpConversionPattern<cir::FloorOp> {
362
- public:
363
- using mlir::OpConversionPattern<cir::FloorOp>::OpConversionPattern;
364
-
365
- mlir::LogicalResult
366
- matchAndRewrite (cir::FloorOp op, OpAdaptor adaptor,
367
- mlir::ConversionPatternRewriter &rewriter) const override {
368
- rewriter.replaceOpWithNewOp <mlir::math::FloorOp>(op, adaptor.getSrc ());
369
- return mlir::LogicalResult::success ();
370
- }
371
- };
372
-
373
- class CIRCeilOpLowering : public mlir ::OpConversionPattern<cir::CeilOp> {
374
- public:
375
- using mlir::OpConversionPattern<cir::CeilOp>::OpConversionPattern;
376
-
377
- mlir::LogicalResult
378
- matchAndRewrite (cir::CeilOp op, OpAdaptor adaptor,
379
- mlir::ConversionPatternRewriter &rewriter) const override {
380
- rewriter.replaceOpWithNewOp <mlir::math::CeilOp>(op, adaptor.getSrc ());
381
- return mlir::LogicalResult::success ();
382
- }
383
- };
384
-
385
- class CIRLog10OpLowering : public mlir ::OpConversionPattern<cir::Log10Op> {
386
- public:
387
- using mlir::OpConversionPattern<cir::Log10Op>::OpConversionPattern;
388
-
389
- mlir::LogicalResult
390
- matchAndRewrite (cir::Log10Op op, OpAdaptor adaptor,
391
- mlir::ConversionPatternRewriter &rewriter) const override {
392
- rewriter.replaceOpWithNewOp <mlir::math::Log10Op>(op, adaptor.getSrc ());
393
- return mlir::LogicalResult::success ();
394
- }
395
- };
396
-
397
- class CIRLogOpLowering : public mlir ::OpConversionPattern<cir::LogOp> {
398
- public:
399
- using mlir::OpConversionPattern<cir::LogOp>::OpConversionPattern;
400
-
401
- mlir::LogicalResult
402
- matchAndRewrite (cir::LogOp op, OpAdaptor adaptor,
403
- mlir::ConversionPatternRewriter &rewriter) const override {
404
- rewriter.replaceOpWithNewOp <mlir::math::LogOp>(op, adaptor.getSrc ());
405
- return mlir::LogicalResult::success ();
406
- }
407
- };
408
-
409
- class CIRLog2OpLowering : public mlir ::OpConversionPattern<cir::Log2Op> {
410
- public:
411
- using mlir::OpConversionPattern<cir::Log2Op>::OpConversionPattern;
412
-
413
- mlir::LogicalResult
414
- matchAndRewrite (cir::Log2Op op, OpAdaptor adaptor,
415
- mlir::ConversionPatternRewriter &rewriter) const override {
416
- rewriter.replaceOpWithNewOp <mlir::math::Log2Op>(op, adaptor.getSrc ());
417
- return mlir::LogicalResult::success ();
418
- }
419
- };
420
-
421
- class CIRRoundOpLowering : public mlir ::OpConversionPattern<cir::RoundOp> {
282
+ template <typename CIROp, typename MLIROp>
283
+ class CIRUnaryMathOpLowering : public mlir ::OpConversionPattern<CIROp> {
422
284
public:
423
- using mlir::OpConversionPattern<cir::RoundOp >::OpConversionPattern;
285
+ using mlir::OpConversionPattern<CIROp >::OpConversionPattern;
424
286
425
287
mlir::LogicalResult
426
- matchAndRewrite (cir::RoundOp op, OpAdaptor adaptor,
288
+ matchAndRewrite (CIROp op,
289
+ typename mlir::OpConversionPattern<CIROp>::OpAdaptor adaptor,
427
290
mlir::ConversionPatternRewriter &rewriter) const override {
428
- rewriter.replaceOpWithNewOp <mlir::math::RoundOp >(op, adaptor.getSrc ());
291
+ rewriter.replaceOpWithNewOp <MLIROp >(op, adaptor.getSrc ());
429
292
return mlir::LogicalResult::success ();
430
293
}
431
294
};
432
295
433
- class CIRExpOpLowering : public mlir ::OpConversionPattern<cir::ExpOp> {
434
- public:
435
- using mlir::OpConversionPattern<cir::ExpOp>::OpConversionPattern;
436
-
437
- mlir::LogicalResult
438
- matchAndRewrite (cir::ExpOp op, OpAdaptor adaptor,
439
- mlir::ConversionPatternRewriter &rewriter) const override {
440
- rewriter.replaceOpWithNewOp <mlir::math::ExpOp>(op, adaptor.getSrc ());
441
- return mlir::LogicalResult::success ();
442
- }
443
- };
296
+ using CIRASinOpLowering =
297
+ CIRUnaryMathOpLowering<cir::ASinOp, mlir::math::AsinOp>;
298
+ using CIRSinOpLowering = CIRUnaryMathOpLowering<cir::SinOp, mlir::math::SinOp>;
299
+ using CIRExp2OpLowering =
300
+ CIRUnaryMathOpLowering<cir::Exp2Op, mlir::math::Exp2Op>;
301
+ using CIRExpOpLowering = CIRUnaryMathOpLowering<cir::ExpOp, mlir::math::ExpOp>;
302
+ using CIRRoundOpLowering =
303
+ CIRUnaryMathOpLowering<cir::RoundOp, mlir::math::RoundOp>;
304
+ using CIRLog2OpLowering =
305
+ CIRUnaryMathOpLowering<cir::Log2Op, mlir::math::Log2Op>;
306
+ using CIRLogOpLowering = CIRUnaryMathOpLowering<cir::LogOp, mlir::math::LogOp>;
307
+ using CIRLog10OpLowering =
308
+ CIRUnaryMathOpLowering<cir::Log10Op, mlir::math::Log10Op>;
309
+ using CIRCeilOpLowering =
310
+ CIRUnaryMathOpLowering<cir::CeilOp, mlir::math::CeilOp>;
311
+ using CIRFloorOpLowering =
312
+ CIRUnaryMathOpLowering<cir::FloorOp, mlir::math::FloorOp>;
313
+ using CIRAbsOpLowering = CIRUnaryMathOpLowering<cir::AbsOp, mlir::math::AbsIOp>;
314
+ using CIRFAbsOpLowering =
315
+ CIRUnaryMathOpLowering<cir::FAbsOp, mlir::math::AbsFOp>;
316
+ using CIRSqrtOpLowering =
317
+ CIRUnaryMathOpLowering<cir::SqrtOp, mlir::math::SqrtOp>;
318
+ using CIRCosOpLowering = CIRUnaryMathOpLowering<cir::CosOp, mlir::math::CosOp>;
319
+ using CIRATanOpLowering =
320
+ CIRUnaryMathOpLowering<cir::ATanOp, mlir::math::AtanOp>;
321
+ using CIRACosOpLowering =
322
+ CIRUnaryMathOpLowering<cir::ACosOp, mlir::math::AcosOp>;
323
+ using CIRTanOpLowering = CIRUnaryMathOpLowering<cir::TanOp, mlir::math::TanOp>;
444
324
445
325
class CIRShiftOpLowering : public mlir ::OpConversionPattern<cir::ShiftOp> {
446
326
public:
@@ -475,42 +355,6 @@ class CIRShiftOpLowering : public mlir::OpConversionPattern<cir::ShiftOp> {
475
355
}
476
356
};
477
357
478
- class CIRExp2OpLowering : public mlir ::OpConversionPattern<cir::Exp2Op> {
479
- public:
480
- using mlir::OpConversionPattern<cir::Exp2Op>::OpConversionPattern;
481
-
482
- mlir::LogicalResult
483
- matchAndRewrite (cir::Exp2Op op, OpAdaptor adaptor,
484
- mlir::ConversionPatternRewriter &rewriter) const override {
485
- rewriter.replaceOpWithNewOp <mlir::math::Exp2Op>(op, adaptor.getSrc ());
486
- return mlir::LogicalResult::success ();
487
- }
488
- };
489
-
490
- class CIRSinOpLowering : public mlir ::OpConversionPattern<cir::SinOp> {
491
- public:
492
- using mlir::OpConversionPattern<cir::SinOp>::OpConversionPattern;
493
-
494
- mlir::LogicalResult
495
- matchAndRewrite (cir::SinOp op, OpAdaptor adaptor,
496
- mlir::ConversionPatternRewriter &rewriter) const override {
497
- rewriter.replaceOpWithNewOp <mlir::math::SinOp>(op, adaptor.getSrc ());
498
- return mlir::LogicalResult::success ();
499
- }
500
- };
501
-
502
- class CIRASinOpLowering : public mlir ::OpConversionPattern<cir::ASinOp> {
503
- public:
504
- using mlir::OpConversionPattern<cir::ASinOp>::OpConversionPattern;
505
-
506
- mlir::LogicalResult
507
- matchAndRewrite (cir::ASinOp op, OpAdaptor adaptor,
508
- mlir::ConversionPatternRewriter &rewriter) const override {
509
- rewriter.replaceOpWithNewOp <mlir::math::AsinOp>(op, adaptor.getSrc ());
510
- return mlir::LogicalResult::success ();
511
- }
512
- };
513
-
514
358
template <typename CIROp, typename MLIROp>
515
359
class CIRCountZerosBitOpLowering : public mlir ::OpConversionPattern<CIROp> {
516
360
public:
0 commit comments