<br><br><div class="gmail_quote">On Fri, Aug 22, 2014 at 1:11 AM, David Chisnall <span dir="ltr"><<a href="mailto:David.Chisnall@cl.cam.ac.uk" target="_blank">David.Chisnall@cl.cam.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">
It's fairly simple to find all of the casts and then walk down the use chains, identifying whether the pointers escape, and if they don't rewrite all of the instructions to use the other address space.  I've done this in an (extremely hacky) pass to allow allocas to be in an address space other than 0 (which I'm slowly replacing with much less hacky code).<br>
</blockquote><div>But I got lost when a PHI node (as in the test case) is encountered.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">

As I understand it, for your target stores in AS 4 are more expensive than stores in AS 3, but both can refer to the same memory?<br><br></blockquote><div>Yes. Load/store in generic address space in expansive. The casts also add a small overhead in address computation.</div>
<div> </div><div>Thanks;</div><div> </div><div>Changpeng </div><div> </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">

David<br>
<div><div class="h5"><br>
On 21 Aug 2014, at 23:11, Changpeng Fang <<a href="mailto:cfang.llvm@gmail.com">cfang.llvm@gmail.com</a>> wrote:<br>
<br>
> In the following example, for some reasons, the input pointer entering the loop was casted to generic pointer. How can the backend get rid of the<br>
> addrspacecast and use local store in the loop?<br>
><br>
><br>
> <a href="http://for.body.lr.ph" target="_blank">for.body.lr.ph</a>: ; preds = %entry<br>
> %0 = addrspacecast i32 addrspace(3)* %in to i32 addrspace(4)*<br>
><br>
> br label %for.body<br>
><br>
> for.body: ; preds = %for.body, %<a href="http://for.body.lr.ph" target="_blank">for.body.lr.ph</a><br>
><br>
> %i.03 = phi i32 [ 0, %<a href="http://for.body.lr.ph" target="_blank">for.body.lr.ph</a> ], [ %inc, %for.body ]<br>
><br>
> %ptr.02 = phi i32 addrspace(4)* [ %0, %<a href="http://for.body.lr.ph" target="_blank">for.body.lr.ph</a> ], [ %add.ptr, %for.body ]<br>
><br>
> store i32 %i.03, i32 addrspace(4)* %ptr.02, align 4<br>
><br>
> %add.ptr = getelementptr inbounds i32 addrspace(4)* %ptr.02, i64 4<br>
><br>
> %inc = add i32 %i.03, 1<br>
><br>
> %exitcond = icmp eq i32 %inc, %numElems<br>
><br>
> br i1 %exitcond, label %for.end, label %for.body<br>
><br>
> for.end: ; preds = %<br>
><br>
><br>
><br>
> Thanks;<br>
><br>
> Changpeng<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
</blockquote></div><br>