python3kgae created this revision. python3kgae added reviewers: amccarth, craig.topper, hans, rnk, stefan_reinalter, beanz, pow2clk. Herald added subscribers: Anastasia, StephenFan. Herald added a project: All. python3kgae requested review of this revision. Herald added subscribers: cfe-commits, MaskRay. Herald added a project: clang.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D124983 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/HLSL.cpp clang/unittests/Driver/ToolChainTest.cpp
Index: clang/unittests/Driver/ToolChainTest.cpp =================================================================== --- clang/unittests/Driver/ToolChainTest.cpp +++ clang/unittests/Driver/ToolChainTest.cpp @@ -610,4 +610,45 @@ DiagConsumer->clear(); } +TEST(DxcModeTest, ValidatorFCGL) { + IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); + + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( + new llvm::vfs::InMemoryFileSystem); + + InMemoryFileSystem->addFile("foo.hlsl", 0, + llvm::MemoryBuffer::getMemBuffer("\n")); + + auto *DiagConsumer = new SimpleDiagnosticConsumer; + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); + DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr<Compilation> C(TheDriver.BuildCompilation( + {"clang", "--driver-mode=dxc", "-fcgl", "foo.hlsl"})); + EXPECT_TRUE(C); + EXPECT_TRUE(!C->containsError()); + auto &Jobs = C->getJobs(); + EXPECT_EQ(Jobs.size(), 1); + if (Jobs.size() == 1) { + auto &Job = *Jobs.begin(); + auto &Args = Job.getArguments(); + // Make sure fcgl translated into -S -emit-llvm and -disable-llvm-passes. + bool HasS = false; + bool HasEmitLLVM = false; + bool HasDisableLLVMPasses = false; + for (auto *Arg : Args) { + StringRef Str(Arg); + if (Str == "-S") + HasS = true; + else if (Str == "-emit-llvm") + HasEmitLLVM = true; + else if (Str == "-disable-llvm-passes") + HasDisableLLVMPasses = true; + } + EXPECT_TRUE(HasS); + EXPECT_TRUE(HasEmitLLVM); + EXPECT_TRUE(HasDisableLLVMPasses); + } +} + } // end anonymous namespace. Index: clang/lib/Driver/ToolChains/HLSL.cpp =================================================================== --- clang/lib/Driver/ToolChains/HLSL.cpp +++ clang/lib/Driver/ToolChains/HLSL.cpp @@ -169,6 +169,15 @@ if (!isLegalValidatorVersion(ValVerStr, getDriver())) continue; } + if (A->getOption().getID() == options::OPT_fcgl) { + // 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. Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3470,7 +3470,9 @@ 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)) Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -6736,6 +6736,8 @@ def dxc_Group : OptionGroup<"<clang-dxc options>">, Flags<[DXCOption]>, HelpText<"dxc compatibility options">; +class DXCFlag<string name> : Option<["/", "-"], name, KIND_FLAG>, + Group<dxc_Group>, Flags<[DXCOption, NoXarchOption]>; class DXCJoinedOrSeparate<string name> : Option<["/", "-"], name, KIND_JOINED_OR_SEPARATE>, Group<dxc_Group>, Flags<[DXCOption, NoXarchOption]>; @@ -6760,3 +6762,5 @@ "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 fcgl : DXCFlag<"fcgl">, + HelpText<"Generate high-level code only. Without any dxil related passes.">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits