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
This commit is contained in:
J"orn Rennecke 2003-08-13 19:20:16 +00:00 committed by Joern Rennecke
parent bc5ad3e6c4
commit dce20bbc11
3 changed files with 12 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2003-08-13 J"orn Rennecke <joern.rennecke@superh.com>
* 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 <dalej@apple.com> 2003-08-13 Dale Johannesen <dalej@apple.com>
* config/rs6000/rs6000.md (ctrsi, ctrdi): Reenable * config/rs6000/rs6000.md (ctrsi, ctrdi): Reenable

View File

@ -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 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 basic block before. So call get_hard_reg_initial_val now and wrap it
in an unspec if we might need to replace 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 val
= get_hard_reg_initial_val (Pmode, TARGET_SHMEDIA ? PR_MEDIA_REG : PR_REG); = 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 gen_rtx_UNSPEC (SImode, gen_rtvec (1, val), UNSPEC_RA);
return val; return val;
} }

View File

@ -3475,13 +3475,13 @@
(define_insn_and_split "load_ra" (define_insn_and_split "load_ra"
[(set (match_operand:SI 0 "general_movdst_operand" "") [(set (match_operand:SI 0 "general_movdst_operand" "")
(unspec:SI [(match_operand 1 "register_operand" "")] UNSPEC_RA))] (unspec:SI [(match_operand 1 "register_operand" "")] UNSPEC_RA))]
"TARGET_SHCOMPACT" "TARGET_SH1"
"#" "#"
"&& ! rtx_equal_function_value_matters" "&& ! rtx_equal_function_value_matters"
[(set (match_dup 0) (match_dup 1))] [(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); operands[1] = gen_rtx_MEM (SImode, return_address_pointer_rtx);
}") }")