Induction Variable Elements in Compilers

Estudies4you
Induction Variable Elements
A variable is said to be an induction variable, if its value changes by a fixed quantity on each iteration of a loop
Consider the following TAC,
(1)    mul = 0
(2)    i = 1
(3)    t2 = addr(a) – 4
(4)    t4 = addr(b) -4
(5)    t1 = 5 * i
(6)    t3 = t2[t1]
(7)    t5 = t4[t1]
(8)    t6 = t3 * t5
(9)    mul = mul + t6
(10)i = i + 1
(11)if, I <= 20 goto (5)    
Here, two induction variables i  and t1 are present. A thumb rule in elimination of induction variable is when there are two or more induction variables in a loop we can get rid of all but one
in the TAC, I gets incremented by 1 and t1 by 4 in each iteration of the loop. Now, removing i from the loop yields the following TAC
(1)    mul = 0
(2)    i = 1
(3)    t2 = addr(a) – 4
(4)    t4 = addr(b) – 4
(5)    t1 = 0
(6)    t1 = t1 + 4
(7)    t3 = t2[t1]
(8)    t5 = t4[t1]
(9)    t6 = t3 * t5
(10)mul = mul + t6
(11)if, t1 < = 76 goto (6)
As loop iterates until i <= 20 it becomes t1 <= 76 as shown above
Algorithm for Identifying Induction Variables
Input: A loop L consisting of 3 address instructions, use-Definition Chain, and loop-invariant information.
Output: A set of induction variables, each with an associated triple.
Algorithm
For each statement in L that matches the pattern i = i + c or i = i – c create the triple (i, 0, 1)
Derived induction variables: For each statement of L
                               If the statement is of the form k = j + c1 or k = j * c2
                               j is an induction variable with the triple (x, a, b)
                               c1 and c2 are loop invariant
                               k is only defined once in the loop
if j is a derived induction variable belonging to the family of i then
                               The only def of j that reaches k must be in L
                               And no def of i must occur on any path between the definition of j and k
Then create the triple (x, a + c1, b) for k =j + c1 or (x, a*c2, b*c2) for k = j*c2
                               
To Top