Err... *looks again at patch* actually I'm not sure exactly what this changed so it could be both :)<div><br></div><div>-eric</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 15, 2012 at 9:14 AM, Eric Christopher <span dir="ltr"><<a href="mailto:echristo@gmail.com" target="_blank">echristo@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">If it's changing codegen (i.e. an IR file would look different) then it's that. I think this is mostly option handling and forwarding so it'd be driver.<span class="HOEnZb"><font color="#888888"><div>
<br></div><div>-eric</div></font></span><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br>
<br><div class="gmail_quote">On Thu, Nov 15, 2012 at 8:45 AM, Lang Hames <span dir="ltr"><<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

A quick poke through the clang test directory revealed only:<div><br></div><div><div>./Frontend/ir-support-codegen.ll</div><div>./Frontend/ir-support-errors.ll</div></div><div><br></div><div>What's the policy on adding bitcode test cases to clang? Would this be considered a Codegen test, or a Driver one?</div>

<span><font color="#888888">
<div><br></div><div>- Lang.</div></font></span><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 15, 2012 at 8:35 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Wed, Nov 14, 2012 at 11:51 PM, Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>> wrote:<br>



> Author: lhames<br>
> Date: Thu Nov 15 01:51:26 2012<br>
> New Revision: 168027<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=168027&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=168027&view=rev</a><br>
> Log:<br>
> Make -ffp-contract a codegen option, rather than a laguage option. This makes<br>
> more sense anyway - it determines how expressions are codegen'd. It also ensures<br>
> that -ffp-contract=fast has the intended effect when compiling LLVM IR.<br>
><br>
> Modified:<br>
>     cfe/trunk/include/clang/Basic/LangOptions.def<br>
>     cfe/trunk/include/clang/Basic/LangOptions.h<br>
>     cfe/trunk/include/clang/Frontend/CodeGenOptions.def<br>
>     cfe/trunk/include/clang/Frontend/CodeGenOptions.h<br>
>     cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
>     cfe/trunk/lib/CodeGen/CGExprScalar.cpp<br>
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
<br>
</div>(replying not from my phone - now with substantially less mangled<br>
email/headers...)<br>
<br>
Test case?<br>
<div><div><br>
><br>
> Modified: cfe/trunk/include/clang/Basic/LangOptions.def<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/LangOptions.def (original)<br>
> +++ cfe/trunk/include/clang/Basic/LangOptions.def Thu Nov 15 01:51:26 2012<br>
> @@ -149,7 +149,6 @@<br>
>               "stack protector mode")<br>
>  ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined,<br>
>               "signed integer overflow handling")<br>
> -ENUM_LANGOPT(FPContractMode, FPContractModeKind, 2, FPC_On, "FP_CONTRACT mode")<br>
><br>
>  BENIGN_LANGOPT(InstantiationDepth, 32, 512,<br>
>                 "maximum template instantiation depth")<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/LangOptions.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/LangOptions.h (original)<br>
> +++ cfe/trunk/include/clang/Basic/LangOptions.h Thu Nov 15 01:51:26 2012<br>
> @@ -56,12 +56,6 @@<br>
>      SOB_Trapping    // -ftrapv<br>
>    };<br>
><br>
> -  enum FPContractModeKind {<br>
> -    FPC_Off,        // Form fused FP ops only where result will not be affected.<br>
> -    FPC_On,         // Form fused FP ops according to FP_CONTRACT rules.<br>
> -    FPC_Fast        // Aggressively fuse FP ops (E.g. FMA).<br>
> -  };<br>
> -<br>
>  public:<br>
>    clang::ObjCRuntime ObjCRuntime;<br>
><br>
><br>
> Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)<br>
> +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Thu Nov 15 01:51:26 2012<br>
> @@ -49,6 +49,8 @@<br>
>  CODEGENOPT(EmitGcovArcs      , 1, 0) ///< Emit coverage data files, aka. GCDA.<br>
>  CODEGENOPT(EmitGcovNotes     , 1, 0) ///< Emit coverage "notes" files, aka GCNO.<br>
>  CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.<br>
> +/// \brief FP_CONTRACT mode (on/off/fast).<br>
> +ENUM_CODEGENOPT(FPContractMode, FPContractModeKind, 2, FPC_On)<br>
>  CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables<br>
>                                          ///< are required.<br>
>  CODEGENOPT(FunctionSections  , 1, 0) ///< Set when -ffunction-sections is enabled.<br>
><br>
> Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original)<br>
> +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Thu Nov 15 01:51:26 2012<br>
> @@ -65,6 +65,12 @@<br>
>      LocalExecTLSModel<br>
>    };<br>
><br>
> +  enum FPContractModeKind {<br>
> +    FPC_Off,        // Form fused FP ops only where result will not be affected.<br>
> +    FPC_On,         // Form fused FP ops according to FP_CONTRACT rules.<br>
> +    FPC_Fast        // Aggressively fuse FP ops (E.g. FMA).<br>
> +  };<br>
> +<br>
>    /// The code model to use (-mcmodel).<br>
>    std::string CodeModel;<br>
><br>
><br>
> Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Thu Nov 15 01:51:26 2012<br>
> @@ -381,14 +381,14 @@<br>
>    }<br>
><br>
>    // Set FP fusion mode.<br>
> -  switch (LangOpts.getFPContractMode()) {<br>
> -  case LangOptions::FPC_Off:<br>
> +  switch (CodeGenOpts.getFPContractMode()) {<br>
> +  case CodeGenOptions::FPC_Off:<br>
>      Options.AllowFPOpFusion = llvm::FPOpFusion::Strict;<br>
>      break;<br>
> -  case LangOptions::FPC_On:<br>
> +  case CodeGenOptions::FPC_On:<br>
>      Options.AllowFPOpFusion = llvm::FPOpFusion::Standard;<br>
>      break;<br>
> -  case LangOptions::FPC_Fast:<br>
> +  case CodeGenOptions::FPC_Fast:<br>
>      Options.AllowFPOpFusion = llvm::FPOpFusion::Fast;<br>
>      break;<br>
>    }<br>
><br>
> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Thu Nov 15 01:51:26 2012<br>
> @@ -2217,7 +2217,7 @@<br>
><br>
>    // Check whether -ffp-contract=on. (If -ffp-contract=off/fast, fusing is<br>
>    // either disabled, or handled entirely by the LLVM backend).<br>
> -  if (CGF.getLangOpts().getFPContractMode() != LangOptions::FPC_On)<br>
> +  if (CGF.CGM.getCodeGenOpts().getFPContractMode() != CodeGenOptions::FPC_On)<br>
>      return 0;<br>
><br>
>    // We have a potentially fusable op. Look for a mul on one of the operands.<br>
><br>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=168027&r1=168026&r2=168027&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=168027&r1=168026&r2=168027&view=diff</a><br>



> ==============================================================================<br>
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Nov 15 01:51:26 2012<br>
> @@ -446,6 +446,18 @@<br>
>      }<br>
>    }<br>
><br>
> +  if (Arg *A = Args.getLastArg(OPT_ffp_contract)) {<br>
> +    StringRef Val = A->getValue();<br>
> +    if (Val == "fast")<br>
> +      Opts.setFPContractMode(CodeGenOptions::FPC_Fast);<br>
> +    else if (Val == "on")<br>
> +      Opts.setFPContractMode(CodeGenOptions::FPC_On);<br>
> +    else if (Val == "off")<br>
> +      Opts.setFPContractMode(CodeGenOptions::FPC_Off);<br>
> +    else<br>
> +      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;<br>
> +  }<br>
> +<br>
>    return Success;<br>
>  }<br>
><br>
> @@ -1140,18 +1152,6 @@<br>
>      Diags.Report(diag::err_drv_invalid_value)<br>
>        << Args.getLastArg(OPT_fvisibility)->getAsString(Args) << Vis;<br>
><br>
> -  if (Arg *A = Args.getLastArg(OPT_ffp_contract)) {<br>
> -    StringRef Val = A->getValue();<br>
> -    if (Val == "fast")<br>
> -      Opts.setFPContractMode(LangOptions::FPC_Fast);<br>
> -    else if (Val == "on")<br>
> -      Opts.setFPContractMode(LangOptions::FPC_On);<br>
> -    else if (Val == "off")<br>
> -      Opts.setFPContractMode(LangOptions::FPC_Off);<br>
> -    else<br>
> -      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;<br>
> -  }<br>
> -<br>
>    if (Args.hasArg(OPT_fvisibility_inlines_hidden))<br>
>      Opts.InlineVisibilityHidden = 1;<br>
><br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>