diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -188,5 +188,11 @@ Opts.getOption(options::OPT_dxil_validator_version), DefaultValidatorVer); } + // If entry is not set explicitly, default is main. + if (!DAL->hasArg(options::OPT_hlsl_entrypoint)) { + const StringRef DefaultEntry = "main"; + DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_hlsl_entrypoint), + DefaultEntry); + } return DAL; } diff --git a/clang/test/CodeGenHLSL/entry_default.hlsl b/clang/test/CodeGenHLSL/entry_default.hlsl new file mode 100644 --- /dev/null +++ b/clang/test/CodeGenHLSL/entry_default.hlsl @@ -0,0 +1,28 @@ +// RUN: %clang --driver-mode=dxc -Tcs_6_1 -fcgl -Fo - %s | FileCheck %s +// RUN: %clang --driver-mode=dxc -Efoo -Tcs_6_1 -fcgl -Fo - %s | FileCheck %s --check-prefix=NOTMAIN + +// Make sure main is default entry. +// Make sure not mangle entry. +// CHECK:define void @main() [[MAIN_ATTR:#[0-9]]] +// CHECK:define void @_Z3foov() [[FOO_ATTR:#[0-9]]] +// Make sure only main has dx.shader attribute. +// CHECK:[[MAIN_ATTR]] +// CHECK:"dx.shader"="compute" +// CHECK-SAME:} +// CHECK:[[FOO_ATTR]] +// CHECK-NOT:"dx.shader"="compute" +[numthreads(1, 1, 1)] void main() { + +} + +// NOTMAIN:define void @main() [[MAIN_ATTR:#[0-9]]] +// NOTMAIN:define void @foo() [[FOO_ATTR:#[0-9]]] +// Make sure only foo has dx.shader attribute. +// NOTMAIN:[[MAIN_ATTR]] +// NOTMAIN-NOT:"dx.shader"="compute" +// NOTMAIN-SAME:} +// NOTMAIN:[[FOO_ATTR]] +// NOTMAIN-SAME:"dx.shader"="compute" +[numthreads(1, 1, 1)] void foo() { + +} \ No newline at end of file