hi, The loopinfo pass failed to recognize the Tripcount of a simple program constructed by me, can you help me to figure out why this happened? Thanks. The C program and corresponding .ll files are shown below. I used llvm1.7 to develop my own pass, and want to use the loop information. -Wei Test.c: #include "stdio.h" #define N 40 void func1() { int a[N]; int i,j; for (i=0; i<N; i++) { if (i==0) a[i] = i*N; else a[i] = i*i; } } Test.ll: void %func1() { entry: %a = alloca [40 x int] ; <[40 x int]*> [#uses=1] br label %no_exit no_exit: ; preds = %else, %then, %entry %i.0.0 = phi int [ 0, %entry ], [ %inc9, %then ], [ %inc, %else ] ; <int> [#uses=7] %tmp.4 = seteq int %i.0.0, 0 ; <bool> [#uses=1] %tmp.7 = getelementptr [40 x int]* %a, int 0, int %i.0.0 ; <int*> [#uses=2] br bool %tmp.4, label %then, label %else then: ; preds = %no_exit %tmp.9 = mul int %i.0.0, 40 ; <int> [#uses=1] store int %tmp.9, int* %tmp.7 %inc9 = add int %i.0.0, 1 ; <int> [#uses=2] %tmp.112 = setlt int %inc9, 40 ; <bool> [#uses=1] br bool %tmp.112, label %no_exit, label %return else: ; preds = %no_exit %tmp.14 = mul int %i.0.0, %i.0.0 ; <int> [#uses=1] store int %tmp.14, int* %tmp.7 %inc = add int %i.0.0, 1 ; <int> [#uses=2] %tmp.1 = setlt int %inc, 40 ; <bool> [#uses=1] br bool %tmp.1, label %no_exit, label %return return: ; preds = %else, %then ret void } -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20060615/9c68e252/attachment.html>
On Thu, 15 Jun 2006, Wei Jiang wrote:> hi, > The loopinfo pass failed to recognize the Tripcount of a simple program constructed by me, can you help me to figure out why this happened? Thanks. > The C program and corresponding .ll files are shown below. I used llvm1.7 to develop my own pass, and want to use the loop information.What passes are you running before your pass? trip count information is generally only available after the "indvars" pass runs. -Chris> Test.c: > #include "stdio.h" > #define N 40 > void func1() { > int a[N]; > int i,j; > for (i=0; i<N; i++) { > if (i==0) > a[i] = i*N; > else > a[i] = i*i; > } > } > > Test.ll: > void %func1() { > entry: > %a = alloca [40 x int] ; <[40 x int]*> [#uses=1] > br label %no_exit > > no_exit: ; preds = %else, %then, %entry > %i.0.0 = phi int [ 0, %entry ], [ %inc9, %then ], [ %inc, %else ] ; <int> [#uses=7] > %tmp.4 = seteq int %i.0.0, 0 ; <bool> [#uses=1] > %tmp.7 = getelementptr [40 x int]* %a, int 0, int %i.0.0 ; <int*> [#uses=2] > br bool %tmp.4, label %then, label %else > > then: ; preds = %no_exit > %tmp.9 = mul int %i.0.0, 40 ; <int> [#uses=1] > store int %tmp.9, int* %tmp.7 > %inc9 = add int %i.0.0, 1 ; <int> [#uses=2] > %tmp.112 = setlt int %inc9, 40 ; <bool> [#uses=1] > br bool %tmp.112, label %no_exit, label %return > > else: ; preds = %no_exit > %tmp.14 = mul int %i.0.0, %i.0.0 ; <int> [#uses=1] > store int %tmp.14, int* %tmp.7 > %inc = add int %i.0.0, 1 ; <int> [#uses=2] > %tmp.1 = setlt int %inc, 40 ; <bool> [#uses=1] > br bool %tmp.1, label %no_exit, label %return > > return: ; preds = %else, %then > ret void > } >-Chris -- http://nondot.org/sabre/ http://llvm.org/
I did run the indvars pass, but it seemed that it didn't work. -Wei ----- Original Message ----- From: "Chris Lattner" <sabre at nondot.org> To: "LLVM Developers Mailing List" <llvmdev at cs.uiuc.edu> Sent: Thursday, June 15, 2006 3:35 PM Subject: Re: [LLVMdev] problem with loopinfo> On Thu, 15 Jun 2006, Wei Jiang wrote: >> hi, >> The loopinfo pass failed to recognize the Tripcount of a simple >> program constructed by me, can you help me to figure out why this >> happened? Thanks. >> The C program and corresponding .ll files are shown below. I used >> llvm1.7 to develop my own pass, and want to use the loop information. > > What passes are you running before your pass? trip count information is > generally only available after the "indvars" pass runs. > > -Chris > >> Test.c: >> #include "stdio.h" >> #define N 40 >> void func1() { >> int a[N]; >> int i,j; >> for (i=0; i<N; i++) { >> if (i==0) >> a[i] = i*N; >> else >> a[i] = i*i; >> } >> } >> >> Test.ll: >> void %func1() { >> entry: >> %a = alloca [40 x int] ; <[40 x int]*> [#uses=1] >> br label %no_exit >> >> no_exit: ; preds = %else, %then, %entry >> %i.0.0 = phi int [ 0, %entry ], [ %inc9, %then ], [ %inc, %else ] >> ; <int> [#uses=7] >> %tmp.4 = seteq int %i.0.0, 0 ; <bool> [#uses=1] >> %tmp.7 = getelementptr [40 x int]* %a, int 0, int %i.0.0 >> ; <int*> [#uses=2] >> br bool %tmp.4, label %then, label %else >> >> then: ; preds = %no_exit >> %tmp.9 = mul int %i.0.0, 40 ; <int> [#uses=1] >> store int %tmp.9, int* %tmp.7 >> %inc9 = add int %i.0.0, 1 ; <int> [#uses=2] >> %tmp.112 = setlt int %inc9, 40 ; <bool> [#uses=1] >> br bool %tmp.112, label %no_exit, label %return >> >> else: ; preds = %no_exit >> %tmp.14 = mul int %i.0.0, %i.0.0 ; <int> [#uses=1] >> store int %tmp.14, int* %tmp.7 >> %inc = add int %i.0.0, 1 ; <int> [#uses=2] >> %tmp.1 = setlt int %inc, 40 ; <bool> [#uses=1] >> br bool %tmp.1, label %no_exit, label %return >> >> return: ; preds = %else, %then >> ret void >> } >> > > -Chris > > -- > http://nondot.org/sabre/ > http://llvm.org/ > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >