Hi, The below allows us to inline functions that have different compression flags for better tuning of performance/code size balance.
Ok to commit? Regards, Robert 2016-05-24 Matthew Fortune <matthew.fort...@imgtec.com> gcc/ * config/mips/mips.c (mips_can_inline_p): Allow inlining of functions with opposing compression flags. * config/mips/mips.opt (minline-intermix): New option. * doc/invoke.texi: Document the new option. --- gcc/config/mips/mips.c | 3 ++- gcc/config/mips/mips.opt | 4 ++++ gcc/doc/invoke.texi | 13 +++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 5ecde46..4312368 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -1476,7 +1476,8 @@ mips_merge_decl_attributes (tree olddecl, tree newdecl) static bool mips_can_inline_p (tree caller, tree callee) { - if (mips_get_compress_mode (callee) != mips_get_compress_mode (caller)) + if (mips_get_compress_mode (callee) != mips_get_compress_mode (caller) + && !TARGET_INLINE_INTERMIX) return false; return default_target_can_inline_p (caller, callee); } diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt index 08dd83e..3b92ef5 100644 --- a/gcc/config/mips/mips.opt +++ b/gcc/config/mips/mips.opt @@ -443,3 +443,7 @@ Enum(mips_cb_setting) String(optimal) Value(MIPS_CB_OPTIMAL) EnumValue Enum(mips_cb_setting) String(always) Value(MIPS_CB_ALWAYS) + +minline-intermix +Target Report Var(TARGET_INLINE_INTERMIX) +Allow inlining even if the compression flags differ between caller and callee. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 73f1cb6..2f6195e 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -837,6 +837,7 @@ Objective-C and Objective-C++ Dialects}. -mips16 -mno-mips16 -mflip-mips16 @gol -minterlink-compressed -mno-interlink-compressed @gol -minterlink-mips16 -mno-interlink-mips16 @gol +-minline-intermix -mno-inline-intermix @gol -mabi=@var{abi} -mabicalls -mno-abicalls @gol -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot @gol -mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float @gol @@ -17916,6 +17917,18 @@ Aliases of @option{-minterlink-compressed} and @option{-mno-interlink-compressed}. These options predate the microMIPS ASE and are retained for backwards compatibility. +@item -minline-intermix +@itemx -mno-inline-intermix +@opindex minline-intermix +@opindex mno-inline-intermix +Enable inlining of functions which have opposing compression flags e.g. +@code{mips16}/@code{nomips16} attributes. +This is useful when using the @code{mips16} attribute to balance code size +and performance so that a function will be compressed when not inlined or +vice-versa. When using this option it is necessary to protect functions +that cannot be compiled as MIPS16 with a @code{noinline} attribute to ensure +they are not inlined into a MIPS16 function. + @item -mabi=32 @itemx -mabi=o64 @itemx -mabi=n32 -- 2.8.2.396.g5fe494c