📄 reload.diff
字号:
===================================================================RCS file: /cvs/gcc/gcc/gcc/reload.c,vretrieving revision 1.268retrieving revision 1.268.2.1diff -u -r1.268 -r1.268.2.1--- gcc/gcc/reload.c 2005/02/24 22:06:06 1.268+++ gcc/gcc/reload.c 2005/04/22 17:30:15 1.268.2.1@@ -1520,7 +1520,7 @@ But if there is no spilling in this block, that is OK. An explicitly used hard reg cannot be a spill reg. */ - if (rld[i].reg_rtx == 0 && in != 0)+ if (rld[i].reg_rtx == 0 && in != 0 && hard_regs_live_known) { rtx note; int regno;@@ -1534,6 +1534,11 @@ && REG_P (XEXP (note, 0)) && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER && reg_mentioned_p (XEXP (note, 0), in)+ /* Check that we don't use a hardreg for an uninitialized+ pseudo. See also find_dummy_reload(). */+ && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER+ || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,+ ORIGINAL_REGNO (XEXP (note, 0)))) && ! refers_to_regno_for_reload_p (regno, (regno + hard_regno_nregs[regno]@@ -1997,7 +2002,17 @@ is a subreg, and in that case, out has a real mode. */ (GET_MODE (out) != VOIDmode- ? GET_MODE (out) : outmode)))+ ? GET_MODE (out) : outmode))+ /* But only do all this if we can be sure, that this input+ operand doesn't correspond with an uninitialized pseudoreg.+ global can assign some hardreg to it, which is the same as+ a different pseudo also currently live (as it can ignore the+ conflict). So we never must introduce writes to such hardregs,+ as they would clobber the other live pseudo using the same.+ See also PR20973. */+ && (ORIGINAL_REGNO (in) < FIRST_PSEUDO_REGISTER+ || ! bitmap_bit_p (ENTRY_BLOCK_PTR->global_live_at_end,+ ORIGINAL_REGNO (in)))) { unsigned int regno = REGNO (in) + in_offset; unsigned int nwords = hard_regno_nregs[regno][inmode];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -