python3kgae updated this revision to Diff 457191.
python3kgae marked an inline comment as done.
python3kgae added a comment.

Switch to CLMode -P and -Fi.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D125655/new/

https://reviews.llvm.org/D125655

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/test/Driver/dxc_P.hlsl

Index: clang/test/Driver/dxc_P.hlsl
===================================================================
--- /dev/null
+++ clang/test/Driver/dxc_P.hlsl
@@ -0,0 +1,16 @@
+// RUN: %clang_dxc -Tlib_6_7 -P -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -Tlib_6_7  -P -Fi"a.txt" -### %s 2>&1 | FileCheck %s --check-prefix=FI
+// RUN: %clang_dxc -Tlib_6_7  -Fo b.txt -P -Fi"a.txt" -### %s 2>&1 | FileCheck %s --check-prefix=WARNING
+
+// Make sure -P option flag which translated into "-E" + "-o" "a.txt".
+// CHECK:"-P"
+// CHECK-SAME: "-o" "dxc_P.i"
+
+// FI:"-P"
+// FI:"-Fia.txt"
+// FI-SAME:"-o" "a.txt"
+
+// Make sure got warning when -Fo and -P at same time.
+// WARNING: warning: output compiler options like -Fo ignored with Preprocess [-Woption-ignored]
+// WARNING:"-P"
+// WARNING-SAME:"-o" "a.txt"
Index: clang/lib/Driver/ToolChains/HLSL.cpp
===================================================================
--- clang/lib/Driver/ToolChains/HLSL.cpp
+++ clang/lib/Driver/ToolChains/HLSL.cpp
@@ -177,6 +177,9 @@
   }
 
   if (DAL->hasArg(options::OPT_o)) {
+    if (DAL->hasArg(options::OPT__SLASH_P))
+      getDriver().Diag(diag::warn_drv_dxc_ignore_output_for_preprocess);
+
     // When run the whole pipeline.
     if (!DAL->hasArg(options::OPT_emit_llvm))
       // Emit obj if write to file.
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -3508,6 +3508,8 @@
                                          options::OPT_D,
                                          options::OPT_I,
                                          options::OPT_S,
+                                         options::OPT__SLASH_P,
+                                         options::OPT__SLASH_Fi,
                                          options::OPT_emit_llvm,
                                          options::OPT_emit_obj,
                                          options::OPT_disable_llvm_passes,
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -5455,7 +5455,8 @@
 
   llvm::PrettyStackTraceString CrashInfo("Computing output path");
   // Output to a user requested destination?
-  if (AtTopLevel && !isa<DsymutilJobAction>(JA) && !isa<VerifyJobAction>(JA)) {
+  if (AtTopLevel && !isa<DsymutilJobAction>(JA) && !isa<VerifyJobAction>(JA) &&
+      !(IsDXCMode() && C.getArgs().hasArg(options::OPT__SLASH_P))) {
     if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
       return C.addResultFile(FinalOutput->getValue(), &JA);
   }
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -6381,6 +6381,9 @@
 class CLFlag<string name> : Option<["/", "-"], name, KIND_FLAG>,
   Group<cl_Group>, Flags<[CLOption, NoXarchOption]>;
 
+class CLDXCFlag<string name> : Option<["/", "-"], name, KIND_FLAG>,
+  Group<cl_Group>, Flags<[CLDXCOption, NoXarchOption]>;
+
 class CLCompileFlag<string name> : Option<["/", "-"], name, KIND_FLAG>,
   Group<cl_compile_Group>, Flags<[CLOption, NoXarchOption]>;
 
@@ -6393,6 +6396,9 @@
 class CLCompileJoined<string name> : Option<["/", "-"], name, KIND_JOINED>,
   Group<cl_compile_Group>, Flags<[CLOption, NoXarchOption]>;
 
+class CLDXCCompileJoined<string name> : Option<["/", "-"], name, KIND_JOINED>,
+  Group<cl_compile_Group>, Flags<[CLDXCOption, NoXarchOption]>;
+
 class CLIgnoredJoined<string name> : Option<["/", "-"], name, KIND_JOINED>,
   Group<cl_ignored_Group>, Flags<[CLOption, NoXarchOption, HelpHidden]>;
 
@@ -6662,7 +6668,7 @@
   HelpText<"Set output executable file name">,
   MetaVarName<"<file or dir/>">;
 def _SLASH_Fe_COLON : CLJoined<"Fe:">, Alias<_SLASH_Fe>;
-def _SLASH_Fi : CLCompileJoined<"Fi">,
+def _SLASH_Fi : CLDXCCompileJoined<"Fi">,
   HelpText<"Set preprocess output file name (with /P)">,
   MetaVarName<"<file>">;
 def _SLASH_Fo : CLCompileJoined<"Fo">,
@@ -6697,7 +6703,7 @@
 def _SLASH_o : CLJoinedOrSeparate<"o">,
   HelpText<"Deprecated (set output file name); use /Fe or /Fe">,
   MetaVarName<"<file or dir/>">;
-def _SLASH_P : CLFlag<"P">, HelpText<"Preprocess to file">;
+def _SLASH_P : CLDXCFlag<"P">, HelpText<"Preprocess to file">;
 def _SLASH_permissive : CLFlag<"permissive">,
   HelpText<"Enable some non conforming code to compile">;
 def _SLASH_permissive_ : CLFlag<"permissive-">,
Index: clang/include/clang/Basic/DiagnosticDriverKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -666,6 +666,9 @@
   "invalid profile : %0">;
 def err_drv_dxc_missing_target_profile : Error<
   "target profile option (-T) is missing">;
+def warn_drv_dxc_ignore_output_for_preprocess : Warning<
+  "output compiler options like -Fo ignored with Preprocess">,
+  InGroup<OptionIgnored>;
 
 def err_drv_invalid_range_dxil_validator_version : Error<
   "invalid validator version : %0\n"
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to