Lines Matching refs:arith

20   return rewriter.create<arith::ConstantOp>(  in createConst()
28 struct CeilDivUIOpConverter : public OpRewritePattern<arith::CeilDivUIOp> {
30 LogicalResult matchAndRewrite(arith::CeilDivUIOp op, in matchAndRewrite()
37 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::eq, a, zero); in matchAndRewrite()
39 Value minusOne = rewriter.create<arith::SubIOp>(loc, a, one); in matchAndRewrite()
40 Value quotient = rewriter.create<arith::DivUIOp>(loc, minusOne, b); in matchAndRewrite()
41 Value plusOne = rewriter.create<arith::AddIOp>(loc, quotient, one); in matchAndRewrite()
42 rewriter.replaceOpWithNewOp<arith::SelectOp>(op, compare, zero, plusOne); in matchAndRewrite()
50 struct CeilDivSIOpConverter : public OpRewritePattern<arith::CeilDivSIOp> {
52 LogicalResult matchAndRewrite(arith::CeilDivSIOp op, in matchAndRewrite()
63 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sgt, b, zero); in matchAndRewrite()
64 Value x = rewriter.create<arith::SelectOp>(loc, compare, minusOne, plusOne); in matchAndRewrite()
66 Value xPlusA = rewriter.create<arith::AddIOp>(loc, x, a); in matchAndRewrite()
67 Value xPlusADivB = rewriter.create<arith::DivSIOp>(loc, xPlusA, b); in matchAndRewrite()
68 Value posRes = rewriter.create<arith::AddIOp>(loc, plusOne, xPlusADivB); in matchAndRewrite()
70 Value minusA = rewriter.create<arith::SubIOp>(loc, zero, a); in matchAndRewrite()
71 Value minusADivB = rewriter.create<arith::DivSIOp>(loc, minusA, b); in matchAndRewrite()
72 Value negRes = rewriter.create<arith::SubIOp>(loc, zero, minusADivB); in matchAndRewrite()
81 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::slt, a, zero); in matchAndRewrite()
83 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sgt, a, zero); in matchAndRewrite()
85 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::slt, b, zero); in matchAndRewrite()
87 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sgt, b, zero); in matchAndRewrite()
88 Value firstTerm = rewriter.create<arith::AndIOp>(loc, aNeg, bNeg); in matchAndRewrite()
89 Value secondTerm = rewriter.create<arith::AndIOp>(loc, aPos, bPos); in matchAndRewrite()
91 rewriter.create<arith::OrIOp>(loc, firstTerm, secondTerm); in matchAndRewrite()
93 rewriter.replaceOpWithNewOp<arith::SelectOp>(op, compareRes, posRes, in matchAndRewrite()
102 struct FloorDivSIOpConverter : public OpRewritePattern<arith::FloorDivSIOp> {
104 LogicalResult matchAndRewrite(arith::FloorDivSIOp op, in matchAndRewrite()
115 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::slt, b, zero); in matchAndRewrite()
116 Value x = rewriter.create<arith::SelectOp>(loc, compare, plusOne, minusOne); in matchAndRewrite()
118 Value xMinusA = rewriter.create<arith::SubIOp>(loc, x, a); in matchAndRewrite()
119 Value xMinusADivB = rewriter.create<arith::DivSIOp>(loc, xMinusA, b); in matchAndRewrite()
120 Value negRes = rewriter.create<arith::SubIOp>(loc, minusOne, xMinusADivB); in matchAndRewrite()
122 Value posRes = rewriter.create<arith::DivSIOp>(loc, a, b); in matchAndRewrite()
131 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::slt, a, zero); in matchAndRewrite()
133 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sgt, a, zero); in matchAndRewrite()
135 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::slt, b, zero); in matchAndRewrite()
137 rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sgt, b, zero); in matchAndRewrite()
138 Value firstTerm = rewriter.create<arith::AndIOp>(loc, aNeg, bPos); in matchAndRewrite()
139 Value secondTerm = rewriter.create<arith::AndIOp>(loc, aPos, bNeg); in matchAndRewrite()
141 rewriter.create<arith::OrIOp>(loc, firstTerm, secondTerm); in matchAndRewrite()
143 rewriter.replaceOpWithNewOp<arith::SelectOp>(op, compareRes, negRes, in matchAndRewrite()
149 template <typename OpTy, arith::CmpFPredicate pred>
161 static_assert(pred == arith::CmpFPredicate::UGT || in matchAndRewrite()
162 pred == arith::CmpFPredicate::ULT, in matchAndRewrite()
164 Value cmp = rewriter.create<arith::CmpFOp>(loc, pred, lhs, rhs); in matchAndRewrite()
165 Value select = rewriter.create<arith::SelectOp>(loc, cmp, lhs, rhs); in matchAndRewrite()
168 Value isNaN = rewriter.create<arith::CmpFOp>(loc, arith::CmpFPredicate::UNO, in matchAndRewrite()
170 rewriter.replaceOpWithNewOp<arith::SelectOp>(op, isNaN, rhs, select); in matchAndRewrite()
175 template <typename OpTy, arith::CmpIPredicate pred>
185 Value cmp = rewriter.create<arith::CmpIOp>(loc, pred, lhs, rhs); in matchAndRewrite()
186 rewriter.replaceOpWithNewOp<arith::SelectOp>(op, cmp, lhs, rhs); in matchAndRewrite()
197 arith::populateArithmeticExpandOpsPatterns(patterns); in runOnOperation()
199 target.addLegalDialect<arith::ArithmeticDialect>(); in runOnOperation()
202 arith::CeilDivSIOp, in runOnOperation()
203 arith::CeilDivUIOp, in runOnOperation()
204 arith::FloorDivSIOp, in runOnOperation()
205 arith::MaxFOp, in runOnOperation()
206 arith::MaxSIOp, in runOnOperation()
207 arith::MaxUIOp, in runOnOperation()
208 arith::MinFOp, in runOnOperation()
209 arith::MinSIOp, in runOnOperation()
210 arith::MinUIOp in runOnOperation()
221 void mlir::arith::populateArithmeticExpandOpsPatterns( in populateArithmeticExpandOpsPatterns()
228 MaxMinFOpConverter<MaxFOp, arith::CmpFPredicate::UGT>, in populateArithmeticExpandOpsPatterns()
229 MaxMinFOpConverter<MinFOp, arith::CmpFPredicate::ULT>, in populateArithmeticExpandOpsPatterns()
230 MaxMinIOpConverter<MaxSIOp, arith::CmpIPredicate::sgt>, in populateArithmeticExpandOpsPatterns()
231 MaxMinIOpConverter<MaxUIOp, arith::CmpIPredicate::ugt>, in populateArithmeticExpandOpsPatterns()
232 MaxMinIOpConverter<MinSIOp, arith::CmpIPredicate::slt>, in populateArithmeticExpandOpsPatterns()
233 MaxMinIOpConverter<MinUIOp, arith::CmpIPredicate::ult> in populateArithmeticExpandOpsPatterns()
238 std::unique_ptr<Pass> mlir::arith::createArithmeticExpandOpsPass() { in createArithmeticExpandOpsPass()