mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-19 09:05:17 +08:00
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:
parent
e38194f5ad
commit
e6b1ac334a
@ -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
|
||||
|
23
gcc/testsuite/gcc.target/powerpc/pr102059-4.c
Normal file
23
gcc/testsuite/gcc.target/powerpc/pr102059-4.c
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user