Standard way to supply hints to branches

Walter Bright newshound2 at digitalmars.com
Sun Sep 15 02:51:36 UTC 2024


On 9/11/2024 3:37 PM, Manu wrote:
>     The rule that the code is laid out in the order the programmer wrote it makes
>     the most sense to me. It gives the programmer the control over how it gets
>     executed. The same applies to switch statements - put the most visited case
>     statements first.
> 
> 
> This isn't a matter of opinion. The compilers do what the compilers do, and 
> that's just the way it is.

As a matter of fact, not opinion, this is the way dmd works. How gdc/ldc work 
with this is up to Iain and Martin. I don't tell them what to do.


> I can't reproduce this claim of yours.
> I couldn't reproduce a case where your hack produced the code you say, and even 
> if I could I would never accept it to be reliable.

Use the -O switch as I suggested and verified to work with gcc.


> ...and even if it DID work reliably, I /still/ wouldn't accept it, because 
> mangling and contorting my code like that is just stupid.

I'm sympathetic to that viewpoint, and generally go for writing the clearest 
code as a priority. If I really need to micro-optimize a section, I'll write it 
in inline assembler rather than trying to convince a compiler to do it my way.

There's no guarantee any hints (like `register`) have any effect, either.

> ...and it's not like we're even talking about a trade-off here! An otherwise 
> benign and extremely low-impact hint attribute on a control statement just isn't 
> an edgy or risky move.

It's a complexity issue. The more complex the language, the fewer people will be 
interested in learning it. (I'm kind of amazed that newbies are still willing to 
learn C++ with the heft of its spec that literally nobody understands.) The more 
complex, the more risk of bugs. It is definitely not a low-impact hint. The 
intermediate code does not support it, such would need to be added in to all the 
code that deals with the block structure.

I know these things look simple on the surface, but they aren't. As more 
evidence of that, consider the linked article on what a mess happens when 
[[likely]] is used in a non-trivial manner.


More information about the Digitalmars-d mailing list