[LLVMdev] How to unroll loop with non-constant boundary
Николай Лихогруд
n.lihogrud at gmail.com
Mon Feb 27 08:13:26 PST 2012
Dear LLVM,
Consider two loops with one interation -
First with constant lower bound, second with usual non-constant lower
bound:
int main(int argc, char ** argv)
{
int numOfIterations= 1;
int stride=1;
int lowerBound = 1000; - 1st | int lowerBound = argc; - 2nd
int upperBound = lowerBound + (numOfIterations - 1)*stride;
int i = lowerBound;
int s = 0;
while(i <= upperBound)
{
s += i;
i++;
}
return s;
}
After the application of -O3 optimization:
The first loop was unrolled:
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind uwtable
readnone {
entry:
ret i32 1000
}
But the second was not:
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind uwtable
readnone {
entry:
br label %"3"
"3": ; preds = %entry,
%"3"
%0 = phi i32 [ 0, %entry ], [ %2, %"3" ]
%1 = phi i32 [ %argc, %entry ], [ %3, %"3" ]
%2 = add i32 %0, %1
%3 = add i32 %1, 1
%4 = icmp sgt i32 %3, %argc
br i1 %4, label %"5", label %"3"
"5": ; preds = %"3"
ret i32 %2
}
The questions:
Is it possible to unroll loop with non-constant boundary using
standard LLVM 3.1 facilities, and, if it is, how I can do that?
Best regards,
Nicolas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120227/930d1070/attachment.html>
More information about the llvm-dev
mailing list