@@ -3381,9 +3381,30 @@ bool doesImageTargetMatchDevice(const RTDeviceBinaryImage &Img,
33813381 std::find_if (PropRange.begin (), PropRange.end (), [&](const auto &Prop) {
33823382 return Prop->Name == std::string_view (" compile_target" );
33833383 });
3384- // Device image has no compile_target property, so it is JIT compiled .
3384+ // Device image has no compile_target property, check target .
33853385 if (PropIt == PropRange.end ()) {
3386- return true ;
3386+ sycl::backend BE = Dev.get_backend ();
3387+ const char *Target = Img.getRawData ().DeviceTargetSpec ;
3388+ if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_SPIRV64) == 0 ) {
3389+ return (BE == sycl::backend::opencl ||
3390+ BE == sycl::backend::ext_oneapi_level_zero);
3391+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_SPIRV64_X86_64) ==
3392+ 0 ) {
3393+ return Dev.is_cpu ();
3394+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_SPIRV64_GEN) == 0 ) {
3395+ return Dev.is_gpu () && (BE == sycl::backend::opencl ||
3396+ BE == sycl::backend::ext_oneapi_level_zero);
3397+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_SPIRV64_FPGA) == 0 ) {
3398+ return Dev.is_accelerator ();
3399+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_NVPTX64) == 0 ) {
3400+ return BE == sycl::backend::ext_oneapi_cuda;
3401+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_AMDGCN) == 0 ) {
3402+ return BE == sycl::backend::ext_oneapi_hip;
3403+ } else if (strcmp (Target, __SYCL_DEVICE_BINARY_TARGET_NATIVE_CPU) == 0 ) {
3404+ return BE == sycl::backend::ext_oneapi_native_cpu;
3405+ }
3406+ assert (false );
3407+ return false ;
33873408 }
33883409
33893410 // Device image has the compile_target property, so it is AOT compiled for
0 commit comments