<div dir="ltr"><div>Hi,</div><div><br></div>If the special handling in the meg2reg pass is to look for lifetime intrinsics, shouldn't it cast to <IntrisicInst> and then use getInstrinsicID to check for lifetime_start and lifetime_end ?<div><br></div><div>The thing that I don't understand is the following piece of code, which finds all the users and cast it to <Instruction> then eraseFromParent(). How can this guarantee that it only erase lifetime instrinsics ?</div><div><br></div><div>-guoqing</div><div><br></div><div><div>      // The only users of this bitcast/GEP instruction are lifetime intrinsics.</div><div>      // Follow the use/def chain to erase them now instead of leaving it for</div><div>      // dead code elimination later.</div><div>      for (auto UUI = I->user_begin(), UUE = I->user_end(); UUI != UUE;) {</div><div>        Instruction *Inst = cast<Instruction>(*UUI);</div><div>        ++UUI;</div><div>        Inst->eraseFromParent();</div><div>      }   </div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 30, 2015 at 1:55 PM, Hal Finkel <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">----- Original Message -----<br>
> From: "guoqing zhang" <<a href="mailto:gqzhang81@gmail.com">gqzhang81@gmail.com</a>><br>
> To: <a href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a><br>
> Sent: Friday, January 30, 2015 4:29:16 AM<br>
> Subject: [LLVMdev] About user of bitcast/GEP instruction<br>
><br>
> Hi,<br>
><br>
><br>
> In PromoteMemoryToRegister.cpp, it seems to rely on the fact that the<br>
> only users of bitcast/GEP instruction are lifetime intrinsics<br>
> (llvm.lifetime.start/end).<br>
<br>
</span>You're misreading that code. There is special handling is that pass for looking through those instructions to find lifetime intrinsics, but that's all.<br>
<span class=""><br>
> I did some searching in llvm/test folder,<br>
> it seems to be true.<br>
><br>
<br>
</span>bitcasts and GEPs are general-purpose instructions. GEPs are most often used by loads/stores. Look at test/Transforms/LoopReroll/basic.ll for an example with lots of them. test/Analysis/BasicAA/gep-alias.ll is another place to look.<br>
<span class=""><br>
><br>
> However, by reading LLVM IR manual, I don't see any restriction<br>
> stated on the possible user of bitcast/GEP instruction. So my<br>
> question is who impose the restriction ? Is it Clang ?<br>
<br>
</span>There is definitely no such restriction.<br>
<br>
 -Hal<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
><br>
> Regards<br>
> -guoqing<br>
> _______________________________________________<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>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Hal Finkel<br>
Assistant Computational Scientist<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
</font></span></blockquote></div><br></div>