@@ -73,11 +73,14 @@ lookupOrCreateBinaryFn(OpBuilder &b, SymbolOpInterface symTable, StringRef name,
7373}
7474
7575// / Rewrite a binary arithmetic operation to an APFloat function call.
76- template <typename OpTy, const char *APFloatName >
76+ template <typename OpTy>
7777struct BinaryArithOpToAPFloatConversion final : OpRewritePattern<OpTy> {
78- BinaryArithOpToAPFloatConversion (MLIRContext *context, PatternBenefit benefit,
79- SymbolOpInterface symTable)
80- : OpRewritePattern<OpTy>(context, benefit), symTable(symTable) {};
78+ BinaryArithOpToAPFloatConversion (MLIRContext *context,
79+ const char *APFloatName,
80+ SymbolOpInterface symTable,
81+ PatternBenefit benefit = 1 )
82+ : OpRewritePattern<OpTy>(context, benefit), symTable(symTable),
83+ APFloatName (APFloatName) {};
8184
8285 LogicalResult matchAndRewrite (OpTy op,
8386 PatternRewriter &rewriter) const override {
@@ -120,6 +123,7 @@ struct BinaryArithOpToAPFloatConversion final : OpRewritePattern<OpTy> {
120123 }
121124
122125 SymbolOpInterface symTable;
126+ const char *APFloatName;
123127};
124128
125129namespace {
@@ -133,17 +137,16 @@ struct ArithToAPFloatConversionPass final
133137void ArithToAPFloatConversionPass::runOnOperation () {
134138 MLIRContext *context = &getContext ();
135139 RewritePatternSet patterns (context);
136- static const char add[] = " add" ;
137- static const char subtract[] = " subtract" ;
138- static const char multiply[] = " multiply" ;
139- static const char divide[] = " divide" ;
140- static const char remainder[] = " remainder" ;
141- patterns.add <BinaryArithOpToAPFloatConversion<arith::AddFOp, add>,
142- BinaryArithOpToAPFloatConversion<arith::SubFOp, subtract>,
143- BinaryArithOpToAPFloatConversion<arith::MulFOp, multiply>,
144- BinaryArithOpToAPFloatConversion<arith::DivFOp, divide>,
145- BinaryArithOpToAPFloatConversion<arith::RemFOp, remainder>>(
146- context, 1 , getOperation ());
140+ patterns.add <BinaryArithOpToAPFloatConversion<arith::AddFOp>>(context, " add" ,
141+ getOperation ());
142+ patterns.add <BinaryArithOpToAPFloatConversion<arith::SubFOp>>(
143+ context, " subtract" , getOperation ());
144+ patterns.add <BinaryArithOpToAPFloatConversion<arith::MulFOp>>(
145+ context, " multiply" , getOperation ());
146+ patterns.add <BinaryArithOpToAPFloatConversion<arith::DivFOp>>(
147+ context, " divide" , getOperation ());
148+ patterns.add <BinaryArithOpToAPFloatConversion<arith::RemFOp>>(
149+ context, " remainder" , getOperation ());
147150 LogicalResult result = success ();
148151 ScopedDiagnosticHandler scopedHandler (context, [&result](Diagnostic &diag) {
149152 if (diag.getSeverity () == DiagnosticSeverity::Error) {
0 commit comments