Hi Richard,

I addressed all your comments but the ones below.

> From: Richard Biener [mailto:richard.guent...@gmail.com]
> 
> +                 /* Convert the result of load if necessary.  */
> +                 if (!useless_type_conversion_p (TREE_TYPE (tgt),
> +                                                 TREE_TYPE (val_tmp)))
> +                   {
> 
> why's that?  Shouldn't the load already be emitted of the correct type?

The size would be correct and I wasn't sure if the sign matters. I've read
useless_type_conversion_p since and it seems I was overly worried.

> 
> You seem to replace the stmt computing the target value by directly
> loading into the target.  IMHO that's premature optimization and it
> would be easier to just replace its rhs (that way the stmt still has
> a proper location for example).

Right. I merely followed what was already done and indeed the whole
statement is replaced. I don't understand why you say it's a premature
optimization. Since the left hand side is kept, isn't it equivalent (lost of
location excluded)?

I'll change to avoid such a replacement.

> 
> And now that I am looking and the patch series again - I think
> you need to verify that you load the correct value.  Consider
> 
> int foo (char *x, char *y)
> {
>    char c0 = x[0];
>    char c1 = x[1];
>    *y = 1;
>    char c2 = x[2];
>    char c3 = x[3];
>    return c0 | c1 << 8 | c2 << 16 | c3 << 24;
> }
> 
> where do you insert the single load?  The easiest way out
> (without doing alias walks and whatnot) is to verify that all
> loads have the same gimple_vuse () attached (also please
> set that gimple_vuse () on the load you build - that avoids
> costly computation of virtual operands).

Nice catch. I'll do that.

Thanks for you answer and don't worry for the delay: I have other things
to keep me busy and stage1 is not closed yet.

Best regards,

Thomas


Reply via email to