<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>