<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Mar 11, 2013 at 9:00 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><div class="im">
<div>On 3/11/13 6:32 AM, Mikael Lepistö
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi,
<div><br>
</div>
<div>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.</div>
</div>
</blockquote>
<br></div>
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.<br>
<br>
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.</div></blockquote><div><br></div><div>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. </div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"><div class="im">
<blockquote type="cite">
<div dir="ltr">
<div>
<br>
</div>
<div>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.</div>
</div>
</blockquote>
<br></div>
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.<br>
<br></div></blockquote><div><br></div><div style>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.</div>
<div style><br></div><div style>Thanks for the comments!</div><div style><br></div><div style>- Mikael</div><div style><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
-- John T.<br>
<br>
<blockquote type="cite"><div class="im">
<div dir="ltr">
<div><br>
</div>
<div>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 ? </div>
<div><br>
</div>
<div>Cheers, Mikael Lepistö</div>
</div>
<br>
<fieldset></fieldset>
<br>
</div><pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a> <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
</blockquote>
<br>
</div>
</blockquote></div><br></div></div>