@@ -401,92 +401,6 @@ struct WgToSgElementwiseOp : public OpConversionPattern<Op> {
401401 }
402402};
403403
404- // ---- ARITH ops ----
405- using WgToSgAddFOp = WgToSgElementwiseOp<arith::AddFOp>;
406- using WgToSgSubFOp = WgToSgElementwiseOp<arith::SubFOp>;
407- using WgToSgNegFOp = WgToSgElementwiseOp<arith::NegFOp>;
408- using WgToSgAddIOp = WgToSgElementwiseOp<arith::AddIOp>;
409- using WgToSgSubIOp = WgToSgElementwiseOp<arith::SubIOp>;
410- using WgToSgMulFOp = WgToSgElementwiseOp<arith::MulFOp>;
411- using WgToSgMulIOp = WgToSgElementwiseOp<arith::MulIOp>;
412- using WgToSgShLIOp = WgToSgElementwiseOp<arith::ShLIOp>;
413- using WgToSgShRSIOp = WgToSgElementwiseOp<arith::ShRSIOp>;
414- using WgToSgShRUIOp = WgToSgElementwiseOp<arith::ShRUIOp>;
415- using WgToSgDivFOp = WgToSgElementwiseOp<arith::DivFOp>;
416- using WgToSgDivSIOp = WgToSgElementwiseOp<arith::DivSIOp>;
417- using WgToSgDivUIOp = WgToSgElementwiseOp<arith::DivUIOp>;
418- using WgToSgMaximumFOp = WgToSgElementwiseOp<arith::MaximumFOp>;
419- using WgToSgMinimumFOp = WgToSgElementwiseOp<arith::MinimumFOp>;
420- using WgToSgRemSIOp = WgToSgElementwiseOp<arith::RemSIOp>;
421- using WgToSgRemUIOp = WgToSgElementwiseOp<arith::RemUIOp>;
422- using WgToSgTruncFOp = WgToSgElementwiseOp<arith::TruncFOp>;
423- using WgToSgTruncIOp = WgToSgElementwiseOp<arith::TruncIOp>;
424- using WgToSgExtFOp = WgToSgElementwiseOp<arith::ExtFOp>;
425- using WgToSgExtSIOp = WgToSgElementwiseOp<arith::ExtSIOp>;
426- using WgToSgExtUIOp = WgToSgElementwiseOp<arith::ExtUIOp>;
427- using WgToSgSIToFPOp = WgToSgElementwiseOp<arith::SIToFPOp>;
428- using WgToSgUIToFPOp = WgToSgElementwiseOp<arith::UIToFPOp>;
429- using WgToSgFPToSIOp = WgToSgElementwiseOp<arith::FPToSIOp>;
430- using WgToSgFPToUIOp = WgToSgElementwiseOp<arith::FPToUIOp>;
431- using WgToSgIndexCastUIOp = WgToSgElementwiseOp<arith::IndexCastUIOp>;
432- using WgToSgIndexCastOp = WgToSgElementwiseOp<arith::IndexCastOp>;
433- using WgToSgBitcastOp = WgToSgElementwiseOp<arith::BitcastOp>;
434- using WgToSgCmpIOp = WgToSgElementwiseOp<arith::CmpIOp>;
435- using WgToSgCmpFOp = WgToSgElementwiseOp<arith::CmpFOp>;
436- using WgToSgAndIOp = WgToSgElementwiseOp<arith::AndIOp>;
437- using WgToSgCeilDivSIOp = WgToSgElementwiseOp<arith::CeilDivSIOp>;
438- using WgToSgCeilDivUIOp = WgToSgElementwiseOp<arith::CeilDivUIOp>;
439- using WgToSgFloorDivSIOp = WgToSgElementwiseOp<arith::FloorDivSIOp>;
440- using WgToSgMaxNumFOp = WgToSgElementwiseOp<arith::MaxNumFOp>;
441- using WgToSgMaxSIOp = WgToSgElementwiseOp<arith::MaxSIOp>;
442- using WgToSgMaxUIOp = WgToSgElementwiseOp<arith::MaxUIOp>;
443- using WgToSgMinNumFOp = WgToSgElementwiseOp<arith::MinNumFOp>;
444- using WgToSgMinSIOp = WgToSgElementwiseOp<arith::MinSIOp>;
445- using WgToSgMinUIOp = WgToSgElementwiseOp<arith::MinUIOp>;
446- using WgToSgOrIOp = WgToSgElementwiseOp<arith::OrIOp>;
447- using WgToSgRemFOp = WgToSgElementwiseOp<arith::RemFOp>;
448- using WgToSgSelectOp = WgToSgElementwiseOp<arith::SelectOp>;
449- using WgToSgXOrIOp = WgToSgElementwiseOp<arith::XOrIOp>;
450-
451- // ---- MATH ops ----
452- using WgToSgExpOp = WgToSgElementwiseOp<math::ExpOp>;
453- using WgToSgSqrtOp = WgToSgElementwiseOp<math::SqrtOp>;
454- using WgToSgAbsFOp = WgToSgElementwiseOp<math::AbsFOp>;
455- using WgToSgCosOp = WgToSgElementwiseOp<math::CosOp>;
456- using WgToSgCoshOp = WgToSgElementwiseOp<math::CoshOp>;
457- using WgToSgAcosOp = WgToSgElementwiseOp<math::AcosOp>;
458- using WgToSgAcoshOp = WgToSgElementwiseOp<math::AcoshOp>;
459- using WgToSgSinOp = WgToSgElementwiseOp<math::SinOp>;
460- using WgToSgSinhOp = WgToSgElementwiseOp<math::SinhOp>;
461- using WgToSgAsinOp = WgToSgElementwiseOp<math::AsinOp>;
462- using WgToSgAsinhOp = WgToSgElementwiseOp<math::AsinhOp>;
463- using WgToSgTanOp = WgToSgElementwiseOp<math::TanOp>;
464- using WgToSgTanhOp = WgToSgElementwiseOp<math::TanhOp>;
465- using WgToSgAtanOp = WgToSgElementwiseOp<math::AtanOp>;
466- using WgToSgAtan2Op = WgToSgElementwiseOp<math::Atan2Op>;
467- using WgToSgAtanhOp = WgToSgElementwiseOp<math::AtanhOp>;
468- using WgToSgErfOp = WgToSgElementwiseOp<math::ErfOp>;
469- using WgToSgLogOp = WgToSgElementwiseOp<math::LogOp>;
470- using WgToSgLog2Op = WgToSgElementwiseOp<math::Log2Op>;
471- using WgToSgFloorOp = WgToSgElementwiseOp<math::FloorOp>;
472- using WgToSgCeilOp = WgToSgElementwiseOp<math::CeilOp>;
473- using WgToSgPowFOp = WgToSgElementwiseOp<math::PowFOp>;
474- using WgToSgRsqrtOp = WgToSgElementwiseOp<math::RsqrtOp>;
475- using WgToSgAbsIOp = WgToSgElementwiseOp<math::AbsIOp>;
476- using WgToSgCbrtOp = WgToSgElementwiseOp<math::CbrtOp>;
477- using WgToSgCopySignOp = WgToSgElementwiseOp<math::CopySignOp>;
478- using WgToSgCtPopOp = WgToSgElementwiseOp<math::CtPopOp>;
479- using WgToSgErfcOp = WgToSgElementwiseOp<math::ErfcOp>;
480- using WgToSgExp2Op = WgToSgElementwiseOp<math::Exp2Op>;
481- using WgToSgExpM1Op = WgToSgElementwiseOp<math::ExpM1Op>;
482- using WgToSgFPowIOp = WgToSgElementwiseOp<math::FPowIOp>;
483- using WgToSgIPowIOp = WgToSgElementwiseOp<math::IPowIOp>;
484- using WgToSgLog10Op = WgToSgElementwiseOp<math::Log10Op>;
485- using WgToSgLog1pOp = WgToSgElementwiseOp<math::Log1pOp>;
486- using WgToSgRoundOp = WgToSgElementwiseOp<math::RoundOp>;
487- using WgToSgRoundEvenOp = WgToSgElementwiseOp<math::RoundEvenOp>;
488- using WgToSgTruncOp = WgToSgElementwiseOp<math::TruncOp>;
489-
490404} // namespace
491405
492406namespace mlir {
@@ -497,25 +411,55 @@ void populateXeGPUWgToSgDistributePatterns(RewritePatternSet &patterns) {
497411 patterns.getContext ());
498412 // Add elementwise operations that can be distributed to subgroups
499413 patterns.add <
500- WgToSgAddFOp, WgToSgSubFOp, WgToSgExpOp, WgToSgSqrtOp, WgToSgAbsFOp,
501- WgToSgCosOp, WgToSgCoshOp, WgToSgAcosOp, WgToSgAcoshOp, WgToSgSinOp,
502- WgToSgSinhOp, WgToSgAsinOp, WgToSgAsinhOp, WgToSgTanOp, WgToSgTanhOp,
503- WgToSgAtanOp, WgToSgAtan2Op, WgToSgAtanhOp, WgToSgErfOp, WgToSgLogOp,
504- WgToSgLog2Op, WgToSgFloorOp, WgToSgCeilOp, WgToSgPowFOp, WgToSgRsqrtOp,
505- WgToSgNegFOp, WgToSgAddIOp, WgToSgSubIOp, WgToSgMulFOp, WgToSgMulIOp,
506- WgToSgShLIOp, WgToSgShRSIOp, WgToSgShRUIOp, WgToSgDivFOp, WgToSgDivSIOp,
507- WgToSgDivUIOp, WgToSgMaximumFOp, WgToSgMinimumFOp, WgToSgRemSIOp,
508- WgToSgRemUIOp, WgToSgTruncFOp, WgToSgTruncIOp, WgToSgExtFOp,
509- WgToSgExtSIOp, WgToSgExtUIOp, WgToSgSIToFPOp, WgToSgUIToFPOp,
510- WgToSgFPToSIOp, WgToSgFPToUIOp, WgToSgIndexCastUIOp, WgToSgIndexCastOp,
511- WgToSgBitcastOp, WgToSgCmpIOp, WgToSgCmpFOp, WgToSgAndIOp,
512- WgToSgCeilDivSIOp, WgToSgCeilDivUIOp, WgToSgFloorDivSIOp, WgToSgMaxNumFOp,
513- WgToSgMaxSIOp, WgToSgMaxUIOp, WgToSgMinNumFOp, WgToSgMinSIOp,
514- WgToSgMinUIOp, WgToSgOrIOp, WgToSgRemFOp, WgToSgSelectOp, WgToSgXOrIOp,
515- WgToSgAbsIOp, WgToSgCbrtOp, WgToSgCopySignOp, WgToSgCtPopOp, WgToSgErfcOp,
516- WgToSgExp2Op, WgToSgExpM1Op, WgToSgFPowIOp, WgToSgIPowIOp, WgToSgLog10Op,
517- WgToSgLog1pOp, WgToSgRoundOp, WgToSgRoundEvenOp, WgToSgTruncOp>(
518- patterns.getContext ());
414+ WgToSgElementwiseOp<arith::AddFOp>, WgToSgElementwiseOp<arith::SubFOp>,
415+ WgToSgElementwiseOp<math::ExpOp>, WgToSgElementwiseOp<math::SqrtOp>,
416+ WgToSgElementwiseOp<math::AbsFOp>, WgToSgElementwiseOp<math::CosOp>,
417+ WgToSgElementwiseOp<math::CoshOp>, WgToSgElementwiseOp<math::AcosOp>,
418+ WgToSgElementwiseOp<math::AcoshOp>, WgToSgElementwiseOp<math::SinOp>,
419+ WgToSgElementwiseOp<math::SinhOp>, WgToSgElementwiseOp<math::AsinOp>,
420+ WgToSgElementwiseOp<math::AsinhOp>, WgToSgElementwiseOp<math::TanOp>,
421+ WgToSgElementwiseOp<math::TanhOp>, WgToSgElementwiseOp<math::AtanOp>,
422+ WgToSgElementwiseOp<math::Atan2Op>, WgToSgElementwiseOp<math::AtanhOp>,
423+ WgToSgElementwiseOp<math::ErfOp>, WgToSgElementwiseOp<math::LogOp>,
424+ WgToSgElementwiseOp<math::Log2Op>, WgToSgElementwiseOp<math::FloorOp>,
425+ WgToSgElementwiseOp<math::CeilOp>, WgToSgElementwiseOp<math::PowFOp>,
426+ WgToSgElementwiseOp<math::RsqrtOp>, WgToSgElementwiseOp<arith::NegFOp>,
427+ WgToSgElementwiseOp<arith::AddIOp>, WgToSgElementwiseOp<arith::SubIOp>,
428+ WgToSgElementwiseOp<arith::MulFOp>, WgToSgElementwiseOp<arith::MulIOp>,
429+ WgToSgElementwiseOp<arith::ShLIOp>, WgToSgElementwiseOp<arith::ShRSIOp>,
430+ WgToSgElementwiseOp<arith::ShRUIOp>, WgToSgElementwiseOp<arith::DivFOp>,
431+ WgToSgElementwiseOp<arith::DivSIOp>, WgToSgElementwiseOp<arith::DivUIOp>,
432+ WgToSgElementwiseOp<arith::MaximumFOp>,
433+ WgToSgElementwiseOp<arith::MinimumFOp>,
434+ WgToSgElementwiseOp<arith::RemSIOp>, WgToSgElementwiseOp<arith::RemUIOp>,
435+ WgToSgElementwiseOp<arith::TruncFOp>,
436+ WgToSgElementwiseOp<arith::TruncIOp>, WgToSgElementwiseOp<arith::ExtFOp>,
437+ WgToSgElementwiseOp<arith::ExtSIOp>, WgToSgElementwiseOp<arith::ExtUIOp>,
438+ WgToSgElementwiseOp<arith::SIToFPOp>,
439+ WgToSgElementwiseOp<arith::UIToFPOp>,
440+ WgToSgElementwiseOp<arith::FPToSIOp>,
441+ WgToSgElementwiseOp<arith::FPToUIOp>,
442+ WgToSgElementwiseOp<arith::IndexCastUIOp>,
443+ WgToSgElementwiseOp<arith::IndexCastOp>,
444+ WgToSgElementwiseOp<arith::BitcastOp>, WgToSgElementwiseOp<arith::CmpIOp>,
445+ WgToSgElementwiseOp<arith::CmpFOp>, WgToSgElementwiseOp<arith::AndIOp>,
446+ WgToSgElementwiseOp<arith::CeilDivSIOp>,
447+ WgToSgElementwiseOp<arith::CeilDivUIOp>,
448+ WgToSgElementwiseOp<arith::FloorDivSIOp>,
449+ WgToSgElementwiseOp<arith::MaxNumFOp>,
450+ WgToSgElementwiseOp<arith::MaxSIOp>, WgToSgElementwiseOp<arith::MaxUIOp>,
451+ WgToSgElementwiseOp<arith::MinNumFOp>,
452+ WgToSgElementwiseOp<arith::MinSIOp>, WgToSgElementwiseOp<arith::MinUIOp>,
453+ WgToSgElementwiseOp<arith::OrIOp>, WgToSgElementwiseOp<arith::RemFOp>,
454+ WgToSgElementwiseOp<arith::SelectOp>, WgToSgElementwiseOp<arith::XOrIOp>,
455+ WgToSgElementwiseOp<math::AbsIOp>, WgToSgElementwiseOp<math::CbrtOp>,
456+ WgToSgElementwiseOp<math::CopySignOp>, WgToSgElementwiseOp<math::CtPopOp>,
457+ WgToSgElementwiseOp<math::ErfcOp>, WgToSgElementwiseOp<math::Exp2Op>,
458+ WgToSgElementwiseOp<math::ExpM1Op>, WgToSgElementwiseOp<math::FPowIOp>,
459+ WgToSgElementwiseOp<math::IPowIOp>, WgToSgElementwiseOp<math::Log10Op>,
460+ WgToSgElementwiseOp<math::Log1pOp>, WgToSgElementwiseOp<math::RoundOp>,
461+ WgToSgElementwiseOp<math::RoundEvenOp>,
462+ WgToSgElementwiseOp<math::TruncOp>>(patterns.getContext ());
519463}
520464} // namespace xegpu
521465} // namespace mlir
0 commit comments