Rename -allow-excess-fp-precision flag to -fuse-fp-ops, and switch from a
authorLang Hames <lhames@gmail.com>
Fri, 22 Jun 2012 01:09:09 +0000 (01:09 +0000)
committerLang Hames <lhames@gmail.com>
Fri, 22 Jun 2012 01:09:09 +0000 (01:09 +0000)
commite0231413225cf47aaf3238bf21afd0d59025028d
tree74bd6f76ad54db548971d2a369ef1529ca6a11c7
parent070b8dba809dd75267327cc823118bf7e171d17d
Rename -allow-excess-fp-precision flag to -fuse-fp-ops, and switch from a
boolean flag to an enum: { Fast, Standard, Strict } (default = Standard).

This option controls the creation by optimizations of fused FP ops that store
intermediate results in higher precision than IEEE allows (E.g. FMAs). The
behavior of this option is intended to match the behaviour specified by a
soon-to-be-introduced frontend flag: '-ffuse-fp-ops'.

Fast mode - allows formation of fused FP ops whenever they're profitable.

Standard mode - allow fusion only for 'blessed' FP ops. At present the only
blessed op is the fmuladd intrinsic. In the future more blessed ops may be
added.

Strict mode - allow fusion only if/when it can be proven that the excess
precision won't effect the result.

Note: This option only controls formation of fused ops by the optimizers.  Fused
operations that are explicitly requested (e.g. FMA via the llvm.fma.* intrinsic)
will always be honored, regardless of the value of this option.

Internally TargetOptions::AllowExcessFPPrecision has been replaced by
TargetOptions::AllowFPOpFusion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158956 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Target/TargetOptions.h
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/Target/ARM/ARMInstrInfo.td
test/CodeGen/ARM/fusedMAC.ll
test/CodeGen/PowerPC/a2-fp-basic.ll
test/CodeGen/PowerPC/fma.ll
test/CodeGen/PowerPC/ppc440-fp-basic.ll
tools/llc/llc.cpp