<div dir="ltr">> I tried methods related to point 1) suggested by you,<div>> but I still have problems of finding dependencies.</div><div>> What exactly I want to do:<br>><br>> I have a chain like : Alloca -> Load(1) -> ... -> Computation</div>
<div>> where the variable might be changed -> Store(new_var) -> ... -> Load(n)<br><br></div><div style>Your example is not very clear.</div><div style>I don't understand what's involved in the "chain".</div>
<div><br></div><div>> Computation where the variable is changed = means that :</div><div>> I might have Alloca(a),  c=a+7000*b[32], Load(c)...ICMP(c, ...)<br>><br>> I want to get the corresponding Alloca from every Load</div>
<div>> (corresponding from the point of view of the variable used,</div><div>> meaning that the Load is using a variables based/dependent on the Alloca or Allocas).<br><br>I don't know any magical LLVM way to get all the answers.</div>
<div>My approach would be to do some ordinary data-flow analysis,</div><div>chasing back along def-use chains to find instructions that define</div><div>the registers used in the load, recursively, to the beginning.</div>
<div style>If you hit an alloca, stop. </div><div><br>> I tried to use methods from DependencyAnalysis class.<br><br>DependenceAnalysis. Seems like a bad start.</div><div>Dependence analysis is used to determine how two</div>
<div>array references may interact. Nothing to do with alloca.</div><div><br>> 1. if (DA.depends(loadInstrArray[i],loadInstrArray[j],false)) - no result</div><div><br></div><div style>I can't say if this is correct or not without a more complete example.</div>
<div style>For instance, in the code</div><div style><br></div><div style>    for (i = 0; i < n; i += 2) {</div><div style>        loadInstr[i] = 0;</div><div style>        j = i + 1;</div><div style>        loadInstr[j] = 1;</div>
<div style>    }</div><div style><br></div><div style>there is no dependence between the two stores to loadInstr.</div><div style>The two stores write entirely disjoint areas of memory.</div><div style>On the other hand, if we have</div>
<div style><br></div><div style><div>    for (i = 0; i < n; i++) {</div><div>        loadInstr[i] = 0;</div><div>        j = 2*i;</div><div>        loadInstr[j] = 1;</div><div>    }</div><div><br></div><div style>we expect to find a more interesting pattern.</div>
<div style><br></div><div style>Preston</div><div style><br></div></div></div>