[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 09:24:25 PST 2012


On Thu, Nov 15, 2012 at 8:45 AM, Lang Hames <lhames at gmail.com> wrote:
> A quick poke through the clang test directory revealed only:
>
> ./Frontend/ir-support-codegen.ll
> ./Frontend/ir-support-errors.ll
>
> What's the policy on adding bitcode test cases to clang? Would this be
> considered a Codegen test, or a Driver one?

On further inspection, if I understand this right, your change doesn't
change the driver (the option is passed from driver to frontend the
same before/after your patch) & doesn't affect the IR (the option is
specified in the TargetOptions when invoking the LLVM passes from
Clang).

In that case, yeah, this sort of slips between the cracks. Short of a
mock LLVM implementation that would verify certain target options or
other parameters, or Clang->optimized bitcode test which we tend to
avoid (we don't want to test LLVM in Clang tests) this probably slips
between the testing cracks.

If anyone else has other ideas on if/how this should be tested, I'm
all ears though.

Thanks,
- David

>
> - Lang.
>
>
> On Thu, Nov 15, 2012 at 8:35 AM, David Blaikie <dblaikie at gmail.com> wrote:
>>
>> 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