Similar to the if-else statement, loops can also be emitted using LLVM API's, with slight modification of the code. For example, we want to have LLVM IR for the following Loops:
for(i=1; i< b; i++) {body}
The loop has induction variable i
, which has some initial value that updates after each iteration. The induction variable is updated after each iteration by a step value that is 1
in the preceding example. Then there is a loop ending condition. In the preceding example, 'i=1
' is the initial value, 'i<b
' is the end condition of the loop, and 'i++
' is the step value by which the induction variable 'i
' is incremented after every iteration of the loop.
Before writing a function to create a loop, some Value
and BasicBlock
need to be pushed into a list, as follows:
Function::arg_iterator AI = fooFunc->arg_begin(); Value *Arg1 = AI++; Value *Arg2 = AI; Value *constant = Builder.getInt32(16); Value *val = createArith(Builder, Arg1, constant); ValList VL...