[PATCH 1/4] Mark all member functions with memory models always inline
Wed Mar 20 10:38:00 GMT 2013
On Tue, Mar 19, 2013 at 6:30 PM, Andi Kleen <firstname.lastname@example.org> wrote:
> On Tue, Mar 19, 2013 at 05:10:22PM +0100, Jakub Jelinek wrote:
>> 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?
> I did some simple tests and it seemed to work.
> But thanks for the counter example.
>> 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.
> interesting. so need more fixes. i'll look into that. Is there
> already a convenient helper for it?
Not without using information created by TER which is disabled for this
case because of different line information. If TER would not be disabled
for this reason it would already work automagically.
Eventually we can relax this restriction for constants that are only fed
through temporaries ...
> There was an alternative approach of using a template, but I suppose
> that would have the same problem.
Possibly yes, but I guess the frontend substitutes without going through
an extra temporary (if all arguments are template parameters!)
More information about the Libstdc++