Expression with 2 operations

antoine.eiche@ulp.u-strasbg.fr antoine.eiche@ulp.u-strasbg.fr
Sat May 5 14:36:00 GMT 2007


Quoting Tom Tromey <tromey@redhat.com>:

>>>>>> "Antoine" == Antoine Eiche <antoine.eiche@ulp.u-strasbg.fr> writes:
>
> Without more information I don't know how to answer your question.
> But I do have a question for you...
>
> Antoine> I must calculate the address of an element's array.
> Antoine> If the size of an element is one integer it's good.
> Antoine> I do like that:
> Antoine> new_rhs=fold_build2(PLUS_EXPR,TREE_TYPE(TREE_OPERAND(rhs,1)),
> Antoine>                        build1(ADDR_EXPR, build_pointer_type  
>  (TREE_TYPE
> Antoine> (array)),array),
> Antoine>                        index);
>
> Why not use ARRAY_REF here?  Then you don't have to worry about the
> size of an element of the array.
>
> Tom
>

I tested whit ARRAY_REF but I did not succeed to build the address  
(error when I test my pass).
Then, I try to calculate the address whit the index and the size of an  
element.
I specify that I just have the problem whit a static array.

This code is the code which is in the source file of a test program:

int main()
{
int a[10];
int i;
for(i=0;i<10;i++){
     a[i]=1;
}
}

I have succeed to transform the code like that:

int main(){
int a[10];
int i;
for(i=0;i<10;i++){
    foo(a + i);
    a[i]=1;
}
}

But I want to transform like that:

int main(){
int a[10];
int i;
for(i=0;i<10;i++){
    foo(a + i * sizeof(*a));
    a[i]=1;
}
}

I specify that I have not succeed to transform like that!:

int main(){
int a[10];
int i;
for(i=0;i<10;i++){
    foo(& a[i]);
    a[i]=1;
}
}

Why can I not do "foo(a + i * x)" then I can do "foo(i * x)" ou "foo(a  
+ i)" ?*
How can I do that ?

Thanks in advance.






More information about the Gcc mailing list