55 DeviceOp device = getOperation();
57 TypeConverter converter;
58 converter.addConversion([&](Type type) -> std::optional<Type> {
62 ConversionTarget target(getContext());
63 target.addDynamicallyLegalOp<memref::GlobalOp>([](memref::GlobalOp op) {
64 return op.getType().getMemorySpace() ==
nullptr;
67 target.addDynamicallyLegalOp<func::FuncOp>([&](func::FuncOp op) {
68 return converter.isSignatureLegal(op.getFunctionType());
71 RewritePatternSet patterns(&getContext());
72 populateWithGenerated(patterns);
73 populateFunctionOpInterfaceTypeConversionPattern<func::FuncOp>(patterns,
76 if (failed(applyPartialConversion(device, target, std::move(patterns))))
80 device.walk([&](Operation *op) {
81 for (Value r : op->getResults())