[AMDGPU] Add a new builtin type for image descriptor rsrc (#160258)
Adding a new builtin type for AMDGPU's image descriptor rsrc data type This requires for https://github.com/llvm/llvm-project/pull/140210
This commit is contained in:
parent
4a9041b138
commit
27fa1d0cf9
@ -21,6 +21,7 @@
|
||||
#endif
|
||||
|
||||
AMDGPU_OPAQUE_PTR_TYPE("__amdgpu_buffer_rsrc_t", AMDGPUBufferRsrc, AMDGPUBufferRsrcTy, 128, 128, 8)
|
||||
AMDGPU_OPAQUE_PTR_TYPE("__amdgpu_texture_t", AMDGPUTexture, AMDGPUTextureTy, 256, 256, 0)
|
||||
|
||||
AMDGPU_NAMED_BARRIER_TYPE("__amdgpu_named_workgroup_barrier_t", AMDGPUNamedWorkgroupBarrier, AMDGPUNamedWorkgroupBarrierTy, 128, 32, 0)
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
// Q -> target builtin type, followed by a character to distinguish the builtin type
|
||||
// Qa -> AArch64 svcount_t builtin type.
|
||||
// Qb -> AMDGPU __amdgpu_buffer_rsrc_t builtin type.
|
||||
// Qt -> AMDGPU __amdgpu_texture_t builtin type.
|
||||
// E -> ext_vector, followed by the number of elements and the base type.
|
||||
// X -> _Complex, followed by the base type.
|
||||
// Y -> ptrdiff_t
|
||||
|
||||
@ -12590,6 +12590,10 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context,
|
||||
Type = Context.AMDGPUBufferRsrcTy;
|
||||
break;
|
||||
}
|
||||
case 't': {
|
||||
Type = Context.AMDGPUTextureTy;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
llvm_unreachable("Unexpected target builtin type");
|
||||
}
|
||||
|
||||
17
clang/test/CodeGen/amdgpu-image-rsrc-type-debug-info.c
Normal file
17
clang/test/CodeGen/amdgpu-image-rsrc-type-debug-info.c
Normal file
@ -0,0 +1,17 @@
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -triple amdgcn -emit-llvm -o - %s -debug-info-kind=limited | FileCheck %s
|
||||
|
||||
// CHECK-LABEL: define dso_local void @test_locals(
|
||||
// CHECK-SAME: ) #[[ATTR0:[0-9]+]] !dbg [[DBG6:![0-9]+]] {
|
||||
// CHECK-NEXT: [[ENTRY:.*:]]
|
||||
// CHECK-NEXT: [[IMG:%.*]] = alloca ptr, align 32, addrspace(5)
|
||||
// CHECK-NEXT: [[IMG_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[IMG]] to ptr
|
||||
// CHECK-NEXT: #dbg_declare(ptr addrspace(5) [[IMG]], [[META11:![0-9]+]], !DIExpression(DW_OP_constu, 1, DW_OP_swap, DW_OP_xderef), [[META14:![0-9]+]])
|
||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[IMG_ASCAST]], align 32, !dbg [[DBG15:![0-9]+]]
|
||||
// CHECK-NEXT: ret void, !dbg [[DBG16:![0-9]+]]
|
||||
//
|
||||
void test_locals(void) {
|
||||
__amdgpu_texture_t img;
|
||||
(void)img;
|
||||
}
|
||||
7
clang/test/CodeGenCXX/amdgpu-image-rsrc-typeinfo.cpp
Normal file
7
clang/test/CodeGenCXX/amdgpu-image-rsrc-typeinfo.cpp
Normal file
@ -0,0 +1,7 @@
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -triple amdgcn %s -emit-llvm -o - | FileCheck %s
|
||||
namespace std { class type_info; }
|
||||
auto &a = typeid(__amdgpu_texture_t);
|
||||
//// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
|
||||
// CHECK: {{.*}}
|
||||
17
clang/test/SemaCXX/amdgpu-image-rsrc.cpp
Normal file
17
clang/test/SemaCXX/amdgpu-image-rsrc.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -std=gnu++11 -triple amdgcn -Wno-unused-value %s
|
||||
|
||||
void foo() {
|
||||
int n = 100;
|
||||
__amdgpu_texture_t v = 0; // expected-error {{cannot initialize a variable of type '__amdgpu_texture_t' with an rvalue of type 'int'}}
|
||||
static_cast<__amdgpu_texture_t>(n); // expected-error {{static_cast from 'int' to '__amdgpu_texture_t' is not allowed}}
|
||||
reinterpret_cast<__amdgpu_texture_t>(n); // expected-error {{reinterpret_cast from 'int' to '__amdgpu_texture_t' is not allowed}}
|
||||
(void)(v + v); // expected-error {{invalid operands to binary expression ('__amdgpu_texture_t' and '__amdgpu_texture_t')}}
|
||||
int x(v); // expected-error {{cannot initialize a variable of type 'int' with an lvalue of type '__amdgpu_texture_t'}}
|
||||
__amdgpu_texture_t k;
|
||||
}
|
||||
|
||||
template<class T> void bar(T);
|
||||
void use(__amdgpu_texture_t r) { bar(r); }
|
||||
struct S { __amdgpu_texture_t r; int a; };
|
||||
13
clang/test/SemaOpenCL/amdgpu-image-rsrc.cl
Normal file
13
clang/test/SemaOpenCL/amdgpu-image-rsrc.cl
Normal file
@ -0,0 +1,13 @@
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -verify -cl-std=CL1.2 -triple amdgcn-amd-amdhsa %s
|
||||
// RUN: %clang_cc1 -verify -cl-std=CL2.0 -triple amdgcn-amd-amdhsa %s
|
||||
|
||||
void f() {
|
||||
int n = 3;
|
||||
__amdgpu_texture_t v = (__amdgpu_texture_t)0; // expected-error {{used type '__amdgpu_texture_t' where arithmetic or pointer type is required}}
|
||||
int k = v; // expected-error {{initializing '__private int' with an expression of incompatible type '__private __amdgpu_texture_t'}}
|
||||
(void)(v + v); // expected-error {{invalid operands}}
|
||||
__amdgpu_texture_t r;
|
||||
int *p = (int*)r; // expected-error {{operand of type '__amdgpu_texture_t' where arithmetic or pointer type is required}}
|
||||
}
|
||||
12
clang/test/SemaOpenMP/amdgpu-image-rsrc.cpp
Normal file
12
clang/test/SemaOpenMP/amdgpu-image-rsrc.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -Wno-unused-value %s
|
||||
|
||||
void foo() {
|
||||
#pragma omp target
|
||||
{
|
||||
int n = 5;
|
||||
__amdgpu_texture_t v = 0; // expected-error {{cannot initialize a variable of type '__amdgpu_texture_t' with an rvalue of type 'int'}}
|
||||
(void)(v + v); // expected-error {{invalid operands to binary expression}}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user