Skip to content
  • Chris Lattner's avatar
    Change the canonical induction variable that we insert. · 0cec5cb9
    Chris Lattner authored
    Instead of producing code like this:
    
    Loop:
      X = phi 0, X2
      ...
    
      X2 = X + 1
      if (X != N-1) goto Loop
    
    We now generate code that looks like this:
    
    Loop:
      X = phi 0, X2
      ...
    
      X2 = X + 1
      if (X2 != N) goto Loop
    
    This has two big advantages:
      1. The trip count of the loop is now explicit in the code, allowing
         the direct implementation of Loop::getTripCount()
      2. This reduces register pressure in the loop, and allows X and X2 to be
         put into the same register.
    
    As a consequence of the second point, the code we generate for loops went
    from:
    
    .LBB2:  # no_exit.1
    	...
            mov %EDI, %ESI
            inc %EDI
            cmp %ESI, 2
            mov %ESI, %EDI
            jne .LBB2 # PC rel: no_exit.1
    
    To:
    
    .LBB2:  # no_exit.1
    	...
            inc %ESI
            cmp %ESI, 3
            jne .LBB2 # PC rel: no_exit.1
    
    ... which has two fewer moves, and uses one less register.
    
    llvm-svn: 12961
    0cec5cb9
Loading