| // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -emit-llvm -disable-llvm-passes \ |
| // RUN: -finclude-default-header -o - %s | FileCheck %s |
| // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -emit-llvm -disable-llvm-passes \ |
| // RUN: -finclude-default-header -o - -DCHECK2 %s | FileCheck %s -check-prefix=CHECK2 |
| |
| // Regression test for issue llvm/llvm-project#183788 |
| |
| // empty struct |
| struct A { |
| }; |
| |
| // struct with a resource which does not contribute to cbuffer layout |
| struct B { |
| RWBuffer<float> Buf; |
| }; |
| |
| struct C : A { |
| B b; |
| RWBuffer<float> Bufs[10]; |
| A array[10][2]; |
| }; |
| |
| cbuffer CB { |
| A a[2]; |
| C c; |
| #ifdef CHECK2 |
| int i; |
| float2 v; |
| int4x4 m; |
| #endif |
| } |
| |
| B b[2][2]; |
| |
| #ifdef CHECK2 |
| int j; |
| float2 w; |
| int4x4 n; |
| #endif |
| |
| [numthreads(4,4,4)] |
| void main() { |
| } |
| |
| // CHECK-NOT: @CB.cb = internal global target("dx.CBuffer", %__cblayout_CB) |
| // CHECK-NOT: @a = external hidden addrspace(2) global |
| // CHECK-NOT: @b = external hidden addrspace(2) global |
| // CHECK-NOT: @c = external hidden addrspace(2) global |
| // CHECK-NOT: @"$Globals.cb" = internal global target("dx.CBuffer", |
| |
| // CHECK2: @CB.cb = internal global target("dx.CBuffer", %__cblayout_CB) |
| // CHECK-NOT: @a = external hidden addrspace(2) global |
| // CHECK-NOT: @c = external hidden addrspace(2) global |
| // CHECK2: @i = external hidden addrspace(2) global i32 |
| // CHECK2: @v = external hidden addrspace(2) global <2 x float>, align 4 |
| // CHECK2: @m = external hidden addrspace(2) global [4 x <4 x i32>], align 4 |
| // CHECK2: @"$Globals.cb" = internal global target("dx.CBuffer", |
| // CHECK-NOT: @b = external hidden addrspace(2) global |
| // CHECK2: @j = external hidden addrspace(2) global i32 |
| // CHECK2: @w = external hidden addrspace(2) global <2 x float>, align 4 |
| // CHECK2: @n = external hidden addrspace(2) global [4 x <4 x i32>], align 4 |