------- Comment #12 from vmakarov at redhat dot com  2008-08-29 15:55 -------
Here is the analysis of regressions on pr36222 and pr36246.  PR36222 contains
the following code:
p64:V4SI=vec_concat (p66:V2SI, p65:V2SI) dead p66 and p65
xmm0:V2DI=subreg:V2DI (p64:V4SI)

IRA allocates p65, p66, and p64 in this order.  p65 gets xmm0, p66 gets xmm1,
and p64 gets xmm0.  Reload generates additional move insn because p66 and p64
should be the same operand according to the 1st insn constraints.

IRA uses copies to propagate preferences.  p66 and pc64, p66 and p64 connected
by copies with same frequencies as dying pseudos.  IRA did not create copy
connecting p66 and p64 as operands should be in the same register according to
the insn constraints because IRA does not create copies for allocnos with
different modes.

Preference of xmm0 was not propagated to p64 because IRA does not create copies
for subregs.

Another pitfall of IRA, it propagates preferences only from allocnos *directly*
connected by copies.

The patch solving the problem will be sent soon.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37243

Reply via email to