[LLVMdev] setOnlyReadsMemory / setDoesNotAccessMemory
Nyx
mcheva at cs.mcgill.ca
Fri Jul 24 12:56:18 PDT 2009
But, which optimization pass will take advantage of those flags?
As for nounwind, that means "can't throw an exception"?
- Maxime
John McCall-2 wrote:
>
> Nyx wrote:
>> Hello,
>>
>> I'm in a situation where my code is calling many native functions.
>> Sometimes, these calls are simply calls to static "accessor" methods that
>> read a variable in some class object (object pointer as input, member
>> variable value returned as output). I was wondering if using the
>> setOnlyReadsMemory method on the native function objects could help LLVM
>> generate optimized code (because it would then know the function has no
>> side
>> effects), and say, eliminating redundant calls to the same accessor
>> function.
>>
>> Also, I would like to know what setDoesNotAccessMemory means exactly. Is
>> it
>> used to mean that a function accesses no memory (neither read nor write)
>> outside of its stack frame? I'm just puzzled as to the meaning of the
>> flags
>> these two methods set on a function, and whether they are useful or not
>> for
>> LLVM to perform optimizations (and if they are, what optimization pass
>> makes
>> use of them).
>>
>
> If you think of there being a "world" of state and recorded
> side-effects, a readnone
> function completely ignores the world, whereas a readonly function can
> depend on
> the current state of the world, but can't modify it. Calls to readnone
> functions are arbitrarily
> re-orderable (and hence redundant calls can always be joined), but calls
> to readonly functions
> can't be re-ordered around operations which might modify state.
>
> The precise meaning of this is kindof up to you. If you only access
> immutable memory, that's
> legitimate in a readnone function. If you allocate new memory, but your
> program's semantics
> can't distinguish between separate allocations, that's legitimate, too.
>
> Last time I checked, the optimizers don't consider the possibility of
> readonly/readnone
> functions unwinding, and hence will happily eliminate calls to
> readonly/readnone functions,
> even when they aren't marked nounwind. So if your function can unwind,
> don't mark it
> readonly/readnone.
>
> John.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
--
View this message in context: http://www.nabble.com/setOnlyReadsMemory---setDoesNotAccessMemory-tp24649914p24650944.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
More information about the llvm-dev
mailing list