Bernd Schmidt wrote:
> On 06/15/2010 12:06 AM, Ian Lance Taylor wrote:
> > Well, as you know, subregs have two meanings which look similar but
> > are in fact entirely different.  It's valid to set subregs of the same
> > pseudo in parallel if the subregs represent different hard registers.
> > It's not valid if the subregs represent different pieces of the same
> > hard register.
> 
> Are you aware of any examples of this in the compiler?  The explanation
> is of course plausible, but do we know that we handle this correctly
> everywhere?

I ran into problems trying to do this on s390; that's why e.g. the
divmod patterns now look like

  [(set (match_operand:TI 0 "register_operand" "=d,d")
        (ior:TI
          (ashift:TI
            (zero_extend:TI
              (mod:DI (match_operand:DI 1 "register_operand" "0,0")
                      (match_operand:DI 2 "general_operand" "d,RT")))
            (const_int 64))
          (zero_extend:TI (div:DI (match_dup 1) (match_dup 2)))))]

instead of a parallel set of two subregs.  In particular, there seemed
to be problems with dataflow not recognizing a parallel set of two
subregs as actually fully setting the whole register ...

But of course, that was a long time ago, maybe the new dataflow
mechanism has fixed this now.

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  ulrich.weig...@de.ibm.com

Reply via email to