[prev in list] [next in list] [prev in thread] [next in thread]
List: llvm-dev
Subject: Re: [LLVMdev] A question about induction variables
From: Chris Lattner <sabre () nondot ! org>
Date: 2004-03-31 10:05:02
Message-ID: Pine.LNX.4.44.0403311005001.11563-100000 () nondot ! org
[Download RAW message or body]
On Wed, 31 Mar 2004, Vladimir Prus wrote:
> I've just downloaded the latest release of LLVM, and playing with the
> following simple example:
>
> int main()
> {
> int r(0);
> for (int i = 0; i < 100; ++i)
> r += i;
> ;
> return r;
> }
When I compiled it, I got the following LLVM code:
int %main() {
entry:
call void %__main( )
br label %no_exit
no_exit: ; preds = %entry, %no_exit
%i.0.0 = phi int [ 0, %entry ], [ %inc, %no_exit ]
%r.0.0 = phi int [ 0, %entry ], [ %tmp.4, %no_exit ]
%tmp.4 = add int %r.0.0, %i.0.0 ; <int> [#uses=2]
%inc = add int %i.0.0, 1 ; <int> [#uses=2]
%tmp.1 = setgt int %inc, 99 ; <bool> [#uses=1]
br bool %tmp.1, label %loopexit, label %no_exit
loopexit: ; preds = %no_exit
ret int %tmp.4
}
> I compile it and then run:
> analyze -indvars x.bc
> which prints:
> Printing analysis 'Induction Variable Analysis' for function 'main':
When I did this, I got the following:
$ analyze -indvars t.ll
Printing analysis 'Induction Variable Analysis' for function 'main':
Canonical Induction Variable: int %i.0.0:
%i.0.0 = phi int [ 0, %entry ], [ %inc, %no_exit ] ; <int> [#uses=2]
Start = int 0 Step = int 1
... so it seems to work. Are you sure that your x.bc file contains the
correct LLVM code? This example certainly should work.
> and nothing else. It is a bit strange -- since 'i' is clearly an induction
> variable and the resulting loop in assembler should have some induction
> variable too. Does this mean that induction variable analysis is not fully
> implemented, or there's some error on my part?
The induction variable analysis in 1.2 is not the most powerful, but it
should certainly catch this case!
> If I don't use the 'r' variable, but just loop with empty body, the entire
> loop seems to be optimized out, but in this example the loop is still there
> in assembler.
Hrm, I'm really not sure. It works for me :)
-Chris
--
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic