Hello:<br><div class="gmail_quote"><br>We are developer-engineers of Appentra Solutions. We are working with LLVM-3.1 and we have a problem. We think we have found a bug on CallGraphNode. This is the code we have executed:<div>


<p>
</p><p>







</p><p><span>virtual</span> <span>void</span> getAnalysisUsage( llvm::<span>AnalysisUsage</span> & info ) <span>const</span> {</p>
<p><span></span><span></span>   info.addRequired<<span>CallGraph</span>>();</p><p>   ...</p>
<p><span>   </span>}</p><p>...</p><p>







</p><p><span>virtual</span> <span>bool</span> runOnModule( <span>Module</span> & M )</p>
<p><span>   </span>{</p><p>...</p><p></p><p></p><p>CallGraph<span> &CG = </span><span>this</span><span>-></span><span>getAnalysis</span><span><</span>CallGraph<span>>();</span></p>
<p></p><p>CallGraphNode<span> *cgn;</span></p><p><span><span>unsigned</span> nref;<br></span></p>
<p><span>   </span><span>       </span><span>for</span>(<span>CallGraph</span>::<span>const_iterator</span> I=CG.begin(),E=CG.end();I!=E;I++)</p>
<p><span>   </span><span>       </span>{</p>
<p><span></span><span></span><span></span>    cgn=I-><span>second</span>;</p>
<p><span></span><span></span><span></span><span>    if</span>((cgn)&&(cgn->getFunction()))</p>
<p><span></span><span></span><span></span>    {</p>
<p><span></span><span></span><span></span><span></span><span>          </span>nref=cgn->getNumReferences();</p>
<p><span></span><span></span><span></span><span></span>          llvm::<span>dbgs</span>()<<<span>"uses:"</span><<nref<<<span>"\n"</span>;</p>

<p><span></span><span></span><span></span><span></span>          cgn-><span>dump</span>();</p>
<p><span></span><span></span><span></span>    }</p>
<p><span>   </span><span>       </span>}</p><p>...</p><p>}</p><p>In a simple program with only one function (Main), this is the output:</p><p></p><p>uses:0</p>
<p>Call graph node for function: 'main'<<0x7f928340c760>>  #uses=1</p><p><br>We have been searching in llvm files and dump function calls getNumReferences() (which is in Callgraph.h). And it is assumed that the call cgn->getNumReferences() references to the same function. Why are we getting different values? Dump shows uses=1, and cgn->getNumReferences() shows uses=0;</p>



<p>We are writing a Module pass as you can see in the previous code. We have this pass registered as:</p><p>







</p><p><span>char</span><span> </span>PARALLWARE::ID<span> = 0;</span></p>
<p><span>static</span><span> </span><span>RegisterPass</span><span><</span><span>PARALLWARE</span><span>> X( </span>"<span>parallware</span>"<span>,</span>"run <span>Parallware</span> source to source <span>autoparallel</span> compiler"<span>);</span></p>



<p><span><br></span></p><p><span>Is this a bug or we are making a mistake?</span></p><p><span><br></span></p><p><span>Thank you for your time. <br>We wait for your reply. Please, contact us at this e-mail: <a href="mailto:eugenio.novas@udc.es" target="_blank">eugenio.novas@udc.es</a>.</span></p>



<p><span>Best regards.</span></p><p></p><p><br></p><p><br></p><p></p><p><br></p><p><br></p><p><br></p><p><br></p></div>
</div><br>