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.<div><br></div><div>-eric</div><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 class="HOEnZb"><font color="#888888">
<div><br></div><div>- Lang.</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: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">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>