On Wednesday, 22 January 2014 at 13:08:53 UTC, Iain Buclaw wrote:
Personally, I would never use -O3 for low level start.o kernel stuff.

In my simple D program, however, -O2 also doesn't work.

As you are coding on a small board, wouldn't you instead use -Os ?

I sometimes use -Os and sometimes use -O2/-O3.

If I'm controlling something low-speed like a refrigerator or other kitchen appliance, I use -Os so I can use the cheapest chip available.

However, for my current project, I'm making and HMI/Industrial controller. The HMI will have a software rendered graphics engine with vector graphics, alpha blending, TrueType fonts, etc... I've already built this in C++, and the -O2/-O3 was very significant in my performance benchmarks. I didn't notice any difference between -O2 and -O3, though. It uses about 700KB of Flash memory, and most of that is the TrueType font data, so I'm quite satisfied with my C++ results.

Interestingly, since I started using GCC 4.8 in my C++ project, -O3 breaks my memset function, but -O2 does not, so I'm sticking with -O2 at the moment. With GCC 4.7, -O3 worked fine.

If you can't see any error in my D code and the compiler and optimizer are working properly, shouldn't my program work at these optimization levels without resorting to special qualifiers like shared/volatile?

NOTE: I'll post assembly and the optimization tree when I get home from work today.

Reply via email to