3 patterns related to setjmp/longjmp/non-local gotos call adjust_address_nv
and this can break (generate unrecognizable insns) when things get serious,
for example if you configure with --enable-sjlj-exceptions.
Tested on SPARC/Solaris, applied on the mainline.
2015-07-16 Eric Botcazou <ebotca...@adacore.com>
* config/sparc/sparc.md (save_stack_nonlocal): Use adjust_address
instead of adjust_address_nv.
(restore_stack_nonlocal): Likewise.
(nonlocal_goto): Likewise.
--
Eric Botcazou
Index: config/sparc/sparc.md
===================================================================
--- config/sparc/sparc.md (revision 225727)
+++ config/sparc/sparc.md (working copy)
@@ -6704,8 +6704,8 @@ (define_expand "save_stack_nonlocal"
(set (match_dup 2) (match_dup 3))]
""
{
- operands[0] = adjust_address_nv (operands[0], Pmode, 0);
- operands[2] = adjust_address_nv (operands[0], Pmode, GET_MODE_SIZE (Pmode));
+ operands[0] = adjust_address (operands[0], Pmode, 0);
+ operands[2] = adjust_address (operands[0], Pmode, GET_MODE_SIZE (Pmode));
operands[3] = gen_rtx_REG (Pmode, RETURN_ADDR_REGNUM);
})
@@ -6714,7 +6714,7 @@ (define_expand "restore_stack_nonlocal"
(match_operand 1 "memory_operand" ""))]
""
{
- operands[1] = adjust_address_nv (operands[1], Pmode, 0);
+ operands[1] = adjust_address (operands[1], Pmode, 0);
})
(define_expand "nonlocal_goto"
@@ -6726,9 +6726,9 @@ (define_expand "nonlocal_goto"
{
rtx i7 = gen_rtx_REG (Pmode, RETURN_ADDR_REGNUM);
rtx r_label = copy_to_reg (operands[1]);
- rtx r_sp = adjust_address_nv (operands[2], Pmode, 0);
+ rtx r_sp = adjust_address (operands[2], Pmode, 0);
rtx r_fp = operands[3];
- rtx r_i7 = adjust_address_nv (operands[2], Pmode, GET_MODE_SIZE (Pmode));
+ rtx r_i7 = adjust_address (operands[2], Pmode, GET_MODE_SIZE (Pmode));
/* We need to flush all the register windows so that their contents will
be re-synchronized by the restore insn of the target function. */