On Wed, Nov 14, 2012 at 11:51 PM, Lang Hames <[email protected]> wrote: > Author: lhames > Date: Thu Nov 15 01:51:26 2012 > New Revision: 168027 > > URL: http://llvm.org/viewvc/llvm-project?rev=168027&view=rev > Log: > Make -ffp-contract a codegen option, rather than a laguage option. This makes > more sense anyway - it determines how expressions are codegen'd. It also > ensures > that -ffp-contract=fast has the intended effect when compiling LLVM IR. > > Modified: > cfe/trunk/include/clang/Basic/LangOptions.def > cfe/trunk/include/clang/Basic/LangOptions.h > cfe/trunk/include/clang/Frontend/CodeGenOptions.def > cfe/trunk/include/clang/Frontend/CodeGenOptions.h > cfe/trunk/lib/CodeGen/BackendUtil.cpp > cfe/trunk/lib/CodeGen/CGExprScalar.cpp > cfe/trunk/lib/Frontend/CompilerInvocation.cpp
(replying not from my phone - now with substantially less mangled email/headers...) Test case? > > Modified: cfe/trunk/include/clang/Basic/LangOptions.def > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/LangOptions.def (original) > +++ cfe/trunk/include/clang/Basic/LangOptions.def Thu Nov 15 01:51:26 2012 > @@ -149,7 +149,6 @@ > "stack protector mode") > ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, > SOB_Undefined, > "signed integer overflow handling") > -ENUM_LANGOPT(FPContractMode, FPContractModeKind, 2, FPC_On, "FP_CONTRACT > mode") > > BENIGN_LANGOPT(InstantiationDepth, 32, 512, > "maximum template instantiation depth") > > Modified: cfe/trunk/include/clang/Basic/LangOptions.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/LangOptions.h (original) > +++ cfe/trunk/include/clang/Basic/LangOptions.h Thu Nov 15 01:51:26 2012 > @@ -56,12 +56,6 @@ > SOB_Trapping // -ftrapv > }; > > - enum FPContractModeKind { > - FPC_Off, // Form fused FP ops only where result will not be > affected. > - FPC_On, // Form fused FP ops according to FP_CONTRACT rules. > - FPC_Fast // Aggressively fuse FP ops (E.g. FMA). > - }; > - > public: > clang::ObjCRuntime ObjCRuntime; > > > Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) > +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Thu Nov 15 01:51:26 > 2012 > @@ -49,6 +49,8 @@ > CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. > GCDA. > CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka > GCNO. > CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg > metadata. > +/// \brief FP_CONTRACT mode (on/off/fast). > +ENUM_CODEGENOPT(FPContractMode, FPContractModeKind, 2, FPC_On) > CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard > variables > ///< are required. > CODEGENOPT(FunctionSections , 1, 0) ///< Set when -ffunction-sections is > enabled. > > Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original) > +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Thu Nov 15 01:51:26 2012 > @@ -65,6 +65,12 @@ > LocalExecTLSModel > }; > > + enum FPContractModeKind { > + FPC_Off, // Form fused FP ops only where result will not be > affected. > + FPC_On, // Form fused FP ops according to FP_CONTRACT rules. > + FPC_Fast // Aggressively fuse FP ops (E.g. FMA). > + }; > + > /// The code model to use (-mcmodel). > std::string CodeModel; > > > Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original) > +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Thu Nov 15 01:51:26 2012 > @@ -381,14 +381,14 @@ > } > > // Set FP fusion mode. > - switch (LangOpts.getFPContractMode()) { > - case LangOptions::FPC_Off: > + switch (CodeGenOpts.getFPContractMode()) { > + case CodeGenOptions::FPC_Off: > Options.AllowFPOpFusion = llvm::FPOpFusion::Strict; > break; > - case LangOptions::FPC_On: > + case CodeGenOptions::FPC_On: > Options.AllowFPOpFusion = llvm::FPOpFusion::Standard; > break; > - case LangOptions::FPC_Fast: > + case CodeGenOptions::FPC_Fast: > Options.AllowFPOpFusion = llvm::FPOpFusion::Fast; > break; > } > > Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Thu Nov 15 01:51:26 2012 > @@ -2217,7 +2217,7 @@ > > // Check whether -ffp-contract=on. (If -ffp-contract=off/fast, fusing is > // either disabled, or handled entirely by the LLVM backend). > - if (CGF.getLangOpts().getFPContractMode() != LangOptions::FPC_On) > + if (CGF.CGM.getCodeGenOpts().getFPContractMode() != CodeGenOptions::FPC_On) > return 0; > > // We have a potentially fusable op. Look for a mul on one of the operands. > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=168027&r1=168026&r2=168027&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Nov 15 01:51:26 2012 > @@ -446,6 +446,18 @@ > } > } > > + if (Arg *A = Args.getLastArg(OPT_ffp_contract)) { > + StringRef Val = A->getValue(); > + if (Val == "fast") > + Opts.setFPContractMode(CodeGenOptions::FPC_Fast); > + else if (Val == "on") > + Opts.setFPContractMode(CodeGenOptions::FPC_On); > + else if (Val == "off") > + Opts.setFPContractMode(CodeGenOptions::FPC_Off); > + else > + Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << > Val; > + } > + > return Success; > } > > @@ -1140,18 +1152,6 @@ > Diags.Report(diag::err_drv_invalid_value) > << Args.getLastArg(OPT_fvisibility)->getAsString(Args) << Vis; > > - if (Arg *A = Args.getLastArg(OPT_ffp_contract)) { > - StringRef Val = A->getValue(); > - if (Val == "fast") > - Opts.setFPContractMode(LangOptions::FPC_Fast); > - else if (Val == "on") > - Opts.setFPContractMode(LangOptions::FPC_On); > - else if (Val == "off") > - Opts.setFPContractMode(LangOptions::FPC_Off); > - else > - Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << > Val; > - } > - > if (Args.hasArg(OPT_fvisibility_inlines_hidden)) > Opts.InlineVisibilityHidden = 1; > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
