[cfe-commits] r168027 - in /cfe/trunk: include/clang/Basic/LangOptions.def include/clang/Basic/LangOptions.h include/clang/Frontend/CodeGenOptions.def include/clang/Frontend/CodeGenOptions.h lib/CodeGen/BackendUtil.cpp lib/CodeGen/CGExprScalar.cpp lib/Frontend/CompilerInvocation.cpp

David Blaikie dblaikie at gmail.com
Thu Nov 15 08:35:20 PST 2012


On Wed, Nov 14, 2012 at 11:51 PM, Lang Hames <lhames at gmail.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list