[LLVMdev] readnone

Nick Lewycky nicholas at mxc.ca
Sat Sep 10 10:47:28 PDT 2011


Garrison Venn wrote:
> If a function accesses a global constant array of constants--in my case
> a constant array of function pointers, and does NOT reference this
> array via a function argument (it instead directly references this global),
> is this enough to disallow the application of the readnone attribute to the
> function in question?

A function is readnone if it doesn't access any mutable state, so 
reading a constant global is fine. (Incidentally, it may even contain 
stores to constants because any such operation is undefined.)

I was sure that I remember "opt -functionattrs" being taught to do this, 
but I just tried it out and it doesn't. This is a missed optz'n 
opportunity, testcase:

   @x = constant i32 0
   define void @foo() {
     load i32* @x
     ret void
   }

is only marked readonly when it should be readnone. Could I interest you 
in fixing that? :)

Nick



More information about the llvm-dev mailing list