[LLVMdev] Opt pass for collecting static memory allocations (allocas and globals) to one big memory area.
mikael.lepisto at vincit.fi
Mon Mar 11 23:59:32 PDT 2013
On Mon, Mar 11, 2013 at 9:00 PM, John Criswell <criswell at illinois.edu>wrote:
> On 3/11/13 6:32 AM, Mikael Lepistö wrote:
> I'm doing llvm pass for OpenCL code which does some memory checking to
> verify that code does not access memory outside of the programs own
> statically allocated areas.
> If you're looking to see if your program only accesses in-bounds memory,
> SAFECode and Address Sanitizer may be able to do this for you already. If
> you use SAFECode, I'd recommend hacking it to use complete checks.
> If you're wanting to know that a piece of code accesses only certain types
> of memory (e.g., globals and stack but not heap), then you either need to
> write something yourself or modify the aforementioned tools.
Actually this part I have already implemented. I will send some information
about it here after I get the pass and the system properly documented. That
should be done before July.
> To make dynamic check generation easier, I would like to collect all
> allocas and global variable definitions and create one big memory structure
> (for each global, local and private) containing all the allocated memory
> as contiguous form to be able to just to add checks to loads/sotres that
> address is inside that memory structure.
> No, I don't believe such a transform exists, but it should be pretty easy
> to write. Just be forewarned that you can't safely promote allocas to
> global variables when they're used in loops or in functions that can be
> called recursively. You must either check for these conditions or assume a
> priori that you code does not do these things.
OpenCL does not support recursion so it won't be a problem. Neither I can
think of any cases where allocas would be generated to be inside of a loop.
But to be on the safe side better to assert if there are any alloca outside
of entry block.
Thanks for the comments!
-- John T.
> Does anyone know if there already exist some pass which does something
> like this (collects static allocations) or should I write this from the
> scratch ? Does the idea sound reasonable at all ?
> Cheers, Mikael Lepistö
> LLVM Developers mailing listLLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev