Skip to content

Commit

Permalink
Convert to Opaque ptr fix
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanradanov committed Sep 21, 2023
1 parent df5addc commit 508f1d8
Showing 1 changed file with 12 additions and 26 deletions.
38 changes: 12 additions & 26 deletions lib/polygeist/Passes/ConvertToOpaquePtr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,31 +53,19 @@ static LogicalResult convertPtrsToOpaque(Operation *op, Operation *&rewritten,
return success();
}

struct Pointer2MemrefConversion : public OpConversionPattern<Pointer2MemrefOp> {
using OpConversionPattern<Pointer2MemrefOp>::OpConversionPattern;
LogicalResult
matchAndRewrite(Pointer2MemrefOp op, OpAdaptor adaptor,
ConversionPatternRewriter &rewriter) const final {
Operation *rewritten;
TypeAttr elty = nullptr;
if (convertPtrsToOpaque(op, rewritten, elty, adaptor.getOperands(),
rewriter, getTypeConverter())
.failed())
return failure();
rewriter.replaceOp(op, rewritten->getResults());
return success();
}
};
struct OpConversion : public ConversionPattern {
const TypeConverter *typeConverter;
OpConversion(const TypeConverter &converter, MLIRContext *ctx)
: ConversionPattern(converter, Pattern::MatchAnyOpTypeTag(), 1, ctx),
typeConverter(&converter) {}

struct Memref2PointerConversion : public OpConversionPattern<Memref2PointerOp> {
using OpConversionPattern<Memref2PointerOp>::OpConversionPattern;
LogicalResult
matchAndRewrite(Memref2PointerOp op, OpAdaptor adaptor,
matchAndRewrite(Operation *op, ArrayRef<Value> operands,
ConversionPatternRewriter &rewriter) const final {
Operation *rewritten;
TypeAttr elty = nullptr;
if (convertPtrsToOpaque(op, rewritten, elty, adaptor.getOperands(),
rewriter, getTypeConverter())
if (convertPtrsToOpaque(op, rewritten, elty, operands, rewriter,
typeConverter)
.failed())
return failure();
rewriter.replaceOp(op, rewritten->getResults());
Expand Down Expand Up @@ -139,10 +127,8 @@ struct ConvertToOpaquePtrPass
return false;
return true;
};
target.addDynamicallyLegalOp<LLVM::GEPOp>(
[&](LLVM::GEPOp op) { return ptrsAreOpaque(op); });
target.addDynamicallyLegalOp<LLVM::AllocaOp>(
[&](LLVM::AllocaOp op) { return ptrsAreOpaque(op); });
target.addDynamicallyLegalDialect<LLVM::LLVMDialect>(
[&](Operation *op) { return ptrsAreOpaque(op); });
target.addDynamicallyLegalOp<Memref2PointerOp>(
[&](Memref2PointerOp op) { return ptrsAreOpaque(op); });
target.addDynamicallyLegalOp<Pointer2MemrefOp>(
Expand All @@ -155,8 +141,8 @@ struct ConvertToOpaquePtrPass
converter.addConversion([&](MemRefType ty) { return ty; });

RewritePatternSet patterns(&getContext());
patterns.add<GEPConversion, AllocaConversion, Memref2PointerConversion,
Pointer2MemrefConversion>(converter, &getContext());
patterns.add<GEPConversion, AllocaConversion, OpConversion>(converter,
&getContext());
if (failed(applyPartialConversion(getOperation(), target,
std::move(patterns))))
signalPassFailure();
Expand Down

0 comments on commit 508f1d8

Please sign in to comment.