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