On Thu, Nov 15, 2012 at 8:45 AM, Lang Hames <[email protected]> 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 <[email protected]> wrote: >> >> 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
