Dave Korn wrote:
> Andrew Haley wrote:
>> eCos@ wrote:
>
>>> ===============================================
>>> int *p;
>>>
>>> int main(void)
>>> {
>>> p++;
>>> __asm__ __volatile__ (""::);
>>> p++;
>>> }
>>> ===============================================
>
>>> assembly code is like:
>>> 'addl $4, %eax'
>>> 'addl $4, %eax'
>
>>> ===============================================
>>> int *p;
>>>
>>> int main(void)
>>> {
>>> p++;
>>> __asm__ __volatile__ (""::);
>>> p+=8;
>>> }
>>> ===============================================
>
>>> According to the assembly code, we found that gcc merge the 'p++' & 'p+=8'
>>> and generate 'addl $36, p'
>
>> If you really need a memory barrier, you have to use one:
>
> So, this is a real bug then - but it's a missed optimisation in the first
> case, not a bogus one in the second case?
Probably, but it's not a very interesting one. For what it's worth, the
tree dumps are identical right up to the very last tree optimization pass.
Andrew.