https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104327

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The testcase should be in a generic directory, so that we catch it on other
targets too.

Note, e.g. i386/ can_inline_p hook is quite different from this one.
E.g. for the ISA options it allows the caller to have a superset of the ISAs:
  /* Callee's isa options should be a subset of the caller's, i.e. a SSE4
     function can inline a SSE2 function but a SSE2 function can't inline
     a SSE4 function.  */
  if (((caller_opts->x_ix86_isa_flags & callee_opts->x_ix86_isa_flags)
       != callee_opts->x_ix86_isa_flags)
      || ((caller_opts->x_ix86_isa_flags2 & callee_opts->x_ix86_isa_flags2)
          != callee_opts->x_ix86_isa_flags2))
    ret = false;
which is heavily relied on (e.g. most of the intrinsics have some ISA and
we allow inlining if the caller supports those), takes into account whether
it always_inline callee, etc.  Now, s390 does something like that e.g. with the
arch.

target_flags seem to be a mixed bag of features:
#define MASK_64BIT (1U << 0)
#define MASK_BACKCHAIN (1U << 1)
#define MASK_DEBUG_ARG (1U << 2)
#define MASK_ZARCH (1U << 3)
#define MASK_HARD_DFP (1U << 4)
#define MASK_SOFT_FLOAT (1U << 5)
#define MASK_OPT_HTM (1U << 6)
#define MASK_LONG_DOUBLE_128 (1U << 7)
#define MASK_MVCLE (1U << 8)
#define MASK_PACKED_STACK (1U << 9)
#define MASK_SMALL_EXEC (1U << 10)
#define MASK_OPT_VX (1U << 11)
#define MASK_ZVECTOR (1U << 12)

I'd say e.g. OPT_VX or OPT_HTM seem to me like ISA flags that could be treated
that way, MVCLE is an tuning option from what I understand (s390 doesn't check
*_tune at all, maybe it could for non-always_inline?), e.g. 64BIT or
LONG_DOUBLE_128 seems to be an ABI option so any changes should make code
uninlinable, ...

Reply via email to