@@ -65,7 +65,7 @@ PowFStrengthReduction::matchAndRewrite(math::PowFOp op,
65
65
// Maybe broadcasts scalar value into vector type compatible with `op`.
66
66
auto bcast = [&](Value value) -> Value {
67
67
if (auto vec = dyn_cast<VectorType>(op.getType ()))
68
- return rewriter. create < vector::BroadcastOp>( op.getLoc (), vec, value);
68
+ return vector::BroadcastOp::create (rewriter, op.getLoc (), vec, value);
69
69
return value;
70
70
};
71
71
@@ -84,15 +84,16 @@ PowFStrengthReduction::matchAndRewrite(math::PowFOp op,
84
84
// Replace `pow(x, 3.0)` with `x * x * x`.
85
85
if (isExponentValue (3.0 )) {
86
86
Value square =
87
- rewriter. create < arith::MulFOp>( op.getLoc (), ValueRange ({x, x}));
87
+ arith::MulFOp::create (rewriter, op.getLoc (), ValueRange ({x, x}));
88
88
rewriter.replaceOpWithNewOp <arith::MulFOp>(op, ValueRange ({x, square}));
89
89
return success ();
90
90
}
91
91
92
92
// Replace `pow(x, -1.0)` with `1.0 / x`.
93
93
if (isExponentValue (-1.0 )) {
94
- Value one = rewriter.create <arith::ConstantOp>(
95
- loc, rewriter.getFloatAttr (getElementTypeOrSelf (op.getType ()), 1.0 ));
94
+ Value one = arith::ConstantOp::create (
95
+ rewriter, loc,
96
+ rewriter.getFloatAttr (getElementTypeOrSelf (op.getType ()), 1.0 ));
96
97
rewriter.replaceOpWithNewOp <arith::DivFOp>(op, ValueRange ({bcast (one), x}));
97
98
return success ();
98
99
}
@@ -111,8 +112,8 @@ PowFStrengthReduction::matchAndRewrite(math::PowFOp op,
111
112
112
113
// Replace `pow(x, 0.75)` with `sqrt(sqrt(x)) * sqrt(x)`.
113
114
if (isExponentValue (0.75 )) {
114
- Value powHalf = rewriter. create < math::SqrtOp>( op.getLoc (), x);
115
- Value powQuarter = rewriter. create < math::SqrtOp>( op.getLoc (), powHalf);
115
+ Value powHalf = math::SqrtOp::create (rewriter, op.getLoc (), x);
116
+ Value powQuarter = math::SqrtOp::create (rewriter, op.getLoc (), powHalf);
116
117
rewriter.replaceOpWithNewOp <arith::MulFOp>(op,
117
118
ValueRange{powHalf, powQuarter});
118
119
return success ();
@@ -168,18 +169,18 @@ PowIStrengthReduction<PowIOpTy, DivOpTy, MulOpTy>::matchAndRewrite(
168
169
// Maybe broadcasts scalar value into vector type compatible with `op`.
169
170
auto bcast = [&loc, &op, &rewriter](Value value) -> Value {
170
171
if (auto vec = dyn_cast<VectorType>(op.getType ()))
171
- return rewriter. create < vector::BroadcastOp>( loc, vec, value);
172
+ return vector::BroadcastOp::create (rewriter, loc, vec, value);
172
173
return value;
173
174
};
174
175
175
176
Value one;
176
177
Type opType = getElementTypeOrSelf (op.getType ());
177
178
if constexpr (std::is_same_v<PowIOpTy, math::FPowIOp>)
178
- one = rewriter. create < arith::ConstantOp>(
179
- loc, rewriter.getFloatAttr (opType, 1.0 ));
179
+ one = arith::ConstantOp::create (rewriter, loc,
180
+ rewriter.getFloatAttr (opType, 1.0 ));
180
181
else
181
- one = rewriter. create < arith::ConstantOp>(
182
- loc, rewriter.getIntegerAttr (opType, 1 ));
182
+ one = arith::ConstantOp::create (rewriter, loc,
183
+ rewriter.getIntegerAttr (opType, 1 ));
183
184
184
185
// Replace `[fi]powi(x, 0)` with `1`.
185
186
if (exponentValue == 0 ) {
@@ -208,12 +209,12 @@ PowIStrengthReduction<PowIOpTy, DivOpTy, MulOpTy>::matchAndRewrite(
208
209
// with:
209
210
// (1 / x) * (1 / x) * (1 / x) * ...
210
211
for (unsigned i = 1 ; i < exponentValue; ++i)
211
- result = rewriter. create < MulOpTy>( loc, result, base);
212
+ result = MulOpTy::create (rewriter, loc, result, base);
212
213
213
214
// Inverse the base for negative exponent, i.e. for
214
215
// `[fi]powi(x, negative_exponent)` set `x` to `1 / x`.
215
216
if (exponentIsNegative)
216
- result = rewriter. create < DivOpTy>( loc, bcast (one), result);
217
+ result = DivOpTy::create (rewriter, loc, bcast (one), result);
217
218
218
219
rewriter.replaceOp (op, result);
219
220
return success ();
0 commit comments