Add -ffp-contract = { fast | on | off } command line option support.
This flag sets the 'fp-contract' mode, which controls the formation of fused
floating point operations. Available modes are:
- Fast: Form fused operations anywhere.
- On: Form fused operations where allowed by FP_CONTRACT. This is the default
mode.
- Off: Don't form fused operations (in future this may be relaxed to forming
fused operations where it can be proved that the result won't be
affected).
Currently clang doesn't support the FP_CONTRACT pragma, so the 'On' and 'Off'
modes are equivalent.
llvm-svn: 159794
This commit is contained in:
@@ -351,6 +351,19 @@ bool EmitAssemblyHelper::AddEmitPasses(BackendAction Action,
|
||||
Options.FloatABIType = llvm::FloatABI::Default;
|
||||
}
|
||||
|
||||
// Set FP fusion mode.
|
||||
switch (LangOpts.getFPContractMode()) {
|
||||
case LangOptions::FPC_Off:
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Strict;
|
||||
break;
|
||||
case LangOptions::FPC_On:
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Standard;
|
||||
break;
|
||||
case LangOptions::FPC_Fast:
|
||||
Options.AllowFPOpFusion = llvm::FPOpFusion::Fast;
|
||||
break;
|
||||
}
|
||||
|
||||
Options.LessPreciseFPMADOption = CodeGenOpts.LessPreciseFPMAD;
|
||||
Options.NoInfsFPMath = CodeGenOpts.NoInfsFPMath;
|
||||
Options.NoNaNsFPMath = CodeGenOpts.NoNaNsFPMath;
|
||||
|
||||
Reference in New Issue
Block a user