xref: /aosp_15_r20/external/clang/test/SemaOpenCL/amdgpu-num-register-attrs.cl (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple r600-- -verify -fsyntax-only %s
2*67e74705SXin Li
3*67e74705SXin Litypedef __attribute__((amdgpu_num_vgpr(128))) struct FooStruct { // expected-error {{'amdgpu_num_vgpr' attribute only applies to kernel functions}}
4*67e74705SXin Li  int x;
5*67e74705SXin Li  float y;
6*67e74705SXin Li} FooStruct;
7*67e74705SXin Li
8*67e74705SXin Li
9*67e74705SXin Li__attribute__((amdgpu_num_vgpr("ABC"))) kernel void foo2() {} // expected-error {{'amdgpu_num_vgpr' attribute requires an integer constant}}
10*67e74705SXin Li__attribute__((amdgpu_num_sgpr("ABC"))) kernel void foo3() {} // expected-error {{'amdgpu_num_sgpr' attribute requires an integer constant}}
11*67e74705SXin Li
12*67e74705SXin Li
13*67e74705SXin Li__attribute__((amdgpu_num_vgpr(40))) void foo4() {} // expected-error {{'amdgpu_num_vgpr' attribute only applies to kernel functions}}
14*67e74705SXin Li__attribute__((amdgpu_num_sgpr(64))) void foo5() {} // expected-error {{'amdgpu_num_sgpr' attribute only applies to kernel functions}}
15*67e74705SXin Li
16*67e74705SXin Li__attribute__((amdgpu_num_vgpr(40))) kernel void foo7() {}
17*67e74705SXin Li__attribute__((amdgpu_num_sgpr(64))) kernel void foo8() {}
18*67e74705SXin Li__attribute__((amdgpu_num_vgpr(40), amdgpu_num_sgpr(64))) kernel void foo9() {}
19*67e74705SXin Li
20*67e74705SXin Li// Check 0 VGPR is accepted.
21*67e74705SXin Li__attribute__((amdgpu_num_vgpr(0))) kernel void foo10() {}
22*67e74705SXin Li
23*67e74705SXin Li// Check 0 SGPR is accepted.
24*67e74705SXin Li__attribute__((amdgpu_num_sgpr(0))) kernel void foo11() {}
25*67e74705SXin Li
26*67e74705SXin Li// Check both 0 SGPR and VGPR is accepted.
27*67e74705SXin Li__attribute__((amdgpu_num_vgpr(0), amdgpu_num_sgpr(0))) kernel void foo12() {}
28*67e74705SXin Li
29*67e74705SXin Li// Too large VGPR value.
30*67e74705SXin Li__attribute__((amdgpu_num_vgpr(4294967296))) kernel void foo13() {} // expected-error {{integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type}}
31*67e74705SXin Li
32*67e74705SXin Li__attribute__((amdgpu_num_sgpr(4294967296))) kernel void foo14() {} // expected-error {{integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type}}
33*67e74705SXin Li
34*67e74705SXin Li__attribute__((amdgpu_num_sgpr(4294967296), amdgpu_num_vgpr(4294967296))) kernel void foo15() {} // expected-error 2 {{integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type}}
35*67e74705SXin Li
36*67e74705SXin Li
37*67e74705SXin Li// Make sure it is accepted with kernel keyword before the attribute.
38*67e74705SXin Likernel __attribute__((amdgpu_num_vgpr(40))) void foo16() {}
39*67e74705SXin Li
40*67e74705SXin Likernel __attribute__((amdgpu_num_sgpr(40))) void foo17() {}
41