-O2/-O3 Optimization bug?

Iain Buclaw ibuclaw at gdcproject.org
Wed Jan 22 05:08:37 PST 2014


On 22 January 2014 00:28, Mike <none at none.com> wrote:
> Hello again,
>
> I'm continuing my work on an ARM Cortex-M port of the D Runtime.  I now have
> a repository (https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study) and a
> wiki
> (https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/wiki/1.0-Introduction)
> for anyone interested.  I'm doing my best to document the entire process.
>
> I tried playing with GDC/GCC optimizations recently, and noticed that it
> breaks the following simple code from my "Hello World" experiment
> (http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22)
>
> void OnReset()
> {
>   while(true)
>   {
>     // Create semihosting message
>     uint[3] message =
>       [
>         2,                            //stderr
>         cast(uint)"hello\r\n".ptr,    //ptr to string
>         7                             //size of string
>       ];
>
>     //Send semihosting command
>     SendCommand(0x05, &message);
>   }
> }
>
> Compiling with...
>   arm-none-eabi-gdc -O1 start.d -o start.o
> ... works fine, but compiling with...
>   arm-none-eabi-gdc -O2 start.d -o start.o
> ... or ...
>   arm-none-eabi-gdc -O3 start.d -o start.o
> ... does not.
>
> I traced this down to the -finline-small-functions and -fipa-cp-clone
> options, so if I compile with...
>   arm-none-eabi-gdc -O2 -fno-inline-small-functions start.d -o start.o
> ... or ...
>   arm-none-eabi-gdc -O3 -fno-inline-small-functions -fno-ipa-cp-clone
> start.d -o start.o
> ... it works fine.
>
> Comparing the assembly generated with...
>   arm-none-eabi-gdc -O1 start.d -o start.o
> ... and ...
>   arm-none-eabi-gdc -O2 start.d -o start.o
> ... I can see that the "hello\r\n" string constant vanishes from the
> assembly file with the -O2 option.
>
> "So what's the question, Mike?" I hear you say:
> 1.  Is this just one of the consequences of using -O2/-O3, and I should just
> suck it up and deal with it?
> 2.  Is this potentially a bug in the GCC backend?
> 3.  Is this potentially a bug in GDC or the DMD frontend?
>

Personally, I would never use -O3 for low level start.o kernel stuff.
As you are coding on a small board, wouldn't you instead use -Os ?


More information about the D.gnu mailing list