[LLVMdev] should AlwaysInliner inline this case?

Philip Reames listmail at philipreames.com
Sun Jan 4 15:32:30 PST 2015


On 01/04/2015 12:04 AM, Liu Xin wrote:
>
> %294= callfloatbitcast (float(float, float*)* @__gpu_modff to 
> float(float, i64)*)(float%293, i64 %preg.212.addr.0)
>
> as you may know, some gpu backends don't support function call. we 
> need to make sure to inline all functions here. however, Inliner can 
> not figure out that this is a valid callsite in this form. actually, 
> it is.  in C words, cast a function and then call should be treat as 
> callsite, right?
>
Generally, the inliner doesn't do much with indirect calls, but given 
there is no simpler canonical case here, I expect we'll have to.

Its possible we might even want to define this as a direct call. I'm not 
sure what the expectations are with regards to the type of the function 
being called and the type of the callsite.  I suspect a lot of code 
would get confused if getCalledFunction returned __gpu_modff with it's 
unbitcast type.  That's possibly something we should fix though.

We'll want to get other folks input here, but a small patch to the 
inliner to handle this case would seem reasonable to me.

Philip



More information about the llvm-dev mailing list