From 3fa5eb4cfc065b686c03f912e4414fd00a54d04e Mon Sep 17 00:00:00 2001 From: python3kgae Date: Wed, 4 May 2022 23:15:40 -0700 Subject: [PATCH] [HLSL] add -fcgl option flag. fcgl option will make compilation stop after clang codeGen and output the llvm ir. It is added to check clang codeGen output for HLSL. It will be translated into -S -emit-llvm and -disable-llvm-passes. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D124983 --- clang/include/clang/Driver/Options.td | 6 ++++++ clang/lib/Driver/ToolChains/Clang.cpp | 4 +++- clang/lib/Driver/ToolChains/HLSL.cpp | 9 +++++++++ clang/test/Driver/dxc_fcgl.hlsl | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 clang/test/Driver/dxc_fcgl.hlsl diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index d9a4cb2..ae0048f 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6732,6 +6732,8 @@ def _SLASH_ZW : CLJoined<"ZW">; def dxc_Group : OptionGroup<"">, Flags<[DXCOption]>, HelpText<"dxc compatibility options">; +class DXCFlag : Option<["/", "-"], name, KIND_FLAG>, + Group, Flags<[DXCOption, NoXarchOption]>; class DXCJoinedOrSeparate : Option<["/", "-"], name, KIND_JOINED_OR_SEPARATE>, Group, Flags<[DXCOption, NoXarchOption]>; @@ -6756,3 +6758,7 @@ def target_profile : DXCJoinedOrSeparate<"T">, MetaVarName<"">, "lib_6_3, lib_6_4, lib_6_5, lib_6_6, lib_6_7, lib_6_x," "ms_6_5, ms_6_6, ms_6_7," "as_6_5, as_6_6, as_6_7">; +def emit_pristine_llvm : DXCFlag<"emit-pristine-llvm">, + HelpText<"Emit pristine LLVM IR from the frontend by not running any LLVM passes at all." + "Same as -S + -emit-llvm + -disable-llvm-passes.">; +def fcgl : DXCFlag<"fcgl">, Alias; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index ebe51bc..33172d8 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3471,7 +3471,9 @@ static void RenderOpenCLOptions(const ArgList &Args, ArgStringList &CmdArgs, static void RenderHLSLOptions(const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) { - const unsigned ForwardedArguments[] = {options::OPT_dxil_validator_version}; + const unsigned ForwardedArguments[] = {options::OPT_dxil_validator_version, + options::OPT_S, options::OPT_emit_llvm, + options::OPT_disable_llvm_passes}; for (const auto &Arg : ForwardedArguments) if (const auto *A = Args.getLastArg(Arg)) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 2822e06..b62395b 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -169,6 +169,15 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, if (!isLegalValidatorVersion(ValVerStr, getDriver())) continue; } + if (A->getOption().getID() == options::OPT_emit_pristine_llvm) { + // Translate fcgl into -S -emit-llvm and -disable-llvm-passes. + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_S)); + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_emit_llvm)); + DAL->AddFlagArg(nullptr, + Opts.getOption(options::OPT_disable_llvm_passes)); + A->claim(); + continue; + } DAL->append(A); } // Add default validator version if not set. diff --git a/clang/test/Driver/dxc_fcgl.hlsl b/clang/test/Driver/dxc_fcgl.hlsl new file mode 100644 index 0000000..d3eb252 --- /dev/null +++ b/clang/test/Driver/dxc_fcgl.hlsl @@ -0,0 +1,5 @@ +// RUN: %clang_dxc -fcgl foo.hlsl -### %s 2>&1 | FileCheck %s + +// Make sure fcgl option flag which translated into "-S" "-emit-llvm" "-disable-llvm-passes". +// CHECK:"-S" "-emit-llvm" "-disable-llvm-passes" + -- 2.7.4