53 DeviceOp device = getOperation();
55 TypeConverter converter;
56 converter.addConversion([&](Type type) -> std::optional<Type> {
57 return memRefToDefaultAddressSpace(type);
60 ConversionTarget target(getContext());
61 target.addDynamicallyLegalOp<memref::GlobalOp>([](memref::GlobalOp op) {
62 return op.getType().getMemorySpace() ==
nullptr;
65 target.addDynamicallyLegalOp<func::FuncOp>([&](func::FuncOp op) {
66 return converter.isSignatureLegal(op.getFunctionType());
69 RewritePatternSet patterns(&getContext());
70 populateWithGenerated(patterns);
71 populateFunctionOpInterfaceTypeConversionPattern<func::FuncOp>(patterns,
74 if (failed(applyPartialConversion(device, target, std::move(patterns))))
78 device.walk([&](Operation *op) {
79 for (Value r : op->getResults())
80 r.setType(memRefToDefaultAddressSpace(r.getType()));