Procházet zdrojové kódy

Remove HLSL 2021 per-feature flags (#4716)

* [NFC] Transform all test cases to use `-HV 2021`

This just updates test cases to use `-HV 2021` instead of the
per-feature options.

* Remove HLSL 2021 per-feature flags

This change removes the HLSL 2021 per-feature enabling flags. Now that
HLSL 2021 is feature complete we're removing the ability to opt into
individual features. Any code relying on a single feature of HLSL 2021
should now adopt HLSL 2021 completely.

Co-authored-by: Greg Roth <[email protected]>
Chris B před 2 roky
rodič
revize
baae5dd1e5
91 změnil soubory, kde provedl 130 přidání a 261 odebrání
  1. 0 8
      include/dxc/Support/HLSLOptions.h
  2. 0 12
      include/dxc/Support/HLSLOptions.td
  3. 0 49
      lib/DxcSupport/HLSLOptions.cpp
  4. 0 5
      tools/clang/include/clang/Basic/LangOptions.h
  5. 0 8
      tools/clang/include/clang/Driver/Options.td
  6. 4 2
      tools/clang/lib/AST/ExprConstant.cpp
  7. 12 6
      tools/clang/lib/CodeGen/CGExprScalar.cpp
  8. 4 2
      tools/clang/lib/CodeGen/CodeGenFunction.cpp
  9. 0 33
      tools/clang/lib/Frontend/CompilerInvocation.cpp
  10. 6 2
      tools/clang/lib/Parse/ParseDecl.cpp
  11. 2 1
      tools/clang/lib/Parse/ParseDeclCXX.cpp
  12. 10 5
      tools/clang/lib/Parse/ParseExpr.cpp
  13. 9 4
      tools/clang/lib/Parse/ParseExprCXX.cpp
  14. 3 3
      tools/clang/lib/SPIRV/SpirvEmitter.cpp
  15. 2 2
      tools/clang/lib/Sema/SemaExpr.cpp
  16. 10 7
      tools/clang/lib/Sema/SemaHLSL.cpp
  17. 1 1
      tools/clang/lib/Sema/SemaLookup.cpp
  18. 1 1
      tools/clang/test/CodeGenHLSL/short-circuit-and.hlsl
  19. 1 1
      tools/clang/test/CodeGenHLSL/short-circuit-or.hlsl
  20. 1 1
      tools/clang/test/CodeGenHLSL/short-circuit-select.hlsl
  21. 1 1
      tools/clang/test/CodeGenSPIRV/operator.overloading.call.hlsl
  22. 1 1
      tools/clang/test/CodeGenSPIRV/operator.overloading.mat.mul.hlsl
  23. 1 1
      tools/clang/test/CodeGenSPIRV/operator.overloading.star.hlsl
  24. 1 1
      tools/clang/test/CodeGenSPIRV/type.template.function.template-instance.hlsl
  25. 1 1
      tools/clang/test/CodeGenSPIRV/type.template.struct.template-instance.hlsl
  26. 1 1
      tools/clang/test/CodeGenSPIRV/use.rvalue.for.member-expr.of.array-subscript.hlsl
  27. 0 1
      tools/clang/test/HLSL/bitfields.hlsl
  28. 1 1
      tools/clang/test/HLSL/conversions-between-type-shapes-strictudt.hlsl
  29. 0 1
      tools/clang/test/HLSL/overloading-new-delete-errors.hlsl
  30. 1 2
      tools/clang/test/HLSL/overloading-unsupported-operators.hlsl
  31. 19 0
      tools/clang/test/HLSL/template-diag-deferred.hlsl
  32. 2 2
      tools/clang/test/HLSL/template-literal-substitution-failure.hlsl
  33. 0 1
      tools/clang/test/HLSL/use-undefined-overloaded-operator.hlsl
  34. 0 1
      tools/clang/test/HLSLDisabled/memcpy_split_regression-strictudt.hlsl
  35. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/compile_options/enable_templates.hlsl
  36. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/control_flow/return/EnableNRVO.hlsl
  37. 2 2
      tools/clang/test/HLSLFileCheck/hlsl/control_flow/return/short_circuit_with_phi.hlsl
  38. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/functions/arguments/outputArray-strictudt.hlsl
  39. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/namespace/using2.hlsl
  40. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.call.hlsl
  41. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.implicit-assign1.hlsl
  42. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.star.hlsl
  43. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/payload_qualifier/combination.hlsl
  44. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/3731-resource-descriptor-heap.hlsl
  45. 0 3
      tools/clang/test/HLSLFileCheck/hlsl/template/AddMulOps.hlsl
  46. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/AnyAll.hlsl
  47. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/AssignmentOps.hlsl
  48. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/BitwiseAssignOps.hlsl
  49. 2 2
      tools/clang/test/HLSLFileCheck/hlsl/template/BitwiseOps.hlsl
  50. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/BooleanMathOps.hlsl
  51. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/BufferInExpansion.hlsl
  52. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/ComparisonOps.hlsl
  53. 2 2
      tools/clang/test/HLSLFileCheck/hlsl/template/DependentNonTypeParam.hlsl
  54. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/DependentWithBuiltinTemplate.hlsl
  55. 2 2
      tools/clang/test/HLSLFileCheck/hlsl/template/FloatLiteralParameter.hlsl
  56. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateBufferParamTypes.hlsl
  57. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateHLSLAttributes.hlsl
  58. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateSemantics.hlsl
  59. 2 2
      tools/clang/test/HLSLFileCheck/hlsl/template/IntLiteralParameter.hlsl
  60. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/PrefixPostfixOps.hlsl
  61. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/RandomGenerators.hlsl
  62. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/ThisAccess.hlsl
  63. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/ackermann.hlsl
  64. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/dependent-sized_array.hlsl
  65. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/elaborated-type-specifier.hlsl
  66. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/enum-forward.hlsl
  67. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/factorial.hlsl
  68. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/missing_typename.hlsl
  69. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/strict-udt-casting-1.hlsl
  70. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/strict-udt-casting-2.hlsl
  71. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/template-param-modifiers.hlsl
  72. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateFunc.hlsl
  73. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateMethod.hlsl
  74. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateStruct.hlsl
  75. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateStructFunc.hlsl
  76. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateStructFunc2.hlsl
  77. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/template/templateSubscripts.hlsl
  78. 0 2
      tools/clang/test/HLSLFileCheck/hlsl/template/templateTypename.hlsl
  79. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/template/variadic.hlsl
  80. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/cast/StructCast-strictudt.hlsl
  81. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/explicit_cast_as_out_param-strictudt.hlsl
  82. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/implicit_cast_as_func_param_user_scenario-strictudt.hlsl
  83. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/implicit_cast_as_streamout_append-strictudt.hlsl
  84. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/struct/anonymous-strictudt.hlsl
  85. 0 1
      tools/clang/test/HLSLFileCheck/hlsl/types/struct/bitfields.hlsl
  86. 1 2
      tools/clang/test/HLSLFileCheck/hlsl/types/struct/structArray-strictudt.hlsl
  87. 1 2
      tools/clang/test/HLSLFileCheck/shader_targets/geometry/streamoutputs/streamout_input_before_output_different_structs-strictudt.hlsl
  88. 1 2
      tools/clang/test/HLSLFileCheck/shader_targets/geometry/streamoutputs/streamout_output_before_input_different_structs-strictudt.hlsl
  89. 0 1
      tools/clang/test/HLSLFileCheck/shader_targets/library/inout_struct_mismatch-strictudt.hlsl
  90. 0 6
      tools/clang/tools/dxcompiler/dxcompilerobj.cpp
  91. 0 2
      tools/clang/tools/libclang/dxcrewriteunused.cpp

+ 0 - 8
include/dxc/Support/HLSLOptions.h

@@ -206,14 +206,6 @@ public:
   bool ForceZeroStoreLifetimes = false; // OPT_force_zero_store_lifetimes
   bool EnableLifetimeMarkers = false; // OPT_enable_lifetime_markers
   bool ForceDisableLocTracking = false; // OPT_fdisable_loc_tracking
-  bool EnableTemplates = false; // OPT_enable_templates
-  bool EnableOperatorOverloading = false; // OPT_enable_operator_overloading
-  bool StrictUDTCasting = false; // OPT_strict_udt_casting
-
-  // Experimental option to enable short-circuiting operators
-  bool EnableShortCircuit = false; // OPT_enable_short_circuit
-
-  bool EnableBitfields = false; // OPT_enable_bitfields
 
   // Optimization pass enables, disables and selects
   std::map<std::string, bool> DxcOptimizationToggles; // OPT_opt_enable & OPT_opt_disable

+ 0 - 12
include/dxc/Support/HLSLOptions.td

@@ -302,12 +302,6 @@ def enable_lifetime_markers : Flag<["-", "/"], "enable-lifetime-markers">, Group
   HelpText<"Enable generation of lifetime markers">;
 def disable_lifetime_markers : Flag<["-", "/"], "disable-lifetime-markers">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
   HelpText<"Disable generation of lifetime markers where they would be otherwise (6.6+)">;
-def enable_templates: Flag<["-", "/"], "enable-templates">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
-  HelpText<"Enable template support for HLSL.">;
-def enable_operator_overloading: Flag<["-", "/"], "enable-operator-overloading">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
-  HelpText<"Enable operator overloading support for HLSL.">;
-def strict_udt_casting: Flag<["-", "/"], "strict-udt-casting">, Group<hlslcomp_Group>, Flags<[CoreOption, HelpHidden]>,
-  HelpText<"Require explicit casts between different structure types with compatible layouts.">;
 def enable_payload_qualifiers : Flag<["-", "/"], "enable-payload-qualifiers">, Group<hlslcomp_Group>, Flags<[CoreOption, RewriteOption, DriverOption]>,
   HelpText<"Enables support for payload access qualifiers for raytracing payloads in SM 6.6.">;
 def disable_payload_qualifiers : Flag<["-", "/"], "disable-payload-qualifiers">, Group<hlslcomp_Group>, Flags<[CoreOption, RewriteOption, DriverOption]>,
@@ -483,12 +477,6 @@ def Qstrip_reflect_from_dxil : Flag<["-", "/"], "Qstrip_reflect_from_dxil">,
   Flags<[CoreOption, HelpHidden]>, Group<hlslutil_Group>,
   HelpText<"Strip reflection data from shader bytecode  (must be used with /Fo <file>)">;
 
-def enable_short_circuit : Flag<["-", "/"], "enable-short-circuit">, Flags<[CoreOption, HelpHidden]>, Group<hlslcomp_Group>,
-  HelpText<"Operators '&&', '||', and '?:' will short circuit, only accepting scalar inputs.  Use and(), or(), and select() intrinsics in place of non-short-circuiting vector operators.">;
-
-def enable_bitfields : Flag<["-", "/"], "enable-bitfields">, Flags<[CoreOption, HelpHidden]>, Group<hlslcomp_Group>,
-  HelpText<"Enables bitfields on struct members">;
-
 /*
 def shtemplate : JoinedOrSeparate<["-", "/"], "shtemplate">, MetaVarName<"<file>">, Group<hlslcomp_Group>,
   HelpText<"Template shader file for merging/matching resources">;

+ 0 - 49
lib/DxcSupport/HLSLOptions.cpp

@@ -520,55 +520,6 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
     opts.EnableFXCCompatMode = true;
   }
 
-  // If the HLSL version is 2021, allow the 2021 features by default.
-  // If the HLSL version is 2016 or 2018, allow them only
-  // when the individual option is enabled.
-  // If the HLSL version is 2015, dissallow these features
-  if (opts.HLSLVersion >= hlsl::LangStd::v2021) {
-    // Enable operator overloading in structs
-    opts.EnableOperatorOverloading = true;
-    // Enable template support
-    opts.EnableTemplates = true;
-    // Determine overload matching based on UDT names, not just types
-    opts.StrictUDTCasting = true;
-    // Experimental option to enable short-circuiting operators
-    opts.EnableShortCircuit = true;
-    // Enable bitfield support
-    opts.EnableBitfields = true;
-
-  } else {
-    opts.EnableOperatorOverloading = Args.hasFlag(OPT_enable_operator_overloading, OPT_INVALID, false);
-    opts.EnableTemplates = Args.hasFlag(OPT_enable_templates, OPT_INVALID, false);
-    opts.StrictUDTCasting = Args.hasFlag(OPT_strict_udt_casting, OPT_INVALID, false);
-    opts.EnableShortCircuit = Args.hasFlag(OPT_enable_short_circuit, OPT_INVALID, false);
-    opts.EnableBitfields = Args.hasFlag(OPT_enable_bitfields, OPT_INVALID, false);
-
-    if (opts.HLSLVersion <= hlsl::LangStd::v2015) {
-
-      if (opts.EnableOperatorOverloading)
-        errors << "/enable-operator-overloading is not supported with HLSL "
-                  "Version "
-               << (unsigned long)opts.HLSLVersion;
-      if (opts.EnableTemplates)
-        errors << "/enable-templates is not supported with HLSL Version "
-               << (unsigned long)opts.HLSLVersion;
-
-      if (opts.StrictUDTCasting)
-        errors << "/enable-udt-casting is not supported with HLSL Version "
-               << (unsigned long)opts.HLSLVersion;
-
-      if (opts.EnableShortCircuit)
-        errors << "/enable-short-circuit is not supported with HLSL Version "
-               << (unsigned long)opts.HLSLVersion;
-
-      if (opts.EnableBitfields)
-        errors << "/enable-bitfields is not supported with HLSL Version "
-               << (unsigned long)opts.HLSLVersion;
-
-      return 1;
-    }
-  }
-
   // AssemblyCodeHex not supported (Fx)
   // OutputLibrary not supported (Fl)
   opts.AssemblyCode = Args.getLastArgValue(OPT_Fc);

+ 0 - 5
tools/clang/include/clang/Basic/LangOptions.h

@@ -159,12 +159,7 @@ public:
   bool UseMinPrecision = true; // use min precision, not native precision.
   bool EnableDX9CompatMode = false;
   bool EnableFXCCompatMode = false;
-  bool EnableTemplates = false;
-  bool EnableOperatorOverloading = false;
-  bool StrictUDTCasting = false;
   bool EnablePayloadAccessQualifiers = false;
-  bool EnableShortCircuit = false;
-  bool EnableBitfields = false;
   // HLSL Change Ends
 
   bool SPIRV = false;  // SPIRV Change

+ 0 - 8
tools/clang/include/clang/Driver/Options.td

@@ -680,14 +680,6 @@ def hlsl_version : Separate<["-", "/"], "HV">, Group<f_Group>, Flags<[DriverOpti
   HelpText<"HLSL version (2015, 2016, 2017, 2018, 2021). Default is 2018">; // HLSL Change - mimic the HLSLOptions.td flag
 def enable_16bit_types: Flag<["-", "/"], "enable-16bit-types">, Flags<[CoreOption, DriverOption, HelpHidden]>,
   HelpText<"Enable 16bit types and disable min precision types.">; // HLSL Change - mimic the HLSLOptions.td flag
-def enable_templates: Flag<["-", "/"], "enable-templates">, Flags<[CoreOption, DriverOption, HelpHidden]>,
-  HelpText<"Enable template support for HLSL.">; // HLSL Change
-def enable_operator_overloading: Flag<["-", "/"], "enable-operator-overloading">, Flags<[CoreOption, DriverOption, HelpHidden]>,
-  HelpText<"Enable operator overloading support for HLSL.">; // HLSL Change
-def strict_udt_casting: Flag<["-", "/"], "strict-udt-casting">, Flags<[CoreOption, DriverOption, HelpHidden]>,
-  HelpText<"Require explicit casts between different structure types with compatible layouts.">; // HLSL Change
-def enable_bitfields : Flag<["-", "/"], "enable-bitfields">, Flags<[CoreOption, DriverOption, HelpHidden]>,
-  HelpText<"Enables bitfields on struct members">; // HLSL Change
 def fms_compatibility_version
     : Joined<["-"], "fms-compatibility-version=">,
       Group<f_Group>,

+ 4 - 2
tools/clang/lib/AST/ExprConstant.cpp

@@ -9412,7 +9412,8 @@ static bool EvaluateCPlusPlus11IntegralConstantExpr(const ASTContext &Ctx,
 bool Expr::isIntegerConstantExpr(const ASTContext &Ctx,
                                  SourceLocation *Loc) const {
   // HLSL Change - if templates are enabled we need to act like C++11 here
-  if (Ctx.getLangOpts().CPlusPlus11 || Ctx.getLangOpts().EnableTemplates)
+  if (Ctx.getLangOpts().CPlusPlus11 ||
+      Ctx.getLangOpts().HLSLVersion >= hlsl::LangStd::v2021)
     return EvaluateCPlusPlus11IntegralConstantExpr(Ctx, this, nullptr, Loc);
 
   ICEDiag D = CheckICE(this, Ctx);
@@ -9426,7 +9427,8 @@ bool Expr::isIntegerConstantExpr(const ASTContext &Ctx,
 bool Expr::isIntegerConstantExpr(llvm::APSInt &Value, const ASTContext &Ctx,
                                  SourceLocation *Loc, bool isEvaluated) const {
   // HLSL Change - if templates are enabled we need to act like C++11 here
-  if (Ctx.getLangOpts().CPlusPlus11 || Ctx.getLangOpts().EnableTemplates)
+  if (Ctx.getLangOpts().CPlusPlus11 ||
+      Ctx.getLangOpts().HLSLVersion >= hlsl::LangStd::v2021)
     return EvaluateCPlusPlus11IntegralConstantExpr(Ctx, this, &Value, Loc);
 
   if (!isIntegerConstantExpr(Ctx, Loc))

+ 12 - 6
tools/clang/lib/CodeGen/CGExprScalar.cpp

@@ -3422,7 +3422,8 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) {
     // 0 && RHS: If it is safe, just elide the RHS, and return 0/false.
     if (!CGF.ContainsLabel(E->getRHS())) {
       // HLSL Change Begins.
-      if (CGF.getLangOpts().HLSL && !CGF.getLangOpts().EnableShortCircuit) {
+      if (CGF.getLangOpts().HLSL &&
+          CGF.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         // HLSL does not short circuit by default.
         Visit(E->getRHS());
       }
@@ -3432,7 +3433,8 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) {
   }
 
   // HLSL Change Begins.
-  if (CGF.getLangOpts().HLSL && !CGF.getLangOpts().EnableShortCircuit) {
+  if (CGF.getLangOpts().HLSL &&
+      CGF.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
     // HLSL does not short circuit by default.
     Value *LHS = Visit(E->getLHS());
     Value *RHS = Visit(E->getRHS());
@@ -3527,7 +3529,8 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) {
     // 1 || RHS: If it is safe, just elide the RHS, and return 1/true.
     if (!CGF.ContainsLabel(E->getRHS())) {
       // HLSL Change Begins.
-      if (CGF.getLangOpts().HLSL && !CGF.getLangOpts().EnableShortCircuit) {
+      if (CGF.getLangOpts().HLSL &&
+          CGF.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         // HLSL does not short circuit by default.
         Visit(E->getRHS());
       }
@@ -3537,7 +3540,8 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) {
   }
 
   // HLSL Change Begins.
-  if (CGF.getLangOpts().HLSL && !CGF.getLangOpts().EnableShortCircuit) {
+  if (CGF.getLangOpts().HLSL &&
+      CGF.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
     // HLSL does not short circuit by default.
     Value *LHS = Visit(E->getLHS());
     Value *RHS = Visit(E->getRHS());
@@ -3702,7 +3706,8 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) {
     return tmp5;
   }
   // HLSL Change Starts
-  if (CGF.getLangOpts().HLSL && !CGF.getLangOpts().EnableShortCircuit) {
+  if (CGF.getLangOpts().HLSL &&
+      CGF.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
     // HLSL does not short circuit by default before HLSL 2021
     if (hlsl::IsHLSLVecType(E->getType()) || E->getType()->isArithmeticType()) {
       llvm::Value *CondV = CGF.EmitScalarExpr(condExpr);
@@ -3754,7 +3759,8 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) {
 
   // HLSL Change Begins
   llvm::Instruction *ResultAlloca = nullptr;
-  if (CGF.getLangOpts().HLSL && CGF.getLangOpts().EnableShortCircuit &&
+  if (CGF.getLangOpts().HLSL &&
+      CGF.getLangOpts().HLSLVersion >= hlsl::LangStd::v2021 &&
       hlsl::IsHLSLMatType(E->getType())) {
     llvm::Type *MatTy = CGF.ConvertTypeForMem(E->getType());
     ResultAlloca = CGF.CreateTempAlloca(MatTy);

+ 4 - 2
tools/clang/lib/CodeGen/CodeGenFunction.cpp

@@ -1088,7 +1088,8 @@ void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
       }
 
       // HLSL Change Begins.
-      if (getLangOpts().HLSL && !getLangOpts().EnableShortCircuit) {
+      if (getLangOpts().HLSL &&
+          getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         // HLSL does not short circuit by default.
         // Emit the code with the fully general case.
         llvm::Value *CondV;
@@ -1148,7 +1149,8 @@ void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond,
       }
 
       // HLSL Change Begins.
-      if (getLangOpts().HLSL && !getLangOpts().EnableShortCircuit) {
+      if (getLangOpts().HLSL &&
+          getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         // HLSL does not short circuit by default.
         // Emit the code with the fully general case.
         llvm::Value *CondV;

+ 0 - 33
tools/clang/lib/Frontend/CompilerInvocation.cpp

@@ -1737,39 +1737,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
   // TODO: should we tie low precision to HLSL2018 only?
   Opts.UseMinPrecision = !Args.hasArg(options::OPT_enable_16bit_types);
 
-  // If the HLSL version is 2021, allow the 2021 features by default.
-  // If the HLSL version is 2016 or 2018, allow them only
-  // when the individual option is enabled.
-  // If the HLSL version is 2015, dissallow these features
-  if (Opts.HLSLVersion >= hlsl::LangStd::v2021) {
-    // Enable operator overloading in structs
-    Opts.EnableOperatorOverloading = true;
-    // Enable template support
-    Opts.EnableTemplates = true;
-    // Determine overload matching based on UDT names, not just types
-    Opts.StrictUDTCasting = true;
-    // Experimental option to enable short-circuiting operators
-    Opts.EnableShortCircuit = true;
-    // Enable bitfield support
-    Opts.EnableBitfields = true;
-
-  } else {
-    Opts.EnableOperatorOverloading = Args.hasArg(OPT_enable_operator_overloading);
-    Opts.EnableTemplates = Args.hasArg(OPT_enable_templates);
-    Opts.StrictUDTCasting = Args.hasArg(OPT_strict_udt_casting);
-    Opts.EnableBitfields = Args.hasArg(OPT_enable_bitfields);
-
-    if (Opts.HLSLVersion <= hlsl::LangStd::v2015) {
-      if (Opts.EnableOperatorOverloading)
-        Diags.Report(diag::err_hlsl_invalid_drv_for_feature) << "/enable-operator-overloading" << ver;
-      if (Opts.EnableTemplates)
-        Diags.Report(diag::err_hlsl_invalid_drv_for_feature) << "/enable-templates" << ver;
-      if (Opts.StrictUDTCasting)
-        Diags.Report(diag::err_hlsl_invalid_drv_for_feature) << "/enable-udt-casting" << ver;
-      if (Opts.EnableBitfields)
-        Diags.Report(diag::err_hlsl_invalid_drv_for_feature) << "/enable-bitfields" << ver;
-    }
-  }
 #endif // #ifdef MS_SUPPORT_VARIABLE_LANGOPTS
 }
 

+ 6 - 2
tools/clang/lib/Parse/ParseDecl.cpp

@@ -2005,7 +2005,8 @@ Parser::DeclGroupPtrTy Parser::ParseDeclaration(unsigned Context,
   switch (Tok.getKind()) {
   case tok::kw_template:
     // HLSL Change Starts
-    if (getLangOpts().HLSL && !getLangOpts().EnableTemplates) {
+    if (getLangOpts().HLSL &&
+        getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
       Diag(Tok, diag::err_hlsl_reserved_keyword) << Tok.getName();
       SkipMalformedDecl();
       return DeclGroupPtrTy();
@@ -4169,7 +4170,10 @@ HLSLReservedKeyword:
 
     // C++ typename-specifier:
     case tok::kw_typename:
-      if (getLangOpts().HLSL && !getLangOpts().EnableTemplates) { goto HLSLReservedKeyword; } // HLSL Change - reserved for HLSL
+      if (getLangOpts().HLSL &&
+          getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
+        goto HLSLReservedKeyword;
+      } // HLSL Change - reserved for HLSL
       if (TryAnnotateTypeOrScopeToken()) {
         DS.SetTypeSpecError();
         goto DoneWithDeclSpec;

+ 2 - 1
tools/clang/lib/Parse/ParseDeclCXX.cpp

@@ -2359,7 +2359,8 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
     assert(!TemplateInfo.TemplateParams &&
            "Nested template improperly parsed?");
     // HLSL Change Starts
-    if (getLangOpts().HLSL && !getLangOpts().EnableTemplates) {
+    if (getLangOpts().HLSL &&
+        getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
       Diag(Tok, diag::err_hlsl_reserved_keyword) << Tok.getName();
       SkipUntil(tok::r_brace, StopAtSemi);
       return;

+ 10 - 5
tools/clang/lib/Parse/ParseExpr.cpp

@@ -1241,10 +1241,14 @@ HLSLReservedKeyword:
   case tok::kw_typeof:
   case tok::kw___vector: {
     // HLSL Change Starts
-    if (getLangOpts().HLSL && (
-        SavedKind == tok::kw_wchar_t || SavedKind == tok::kw_char || SavedKind == tok::kw_char16_t || SavedKind == tok::kw_char32_t ||
-        SavedKind == tok::kw_short || SavedKind == tok::kw_long || SavedKind == tok::kw___int64 || SavedKind == tok::kw___int128 ||
-        (SavedKind == tok::kw_typename && !getLangOpts().EnableTemplates) || SavedKind == tok::kw_typeof)) {
+    if (getLangOpts().HLSL &&
+        (SavedKind == tok::kw_wchar_t || SavedKind == tok::kw_char ||
+         SavedKind == tok::kw_char16_t || SavedKind == tok::kw_char32_t ||
+         SavedKind == tok::kw_short || SavedKind == tok::kw_long ||
+         SavedKind == tok::kw___int64 || SavedKind == tok::kw___int128 ||
+         (SavedKind == tok::kw_typename &&
+          getLangOpts().HLSLVersion < hlsl::LangStd::v2021) ||
+         SavedKind == tok::kw_typeof)) {
       // the vector/image/sampler/event keywords aren't returned by the lexer for HLSL
       goto HLSLReservedKeyword;
     }
@@ -1337,7 +1341,8 @@ HLSLReservedKeyword:
   }
 
   case tok::kw_operator: // [C++] id-expression: operator/conversion-function-id
-    if (getLangOpts().HLSL && !getLangOpts().EnableOperatorOverloading &&
+    if (getLangOpts().HLSL &&
+        getLangOpts().HLSLVersion < hlsl::LangStd::v2021 &&
         SavedKind == tok::kw_operator) {
       goto HLSLReservedKeyword; // HLSL Change - 'operator' is reserved
     }

+ 9 - 4
tools/clang/lib/Parse/ParseExprCXX.cpp

@@ -13,6 +13,7 @@
 
 #include "clang/AST/ASTContext.h"
 #include "RAIIObjectsForParser.h"
+#include "dxc/Support/HLSLVersion.h"
 #include "clang/AST/DeclTemplate.h"
 #include "clang/Basic/PrettyStackTrace.h"
 #include "clang/Lex/LiteralSupport.h"
@@ -308,7 +309,8 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
     // 'identifier <' after it.
     if (Tok.is(tok::kw_template)) {
       // HLSL Change Starts - template is reserved
-      if (getLangOpts().HLSL && !getLangOpts().EnableTemplates) {
+      if (getLangOpts().HLSL &&
+          getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         Diag(Tok, diag::err_hlsl_reserved_keyword) << Tok.getName();
         ConsumeToken();
         return true;
@@ -331,7 +333,8 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
         ConsumeToken();
       } else if (Tok.is(tok::kw_operator)) {
         // HLSL Change Starts
-        if (getLangOpts().HLSL && !getLangOpts().EnableOperatorOverloading) {
+        if (getLangOpts().HLSL &&
+            getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
           Diag(Tok, diag::err_hlsl_reserved_keyword) << Tok.getName();
           TPA.Commit();
           return true;
@@ -2196,7 +2199,8 @@ bool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS,
 bool Parser::ParseUnqualifiedIdOperator(CXXScopeSpec &SS, bool EnteringContext,
                                         ParsedType ObjectType,
                                         UnqualifiedId &Result) {
-  assert((!getLangOpts().HLSL || getLangOpts().EnableOperatorOverloading) &&
+  assert((!getLangOpts().HLSL ||
+          getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) &&
          "not supported in HLSL - unreachable"); // HLSL Change
   assert(Tok.is(tok::kw_operator) && "Expected 'operator' keyword");
   
@@ -2527,7 +2531,8 @@ bool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, bool EnteringContext,
   //   conversion-function-id
   if (Tok.is(tok::kw_operator)) {
     // HLSL Change Starts
-    if (getLangOpts().HLSL && !getLangOpts().EnableOperatorOverloading) {
+    if (getLangOpts().HLSL &&
+        getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
       Diag(Tok, diag::err_hlsl_reserved_keyword) << Tok.getName();
       ConsumeToken();
       return true;

+ 3 - 3
tools/clang/lib/SPIRV/SpirvEmitter.cpp

@@ -1097,7 +1097,7 @@ SpirvInstruction *SpirvEmitter::doExpr(const Expr *expr,
     result = doArraySubscriptExpr(subscriptExpr, range);
   } else if (const auto *condExpr = dyn_cast<ConditionalOperator>(expr)) {
     // Beginning with HLSL 2021, the ternary operator is short-circuited.
-    if (getCompilerInstance().getLangOpts().EnableShortCircuit) {
+    if (getCompilerInstance().getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) {
       result = doShortCircuitedConditionalOperator(condExpr);
     } else {
       const Expr *cond = condExpr->getCond();
@@ -6439,7 +6439,7 @@ SpirvInstruction *SpirvEmitter::processBinaryOp(
   // Beginning with HLSL 2021, logical operators are short-circuited,
   // and can only be used with scalar types.
   if ((opcode == BO_LAnd || opcode == BO_LOr) &&
-      getCompilerInstance().getLangOpts().EnableShortCircuit) {
+      getCompilerInstance().getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) {
 
     // We translate short-circuited operators as follows:
     // A && B =>
@@ -6704,7 +6704,7 @@ bool SpirvEmitter::isVectorShuffle(const Expr *expr) {
 }
 
 bool SpirvEmitter::isShortCircuitedOp(const Expr *expr) {
-  if (!expr || !getCompilerInstance().getLangOpts().EnableShortCircuit) {
+  if (!expr || astContext.getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
     return false;
   }
 

+ 2 - 2
tools/clang/lib/Sema/SemaExpr.cpp

@@ -10412,7 +10412,7 @@ ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc,
   // HLSL Change Starts
   // Handle HLSL binary operands differently
   if ((getLangOpts().HLSL &&
-          (!getLangOpts().EnableOperatorOverloading ||
+          (getLangOpts().HLSLVersion < hlsl::LangStd::v2021 ||
            !hlsl::IsUserDefinedRecordType(LHSExpr->getType()))) ||
       !hlsl::DoesTypeDefineOverloadedOperator(
           LHSExpr->getType(), clang::BinaryOperator::getOverloadedOperator(Opc),
@@ -10901,7 +10901,7 @@ ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc,
   // simply checks whether it is a user-defined type with operator overloading
   // methods or not.
   if (getLangOpts().CPlusPlus &&
-      (!getLangOpts().HLSL || getLangOpts().EnableOperatorOverloading) &&
+      (!getLangOpts().HLSL || getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) &&
       hlsl::IsUserDefinedRecordType(LHSExpr->getType()) &&
       hlsl::DoesTypeDefineOverloadedOperator(
           LHSExpr->getType(), clang::BinaryOperator::getOverloadedOperator(Opc),

+ 10 - 7
tools/clang/lib/Sema/SemaHLSL.cpp

@@ -4786,7 +4786,8 @@ public:
       // Some intrinsics only optionally exist in later language versions.
       // To prevent collisions with existing functions or templates, exclude
       // intrinsics when they aren't enabled.
-      if (IsBuiltinTable(tableName) && !m_sema->getLangOpts().EnableShortCircuit) {
+      if (IsBuiltinTable(tableName) &&
+          m_sema->getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
         if (pIntrinsic->Op == (UINT)IntrinsicOp::IOP_and ||
             pIntrinsic->Op == (UINT)IntrinsicOp::IOP_or ||
             pIntrinsic->Op == (UINT)IntrinsicOp::IOP_select) {
@@ -9085,7 +9086,7 @@ bool HLSLExternalSource::CanConvert(
           break;
         }
       }
-    } else if (m_sema->getLangOpts().StrictUDTCasting &&
+    } else if (m_sema->getLangOpts().HLSLVersion >= hlsl::LangStd::v2021 &&
                (SourceInfo.ShapeKind == AR_TOBJ_COMPOUND ||
                 TargetInfo.ShapeKind == AR_TOBJ_COMPOUND) &&
                !TargetIsAnonymous) {
@@ -9466,7 +9467,7 @@ void HLSLExternalSource::CheckBinOpForHLSL(
   ArBasicKind resultElementKind = leftElementKind;
   {
     if (BinaryOperatorKindIsLogical(Opc)) {
-      if (m_sema->getLangOpts().EnableShortCircuit) {
+      if (m_sema->getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) {
         // Only allow scalar types for logical operators &&, ||
         if (leftObjectKind != ArTypeObjectKind::AR_TOBJ_BASIC ||
             rightObjectKind != ArTypeObjectKind::AR_TOBJ_BASIC) {
@@ -9770,7 +9771,7 @@ clang::QualType HLSLExternalSource::CheckVectorConditional(
 
   QualType ResultTy = leftType;
 
-  if (m_sema->getLangOpts().EnableShortCircuit) {
+  if (m_sema->getLangOpts().HLSLVersion >= hlsl::LangStd::v2021) {
     // Only allow scalar.
     if (condObjectKind == AR_TOBJ_VECTOR || condObjectKind == AR_TOBJ_MATRIX) {
       SmallVector<char, 256> Buff;
@@ -9872,7 +9873,7 @@ clang::QualType HLSLExternalSource::CheckVectorConditional(
   // Convert condition component type to bool, using result component dimensions
   QualType boolType;
   // If short-circuiting, condition must be scalar.
-  if (m_sema->getLangOpts().EnableShortCircuit)
+  if (m_sema->getLangOpts().HLSLVersion >= hlsl::LangStd::v2021)
     boolType = NewSimpleAggregateType(AR_TOBJ_INVALID, AR_BASIC_BOOL, 0, 1, 1)->getCanonicalTypeInternal();
   else
     boolType = NewSimpleAggregateType(AR_TOBJ_INVALID, AR_BASIC_BOOL, 0, rowCount, colCount)->getCanonicalTypeInternal();
@@ -12924,7 +12925,9 @@ bool Sema::DiagnoseHLSLDecl(Declarator &D, DeclContext *DC, Expr *BitWidth,
          "otherwise this is called without checking language first");
 
   // If we have a template declaration but haven't enabled templates, error.
-  if (DC->isDependentContext() && !getLangOpts().EnableTemplates) return false;
+  if (DC->isDependentContext() &&
+      getLangOpts().HLSLVersion < hlsl::LangStd::v2021)
+    return false;
 
   DeclSpec::SCS storage = D.getDeclSpec().getStorageClassSpec();
   assert(!DC->isClosure() && "otherwise parser accepted closure syntax instead of failing with a syntax error");
@@ -13414,7 +13417,7 @@ bool Sema::DiagnoseHLSLDecl(Declarator &D, DeclContext *DC, Expr *BitWidth,
 
   // Disallow bitfields where not enabled explicitly or by HV
   if (BitWidth) {
-    if (!getLangOpts().EnableBitfields) {
+    if (getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
       Diag(BitWidth->getExprLoc(), diag::err_hlsl_bitfields);
       result = false;
     } else if (!D.UnusualAnnotations.empty()) {

+ 1 - 1
tools/clang/lib/Sema/SemaLookup.cpp

@@ -315,7 +315,7 @@ void LookupResult::configure() {
   //   UNREACHABLE executed at ../../tools/clang/lib/Sema/SemaExprCXX.cpp:2163!
   //   Aborted
   if (!getSema().getLangOpts().HLSL ||
-      !getSema().getLangOpts().EnableOperatorOverloading) {
+      getSema().getLangOpts().HLSLVersion < hlsl::LangStd::v2021) {
     // If we're looking for one of the allocation or deallocation
     // operators, make sure that the implicitly-declared new and delete
     // operators can be found.

+ 1 - 1
tools/clang/test/CodeGenHLSL/short-circuit-and.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc /T ps_6_0 %s -enable-short-circuit /Zi | FileCheck %s
+// RUN: %dxc /T ps_6_0 %s -HV 2021 /Zi | FileCheck %s
 // RUN: %dxc /T ps_6_0 %s | FileCheck %s -check-prefix=NO_SHORT_CIRCUIT
 
 // Load the two uav handles

+ 1 - 1
tools/clang/test/CodeGenHLSL/short-circuit-or.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc /T ps_6_0 %s -enable-short-circuit /Zi | FileCheck %s
+// RUN: %dxc /T ps_6_0 %s -HV 2021 /Zi | FileCheck %s
 // RUN: %dxc /T ps_6_0 %s | FileCheck %s -check-prefix=NO_SHORT_CIRCUIT
 
 // Load the two uav handles

+ 1 - 1
tools/clang/test/CodeGenHLSL/short-circuit-select.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc /T ps_6_0 %s -enable-short-circuit /Zi | FileCheck %s
+// RUN: %dxc /T ps_6_0 %s -HV 2021 /Zi | FileCheck %s
 // RUN: %dxc /T ps_6_0 %s | FileCheck %s -check-prefix=NO_SHORT_CIRCUIT
 
 // Load the two uav handles

+ 1 - 1
tools/clang/test/CodeGenSPIRV/operator.overloading.call.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main -enable-operator-overloading
+// RUN: %dxc -T ps_6_0 -E main -HV 2021
 
 // CHECK:          %a = OpVariable %_ptr_Function_Number Function
 // CHECK: [[call:%\w+]] = OpFunctionCall %int %Number_operator_Call %a

+ 1 - 1
tools/clang/test/CodeGenSPIRV/operator.overloading.mat.mul.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main -enable-operator-overloading
+// RUN: %dxc -T ps_6_0 -E main -HV 2021
 
 struct GLFloat3x2 {
     float3x2 m;

+ 1 - 1
tools/clang/test/CodeGenSPIRV/operator.overloading.star.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main -enable-operator-overloading
+// RUN: %dxc -T ps_6_0 -E main -HV 2021
 
 // CHECK:           %a = OpVariable %_ptr_Function_Number Function
 // CHECK:           %b = OpVariable %_ptr_Function_Number Function

+ 1 - 1
tools/clang/test/CodeGenSPIRV/type.template.function.template-instance.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main -enable-templates
+// RUN: %dxc -T ps_6_0 -E main -HV 2021
 
 template <typename T>
 T square(T number) {

+ 1 - 1
tools/clang/test/CodeGenSPIRV/type.template.struct.template-instance.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main -enable-templates
+// RUN: %dxc -T ps_6_0 -E main -HV 2021
 
 // The SPIR-V backend correctly handles the template instance `Foo<int>`.
 // The created template instance is ClassTemplateSpecializationDecl in AST.

+ 1 - 1
tools/clang/test/CodeGenSPIRV/use.rvalue.for.member-expr.of.array-subscript.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T cs_6_0 -E main -enable-templates
+// RUN: %dxc -T cs_6_0 -E main -HV 2021
 
 // Tests that a rvalue is used for the index of ArraySubscriptExpr. The newly
 // introduced template support generates a template instance of

+ 0 - 1
tools/clang/test/HLSL/bitfields.hlsl

@@ -1,4 +1,3 @@
-// RUN: %clang_cc1 -enable-bitfields -fsyntax-only -ffreestanding -verify %s
 // RUN: %clang_cc1 -HV 2021 -fsyntax-only -ffreestanding -verify %s
 
 typedef int T : 1; /* expected-error {{expected unqualified-id}} expected-error {{expected ';' after top level declarator}} */

+ 1 - 1
tools/clang/test/HLSL/conversions-between-type-shapes-strictudt.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -strict-udt-casting -Wno-unused-value -fsyntax-only -ffreestanding -verify -verify-ignore-unexpected=note %s
+// RUN: %clang_cc1 -HV 2021 -Wno-unused-value -fsyntax-only -ffreestanding -verify -verify-ignore-unexpected=note %s
 
 // Tests all implicit conversions and explicit casts between type shapes
 // (scalars, vectors, matrices, arrays and structs).

+ 0 - 1
tools/clang/test/HLSL/overloading-new-delete-errors.hlsl

@@ -1,4 +1,3 @@
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -enable-operator-overloading %s
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -HV 2021 %s
 
 // This test checks that when we overload new or delete operator

+ 1 - 2
tools/clang/test/HLSL/overloading-unsupported-operators.hlsl

@@ -1,4 +1,3 @@
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -enable-operator-overloading %s
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -HV 2021 %s
 
 // This test checks that dxcompiler generates errors when overloading operators
@@ -27,4 +26,4 @@ struct S
 };
 
 [numthreads(1,1,1)]
-void main() {}
+void main() {}

+ 19 - 0
tools/clang/test/HLSL/template-diag-deferred.hlsl

@@ -0,0 +1,19 @@
+template<typename T> void neverInstantiated(uint2 pos) {
+   globallycoherent T Val = 0.0f;
+}
+
+template<typename T> void doSomething(uint2 pos) {
+   globallycoherent RWTexture2D<T> output = ResourceDescriptorHeap[0];
+   globallycoherent T Val = 0.0f; // expected-error {{'globallycoherent' is not a valid modifier for a non-UAV type}}
+   output[pos] = Val;
+}
+
+template<typename T> void doSomething2(uint2 pos) {
+   globallycoherent T output = ResourceDescriptorHeap[0];
+   output[pos] = 0.0f;
+}
+
+void Fn() {
+  doSomething<float>(uint2(0,0));
+  doSomething2<RWTexture2D<float> >(uint2(0,0));
+}

+ 2 - 2
tools/clang/test/HLSL/template-literal-substitution-failure.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -ffreestanding -enable-templates -verify %s
+// RUN: %clang_cc1 -fsyntax-only -ffreestanding -HV 2021 -verify %s
 RWStructuredBuffer<float> Output;
 
 // expected-note@+1 {{candidate template ignored: deduced conflicting types for parameter 'T' ('float' vs. 'literal float')}}
@@ -9,4 +9,4 @@ template <typename T> T Add(T input, T input2) {
 void main() {
   // expected-error@+1 {{no matching function for call to 'Add'}}
   Output[0] = Add(Output[0], 1.0)
-}
+}

+ 0 - 1
tools/clang/test/HLSL/use-undefined-overloaded-operator.hlsl

@@ -1,4 +1,3 @@
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -enable-operator-overloading %s
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -ffreestanding -verify -HV 2021 %s
 
 // This test checks that when we use undefined overloaded operator

+ 0 - 1
tools/clang/test/HLSLDisabled/memcpy_split_regression-strictudt.hlsl

@@ -1,7 +1,6 @@
 // This test is disabled because it crashes on ARM64. Bug filed:
 // 38575954: ARM64-only compiler crash in memcpy_split_regression-strictudt.hlsl
 
-// RUN: %dxc -E main -T ps_6_0 -Od -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -Od -HV 2021 %s | FileCheck %s
 
 //

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/compile_options/enable_templates.hlsl

@@ -1,5 +1,5 @@
 // RUN: %dxc -E main -T ps_6_0 %s | FileCheck -check-prefix=DISABLED %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck -check-prefix=ENABLED %s
+// RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck -check-prefix=ENABLED %s
 
 // DISABLED: error: 'template' is a reserved keyword in HLSL
 // ENABLED: define void @main()

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/control_flow/return/EnableNRVO.hlsl

@@ -1,5 +1,5 @@
 // RUN: %dxc -E main -fcgl  -T ps_6_0  %s | FileCheck %s -check-prefix=IR
-// RUN: %dxc -E main -T ps_6_0  -enable-short-circuit %s | FileCheck %s -check-prefix=DXIL
+// RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s -check-prefix=DXIL
 
 // The issue happens when d.cb copy in foo and copy in d.cb = cbv.
 // Then, when lower memcpy, there're more than one write to d.cb.

+ 2 - 2
tools/clang/test/HLSLFileCheck/hlsl/control_flow/return/short_circuit_with_phi.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -E main -fcgl -opt-enable structurize-returns -T ps_6_0  -enable-short-circuit %s | FileCheck %s
-// RUN: %dxc -E main -opt-enable structurize-returns -T ps_6_0  -enable-short-circuit %s | FileCheck %s -check-prefix=FULL
+// RUN: %dxc -E main -fcgl -opt-enable structurize-returns -T ps_6_0  -HV 2021 %s | FileCheck %s
+// RUN: %dxc -E main -opt-enable structurize-returns -T ps_6_0  -HV 2021 %s | FileCheck %s -check-prefix=FULL
 
 // FULL: @main
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/functions/arguments/outputArray-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T vs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T vs_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: switch

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/namespace/using2.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: call void @dx.op.storeOutput.i32(i32 5, i32 0, i32 0, i8 0, i32 125)
@@ -42,4 +41,4 @@ namespace  n2 {
 
 int main(int a:A) : SV_Target {
   return n2::A34::value;
-}
+}

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.call.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-operator-overloading %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: define void @main()

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.implicit-assign1.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_0 -fcgl -enable-operator-overloading %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_0 -fcgl -HV 2021 %s | FileCheck %s
 
 // CHECK: define internal void {{.*}}(%struct.MyArray* %this, %struct.MyArray* noalias sret %agg.result, %struct.MyArray* %RHS)
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/operator_overloading/operator.overloading.star.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-operator-overloading %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: [[pos_x:%[^ ]+]] = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef)

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/payload_qualifier/combination.hlsl

@@ -1,5 +1,5 @@
 // RUN: %dxc -T lib_6_6 %s -enable-payload-qualifiers | FileCheck %s
-// RUN: %dxc -T lib_6_6 %s -enable-payload-qualifiers -enable-templates -DTEMPLATES | FileCheck %s
+// RUN: %dxc -T lib_6_6 %s -enable-payload-qualifiers -HV 2021 -DTEMPLATES | FileCheck %s
 
 // CHECK: error: field 'x1' is qualified 'read' for shader stage 'miss' but has no valid producer
 // CHECK: error: field 'x2' is qualified 'read' for shader stage 'closesthit' but has no valid producer

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/3731-resource-descriptor-heap.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -T cs_6_6 -E main -enable-templates -ast-dump %s | FileCheck %s
 // RUN: %dxc -T cs_6_6 -E main -HV 2021 -ast-dump %s | FileCheck %s
 
 struct SimpleBuffer {

+ 0 - 3
tools/clang/test/HLSLFileCheck/hlsl/template/AddMulOps.hlsl

@@ -1,6 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 %s -enable-templates -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s /Zi | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 %s -HV 2021 -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s /Zi | FileCheck %s

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/AnyAll.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/AssignmentOps.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 %s -enable-templates -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 %s -HV 2021 -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/BitwiseAssignOps.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s 2>&1 | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s 2>&1 | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 

+ 2 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/BitwiseOps.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates -enable-short-circuit %s 2>&1 | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates -enable-short-circuit %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
+// RUN: %dxc -E main -T ps_6_0 -HV 2021 %s 2>&1 | FileCheck %s
+// RUN: %dxc -E main -T ps_6_0 -HV 2021 %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 
 // Check that HLSL bitwise operators deal with dependent types
 

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/BooleanMathOps.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 -DNOVEC %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/BufferInExpansion.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T cs_6_5 -enable-templates -ast-dump %s | FileCheck %s
+// RUN: %dxc -T cs_6_5 -HV 2021 -ast-dump %s | FileCheck %s
 
 struct ConstantsStruct
 {

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/ComparisonOps.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s -DCHECK_DIAGNOSTICS | FileCheck %s -check-prefix=DIAG
 

+ 2 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/DependentNonTypeParam.hlsl

@@ -1,8 +1,8 @@
-// RUN: %dxc -E main -T ps_6_0 -ast-dump -enable-templates %s | FileCheck -check-prefix=AST %s
 // RUN: %dxc -E main -T ps_6_0 -ast-dump -HV 2021 %s | FileCheck -check-prefix=AST %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
+
+
 template<uint VSize, typename T>
 vector<T, VSize> make_vec(T X) {
   return (vector<T, VSize>)X;

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/DependentWithBuiltinTemplate.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck -check-prefixes=CHECK,BUFFER %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck -check-prefixes=CHECK,BUFFER %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 -DERANGE1 %s | FileCheck %s -check-prefix=ERANGE1
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 -DERANGE2 %s | FileCheck %s -check-prefix=ERANGE2

+ 2 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/FloatLiteralParameter.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -T cs_6_5 -enable-templates -ast-dump %s | FileCheck -check-prefix=AST %s
-// RUN: %dxc -T cs_6_5 -enable-templates %s | FileCheck %s
+// RUN: %dxc -T cs_6_5 -HV 2021 -ast-dump %s | FileCheck -check-prefix=AST %s
+// RUN: %dxc -T cs_6_5 -HV 2021 %s | FileCheck %s
 RWStructuredBuffer<float> Output;
 
 template <typename T> T Fn(T input) {

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateBufferParamTypes.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T cs_6_0 -ast-dump -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T cs_6_0 -ast-dump -HV 2021 %s | FileCheck %s
 struct Foo { float f;};
 template <typename T> struct Wrap { T value; };

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateHLSLAttributes.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T lib_6_6 -enable-templates -ast-dump %s | FileCheck %s
+// RUN: %dxc -T lib_6_6 -HV 2021 -ast-dump %s | FileCheck %s
 
 
 template<typename U, typename FV>

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/InstantiateSemantics.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_5 -enable-templates %s -ast-dump %s | FileCheck %s
+// RUN: %dxc -T ps_6_5 -HV 2021 %s -ast-dump %s | FileCheck %s
 
 template<typename C>
 struct Output {

+ 2 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/IntLiteralParameter.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -T cs_6_5 -enable-templates -ast-dump %s | FileCheck -check-prefix=AST %s
-// RUN: %dxc -T cs_6_5 -enable-templates %s | FileCheck %s
+// RUN: %dxc -T cs_6_5 -HV 2021 -ast-dump %s | FileCheck -check-prefix=AST %s
+// RUN: %dxc -T cs_6_5 -HV 2021 %s | FileCheck %s
 RWStructuredBuffer<int> Output;
 
 template <typename T> T Fn(T input) {

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/PrefixPostfixOps.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 %s -enable-templates -DCHECK_DIAGNOSTICS | FileCheck -check-prefix=DIAG %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 %s -HV 2021 -DCHECK_DIAGNOSTICS | FileCheck -check-prefix=DIAG %s
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/RandomGenerators.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float 0x404FD93640000000)
 // CHECK: call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float 0x4047269780000000)

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/ThisAccess.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -T cs_6_6 -E main -enable-templates -ast-dump %s | FileCheck %s
 // RUN: %dxc -T cs_6_6 -E main -HV 2021 -ast-dump %s | FileCheck %s
 
+
 template<typename K, typename V>
 struct pair {
   K First;

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/ackermann.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: call void @dx.op.storeOutput.i32(i32 5, i32 0, i32 0, i8 0, i32 125)
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/dependent-sized_array.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: error: 'a3' declared as an array with a negative size
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/elaborated-type-specifier.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -T ps_6_0 -enable-templates %s 2>&1| FileCheck %s
 // RUN: %dxc -T ps_6_0 -HV 2021 %s 2>&1| FileCheck %s
 // CHECK: error: use of 'X' with tag type that does not match previous declaration
 // CHECK: note: in instantiation of template class 'PR6915::D<PR6915::D2>' requested here

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/enum-forward.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: error: ISO C++ forbids forward references to 'enum' types
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/factorial.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: call void @dx.op.storeOutput.i32(i32 5, i32 0, i32 0, i8 0, i32 1)
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/missing_typename.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -T vs_6_0 -E VSMain -enable-templates %s | FileCheck %s
 // RUN: %dxc -T vs_6_0 -E VSMain -HV 2021 %s | FileCheck %s
 
 // CHECK: error: nested typedefs are not supported in HLSL

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/strict-udt-casting-1.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -strict-udt-casting %s | FileCheck %s
-// RUN: %dxc -E main -T ps_6_0 -enable-templates -D USE_TEMPLATE %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 -D USE_TEMPLATE %s | FileCheck %s
 

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/strict-udt-casting-2.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // Based on GitHub issue #3564
@@ -75,4 +74,4 @@ float4 main() : SV_TARGET {
   LinearYCoCg Color4 = TransformColor<LinearRGB>(Color2);
 
   return float4(Color4.YCoCg, 0.0);
-}
+}

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/template-param-modifiers.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T cs_6_0 -enable-templates -ast-dump %s | FileCheck %s
+// RUN: %dxc -E main -T cs_6_0 -HV 2021 -ast-dump %s | FileCheck %s
 template<typename T>
 void apply(in T X, inout T Y, out T Z);
 

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateFunc.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK:define void @main
@@ -10,4 +9,4 @@ T foo(T t0, T t1) {
 
 float2 main(float4 a:A) : SV_Target {
   return foo(a.x, a.y) + foo(a.xy, a.zw);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateMethod.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK:define void @main
@@ -16,4 +15,4 @@ float2 main(float4 a:A) : SV_Target {
   Test t0;
   Test t1;
   return t0.foo<float>(a.y) + t1.foo<float2>(a.zw);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateStruct.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK:define void @main
@@ -12,4 +11,4 @@ struct TS<float4> ts;
 
 float4 main() : SV_Target {
   return ts.t;
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateStructFunc.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK:define void @main
@@ -19,4 +18,4 @@ float2 main(float4 a:A) : SV_Target {
   Test<float2> t1;
   t1.t = a.xy;
   return t0.foo(a.y) + t1.foo(a.zw);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateStructFunc2.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK:define void @main
@@ -11,4 +10,4 @@ T foo(T t0, T t1) {
 
 float2 main(float4 a:A) : SV_Target {
   return foo(a.x, a.y) + foo(a.xy, a.zw);
-}
+}

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/templateSubscripts.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -enable-templates %s | FileCheck %s
+// RUN: %dxc -T ps_6_0 -HV 2021 %s | FileCheck %s
 
 // Test applying the [] subscript operator in a templated function.
 // With the side effect of testing passing matrices, arrays, and vectors as params.

+ 0 - 2
tools/clang/test/HLSLFileCheck/hlsl/template/templateTypename.hlsl

@@ -1,5 +1,3 @@
-// RUN: %dxc -DTEMPLATE= -T ps_6_0 -enable-templates %s | FileCheck %s -check-prefix=CHK_FAIL
-// RUN: %dxc -DTEMPLATE=template -T ps_6_0 -enable-templates %s | FileCheck %s -check-prefix=CHK_PASS
 // RUN: %dxc -DTEMPLATE= -T ps_6_0 -HV 2021 %s | FileCheck %s -check-prefix=CHK_FAIL
 // RUN: %dxc -DTEMPLATE=template -T ps_6_0 -HV 2021 %s | FileCheck %s -check-prefix=CHK_PASS
 

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/template/variadic.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -enable-templates %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // CHECK: error: variadic templates are not supported in HLSL
 

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/cast/StructCast-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T vs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T vs_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: SV_RenderTargetArrayIndex or SV_ViewportArrayIndex from any shader feeding rasterizer
@@ -46,4 +45,4 @@ Interpolants main(  Vertex In)
   else if (i > -1)
      return (Interpolants )c2;
   return (Interpolants)In;
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/explicit_cast_as_out_param-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc /Tvs_6_0 /Emain -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc /Tvs_6_0 /Emain -HV 2021 %s | FileCheck %s
 // Test explicit cast between structs of identical layout where
 // the destination struct is marked as out param.
@@ -148,4 +147,4 @@ void main(out VSOut o1 : A, out VSOut o2 : B)
    input.f7 = true;
    o1 = (VSOut)input;
    o2 = (VSOut)input;
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/implicit_cast_as_func_param_user_scenario-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T ps_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T ps_6_0 -HV 2021 %s | FileCheck %s
 // github issue #1725
 // Test implicit cast scenario between structs of identical layout
@@ -52,4 +51,4 @@ BUFF main(VSOUT_D input)
     foo(input.standard.position);        // comment out and it will compile fine
     float3 N = getNormal( (VSOUT_B)input.standard ); // comment this out and it will compile fine    
     return (BUFF)0;
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/cast/identical_layout_structs/implicit_cast_as_streamout_append-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc /Tgs_6_0 /Emain -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc /Tgs_6_0 /Emain -HV 2021 %s | FileCheck %s
 // github issue #1560
 
@@ -60,4 +59,4 @@ void main(inout TriangleStream<GSOutPSIn> stream)
     stream.Append((GSOutPSIn)tri[0]);
     stream.Append((GSOutPSIn)tri[1]);
     stream.Append((GSOutPSIn)tri[2]);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/struct/anonymous-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T vs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T vs_6_0 -HV 2021 %s | FileCheck %s
 
 // Tests declarations and uses of anonymous structs.
@@ -21,4 +20,4 @@ int main(Outer input : IN) : OUT
     struct { int x; } local = input.field;
     typedefed retval = (typedefed)local;
     return retval.x + global.x;
-}
+}

+ 0 - 1
tools/clang/test/HLSLFileCheck/hlsl/types/struct/bitfields.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc /Zi /enable-bitfields /T vs_6_2 /E main %s | FileCheck %s
 // RUN: %dxc /Zi /HV 2021 /T vs_6_2 /E main %s | FileCheck %s
 
 RWByteAddressBuffer BufferOut : register(u0);

+ 1 - 2
tools/clang/test/HLSLFileCheck/hlsl/types/struct/structArray-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T vs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T vs_6_0 -HV 2021 %s | FileCheck %s
 
 // CHECK: @main
@@ -33,4 +32,4 @@ Interpolants main(  Vertex In)
   TA ta = (TA)In;
 
   return (Interpolants)test(ta.ta);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/shader_targets/geometry/streamoutputs/streamout_input_before_output_different_structs-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T gs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T gs_6_0 -HV 2021 %s | FileCheck %s
 
 // Regression test for an SROA bug where the flattening the output stream argument
@@ -17,4 +16,4 @@ struct GSOut { float value : TEXCOORD0; };
 void main(point GSIn input[1], inout PointStream<GSOut> output)
 {
     output.Append((GSOut)input[0]);
-}
+}

+ 1 - 2
tools/clang/test/HLSLFileCheck/shader_targets/geometry/streamoutputs/streamout_output_before_input_different_structs-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -E main -T gs_6_0 -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -E main -T gs_6_0 -HV 2021 %s | FileCheck %s
 
 // Regression test for an SROA bug where the flattening the output stream argument
@@ -17,4 +16,4 @@ struct GSOut { float value : TEXCOORD0; };
 void main(inout PointStream<GSOut> output, point GSIn input[1])
 {
     output.Append((GSOut)input[0]);
-}
+}

+ 0 - 1
tools/clang/test/HLSLFileCheck/shader_targets/library/inout_struct_mismatch-strictudt.hlsl

@@ -1,4 +1,3 @@
-// RUN: %dxc -T lib_6_x -default-linkage external -strict-udt-casting %s | FileCheck %s
 // RUN: %dxc -T lib_6_x -default-linkage external -HV 2021 %s | FileCheck %s
 
 // CHECK: define <4 x float>

+ 0 - 6
tools/clang/tools/dxcompiler/dxcompilerobj.cpp

@@ -1470,16 +1470,10 @@ public:
     compiler.getLangOpts().HLSLVersion = Opts.HLSLVersion;
     compiler.getLangOpts().EnableDX9CompatMode = Opts.EnableDX9CompatMode;
     compiler.getLangOpts().EnableFXCCompatMode = Opts.EnableFXCCompatMode;
-    compiler.getLangOpts().EnableTemplates = Opts.EnableTemplates;
-    compiler.getLangOpts().EnableOperatorOverloading =
-        Opts.EnableOperatorOverloading;
-    compiler.getLangOpts().StrictUDTCasting = Opts.StrictUDTCasting;
 
     compiler.getLangOpts().UseMinPrecision = !Opts.Enable16BitTypes;
 
     compiler.getLangOpts().EnablePayloadAccessQualifiers = Opts.EnablePayloadQualifiers;
-    compiler.getLangOpts().EnableShortCircuit = Opts.EnableShortCircuit;
-    compiler.getLangOpts().EnableBitfields = Opts.EnableBitfields;
     compiler.getLangOpts().HLSLProfile =
           compiler.getCodeGenOpts().HLSLProfile = Opts.TargetProfile;
 

+ 0 - 2
tools/clang/tools/libclang/dxcrewriteunused.cpp

@@ -542,7 +542,6 @@ void SetupCompilerCommon(CompilerInstance &compiler,
     compiler.getDiagnostics().setWarningsAsErrors(true);
   compiler.getDiagnostics().setIgnoreAllWarnings(!opts.OutputWarnings);
   compiler.getLangOpts().HLSLVersion = opts.HLSLVersion;
-  compiler.getLangOpts().StrictUDTCasting = opts.StrictUDTCasting;
   compiler.getLangOpts().UseMinPrecision = !opts.Enable16BitTypes;
   compiler.getLangOpts().EnableDX9CompatMode = opts.EnableDX9CompatMode;
   compiler.getLangOpts().EnableFXCCompatMode = opts.EnableFXCCompatMode;
@@ -661,7 +660,6 @@ HRESULT GenerateAST(DxcLangExtensionsHelper *pExtHelper, LPCSTR pFileName,
                     dxcutil::DxcArgsFileSystem *msfPtr, raw_ostream &w) {
   // Setup a compiler instance.
   CompilerInstance &compiler = astHelper.compiler;
-  compiler.getLangOpts().EnableTemplates = opts.EnableTemplates;
 
   std::unique_ptr<TextDiagnosticPrinter> diagPrinter =
       llvm::make_unique<TextDiagnosticPrinter>(w,