From 9be10a794480e2d7a19c81cebaf02a6d2a54ff23 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sun, 21 Oct 2007 09:18:12 +0000 Subject: 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/mips/mips.c | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc3741c..83e0e0a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 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 to build_int_cst. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index afec3a2..2985871 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) -- cgit v1.1