Files
TheRock/rocm-systems/projects/hip-tests/catch/unit/rtc/hiprtcGetLoweredName.cc
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

157 lines
6.0 KiB
C++

/*
* Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
*
* SPDX-License-Identifier: MIT
*/
#include <iostream>
#include <hip_test_common.hh>
#include <hip/hiprtc.h>
#include <vector>
#include <string>
/**
* @addtogroup hiprtcGetLoweredName hiprtcGetLoweredName
* @{
* @ingroup hiprtc
* `hiprtcResult hiprtcGetLoweredName(prog,
* kernel_name_vec[i].c_str(), // name expression
* &name // lowered name
* ));` -
* These test cases tests working hiprtcGetLoweredName() api
*/
static const char* const gpuProgram1 = R"(
template <int N, typename T>
__global__ void my_kernel(T* data) {
if (blockIdx.x != 0 || threadIdx.x != 0) return;
T data0 = data[0];
for( int i=0; i<N-1; ++i ) {
data[0] *= data0;
}
})";
static const char* const gpuProgram2 = R"(
template <int N, typename T, typename K>
__global__ void my_kernel(T* data, K* Arr) {
if (blockIdx.x != 0 || threadIdx.x != 0) return;
T data0 = data[0];
for( int i=0; i<N-1; ++i ) {
data[0] = data0 + Arr[i];
}
})";
static const char* const gpuProgram3 = R"(
template <int N>
__global__ void nontype_kernel() {}
)";
bool Test(int CaseNum, const char* GpuProgram) {
bool IfTestPassed = true;
// Create an instance of hiprtcProgram
hiprtcProgram prog;
HIPRTC_CHECK(hiprtcCreateProgram(&prog, // prog
GpuProgram, // buffer
"prog.cu", // name
0, // numHeaders
NULL, // headers
NULL)); // includeNames
// add all name expressions for kernels
std::vector<std::string> kernel_name_vec, kernelNameExpectdOutput;
if (CaseNum == 1) {
kernel_name_vec.push_back("my_kernel<(int)3, float >");
kernel_name_vec.push_back("my_kernel<(int)5, double >");
kernel_name_vec.push_back("my_kernel<(int)6, int >");
kernel_name_vec.push_back("my_kernel<(int)10, long >");
kernel_name_vec.push_back("my_kernel<(int)11, long long >");
kernel_name_vec.push_back("my_kernel<(int)123, unsigned int >");
kernel_name_vec.push_back("my_kernel<(int)1234, char >");
kernel_name_vec.push_back("my_kernel<(int)12345, unsigned char >");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi3EfEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi5EdEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi6EiEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10ElEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi11ExEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi123EjEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi1234EcEvPT0_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi12345EhEvPT0_");
} else if (CaseNum == 2) {
kernel_name_vec.push_back("my_kernel<(int)3, float, float >");
kernel_name_vec.push_back("my_kernel<(int)66, float, int >");
kernel_name_vec.push_back("my_kernel<(int)(4 + 6), long, double >");
kernel_name_vec.push_back("my_kernel<(int)5, double, double >");
kernel_name_vec.push_back("my_kernel<(int)6, int, int >");
kernel_name_vec.push_back("my_kernel<(int)10, long, long >");
kernel_name_vec.push_back("my_kernel<(int)11, long long, long long >");
kernel_name_vec.push_back("my_kernel<(int)123, unsigned int, unsigned int >"); // NOLINT
kernel_name_vec.push_back("my_kernel<(int)1234, char, char >");
kernel_name_vec.push_back("my_kernel<(int)12345, unsigned char, unsigned char >"); // NOLINT
kernelNameExpectdOutput.push_back("_Z9my_kernelILi3EffEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi66EfiEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10EldEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi5EddEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi6EiiEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi10EllEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi11ExxEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi123EjjEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi1234EccEvPT0_PT1_");
kernelNameExpectdOutput.push_back("_Z9my_kernelILi12345EhhEvPT0_PT1_");
} else if (CaseNum == 3) {
kernel_name_vec.push_back("nontype_kernel<3>");
kernel_name_vec.push_back("nontype_kernel<(2 + 3)>");
kernel_name_vec.push_back("nontype_kernel<(-2 + 6)>");
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi3EEvv");
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi5EEvv");
kernelNameExpectdOutput.push_back("_Z14nontype_kernelILi4EEvv");
}
// add kernel name expressions to HIPRTC
for (size_t i = 0; i < kernel_name_vec.size(); ++i)
HIPRTC_CHECK(hiprtcAddNameExpression(prog, kernel_name_vec[i].c_str()));
hiprtcResult compileResult = hiprtcCompileProgram(prog, // prog
0, // numOptions
NULL); // options
// Obtain compilation log from the program.
size_t logSize;
HIPRTC_CHECK(hiprtcGetProgramLogSize(prog, &logSize));
if (logSize > 0) {
char* log = new char[logSize];
HIPRTC_CHECK(hiprtcGetProgramLog(prog, log));
INFO(log);
delete[] log;
REQUIRE(compileResult == HIPRTC_SUCCESS);
}
// Extract lowered names
for (size_t i = 0; i < kernel_name_vec.size(); ++i) {
const char* name;
HIPRTC_CHECK(hiprtcGetLoweredName(prog,
kernel_name_vec[i].c_str(), // name expression
&name)); // lowered name
if (name != kernelNameExpectdOutput[i]) {
IfTestPassed = false;
}
}
HIPRTC_CHECK(hiprtcDestroyProgram(&prog));
return IfTestPassed;
}
HIP_TEST_CASE(Unit_hiprtcGetLoweredName_templateKrnls) {
REQUIRE(Test(1, gpuProgram1));
REQUIRE(Test(2, gpuProgram2));
REQUIRE(Test(3, gpuProgram3));
}
/**
* End doxygen group hiprtc.
* @}
*/