<div class="socmaildefaultfont" dir="ltr" style="font-family:Arial;font-size:10.5pt" ><div dir="ltr" >Hi Richard,</div>
<div dir="ltr" > </div>
<div dir="ltr" >I posted <a href="https://reviews.llvm.org/D22518" >https://reviews.llvm.org/D22518</a>, is this more or less what you intended?</div>
<div dir="ltr" > </div>
<div dir="ltr" >Thanks,</div>
<div dir="ltr" >Samuel</div>
<div dir="ltr" > </div>
<blockquote data-history-content-modified="1" dir="ltr" style="border-left:solid #aaaaaa 2px; margin-left:5px; padding-left:5px; direction:ltr; margin-right:0px" >----- Original message -----<br>From: Richard Smith <richard@metafoo.co.uk><br>Sent by: metafoo@gmail.com<br>To: Samuel F Antao/Watson/IBM@IBMUS<br>Cc: cfe-commits <cfe-commits@lists.llvm.org><br>Subject: Re: r275931 - Append clang system include path for offloading tool chains.<br>Date: Mon, Jul 18, 2016 8:29 PM<br> 
<div dir="ltr" ><div><div>On Mon, Jul 18, 2016 at 5:01 PM, Samuel Antao via cfe-commits <span dir="ltr" ><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" >cfe-commits@lists.llvm.org</a>></span> wrote:

<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex" >Author: sfantao<br>Date: Mon Jul 18 19:01:12 2016<br>New Revision: 275931<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=275931&view=rev" rel="noreferrer" target="_blank" >http://llvm.org/viewvc/llvm-project?rev=275931&view=rev</a><br>Log:<br>Append clang system include path for offloading tool chains.<br><br>Summary:<br>This patch adds clang system include path when offloading tool chains, e.g. CUDA, are used in the current compilation.<br><br>This fixes an issue detected by @rsmith in response to r275645.<br><br>Reviewers: rsmith, tra<br><br>Subscribers: rsmith, cfe-commits<br><br>Differential Revision: <a href="https://reviews.llvm.org/D22490" rel="noreferrer" target="_blank" >https://reviews.llvm.org/D22490</a><br><br>Modified:<br>    cfe/trunk/lib/Driver/Tools.cpp<br><br>Modified: cfe/trunk/lib/Driver/Tools.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=275931&r1=275930&r2=275931&view=diff" rel="noreferrer" target="_blank" >http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=275931&r1=275930&r2=275931&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>+++ cfe/trunk/lib/Driver/Tools.cpp Mon Jul 18 19:01:12 2016<br>@@ -314,6 +314,24 @@ static void addExtraOffloadCXXStdlibIncl<br>   // TODO: Add support for other programming models here.<br> }<br><br>+/// Add the C include args of other offloading toolchains. If this is a host<br>+/// job, the device toolchains are added. If this is a device job, the host<br>+/// toolchains will be added.<br>+static void addExtraOffloadClangSystemIncludeArgs(Compilation &C,<br>+                                                  const JobAction &JA,<br>+                                                  const ArgList &Args,<br>+                                                  ArgStringList &CmdArgs) {<br>+<br>+  if (JA.isHostOffloading(Action::OFK_Cuda))<br>+    C.getSingleOffloadToolChain<Action::OFK_Cuda>()->AddClangSystemIncludeArgs(<br>+        Args, CmdArgs);<br>+  else if (JA.isDeviceOffloading(Action::OFK_Cuda))<br>+    C.getSingleOffloadToolChain<Action::OFK_Host>()->AddClangSystemIncludeArgs(<br>+        Args, CmdArgs);</blockquote>
<div> </div>
<div>We now have three copies of this code to get an aux toolchain, and we have three copies of code that calls the same function on the current toolchain and optionally on an offloading toolchain. Can we do something about this redundancy? Can we replace this duplication with something like:</div>
<div> </div>
<div>forRegularAndOffloadToolchains(C, JA, [&](ToolChain &TC) {</div>
<div>  TC.AddClangSystemIncludeArgs(Args, CmdLine);</div>
<div>});</div>
<div> </div>
<div>?</div>
<div> </div>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex" >+<br>+  // TODO: Add support for other programming models here.<br>+}<br>+<br> /// Add the include args that are specific of each offloading programming model.<br> static void addExtraOffloadSpecificIncludeArgs(Compilation &C,<br>                                                const JobAction &JA,<br>@@ -612,7 +630,7 @@ void Clang::AddPreprocessingOptions(Comp<br>   // Add system include arguments for all targets but IAMCU.<br>   if (!IsIAMCU) {<br>     getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);<br>-    addExtraOffloadCXXStdlibIncludeArgs(C, JA, Args, CmdArgs);<br>+    addExtraOffloadClangSystemIncludeArgs(C, JA, Args, CmdArgs);<br>   } else {<br>     // For IAMCU add special include arguments.<br>     getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs);<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@lists.llvm.org" target="_blank" >cfe-commits@lists.llvm.org</a><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" >http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a></blockquote></div></div></div></blockquote>
<div dir="ltr" > </div></div><BR>