On Tue, Mar 19, 2013 at 08:51:21AM -0700, Andi Kleen wrote: > > Using __always_inline as the name of the macro is a bad idea, glibc > > headers use that macro already. Just use something else in public headers > > that aren't part of glibc. > > That's why I had the ifdef, but ok. I'll use __force_inline then.
I'd say Jonathan's _GLIBCXX_ALWAYS_INLINE would be better. BTW, have you verified always_inline works fine for -O0? int x; inline __attribute__((always_inline)) bool test_and_set(int __m = 5) { return __atomic_test_and_set (&x, __m); } int foo (void) { return test_and_set (65536 | 5); } with -O0 -mhle doesn't result in xacquire, guess for !optimize get_memmodel would need to look through chain of SSA_NAMEs if SSA_NAME (that can appear because of inlining), looking for INTEGER_CSTs. If there is: _7 = 0x10005; _8 = _7; _9 = _8; __atomic_test_and_set (&x, _9); still return 0x10005 rather than MEMMODEL_SEQ_CST. Jakub