[libclc] 13cb586 - libclc: Reimplement amdhsa get_num_groups (#185006)

via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 6 22:58:32 PST 2026


Author: Matt Arsenault
Date: 2026-03-07T07:58:27+01:00
New Revision: 13cb586a41c0417cea87080baf1b00eeb19fca87

URL: https://github.com/llvm/llvm-project/commit/13cb586a41c0417cea87080baf1b00eeb19fca87
DIFF: https://github.com/llvm/llvm-project/commit/13cb586a41c0417cea87080baf1b00eeb19fca87.diff

LOG: libclc: Reimplement amdhsa get_num_groups (#185006)

Assume v5 ABI, and move handling into clc.

Added: 
    libclc/clc/lib/amdgcn/workitem/clc_get_num_groups.cl
    libclc/opencl/lib/generic/workitem/get_num_groups.cl

Modified: 
    libclc/clc/lib/amdgcn/SOURCES
    libclc/opencl/lib/amdgcn-amdhsa/SOURCES
    libclc/opencl/lib/amdgcn/SOURCES
    libclc/opencl/lib/generic/SOURCES
    libclc/opencl/lib/ptx-nvidiacl/SOURCES

Removed: 
    libclc/opencl/lib/amdgcn-amdhsa/workitem/get_num_groups.cl
    libclc/opencl/lib/amdgcn/workitem/get_num_groups.cl
    libclc/opencl/lib/ptx-nvidiacl/workitem/get_num_groups.cl


################################################################################
diff  --git a/libclc/clc/lib/amdgcn/SOURCES b/libclc/clc/lib/amdgcn/SOURCES
index 959e4fb48e97a..28ce5f1943825 100644
--- a/libclc/clc/lib/amdgcn/SOURCES
+++ b/libclc/clc/lib/amdgcn/SOURCES
@@ -10,4 +10,5 @@ workitem/clc_get_group_id.cl
 workitem/clc_get_local_id.cl
 workitem/clc_get_local_size.cl
 workitem/clc_get_max_sub_group_size.cl
+workitem/clc_get_num_groups.cl
 workitem/clc_get_work_dim.cl

diff  --git a/libclc/opencl/lib/amdgcn-amdhsa/workitem/get_num_groups.cl b/libclc/clc/lib/amdgcn/workitem/clc_get_num_groups.cl
similarity index 50%
rename from libclc/opencl/lib/amdgcn-amdhsa/workitem/get_num_groups.cl
rename to libclc/clc/lib/amdgcn/workitem/clc_get_num_groups.cl
index 0d03689feb9ba..39912655c3c4c 100644
--- a/libclc/opencl/lib/amdgcn-amdhsa/workitem/get_num_groups.cl
+++ b/libclc/clc/lib/amdgcn/workitem/clc_get_num_groups.cl
@@ -6,14 +6,15 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <clc/opencl/opencl-base.h>
+#include "clc/workitem/clc_get_num_groups.h"
+#include <amdhsa_abi.h>
 
-_CLC_DEF _CLC_OVERLOAD size_t get_num_groups(uint dim) {
-  size_t global_size = get_global_size(dim);
-  size_t local_size = get_local_size(dim);
-  size_t num_groups = global_size / local_size;
-  if (global_size % local_size != 0) {
-    num_groups++;
-  }
-  return num_groups;
+_CLC_OVERLOAD _CLC_DEF size_t __clc_get_num_groups(uint dim) {
+  if (dim > 2)
+    return 1;
+
+  __constant amdhsa_implicit_kernarg_v5 *args =
+      (__constant amdhsa_implicit_kernarg_v5 *)
+          __builtin_amdgcn_implicitarg_ptr();
+  return args->block_count[dim] + (args->remainder[dim] > 0);
 }

diff  --git a/libclc/opencl/lib/amdgcn-amdhsa/SOURCES b/libclc/opencl/lib/amdgcn-amdhsa/SOURCES
index 8224b7721b2ca..ee3a48ce2c474 100644
--- a/libclc/opencl/lib/amdgcn-amdhsa/SOURCES
+++ b/libclc/opencl/lib/amdgcn-amdhsa/SOURCES
@@ -1,3 +1,2 @@
 workitem/get_global_size.cl
 workitem/get_local_size.cl
-workitem/get_num_groups.cl

diff  --git a/libclc/opencl/lib/amdgcn/SOURCES b/libclc/opencl/lib/amdgcn/SOURCES
index 9b3ddf192e3dc..ac72d8a00c9d0 100644
--- a/libclc/opencl/lib/amdgcn/SOURCES
+++ b/libclc/opencl/lib/amdgcn/SOURCES
@@ -6,5 +6,4 @@ workitem/get_group_id.cl
 workitem/get_global_size.cl
 workitem/get_local_id.cl
 workitem/get_local_size.cl
-workitem/get_num_groups.cl
 workitem/get_work_dim.cl

diff  --git a/libclc/opencl/lib/amdgcn/workitem/get_num_groups.cl b/libclc/opencl/lib/amdgcn/workitem/get_num_groups.cl
deleted file mode 100644
index 9e8dddb859064..0000000000000
--- a/libclc/opencl/lib/amdgcn/workitem/get_num_groups.cl
+++ /dev/null
@@ -1,22 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include <clc/opencl/opencl-base.h>
-
-_CLC_DEF _CLC_OVERLOAD size_t get_num_groups(uint dim) {
-  switch (dim) {
-  case 0:
-    return __builtin_amdgcn_grid_size_x() / __builtin_amdgcn_workgroup_size_x();
-  case 1:
-    return __builtin_amdgcn_grid_size_y() / __builtin_amdgcn_workgroup_size_y();
-  case 2:
-    return __builtin_amdgcn_grid_size_z() / __builtin_amdgcn_workgroup_size_z();
-  default:
-    return 1;
-  }
-}

diff  --git a/libclc/opencl/lib/generic/SOURCES b/libclc/opencl/lib/generic/SOURCES
index 312657f3bf106..dd51d5c084d51 100644
--- a/libclc/opencl/lib/generic/SOURCES
+++ b/libclc/opencl/lib/generic/SOURCES
@@ -205,3 +205,4 @@ synchronization/work_group_barrier.cl
 workitem/get_enqueued_local_size.cl
 workitem/get_global_id.cl
 workitem/get_global_size.cl
+workitem/get_num_groups.cl

diff  --git a/libclc/opencl/lib/ptx-nvidiacl/workitem/get_num_groups.cl b/libclc/opencl/lib/generic/workitem/get_num_groups.cl
similarity index 100%
rename from libclc/opencl/lib/ptx-nvidiacl/workitem/get_num_groups.cl
rename to libclc/opencl/lib/generic/workitem/get_num_groups.cl

diff  --git a/libclc/opencl/lib/ptx-nvidiacl/SOURCES b/libclc/opencl/lib/ptx-nvidiacl/SOURCES
index eb64360fece7a..b8e8f64b5802a 100644
--- a/libclc/opencl/lib/ptx-nvidiacl/SOURCES
+++ b/libclc/opencl/lib/ptx-nvidiacl/SOURCES
@@ -5,7 +5,6 @@ workitem/get_local_id.cl
 workitem/get_local_linear_id.cl
 workitem/get_local_size.cl
 workitem/get_max_sub_group_size.cl
-workitem/get_num_groups.cl
 workitem/get_num_sub_groups.cl
 workitem/get_sub_group_id.cl
 workitem/get_sub_group_local_id.cl


        


More information about the cfe-commits mailing list