[LLVMdev] A create-distinct-item function with no (other) side effects

Kenneth Uildriks
Sat, 29 Aug 2009 00:56:09 -0000

On Fri, Aug 28, 2009 at 3:47 PM, Nick Lewycky<nlewycky at google.com>
wrote:
>
>
> 2009/8/28 Kenneth Uildriks <kennethuil at gmail.com>
>>
>> This is by design, of course, (CreateDistinctItem does not return the
>> same value given the same caller-visible global state) but I see no
>> way to declare a function that:
>>
>> 1. Returns a distinct item each time it's called,
>
> Attach a 'noalias' attribute to the return type in your function
> declaration. See http://llvm.org/docs/LangRef.html#paramattrs
>
>>
>> 2. Doesn't need to be called at all if its return value from that
call
>> isn't used, and
>> 3. Doesn't even need to be declared if its return value is *never*
used.
>
> Thus far these still need a custom pass. It shouldn't be too hard
though.
> See http://wiki.llvm.org/HowTo:_Find_all_call_sites_of_a_function
>
> You're the second user I know of to ask for this. We should probably
come up
> with a general solution of some sort.

Conceptually, it's the same as "readonly" except that the
requirement
that it return the same value each time is dropped.  It would also
help optimize away calls to "random" in some cases.  I understand that
adding a new function attribute to IR is not trivial, though.  Thanks
for the confirmation.

My front-end is writing LLVM calls into the output module, and JITting
it as part of the compile process so it can create runtime code, and
allowing compiled code to optionally call functions exposing those
same LLVM calls to do its own runtime JITting.  I'm finding lots of
uses for that setup, at both compiletime and runtime, but when the
compiled code doesn't actually JIT anything at runtime, optimizing
away all those LLVM calls along with the LLVM library extern function
declarations would make the resulting .s files have *much* lighter
linking requirements and be easier to package and distribute.  I guess
a custom pass that's part of my compiler project would be the way to
go.

>
> Nick
>
>>
>> If I happen to know about CreateDistinctItem at build time, I can
>> write a custom pass, of course, but I was wondering if there was an
>> easier way to get the standard optimizers to recognize it, or if
y'all
>> think it's worthwhile to add an easier way.
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>