17 #define GEN_PASS_DEF_CONVERTOPENACCTOSCFPASS
18 #include "mlir/Conversion/Passes.h.inc"
30 template <
typename OpTy>
34 LogicalResult matchAndRewrite(OpTy op,
40 IntegerAttr constAttr;
43 op.getIfCond(),
false);
44 rewriter.
modifyOpInPlace(op, [&]() { op.getIfCondMutable().erase(0); });
45 auto thenBodyBuilder = ifOp.getThenBodyBuilder(rewriter.
getListener());
46 thenBodyBuilder.clone(*op.getOperation());
49 if (constAttr.getInt())
50 rewriter.
modifyOpInPlace(op, [&]() { op.getIfCondMutable().erase(0); });
66 struct ConvertOpenACCToSCFPass
67 :
public impl::ConvertOpenACCToSCFPassBase<ConvertOpenACCToSCFPass> {
68 void runOnOperation()
override;
72 void ConvertOpenACCToSCFPass::runOnOperation() {
73 auto op = getOperation();
74 auto *context = op.getContext();
80 target.addLegalDialect<scf::SCFDialect>();
81 target.addLegalDialect<acc::OpenACCDialect>();
83 target.addDynamicallyLegalOp<acc::EnterDataOp>(
84 [](acc::EnterDataOp op) {
return !op.getIfCond(); });
86 target.addDynamicallyLegalOp<acc::ExitDataOp>(
87 [](acc::ExitDataOp op) {
return !op.getIfCond(); });
89 target.addDynamicallyLegalOp<acc::UpdateOp>(
90 [](acc::UpdateOp op) {
return !op.getIfCond(); });
This class describes a specific conversion target.
Listener * getListener() const
Returns the current listener of this builder, or nullptr if this builder doesn't have a listener.
Operation * create(const OperationState &state)
Creates an operation given the fields represented as an OperationState.
A special type of RewriterBase that coordinates the application of a rewrite pattern on the current I...
virtual void eraseOp(Operation *op)
This method erases an operation that is known to have no uses.
void modifyOpInPlace(Operation *root, CallableT &&callable)
This method is a utility wrapper around an in-place modification of an operation.
This class provides an abstraction over the various different ranges of value types.
Include the generated interface declarations.
bool matchPattern(Value value, const Pattern &pattern)
Entry point for matching a pattern over a Value.
void populateOpenACCToSCFConversionPatterns(RewritePatternSet &patterns)
Collect the patterns to convert from the OpenACC dialect to OpenACC with SCF dialect.
const FrozenRewritePatternSet & patterns
detail::constant_op_matcher m_Constant()
Matches a constant foldable operation.
LogicalResult applyPartialConversion(ArrayRef< Operation * > ops, const ConversionTarget &target, const FrozenRewritePatternSet &patterns, ConversionConfig config=ConversionConfig())
Below we define several entry points for operation conversion.
OpRewritePattern is a wrapper around RewritePattern that allows for matching and rewriting against an...