When a call to a double-precision libm function has fast-math semantics (via function attribute for now because there is no IR-level FMF on calls), we can avoid fpext/fptrunc operations and use the float version of the call if the input and output are both float.
We already do this optimization using a command-line option; this patch just adds the ability for fast-math to use the existing functionality.
I moved the cl::opt from InstructionCombining into SimplifyLibCalls because it's only ever used internally to that class.
Is it possible to conditionalize test case code from a RUN line? If yes, I could combine all of the new test cases with the existing test file instead of creating a new file.
This patch should solve: http://llvm.org/bugs/show_bug.cgi?id=17850