Index: ira-color.c =================================================================== --- ira-color.c (revision 214576) +++ ira-color.c (working copy) @@ -3239,9 +3239,10 @@ ira_assert (ALLOCNO_CLASS (subloop_allocno) == rclass); ira_assert (bitmap_bit_p (subloop_node->all_allocnos, ALLOCNO_NUM (subloop_allocno))); - if ((flag_ira_region == IRA_REGION_MIXED) - && (loop_tree_node->reg_pressure[pclass] - <= ira_class_hard_regs_num[pclass])) + if ((flag_ira_region == IRA_REGION_MIXED + && (loop_tree_node->reg_pressure[pclass] + <= ira_class_hard_regs_num[pclass])) + || regno == (int) REGNO (pic_offset_table_rtx)) { if (! ALLOCNO_ASSIGNED_P (subloop_allocno)) { Index: ira-emit.c =================================================================== --- ira-emit.c (revision 214576) +++ ira-emit.c (working copy) @@ -620,7 +620,8 @@ /* don't create copies because reload can spill an allocno set by copy although the allocno will not get memory slot. */ - || ira_equiv_no_lvalue_p (regno))) + || ira_equiv_no_lvalue_p (regno) + || ALLOCNO_REGNO (allocno) == REGNO (pic_offset_table_rtx))) continue; original_reg = allocno_emit_reg (allocno); if (parent_allocno == NULL