// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -disable-llvm-passes %s -o - | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,NOINLINE // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -O0 %s -o - | llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,INLINE // Make sure global variable for ctors exist for lib profile. // CHECK:@llvm.global_ctors RWBuffer Buffer; [shader("compute")] [numthreads(1,1,1)] void FirstEntry() {} // CHECK: define void @FirstEntry() // CHECK-NEXT: entry: // CHECK: %[[#C_ENTRY:]] = call token @llvm.experimental.convergence.entry() // NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() // NOINLINE-NEXT: call void @FirstEntry() // Verify inlining leaves only calls to "llvm." intrinsics // INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}} // CHECK: ret void [shader("compute")] [numthreads(1,1,1)] void SecondEntry() {} // CHECK: define void @SecondEntry() // CHECK-NEXT: entry: // CHECK: %[[#C_ENTRY:]] = call token @llvm.experimental.convergence.entry() // NOINLINE-NEXT: call void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() // NOINLINE-NEXT: call void @SecondEntry() // Verify inlining leaves only calls to "llvm." intrinsics // INLINE-NOT: call {{[^@]*}} @{{[^l][^l][^v][^m][^\.]}} // CHECK: ret void // Verify the constructors are alwaysinline // NOINLINE: ; Function Attrs: {{.*}}alwaysinline // NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer::RWBuffer()({{.*}}){{.*}} [[CtorAttr:\#[0-9]+]] // NOINLINE: ; Function Attrs: {{.*}}alwaysinline // NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer::RWBuffer(hlsl::RWBuffer const&)({{.*}}){{.*}} [[CtorAttr]] // NOINLINE: ; Function Attrs: {{.*}}alwaysinline // NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer::RWBuffer()(ptr noundef nonnull align 4 dereferenceable(4) %this){{.*}} [[CtorAttr:\#[0-9]+]] // NOINLINE: ; Function Attrs: {{.*}}alwaysinline // NOINLINE-NEXT: define linkonce_odr hidden void @hlsl::RWBuffer::RWBuffer(hlsl::RWBuffer const&)({{.*}}){{.*}} [[CtorAttr]] // NOINLINE: ; Function Attrs: {{.*}}alwaysinline // NOINLINE-NEXT: define internal void @_GLOBAL__sub_I_GlobalConstructorLib.hlsl() [[InitAttr:\#[0-9]+]] // NOINLINE-DAG: attributes [[InitAttr]] = {{.*}} alwaysinline // NOINLINE-DAG: attributes [[CtorAttr]] = {{.*}} alwaysinline