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.
Two new dxc mode options -O and -Od are added for dxc mode. -O is just alias of existing cc1 -O option. -Od will be lowered into -O0 and -dxc-opt-disable. -dxc-opt-disable is cc1 option added to for build ShaderFlags. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D128845 Files: clang/include/clang/Basic/TargetOptions.h clang/include/clang/Driver/Options.td clang/lib/CodeGen/CGHLSLRuntime.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/HLSL.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/CodeGenHLSL/disable_opt.hlsl clang/test/Driver/dxc_O.hlsl
Index: clang/test/Driver/dxc_O.hlsl =================================================================== --- /dev/null +++ clang/test/Driver/dxc_O.hlsl @@ -0,0 +1,14 @@ +// RUN: %clang_dxc -fcgl -T lib_6_7 -Od foo.hlsl -### %s 2>&1 | FileCheck %s +// RUN: %clang_dxc -fcgl -T lib_6_7 -O0 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=O0 +// RUN: %clang_dxc -fcgl -T lib_6_7 -O1 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=O1 +// RUN: %clang_dxc -fcgl -T lib_6_7 -O2 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=O2 +// RUN: %clang_dxc -fcgl -T lib_6_7 -O3 foo.hlsl -### %s 2>&1 | FileCheck %s --check-prefix=O3 + +// Make sure fcgl option flag which translated into "-O0" "-dxc-opt-disable" +// CHECK:"-O0" "-dxc-opt-disable" + +// Make sure O0/O1/O2/O3 is send to cc1. +// O0:"-O0" +// O1:"-O1" +// O2:"-O2" +// O3:"-O3" Index: clang/test/CodeGenHLSL/disable_opt.hlsl =================================================================== --- /dev/null +++ clang/test/CodeGenHLSL/disable_opt.hlsl @@ -0,0 +1,12 @@ +// RUN: %clang -cc1 -S -triple dxil-pc-shadermodel6.3-library -dxc-opt-disable -emit-llvm -xhlsl -o - %s | FileCheck %s +// RUN: %clang -cc1 -S -triple dxil-pc-shadermodel6.3-library -emit-llvm -xhlsl -o - %s | FileCheck %s --check-prefix=OPT + +// CHECK:!"dx.disable_optimizations", i32 1} + +// OPT-NOT:"dx.disable_optimizations" + +float bar(float a, float b); + +float foo(float a, float b) { + return bar(a, b); +} Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -572,6 +572,9 @@ !Args.hasArg(OPT_cl_opt_disable)) DefaultOpt = llvm::CodeGenOpt::Default; + if (IK.getLanguage() == Language::HLSL) + DefaultOpt = llvm::CodeGenOpt::Aggressive; + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) { if (A->getOption().matches(options::OPT_O0)) return llvm::CodeGenOpt::None; Index: clang/lib/Driver/ToolChains/HLSL.cpp =================================================================== --- clang/lib/Driver/ToolChains/HLSL.cpp +++ clang/lib/Driver/ToolChains/HLSL.cpp @@ -158,6 +158,12 @@ if (!isLegalValidatorVersion(ValVerStr, getDriver())) continue; } + if (A->getOption().getID() == options::OPT_dxc_Od) { + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_dxc_opt_disable)); + DAL->AddFlagArg(nullptr, Opts.getOption(options::OPT_O0)); + A->claim(); + 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)); Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3482,6 +3482,8 @@ const unsigned ForwardedArguments[] = {options::OPT_dxil_validator_version, options::OPT_D, options::OPT_S, + options::OPT_O, + options::OPT_dxc_opt_disable, options::OPT_emit_llvm, options::OPT_disable_llvm_passes, options::OPT_fnative_half_type}; Index: clang/lib/CodeGen/CGHLSLRuntime.cpp =================================================================== --- clang/lib/CodeGen/CGHLSLRuntime.cpp +++ clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -42,6 +42,11 @@ StringRef DxilValKey = "dx.valver"; M.addModuleFlag(llvm::Module::ModFlagBehavior::AppendUnique, DxilValKey, Val); } +void addDisableOptimizations(llvm::Module &M) { + StringRef Key = "dx.disable_optimizations"; + M.addModuleFlag(llvm::Module::ModFlagBehavior::Override, Key, 1); +} + } // namespace void CGHLSLRuntime::finishCodeGen() { @@ -49,4 +54,6 @@ llvm::Module &M = CGM.getModule(); addDxilValVersion(TargetOpts.DxilValidatorVersion, M); + if (TargetOpts.DxcOptDisable) + addDisableOptimizations(M); } Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -6854,6 +6854,14 @@ "as_6_5, as_6_6, as_6_7">; def dxc_D : Option<["--", "/", "-"], "D", KIND_JOINED_OR_SEPARATE>, Group<dxc_Group>, Flags<[DXCOption, NoXarchOption]>, Alias<D>; +def dxc_O : Option<["--", "/", "-"], "O", KIND_JOINED>, + Group<dxc_Group>, Flags<[DXCOption, NoXarchOption]>, Alias<O>; +def dxc_Od : Option<["--", "/", "-"], "Od", KIND_FLAG>, + Group<dxc_Group>, Flags<[DXCOption, NoXarchOption]>, + HelpText<"Disable optimizations.">; +def dxc_opt_disable : Flag<["-"], "dxc-opt-disable">, Group<dxc_Group>, Flags<[CC1Option]>, + MarshallingInfoFlag<TargetOpts<"DxcOptDisable">>, + HelpText<"HLSL only. This option disables all optimizations. By default optimizations are enabled.">; 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.">; Index: clang/include/clang/Basic/TargetOptions.h =================================================================== --- clang/include/clang/Basic/TargetOptions.h +++ clang/include/clang/Basic/TargetOptions.h @@ -113,6 +113,9 @@ /// The validator version for dxil. std::string DxilValidatorVersion; + + /// Keep the information about disable optimization for ShaderFlags. + bool DxcOptDisable = false; }; } // end namespace clang
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits