| // 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 = 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" = global target("dx.CBuffer", | |
| // CHECK2: @CB.cb = 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" = 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 |