[LLVMdev] Get the loop trip count variable

Zheng Wang jason.wangz at gmail.com
Tue Apr 6 09:47:23 PDT 2010


Thanks a lot for your guys' help!!!

I guess once I am able to get *V* (which probably is a pointer to a
Value object), then, I can instrument some code at the IR level to
dump V. As long as I maintain V at this pass stage, I should be able
to dump the loop trip count. This is true, isn't it?

Basically, what I am going to do is to add a function call before the
loop body, such as:

dumpInfo(FILE_NAME, LINE_NUMBER, VALUE_TYPE, Value)
...
for (int i=0; i<num; i++)

of course, this may have some side effects. If the trip count is a
function call, and I need to rewrite the loop header to avoid calling
the function twice. For example, if the loop header is:

for (int i=0; i<foo(a,b,c); i++)

then I should rewrite it as:

tmp_var = foo(a,b,c);
dumpInfo(...)

for (int i=0; i<tmp_var; i++)
{
   ...
    tmp_var=foo(a,b,c);
}

This looks quite complicated!

Does anyone has any ideal about how easy to insert some basic blocks
and to rewrite the loop header in LLVM?

Cheers,
Zheng


On 6 April 2010 17:27, Zakk <zakk0610 at gmail.com> wrote:
> Hi, you should run some loop transformation passes(loop rotate, loop
> simplify, -indvar), and then get TripCount.
> loopinfo.h
> /// getTripCount - Return a loop-invariant LLVM value indicating the number
> of
> /// times the loop will be executed. Note that this means that the backedge
> /// of the loop executes N-1 times. If the trip-count cannot be determined,
> /// this returns null.
>
> inline Value *getTripCount() const {
> Canonical loops will end with a 'cmp ne I, V', where I is the incremented
> canonical induction variable and V is the trip count of the loop.
>
> 2010/4/6 Zheng Wang <jason.wangz at gmail.com>
>>
>> Hello,
>>
>> I am wondering whether I can get the variable name of loop trip count in
>> LLVM?
>>
>> For example,
>>
>> int NUM;
>>
>> NUM=atoi(argv[i]);
>>
>> for (int i=0; i<NUM; i++)
>> {
>>    ...
>> }
>>
>> How can I get the corresponding variable name for "NUM"? Then, I can
>> instrument something in the source code to record the loop trip count
>> for a given input data set.
>>
>> BasicBlock* b = L->getHeader();
>>
>> returns the basicblock of the loop header, but I don't know how to
>> extract "NUM" from basicblock b.
>>
>> Cheers,
>> Zheng
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
> --
> Best regards,
> Kuan-Hsu
>
> P
>



-- 
Best regards,

WANG Zheng




More information about the llvm-dev mailing list