From: J"orn Rennecke Date: Wed, 13 Aug 2003 19:20:16 +0000 (+0000) Subject: sh.c (sh_get_pr_initial_val): Always wrap in unspec for TARGET_SH1. X-Git-Tag: releases/gcc-3.4.0~4261 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dce20bbc110aac070f2ba36eb4b1656b66161ed9;p=thirdparty%2Fgcc.git sh.c (sh_get_pr_initial_val): Always wrap in unspec for TARGET_SH1. * sh.c (sh_get_pr_initial_val): Always wrap in unspec for TARGET_SH1. * sh.md (load_ra): Change insn predicate to TARGET_SH1. From-SVN: r70410 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a81302ad7181..a09b22821fa7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-08-13 J"orn Rennecke + + * sh.c (sh_get_pr_initial_val): Always wrap in unspec for TARGET_SH1. + * sh.md (load_ra): Change insn predicate to TARGET_SH1. + 2003-08-13 Dale Johannesen * config/rs6000/rs6000.md (ctrsi, ctrdi): Reenable diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index d1b203b943c5..15d1d1a57dd5 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -8865,9 +8865,13 @@ sh_get_pr_initial_val (void) then, we end in trouble if we didn't use the register in the same basic block before. So call get_hard_reg_initial_val now and wrap it in an unspec if we might need to replace it. */ + /* ??? We also must do this for TARGET_SH1 in general, because otherwise + combine can put the pseudo returned by get_hard_reg_initial_val into + instructions that need a general purpose registers, which will fail to + be recognized when the pseudo becomes allocated to PR. */ val = get_hard_reg_initial_val (Pmode, TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG); - if (TARGET_SHCOMPACT && rtx_equal_function_value_matters) + if (TARGET_SH1) return gen_rtx_UNSPEC (SImode, gen_rtvec (1, val), UNSPEC_RA); return val; } diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 2c8462ffc589..bd341a0b2df0 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -3475,13 +3475,13 @@ (define_insn_and_split "load_ra" [(set (match_operand:SI 0 "general_movdst_operand" "") (unspec:SI [(match_operand 1 "register_operand" "")] UNSPEC_RA))] - "TARGET_SHCOMPACT" + "TARGET_SH1" "#" "&& ! rtx_equal_function_value_matters" [(set (match_dup 0) (match_dup 1))] " { - if (current_function_has_nonlocal_label) + if (TARGET_SHCOMPACT && current_function_has_nonlocal_label) operands[1] = gen_rtx_MEM (SImode, return_address_pointer_rtx); }")