re PR target/32163 (Compiling with stack protector causes reigster spill failure)

PR target/32163
	Backport from mainline.
	* config/sh/sh.md (symGOT_load): Don't schedule insns when
	the symbol is generated with the stack protector.

From-SVN: r125558
This commit is contained in:
Kaz Kojima
2007-06-08 05:53:57 +00:00
parent 1069936395
commit fe7b0e375b
2 changed files with 21 additions and 0 deletions

View File

@@ -1,3 +1,10 @@
2007-06-08 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/32163
Backport from mainline.
* config/sh/sh.md (symGOT_load): Don't schedule insns when
the symbol is generated with the stack protector.
2007-06-06 Ian Lance Taylor <iant@google.com>
* fold-const.c (merge_ranges): If range_successor or

View File

@@ -8344,6 +8344,20 @@ label:
operands[2],
gen_rtx_REG (Pmode, PIC_REG)));
/* When stack protector inserts codes after the result is set to
R0, @(rX, r12) will cause a spill failure for R0. Don't schedule
insns to avoid combining (set A (plus rX r12)) and (set op0 (mem A))
when rX is a GOT address for the guard symbol. Ugly but doesn't
matter because this is a rare situation. */
if (!TARGET_SHMEDIA
&& flag_stack_protect
&& GET_CODE (operands[1]) == CONST
&& GET_CODE (XEXP (operands[1], 0)) == UNSPEC
&& GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == SYMBOL_REF
&& strcmp (XSTR (XVECEXP (XEXP (operands[1], 0), 0, 0), 0),
\"__stack_chk_guard\") == 0)
emit_insn (gen_blockage ());
/* N.B. This is not constant for a GOTPLT relocation. */
mem = gen_rtx_MEM (Pmode, operands[3]);
MEM_NOTRAP_P (mem) = 1;