Re: C++ standards question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 7, 2013 at 12:01 AM, John Fine <johnsfine@xxxxxxxxxxx> wrote:
> I haven't tried constructing a small test case.  I fixed the problem by
> changing to
> if ( expression of *p ) *((char volatile*)p) = '-';
>
> I am a skilled enough asm programmer to have zero doubt that I correctly
> interpreted the compiled code.  It did have that "optimization".
>
> I don't know what else in that C++ function might have given the compiler
> permission to make that optimization.  I don't think anything did.  I know
> there was no unconditional write to *p in C++ code and there was an
> unconditional write to *p in the asm code.

Despite Jay's skepticism, GCC used to produce speculative stores, so
certainly at least one compiler acted that way.  It's a natural
optimization in the single-threaded world.  Stores are much cheaper
than conditional branches.

Ian

> Jay wrote:
>>
>> This sounds like a bug. But I am skeptical that any compiler has this bug.
>> Do you have a small test case that demonstrates it? Compilers aren't
>> bug-free (nothing is) but there are FAR more bugs in compiler input than
>> compilers themselves.
>>  - Jay
>>
>> On Feb 3, 2013, at 9:34 PM, "Mailaripillai, Kannan Jeganathan"
>> <kannanmj@xxxxxx> wrote:
>>
>>
>>>>
>>>> if ( expression of *p ) *p = '-';
>>>>
>>>> The optimizer changes that to the equivalent of
>>>>
>>>> *p = (expression of *p ) ? '-' : *p;
>>>>
>>>> Is that a valid optimization?
>>>>
>>
>>
>>


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux