[LLVMdev] getTripCount and pointers
Stefanus Du Toit
stefanus.dutoit at rapidmind.com
Fri Mar 20 15:19:38 PDT 2009
On 20-Mar-09, at 5:32 PM, Anthony Danalis wrote:
> I'm having some trouble with getTripCount() ... again. In particular
> it fails in the first of the following two examples, although it works
> for the second. By fails, I mean it returns NULL.
The main difference between the two cases below is that in case 1,
LLVM can't prove that "a" and "ip" don't alias (the fact that ip is a
"const int*" doesn't help, since that only tells the compiler to not
allow writing to ip's contents directly, not that the contents of ip
remain constant). In case 2, ip points to the local stack, and
therefore "a" can't possibly alias it.
So, in case 1, the write to a[k] inside the loop might actually modify
ip[2], and thus the loop bound is not loop-invariant.
Stefanus
> ---------- example 1 ----------
> test1(int *a, const int *ip) {
> int k;
>
> for (k = 0; k < ip[2]; ++k) {
> a[k] = (k+11)/(k+2);
> }
> }
>
> ---------- example 2 ----------
> test2(int *a) {
> int k, ip[4];
>
> vbar(ip, 4, 7);
>
> for (k = 0; k < ip[2]; ++k) {
> a[k] = (k+11)/(k+2);
> }
> }
>
>
> However, in both cases the trip count is the same and equally
> undecidable, since "vbar()" is an external function.
>
> Note that in each example that is the only code in the file and I am
> running my pass as:
> opt -O1 -licm -load ... -mypass < test.bc > /dev/null
>
> Any suggestions?
>
> thanks,
> Anthony
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
--
Stefanus Du Toit <stefanus.dutoit at rapidmind.com>
RapidMind Inc.
phone: +1 519 885 5455 x116 -- fax: +1 519 885 1463
More information about the llvm-dev
mailing list