From: Richard Sandiford Date: Sun, 21 Oct 2007 09:18:12 +0000 (+0000) Subject: mips.c (mips_function_ok_for_sibcall): Only forbid sibling calls to "mips16" function... X-Git-Tag: releases/gcc-4.3.0~1899 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9be10a794480e2d7a19c81cebaf02a6d2a54ff23;p=thirdparty%2Fgcc.git mips.c (mips_function_ok_for_sibcall): Only forbid sibling calls to "mips16" functions if... gcc/ * config/mips/mips.c (mips_function_ok_for_sibcall): Only forbid sibling calls to "mips16" functions if the function satisfies const_call_insn_operand. From-SVN: r129526 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc3741c0dce3..83e0e0a137a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-10-21 Richard Sandiford + + * config/mips/mips.c (mips_function_ok_for_sibcall): Only forbid + sibling calls to "mips16" functions if the function satisfies + const_call_insn_operand. + 2007-10-21 Richard Sandiford * config/mips/mips.c (mips_va_start): Fix types in calls diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index afec3a29b3db..298587185f49 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -5648,14 +5648,15 @@ mips_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) /* We can't do a sibcall if the called function is a MIPS16 function because there is no direct "jx" instruction equivalent to "jalx" to - switch the ISA mode. */ - if (mips_use_mips16_mode_p (decl)) + switch the ISA mode. We only care about cases where the sibling + and normal calls would both be direct. */ + if (mips_use_mips16_mode_p (decl) + && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode)) return false; - /* ...and when -minterlink-mips16 is in effect, assume that external + /* When -minterlink-mips16 is in effect, assume that external functions could be MIPS16 ones unless an attribute explicitly - tells us otherwise. We only care about cases where the sibling - and normal calls would both be direct. */ + tells us otherwise. */ if (TARGET_INTERLINK_MIPS16 && decl && DECL_EXTERNAL (decl)