rs6000: Ignore fusion option flags for inlining test [PR102059]

The -mpower8-fusion and -mpower10-fusion options do not modify which
instructions we can generate, so ignore them when deciding whether we
can inline callee into caller.

2022-05-06   Michael Meissner  <meissner@linux.ibm.com>

gcc/
	PR target/102059
	* config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore -mpower8-fusion
	and -mpower10-fusion options for inlining purposes.

gcc/testsuite/
	PR target/102059
	* gcc.target/powerpc/pr102059-4.c: New test.

(cherry picked from commit 2fb654f77d)
This commit is contained in:
Michael Meissner 2022-05-06 11:39:13 -05:00 committed by Peter Bergner
parent e38194f5ad
commit e6b1ac334a
2 changed files with 28 additions and 0 deletions

View File

@ -25350,6 +25350,11 @@ rs6000_can_inline_p (tree caller, tree callee)
}
}
/* Ignore -mpower8-fusion and -mpower10-fusion options for inlining
purposes. */
callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
/* The callee's options must be a subset of the caller's options, i.e.
a vsx function may inline an altivec function, but a no-vsx function
must not inline a vsx function. However, for those options that the

View File

@ -0,0 +1,23 @@
/* { dg-do compile } */
/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
/* { dg-require-effective-target power10_ok } */
/* Verify that power10 can explicity include functions compiled for power8.
The issue was -mcpu=power8 enables -mpower8-fusion, but -mcpu=power9 or
-mcpu=power10 do not set power8-fusion by default. Thus when doing this
compilation, they would get an error that the inline function failed in its
inlining due to having incompatible options. */
static inline int __attribute__ ((always_inline,target("cpu=power8")))
foo (int *b)
{
*b += 10;
return *b;
}
int
bar (int *a)
{
*a = foo (a);
return 0;
}