void populateWideIntEmulationPatterns(WideIntEmulationConverter &typeConverter,
RewritePatternSet &patterns);
-/// Add patterns to expand Arith ops for LLVM lowering.
+/// Add patterns to expand Arith ceil/floor division ops.
+void populateCeilFloorDivExpandOpsPatterns(RewritePatternSet &patterns);
+
+/// Add patterns to expand Arith ops.
void populateArithExpandOpsPatterns(RewritePatternSet &patterns);
-/// Create a pass to legalize Arith ops for LLVM lowering.
+/// Create a pass to legalize Arith ops.
std::unique_ptr<Pass> createArithExpandOpsPass();
/// Create a pass to replace signed ops with unsigned ones where they are proven
} // namespace
+void mlir::arith::populateCeilFloorDivExpandOpsPatterns(
+ RewritePatternSet &patterns) {
+ patterns
+ .add<CeilDivSIOpConverter, CeilDivUIOpConverter, FloorDivSIOpConverter>(
+ patterns.getContext());
+}
+
void mlir::arith::populateArithExpandOpsPatterns(RewritePatternSet &patterns) {
+ populateCeilFloorDivExpandOpsPatterns(patterns);
// clang-format off
patterns.add<
- CeilDivSIOpConverter,
- CeilDivUIOpConverter,
- FloorDivSIOpConverter,
MaxMinFOpConverter<MaxFOp, arith::CmpFPredicate::UGT>,
MaxMinFOpConverter<MinFOp, arith::CmpFPredicate::ULT>,
MaxMinIOpConverter<MaxSIOp, arith::CmpIPredicate::sgt>,