41 DeviceOp device = getOperation();
43 TypeConverter converter;
44 converter.addConversion([&](Type type) -> std::optional<Type> {
48 ConversionTarget target(getContext());
49 target.addDynamicallyLegalOp<memref::GlobalOp>([](memref::GlobalOp op) {
50 return op.getType().getMemorySpace() ==
nullptr;
53 target.addDynamicallyLegalOp<func::FuncOp>([&](func::FuncOp op) {
54 return converter.isSignatureLegal(op.getFunctionType());
57 RewritePatternSet patterns(&getContext());
58 populateWithGenerated(patterns);
59 populateFunctionOpInterfaceTypeConversionPattern<func::FuncOp>(patterns,
62 if (failed(applyPartialConversion(device, target, std::move(patterns))))
66 device.walk([&](Operation *op) {
67 for (Value r : op->getResults())