Including the .kd symbol suffix in AMDGPU executables.
This avoids the need for string manipulation at runtime and is what
the HSA API expects.
diff --git a/compiler/plugins/target/ROCM/ROCMTarget.cpp b/compiler/plugins/target/ROCM/ROCMTarget.cpp
index 851b6ed..8558f0b 100644
--- a/compiler/plugins/target/ROCM/ROCMTarget.cpp
+++ b/compiler/plugins/target/ROCM/ROCMTarget.cpp
@@ -665,7 +665,9 @@
       }
       int64_t ordinal = ordinalAttr.getInt();
 
-      auto symbolNameRef = builder.createString(exportOp.getName());
+      // Symbol names include a `.kd` suffix as that's what HSA expects.
+      auto symbolNameKd = (exportOp.getName() + ".kd").str();
+      auto symbolNameRef = builder.createString(symbolNameKd);
 
       iree_hal_amdgpu_Dims_t workgroupSize = {0};
       if (auto workgroupSizeAttr = exportOp.getWorkgroupSize()) {
diff --git a/runtime/src/iree/schemas/amdgpu_executable_def.fbs b/runtime/src/iree/schemas/amdgpu_executable_def.fbs
index 43efdb0..7c0510c 100644
--- a/runtime/src/iree/schemas/amdgpu_executable_def.fbs
+++ b/runtime/src/iree/schemas/amdgpu_executable_def.fbs
@@ -28,6 +28,7 @@
 // Information about an exported function on the executable.
 table ExportDef {
   // String name of the exported function symbol in the module.
+  // Includes a `.kd` suffix as that's what HSA expects.
   symbol_name:string;
 
   // Workgroup size for the export.