https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99744
Bug ID: 99744
Summary: __attribute__ ((target("general-regs-only"))) doesn't
work with GPR intrinsics
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: crazylht at gmail dot com, ubizjak at gmail dot com
Target Milestone: ---
Target: x86-64,i386
[hjl@gnu-cfl-2 uintr-2]$ cat x.c
#include <x86intrin.h>
extern unsigned long long int curr_deadline;
extern void bar (void);
__attribute__ ((target("general-regs-only")))
void
foo (void)
{
if (__rdtsc () < curr_deadline)
return;
bar ();
}
[hjl@gnu-cfl-2 uintr-2]$ /usr/gcc-11.0.0-x32/bin/gcc -S x.c
In file included from
/usr/gcc-11.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/11.0.0/include/x86gprintrin.h:27,
from
/usr/gcc-11.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/11.0.0/include/x86intrin.h:27,
from x.c:1:
x.c: In function ‘foo’:
/usr/gcc-11.0.0-x32/lib/gcc/x86_64-pc-linux-gnu/11.0.0/include/ia32intrin.h:112:1:
error: inlining failed in call to ‘always_inline’ ‘__rdtsc’: target specific
option mismatch
112 | __rdtsc (void)
| ^~~~~~~
x.c:10:7: note: called from here
10 | if (__rdtsc () < curr_deadline)
| ^~~~~~~~~~
[hjl@gnu-cfl-2 uintr-2]$ ls
foo.c Makefile x.c
[hjl@gnu-cfl-2 uintr-2]$
ix86_can_inline_p failed since caller disabled SSE and MMX, but __rdtsc had
SSE and MMX enanbled. However GPR intrinsics don't need SSE nor MMX.