Skip to content

Commit bb37959

Browse files
committed
move operation out of ArithToAPFloatConversionPass to try to fix LinkageInfo clang::LinkageComputer fail
1 parent 0ab946b commit bb37959

File tree

1 file changed

+29
-27
lines changed

1 file changed

+29
-27
lines changed

mlir/lib/Conversion/ArithToAPFloat/ArithToAPFloat.cpp

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -127,32 +127,34 @@ struct ArithToAPFloatConversionPass final
127127
: impl::ArithToAPFloatConversionPassBase<ArithToAPFloatConversionPass> {
128128
using Base::Base;
129129

130-
void runOnOperation() override {
131-
MLIRContext *context = &getContext();
132-
RewritePatternSet patterns(context);
133-
static const char add[] = "add";
134-
static const char subtract[] = "subtract";
135-
static const char multiply[] = "multiply";
136-
static const char divide[] = "divide";
137-
static const char remainder[] = "remainder";
138-
patterns.add<BinaryArithOpToAPFloatConversion<arith::AddFOp, add>,
139-
BinaryArithOpToAPFloatConversion<arith::SubFOp, subtract>,
140-
BinaryArithOpToAPFloatConversion<arith::MulFOp, multiply>,
141-
BinaryArithOpToAPFloatConversion<arith::DivFOp, divide>,
142-
BinaryArithOpToAPFloatConversion<arith::RemFOp, remainder>>(
143-
context, 1, getOperation());
144-
LogicalResult result = success();
145-
ScopedDiagnosticHandler scopedHandler(context, [&result](Diagnostic &diag) {
146-
if (diag.getSeverity() == DiagnosticSeverity::Error) {
147-
result = failure();
148-
}
149-
// NB: if you don't return failure, no other diag handlers will fire (see
150-
// mlir/lib/IR/Diagnostics.cpp:DiagnosticEngineImpl::emit).
151-
return failure();
152-
});
153-
walkAndApplyPatterns(getOperation(), std::move(patterns));
154-
if (failed(result))
155-
return signalPassFailure();
156-
}
130+
void runOnOperation() override;
157131
};
132+
133+
void ArithToAPFloatConversionPass::runOnOperation() {
134+
MLIRContext *context = &getContext();
135+
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());
147+
LogicalResult result = success();
148+
ScopedDiagnosticHandler scopedHandler(context, [&result](Diagnostic &diag) {
149+
if (diag.getSeverity() == DiagnosticSeverity::Error) {
150+
result = failure();
151+
}
152+
// NB: if you don't return failure, no other diag handlers will fire (see
153+
// mlir/lib/IR/Diagnostics.cpp:DiagnosticEngineImpl::emit).
154+
return failure();
155+
});
156+
walkAndApplyPatterns(getOperation(), std::move(patterns));
157+
if (failed(result))
158+
return signalPassFailure();
159+
}
158160
} // namespace

0 commit comments

Comments
 (0)