[LLVMdev] sincos optimization

David Given dg at cowlark.com
Tue Jan 22 02:59:14 PST 2013


On 22/01/13 05:30, Redmond, Paul wrote:
[...]
> I'm looking at http://llvm.org/bugs/show_bug.cgi?id=13204 which involves converting calls to sin and cos to sincos (when available)
> 
> Initially I thought about transforming calls to sinf/cosf to sincosf. However, I don't think this is a legal transformation given that a declaration for a function called sinf is not necessarily the standard library function.

I've actually just dealt with this --- standard library calls, including
sinf, *are* promoted to intrinsics if the compiler sees them (and are
then usually converted back to library calls again later). The list of
recognised names is here:

	lib/Target/TargetLibraryInfo.cpp

The list of functions which are considered candidates for promotion is
in hasOptimizedCodeGen() in here:

	include/llvm/Target/TargetLibraryInfo.h

...and the code that actually does it is here:

	lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Look for SelectionDAGBuilder::visitUnaryFloatCall() and visitCall().

It appears that such functions are only promoted if they're declared
readnone, which provides some protection against overriding a standard
library function, but I haven't found anything that explicitly checks
for this yet.

Disclaimer: I learnt this yesterday...

-- 
┌─── dg@cowlark.com ───── http://www.cowlark.com ─────
│ "Of course, on a sufficiently small planet, 40 km/hr is, in fact,
│ sufficient to punt the elastic spherical cow into low orbit." ---
│ Brooks Moses on r.a.sf.c

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 262 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130122/c7f54553/attachment.sig>


More information about the llvm-dev mailing list