<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Thu, May 12, 2016 at 4:57 AM PeiLIU via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Now, I am get the .ll file, some code just like this in the below.<div><br></div><div><div>  %call89 = call noalias i8* @malloc(i64 %add88) #5, !dbg !374</div><div><br></div><div>  %71 = bitcast i8* %call89 to i32*, !dbg !374</div><div><br></div><div>  store i32* %71, i32** %buffer2, align 8, !dbg !374</div></div><div><br></div><div>You can see that the first operand of store is a temporary variables %71.</div><div><br></div><div>Q1.  the StoreInst->getOperand(0)->getName().str() return the string NULL(""),</div><div><br></div><div>how does it happened,</div></div></blockquote><div><br></div><div>Unnamed instructions get numbered automatically when writing IR.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div> can I get that "71" name.</div></div></blockquote><div><br></div><div>You can look at how the AsmPrinter computes the number, but in general "no". You can however force name everything with a pass like the meta renamer.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>Q2. I want to get the real operand that is call89 which returned by function call</div><div><br></div><div>malloc. How can I get the original operand call89? I know I can get that from the</div><div><br></div><div>previous instruction bitcast, I can get it from the previous instruction but it only work</div><div><br></div><div>in this circumstance the bitcast instruction, if the previous instruction is changed, how</div><div><br></div><div>I get the variable name in efficiency. Is there a efficiency and elegance way to get the</div><div><br></div><div>origin operand avoid temporary variables like 71(just decimal numbers).</div></div></blockquote><div><br></div><div>You can use the 'stripPointerCasts()' method on the operand's base class (Value) to walk back through pointer casts like this:</div><div><a href="http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html#a38ea12c04523d63adda732b9c5d6da0a">http://llvm.org/docs/doxygen/html/classllvm_1_1Value.html#a38ea12c04523d63adda732b9c5d6da0a</a><br></div><div><br></div><div>-Chandler</div></div></div>