// 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 Buf; }; struct C : A { B b; RWBuffer 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