[Bug target/71991] Inconsistency for __attribute__ ((__always_inline__)) among LTO and non-LTO compilation
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jul 25 14:04:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71991
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> The testcase misses an 'inline' on fn1 (thus all the warnings). But yes,
> confirmed. And I think the error is somewhat correct though I think it
> is due to some defect in target attribute handling somewhere - it works
> with "sse3" for example.
Ah, okey, this would be better sample:
$cat xf86-video/tc.i
static __attribute__ ((__always_inline__)) inline int fn1 () { return 0; }
static __attribute__ ((target("inline-all-stringops"))) inline int fn2 () { fn1
(); }
int main()
{
fn2();
}
$ gcc xf86-video/tc.i -O2
$ gcc xf86-video/tc.i -O2 -flto
xf86-video/tc.i: In function ‘fn2’:
xf86-video/tc.i:1:55: error: inlining failed in call to always_inline ‘fn1’:
target specific option mismatch
static __attribute__ ((__always_inline__)) inline int fn1 () { return 0; }
^~~
xf86-video/tc.i:2:77: note: called from here
static __attribute__ ((target("inline-all-stringops"))) inline int fn2 () {
fn1 (); }
sse3 works because ix86_can_inline_p returns true:
/* Callee's isa options should 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)
ret = false;
However following snippet is rejected w/ and w/o LTO:
cat xf86-video/tc2.i
static __attribute__ ((__always_inline__, target("sse4"))) inline int fn1 () {
return 0; }
static __attribute__ ((target("sse2"))) inline int fn2 () { fn1 (); }
int main()
{
fn2();
}
More information about the Gcc-bugs
mailing list