[llvm-dev] Function attributes for memory side-effects
Ejjeh, Adel via llvm-dev
llvm-dev at lists.llvm.org
Thu Apr 30 15:46:15 PDT 2020
Thanks for your reply. After experimenting in the Compiler Explorer, it seems that the “readnone” attribute is assigned for functions that neither read from nor write to memory (otherwise “readonly” or “writeonly” are used accordingly when the function does one but not the other). However, one of my problems still exists which is using library function calls (like math library calls – e.g. sqrt()). When the declaration for such functions is being generated in the ll file, it does not include any attributes. Is there a way to handle such scenario?
From: Neil Henning <neil.henning at unity3d.com>
Date: Wednesday, April 29, 2020 at 4:22 AM
To: "Ejjeh, Adel" <aejjeh at illinois.edu>
Subject: Re: [llvm-dev] Function attributes for memory side-effects
Hey Adel Ejjeh,
You want to look at the LLVM function attributes readnone and maybe readonly to know that a function has no side effects.
You can use the __attribute__((pure)) from clang to force this on functions I believe (see https://godbolt.org/z/dqBMjE for an example).
On Tue, Apr 28, 2020 at 8:58 PM Ejjeh, Adel via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote:
I am writing a pass which requires checking dependences, and am having trouble dealing with function calls. Specifically, I want to be able to know when a called function does not have any side effects (e.g. math library functions like sqrt), and was wondering if there are attributes that specify this behavior (I know there is the ‘noread’ attribute but wasn’t sure if there’s something similar for writes)? Also, how can I tell clang to generate those attributes at the function declaration? Any information would be helpful.
LLVM Developers mailing list
llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
[Image removed by sender.]
Senior Software Engineer Compiler
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev