================
@@ -3854,6 +3854,25 @@ static void RenderHLSLOptions(const Driver &D, const 
ArgList &Args,
   }
   if (Arg *A = Args.getLastArg(options::OPT_dxc_Zsb))
     A->claim(); // /Zsb is the default behavior, no need to forward it to llc.
+  bool Zi = Args.hasArg(options::OPT_g_Flag);
+  bool Qembed_debug = Args.hasArg(options::OPT_dxc_Qembed_debug);
+  Arg *Fd = Args.getLastArg(options::OPT_dxc_Fd);
+  if (Zi && !Fd && !Qembed_debug) {
+    D.Diag(diag::warn_drv_dxc_no_output_for_debug);
+    Qembed_debug = true;
+  }
+  if (Qembed_debug && !Zi)
+    D.Diag(diag::err_drv_no_debug_info_for_embed_debug);
+  if (Fd && !Zi)
+    D.Diag(diag::err_drv_no_debug_info_for_Fd);
+  if (Qembed_debug) {
+    CmdArgs.push_back("-mllvm");
+    CmdArgs.push_back("--dx-embed-debug");
+  }
+  if (Fd) {
+    CmdArgs.push_back("-mllvm");
+    CmdArgs.push_back(Args.MakeArgString("--dx-Fd=" + Twine(Fd->getValue())));
+  }
----------------
bogner wrote:

Passing this information along via mutually exclusive `cl::opt`s feels pretty 
awkward here. Would it be a better design to pass this information via 
`TargetOptions`? I think we could have a single option that way, where If a 
path is provided it provides the file to write to, if not it implies embedded. 
I imagine this is more like it would be implemented if we were doing this for 
`cl` compatibility generally, and probably maps better to whatever we end up 
doing for SPIR-V here.

https://github.com/llvm/llvm-project/pull/204166
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to