[llvm-dev] Using Scalar Evolution to Identify Expressions Evolving in terms of Loop induction variables

Sharif, Hashim via llvm-dev llvm-dev at lists.llvm.org
Thu Nov 30 20:50:26 PST 2017


Hi,

I am using Scalar Evolution to extract access expressions (for load and store instructions) in terms of the loop induction variables.
I observe that the Scalar Evolution analysis is returning more expressions than I expect - including ones that are not defined
in terms of the loop induction variable. For instance in the following code:


for(unsigned long int bid = 0; bid < no_of_queries; bid++){

    unsigned long int currNode = no_of_nodes / 2;
    // process levels of the tree
    for(int i = 0; i < logN; i++){

      if((knodes[currNode].key) > keys[bid]){
        currNode = knodes[currNode].left_id;
      }
      else if ((knodes[currNode].key) < keys[bid]){
        currNode = knodes[currNode].right_id;
      }
      else{
         break;
      }
    }
}

I expect to extract a SCEV expression for the variable *keys*, however, using ScalarEvolution I also get an expression
(using SE->getSCEV) for *knodes*. Since *knodes* does not evolve in terms of the loop induction variable I wasn't expecting to receive a SCEV
expression for it. Can anyone please point out how SCEV expressions evolving in terms of the loop induction variable
can be distinguished from expressions that are not.

-Hashim
University of Illinois at Urbana-Champaign

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171201/77fee89a/attachment.html>


More information about the llvm-dev mailing list