[PATCH] D133958: [HLSL] Pass flags to cc1 based on language
Chris Bieneman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 15 10:46:05 PDT 2022
beanz created this revision.
beanz added reviewers: python3kgae, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
beanz requested review of this revision.
Herald added a subscriber: MaskRay.
Herald added a project: clang.
Having the flags only pass through if you're using the dxc-driver means
that the clang driver doesn't work for HLSL, which is undesirable. This
change switches to instead passing flags based on the language mode
similar to how OpenCL does it. This allows the clang driver to be used
for HLSL source files as well.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D133958
Files:
clang/include/clang/Driver/Types.h
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/Types.cpp
clang/test/Driver/hlsl_no_stdinc.hlsl
Index: clang/test/Driver/hlsl_no_stdinc.hlsl
===================================================================
--- clang/test/Driver/hlsl_no_stdinc.hlsl
+++ clang/test/Driver/hlsl_no_stdinc.hlsl
@@ -1,5 +1,7 @@
// RUN: %clang_dxc -Tlib_6_7 -fcgl -Fo - %s -### 2>&1 | FileCheck %s --check-prefix=STDINC
+// RUN: %clang target dxil-pc-shadermodel6.3-library -o - %s -### 2>&1 | FileCheck %s --check-prefix=STDINC
// RUN: %clang_dxc -Tlib_6_7 -hlsl-no-stdinc -fcgl -Fo - %s -### 2>&1 | FileCheck %s --check-prefix=NOSTDINC
+// RUN: %clang target dxil-pc-shadermodel6.3-library -nostdinc -o - %s -### 2>&1 | FileCheck %s --check-prefix=NOSTDINC
// RUN: %clang -cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
Index: clang/lib/Driver/Types.cpp
===================================================================
--- clang/lib/Driver/Types.cpp
+++ clang/lib/Driver/Types.cpp
@@ -286,6 +286,8 @@
}
}
+bool types::isHLSL(ID Id) { return Id == TY_HLSL; }
+
bool types::isSrcFile(ID Id) {
return Id != TY_Object && getPreprocessedType(Id) != TY_INVALID;
}
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -3526,12 +3526,14 @@
options::OPT_disable_llvm_passes,
options::OPT_fnative_half_type,
options::OPT_hlsl_entrypoint};
-
+ if (!types::isHLSL(InputType))
+ return;
for (const auto &Arg : ForwardedArguments)
if (const auto *A = Args.getLastArg(Arg))
A->renderAsInput(Args, CmdArgs);
// Add the default headers if dxc_no_stdinc is not set.
- if (!Args.hasArg(options::OPT_dxc_no_stdinc))
+ if (!Args.hasArg(options::OPT_dxc_no_stdinc) &&
+ !Args.hasArg(options::OPT_nostdinc))
CmdArgs.push_back("-finclude-default-header");
}
@@ -6312,8 +6314,7 @@
RenderOpenCLOptions(Args, CmdArgs, InputType);
// Forward hlsl options to -cc1
- if (C.getDriver().IsDXCMode())
- RenderHLSLOptions(Args, CmdArgs, InputType);
+ RenderHLSLOptions(Args, CmdArgs, InputType);
if (IsHIP) {
if (Args.hasFlag(options::OPT_fhip_new_launch_api,
Index: clang/include/clang/Driver/Types.h
===================================================================
--- clang/include/clang/Driver/Types.h
+++ clang/include/clang/Driver/Types.h
@@ -95,6 +95,9 @@
/// isOpenCL - Is this an "OpenCL" input.
bool isOpenCL(ID Id);
+ /// isHLSL - Is this an HLSL input.
+ bool isHLSL(ID Id);
+
/// isSrcFile - Is this a source file, i.e. something that still has to be
/// preprocessed. The logic behind this is the same that decides if the first
/// compilation phase is a preprocessing one.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133958.460457.patch
Type: text/x-patch
Size: 2850 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220915/738bd9e2/attachment-0001.bin>
More information about the cfe-commits
mailing list