Author: Xiang Li Date: 2022-08-05T16:27:17-07:00 New Revision: 549542b494f4c84bead744ed91ea81236e4aaa63
URL: https://github.com/llvm/llvm-project/commit/549542b494f4c84bead744ed91ea81236e4aaa63 DIFF: https://github.com/llvm/llvm-project/commit/549542b494f4c84bead744ed91ea81236e4aaa63.diff LOG: [HLSL] emit-obj when set output. When not set output, set default output to stdout. When set output with -Fo and no -fcgl, set -emit-obj to generate dx container. Reviewed By: beanz Differential Revision: https://reviews.llvm.org/D130858 Added: clang/test/Driver/dxc_Fo.hlsl Modified: clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/HLSL.cpp Removed: ################################################################################ diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 7c727ba65ada..5b43a86d2058 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5664,6 +5664,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, return "-"; } + if (IsDXCMode() && !C.getArgs().hasArg(options::OPT_o)) + return "-"; + // Is this the assembly listing for /FA? if (JA.getType() == types::TY_PP_Asm && (C.getArgs().hasArg(options::OPT__SLASH_FA) || diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 9c65c0565c64..3931f4b33be9 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3513,6 +3513,7 @@ static void RenderHLSLOptions(const ArgList &Args, ArgStringList &CmdArgs, options::OPT_I, options::OPT_S, options::OPT_emit_llvm, + options::OPT_emit_obj, options::OPT_disable_llvm_passes, options::OPT_fnative_half_type, options::OPT_hlsl_entrypoint}; diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 909b16074272..e3952361df7f 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -175,6 +175,15 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, } DAL->append(A); } + + if (DAL->hasArg(options::OPT_o)) { + // When run the whole pipeline. + if (!DAL->hasArg(options::OPT_emit_llvm)) + // Emit obj if write to file. + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_emit_obj)); + } else + DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_o), "-"); + // Add default validator version if not set. // TODO: remove this once read validator version from validator. if (!DAL->hasArg(options::OPT_dxil_validator_version)) { diff --git a/clang/test/Driver/dxc_Fo.hlsl b/clang/test/Driver/dxc_Fo.hlsl new file mode 100644 index 000000000000..7890f9589527 --- /dev/null +++ b/clang/test/Driver/dxc_Fo.hlsl @@ -0,0 +1,15 @@ +// RUN: %clang_dxc -T lib_6_7 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=DEFAULT +// RUN: %clang_dxc -fcgl -T lib_6_7 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=FCGL +// RUN: %clang_dxc -T lib_6_7 foo.hlsl -Fo foo.dxc -### %s 2>&1 | FileCheck %s --check-prefix=EMITOBJ + + +// Make sure default use "-" as output and not emit obj. +// DEFAULT-NOT:"-emit-obj" +// DEFAULT:"-o" "-" + +// Make sure -fcgl without -Fo use "-" as output. +// FCGL:"-o" "-" + + +// Make sure emit-obj when set -Fo. +// EMITOBJ:"-emit-obj" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits