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