Removing iree_hal_command_buffer_dyn_cast from the HAL. (#13408)

It wasn't used and the vtable usage was incompatible with dynamic
linking. This removes the checks on the CUDA device accessor functions
but those are unstable/experimental anyway so sharp edges are fine until
there's a better solution.
diff --git a/experimental/rocm/direct_command_buffer.c b/experimental/rocm/direct_command_buffer.c
index 403e9ea..e977fd4 100644
--- a/experimental/rocm/direct_command_buffer.c
+++ b/experimental/rocm/direct_command_buffer.c
@@ -104,17 +104,8 @@
 
 bool iree_hal_rocm_direct_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_rocm_direct_command_buffer_vtable);
-}
-
-static void* iree_hal_rocm_direct_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_rocm_direct_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_rocm_direct_command_buffer_vtable);
 }
 
 static iree_status_t iree_hal_rocm_direct_command_buffer_begin(
@@ -397,7 +388,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_rocm_direct_command_buffer_vtable = {
         .destroy = iree_hal_rocm_direct_command_buffer_destroy,
-        .dyn_cast = iree_hal_rocm_direct_command_buffer_dyn_cast,
         .begin = iree_hal_rocm_direct_command_buffer_begin,
         .end = iree_hal_rocm_direct_command_buffer_end,
         .begin_debug_group =
diff --git a/runtime/src/iree/hal/command_buffer.c b/runtime/src/iree/hal/command_buffer.c
index 3b7b9c5..28b21c4 100644
--- a/runtime/src/iree/hal/command_buffer.c
+++ b/runtime/src/iree/hal/command_buffer.c
@@ -222,13 +222,6 @@
   return status;
 }
 
-IREE_API_EXPORT void* iree_hal_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  IREE_ASSERT_ARGUMENT(command_buffer);
-  if (iree_hal_resource_is(command_buffer, vtable)) return command_buffer;
-  return _VTABLE_DISPATCH(command_buffer, dyn_cast)(command_buffer, vtable);
-}
-
 IREE_API_EXPORT iree_hal_command_buffer_mode_t
 iree_hal_command_buffer_mode(const iree_hal_command_buffer_t* command_buffer) {
   IREE_ASSERT_ARGUMENT(command_buffer);
diff --git a/runtime/src/iree/hal/command_buffer.h b/runtime/src/iree/hal/command_buffer.h
index 7ecb106..39879d3 100644
--- a/runtime/src/iree/hal/command_buffer.h
+++ b/runtime/src/iree/hal/command_buffer.h
@@ -506,9 +506,6 @@
 IREE_API_EXPORT void iree_hal_command_buffer_release(
     iree_hal_command_buffer_t* command_buffer);
 
-IREE_API_EXPORT void* iree_hal_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable);
-
 // Returns a bitmask indicating the behavior of the command buffer.
 IREE_API_EXPORT iree_hal_command_buffer_mode_t
 iree_hal_command_buffer_mode(const iree_hal_command_buffer_t* command_buffer);
@@ -797,9 +794,6 @@
 typedef struct iree_hal_command_buffer_vtable_t {
   void(IREE_API_PTR* destroy)(iree_hal_command_buffer_t* command_buffer);
 
-  void*(IREE_API_PTR* dyn_cast)(iree_hal_command_buffer_t* command_buffer,
-                                const void* vtable);
-
   iree_status_t(IREE_API_PTR* begin)(iree_hal_command_buffer_t* command_buffer);
   iree_status_t(IREE_API_PTR* end)(iree_hal_command_buffer_t* command_buffer);
 
diff --git a/runtime/src/iree/hal/drivers/cuda/cuda_device.c b/runtime/src/iree/hal/drivers/cuda/cuda_device.c
index cbb1c57..80225df 100644
--- a/runtime/src/iree/hal/drivers/cuda/cuda_device.c
+++ b/runtime/src/iree/hal/drivers/cuda/cuda_device.c
@@ -188,19 +188,13 @@
   return status;
 }
 
-bool iree_hal_cuda_device_isa(iree_hal_device_t* base_device) {
-  return iree_hal_resource_is(base_device, &iree_hal_cuda_device_vtable);
-}
-
 CUcontext iree_hal_cuda_device_context(iree_hal_device_t* base_device) {
-  if (!iree_hal_cuda_device_isa(base_device)) return NULL;
   iree_hal_cuda_device_t* device = iree_hal_cuda_device_cast(base_device);
   return device->context_wrapper.cu_context;
 }
 
 iree_hal_cuda_dynamic_symbols_t* iree_hal_cuda_device_dynamic_symbols(
     iree_hal_device_t* base_device) {
-  if (!iree_hal_cuda_device_isa(base_device)) return NULL;
   iree_hal_cuda_device_t* device = iree_hal_cuda_device_cast(base_device);
   return device->context_wrapper.syms;
 }
diff --git a/runtime/src/iree/hal/drivers/cuda/cuda_device.h b/runtime/src/iree/hal/drivers/cuda/cuda_device.h
index 4145634..0cc0887 100644
--- a/runtime/src/iree/hal/drivers/cuda/cuda_device.h
+++ b/runtime/src/iree/hal/drivers/cuda/cuda_device.h
@@ -23,9 +23,6 @@
     iree_hal_cuda_dynamic_symbols_t* syms, CUdevice device,
     iree_allocator_t host_allocator, iree_hal_device_t** out_device);
 
-// Returns true if |device| is a CUDA device.
-bool iree_hal_cuda_device_isa(iree_hal_device_t* device);
-
 // Returns a CUDA context bound to the given |device| if it is a CUDA device
 // and otherwise returns NULL.
 //
diff --git a/runtime/src/iree/hal/drivers/cuda/graph_command_buffer.c b/runtime/src/iree/hal/drivers/cuda/graph_command_buffer.c
index f37b30f..d51f9fd 100644
--- a/runtime/src/iree/hal/drivers/cuda/graph_command_buffer.c
+++ b/runtime/src/iree/hal/drivers/cuda/graph_command_buffer.c
@@ -158,26 +158,16 @@
 
 CUgraphExec iree_hal_cuda_graph_command_buffer_handle(
     iree_hal_command_buffer_t* base_command_buffer) {
+  if (!iree_hal_cuda_graph_command_buffer_isa(base_command_buffer)) return NULL;
   iree_hal_cuda_graph_command_buffer_t* command_buffer =
-      (iree_hal_cuda_graph_command_buffer_t*)iree_hal_command_buffer_dyn_cast(
-          base_command_buffer, &iree_hal_cuda_graph_command_buffer_vtable);
-  IREE_ASSERT_TRUE(command_buffer);
+      iree_hal_cuda_graph_command_buffer_cast(base_command_buffer);
   return command_buffer->exec;
 }
 
 bool iree_hal_cuda_graph_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_cuda_graph_command_buffer_vtable);
-}
-
-static void* iree_hal_cuda_graph_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_cuda_graph_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_cuda_graph_command_buffer_vtable);
 }
 
 // Flushes any pending batched collective operations.
@@ -683,7 +673,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_cuda_graph_command_buffer_vtable = {
         .destroy = iree_hal_cuda_graph_command_buffer_destroy,
-        .dyn_cast = iree_hal_cuda_graph_command_buffer_dyn_cast,
         .begin = iree_hal_cuda_graph_command_buffer_begin,
         .end = iree_hal_cuda_graph_command_buffer_end,
         .begin_debug_group =
diff --git a/runtime/src/iree/hal/drivers/cuda/stream_command_buffer.c b/runtime/src/iree/hal/drivers/cuda/stream_command_buffer.c
index c437e88..e9aa53d 100644
--- a/runtime/src/iree/hal/drivers/cuda/stream_command_buffer.c
+++ b/runtime/src/iree/hal/drivers/cuda/stream_command_buffer.c
@@ -123,17 +123,8 @@
 
 bool iree_hal_cuda_stream_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_cuda_stream_command_buffer_vtable);
-}
-
-static void* iree_hal_cuda_stream_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_cuda_stream_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_cuda_stream_command_buffer_vtable);
 }
 
 // Flushes any pending batched collective operations.
@@ -543,7 +534,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_cuda_stream_command_buffer_vtable = {
         .destroy = iree_hal_cuda_stream_command_buffer_destroy,
-        .dyn_cast = iree_hal_cuda_stream_command_buffer_dyn_cast,
         .begin = iree_hal_cuda_stream_command_buffer_begin,
         .end = iree_hal_cuda_stream_command_buffer_end,
         .begin_debug_group =
diff --git a/runtime/src/iree/hal/drivers/local_task/task_command_buffer.c b/runtime/src/iree/hal/drivers/local_task/task_command_buffer.c
index c48b170..eec9245 100644
--- a/runtime/src/iree/hal/drivers/local_task/task_command_buffer.c
+++ b/runtime/src/iree/hal/drivers/local_task/task_command_buffer.c
@@ -182,17 +182,8 @@
 
 bool iree_hal_task_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(command_buffer,
-                                          &iree_hal_task_command_buffer_vtable);
-}
-
-static void* iree_hal_task_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_task_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_task_command_buffer_vtable);
 }
 
 //===----------------------------------------------------------------------===//
@@ -357,8 +348,7 @@
     iree_hal_task_queue_state_t* queue_state, iree_task_t* retire_task,
     iree_arena_allocator_t* arena, iree_task_submission_t* pending_submission) {
   iree_hal_task_command_buffer_t* command_buffer =
-      iree_hal_command_buffer_dyn_cast(base_command_buffer,
-                                       &iree_hal_task_command_buffer_vtable);
+      iree_hal_task_command_buffer_cast(base_command_buffer);
   IREE_ASSERT_TRUE(command_buffer);
 
   // If the command buffer is empty (valid!) then we are a no-op.
@@ -1053,7 +1043,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_task_command_buffer_vtable = {
         .destroy = iree_hal_task_command_buffer_destroy,
-        .dyn_cast = iree_hal_task_command_buffer_dyn_cast,
         .begin = iree_hal_task_command_buffer_begin,
         .end = iree_hal_task_command_buffer_end,
         .begin_debug_group = iree_hal_task_command_buffer_begin_debug_group,
diff --git a/runtime/src/iree/hal/drivers/vulkan/direct_command_buffer.cc b/runtime/src/iree/hal/drivers/vulkan/direct_command_buffer.cc
index df7732b..461cd48 100644
--- a/runtime/src/iree/hal/drivers/vulkan/direct_command_buffer.cc
+++ b/runtime/src/iree/hal/drivers/vulkan/direct_command_buffer.cc
@@ -148,17 +148,8 @@
 
 bool iree_hal_vulkan_direct_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_vulkan_direct_command_buffer_vtable);
-}
-
-static void* iree_hal_vulkan_direct_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_vulkan_direct_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_vulkan_direct_command_buffer_vtable);
 }
 
 static void iree_hal_vulkan_direct_command_buffer_destroy(
@@ -183,11 +174,11 @@
 
 VkCommandBuffer iree_hal_vulkan_direct_command_buffer_handle(
     iree_hal_command_buffer_t* base_command_buffer) {
+  if (!iree_hal_vulkan_direct_command_buffer_isa(base_command_buffer)) {
+    return VK_NULL_HANDLE;
+  }
   iree_hal_vulkan_direct_command_buffer_t* command_buffer =
-      (iree_hal_vulkan_direct_command_buffer_t*)
-          iree_hal_command_buffer_dyn_cast(
-              base_command_buffer,
-              &iree_hal_vulkan_direct_command_buffer_vtable);
+      iree_hal_vulkan_direct_command_buffer_cast(base_command_buffer);
   return command_buffer->handle;
 }
 
@@ -825,7 +816,6 @@
 const iree_hal_command_buffer_vtable_t
     iree_hal_vulkan_direct_command_buffer_vtable = {
         /*.destroy=*/iree_hal_vulkan_direct_command_buffer_destroy,
-        /*.dyn_cast=*/iree_hal_vulkan_direct_command_buffer_dyn_cast,
         /*.begin=*/iree_hal_vulkan_direct_command_buffer_begin,
         /*.end=*/iree_hal_vulkan_direct_command_buffer_end,
         /*.begin_debug_group=*/
diff --git a/runtime/src/iree/hal/local/inline_command_buffer.c b/runtime/src/iree/hal/local/inline_command_buffer.c
index edede8f..88a18ae 100644
--- a/runtime/src/iree/hal/local/inline_command_buffer.c
+++ b/runtime/src/iree/hal/local/inline_command_buffer.c
@@ -192,17 +192,8 @@
 
 bool iree_hal_inline_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_inline_command_buffer_vtable);
-}
-
-static void* iree_hal_inline_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_inline_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_inline_command_buffer_vtable);
 }
 
 //===----------------------------------------------------------------------===//
@@ -603,7 +594,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_inline_command_buffer_vtable = {
         .destroy = iree_hal_inline_command_buffer_destroy,
-        .dyn_cast = iree_hal_inline_command_buffer_dyn_cast,
         .begin = iree_hal_inline_command_buffer_begin,
         .end = iree_hal_inline_command_buffer_end,
         .begin_debug_group = iree_hal_inline_command_buffer_begin_debug_group,
diff --git a/runtime/src/iree/hal/utils/deferred_command_buffer.c b/runtime/src/iree/hal/utils/deferred_command_buffer.c
index 70798d5..a9ddc15 100644
--- a/runtime/src/iree/hal/utils/deferred_command_buffer.c
+++ b/runtime/src/iree/hal/utils/deferred_command_buffer.c
@@ -213,17 +213,8 @@
 
 IREE_API_EXPORT bool iree_hal_deferred_command_buffer_isa(
     iree_hal_command_buffer_t* command_buffer) {
-  return iree_hal_command_buffer_dyn_cast(
-      command_buffer, &iree_hal_deferred_command_buffer_vtable);
-}
-
-static void* iree_hal_deferred_command_buffer_dyn_cast(
-    iree_hal_command_buffer_t* command_buffer, const void* vtable) {
-  if (vtable == &iree_hal_deferred_command_buffer_vtable) {
-    IREE_HAL_ASSERT_TYPE(command_buffer, vtable);
-    return command_buffer;
-  }
-  return NULL;
+  return iree_hal_resource_is(&command_buffer->resource,
+                              &iree_hal_deferred_command_buffer_vtable);
 }
 
 static iree_status_t iree_hal_deferred_command_buffer_begin(
@@ -919,8 +910,7 @@
   IREE_TRACE_ZONE_BEGIN(z0);
 
   iree_hal_deferred_command_buffer_t* command_buffer =
-      (iree_hal_deferred_command_buffer_t*)iree_hal_command_buffer_dyn_cast(
-          base_command_buffer, &iree_hal_deferred_command_buffer_vtable);
+      iree_hal_deferred_command_buffer_cast(base_command_buffer);
   iree_hal_cmd_list_t* cmd_list = &command_buffer->cmd_list;
 
   iree_status_t status = iree_hal_command_buffer_begin(target_command_buffer);
@@ -953,7 +943,6 @@
 static const iree_hal_command_buffer_vtable_t
     iree_hal_deferred_command_buffer_vtable = {
         .destroy = iree_hal_deferred_command_buffer_destroy,
-        .dyn_cast = iree_hal_deferred_command_buffer_dyn_cast,
         .begin = iree_hal_deferred_command_buffer_begin,
         .end = iree_hal_deferred_command_buffer_end,
         .execution_barrier = iree_hal_deferred_command_buffer_execution_barrier,