On Tue, May 10, 2016 at 05:05:06PM +0200, Bernd Schmidt wrote:
> On 05/10/2016 03:06 PM, Dominik Vogt wrote:
> >+              int cost_of_and;
> >+              int cost_of_zero_ext;
> >+
> >+              cost_of_and = rtx_cost (x, mode, in_code, 1, speed_p);
> >+              cost_of_zero_ext = rtx_cost (temp, mode, in_code, 1, speed_p);
> >+              if (cost_of_zero_ext <= cost_of_and)
> 
> Earlier in the discussion you mentioned the intention to remove
> these costs. Nothing else in the function does cost calculations -
> maybe you can try placing a gcc_unreachable into the case where the
> costs would prevent the transformation to see if it ever triggers.

You mean to try it out locally or as part of the patch?

> >+/* Test whether an AND mask or'ed with the know zero bits that equals a mode
> >+   mask is a candidate for zero extendion.  */
> >+
> >+/* Note: This test requires that char, int and long have different sizes 
> >and the
> >+   target has a way to do 32 -> 64 bit zero extension other than AND.  
> >Targets
> >+   that fail the test because they do not satisfy these preconditions can 
> >skip
> >+   it.  */
> 
> Hmm, maybe place copies into a few gcc.target subdirectories
> instead? Or add a whitelist of targets (x86, power, aarch64 maybe)?

That's fine with me, but someone needs to find out what targets to
put on the whitelist.  I've only tested s390x and x86_64 so far.

> >+/* { dg-do compile { target lp64 } } */
> 
> I suspect this should be
> 
> /* { dg-do compile } */
> /* { dg-require-effective-target lp64 } */

Er, yes.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany

Reply via email to