Andreas Schwab wrote:
Vladimir Makarov <vmakarov@redhat.com> writes:
Andreas Schwab wrote:
Vladimir Makarov <vmakarov@redhat.com> writes:
Index: ira-conflicts.c
===================================================================
--- ira-conflicts.c (revision 140014)
+++ ira-conflicts.c (working copy)
@@ -366,6 +366,9 @@ process_regs_for_copy (rtx reg1, rtx reg
}
else
return false;
+ if (hard_regno < 0)
+ /* Can not be tied. */
+ return false;
IMHO this is just papering over the bug. Please explain the
meaning of
the expressions for hard_rego. What is the significance of an
unrelated
register wrt. this insn for the function?
I don't think that is just papering of the bug.
(insn 22 17 28 4 /cvs/gcc/libgcc/../gcc/libgcc2.c:169 (set (reg/i:SI
0 %d0)
(subreg:SI (reg/v:DI 30 [ w ]) 4)) 36 {*movsi_m68k2}
(expr_list:REG_DEAD (reg/v:DI 30 [ w ])
(nil)))
Hard_regno here means hard register preference for pseudo#30 to
remove the
insn. It is not possible in this case. It would be possible if the
destination register would be >= 1.
Thanks for the explanation. Isn't it also possible that hard_regno
becomes too big (>= FIRST_PSEUDO_REGISTER)?
Yes, you are right. I missed this. It should be
2008-09-08 Vladimir Makarov <vmakarov@redhat.com>
* ira-conflicts.c (process_regs_for_copy): Check that the hard
regno is in the right range.