[fpc-devel] Double-checking an optimisation

J. Gareth Moreton gareth at moreton-family.com
Sun Jan 9 04:53:59 CET 2022


On 09/01/2022 01:47, Martin Frb via fpc-devel wrote:
>
> I take it, it also is one (or two?) bytes longer? If that is in a 
> loop, which otherwise is exactly within a 32 byte aligned block, then 
> that could cause a slow down too. (If the loop is 16 bytes long, but 
> aligned to a 32byte-bound+16, then it may slow down if the loop code 
> size goes from 16 to 17 bytes, because that is when it goes over the 
> boundary of the 32byte block.
> This is a bit hard to predict. But within very small loops (even 2 or 
> maybe 3 blocks of 32 bytes), size may be as important. (Actually a 
> good question, what weighs more....)
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
jng .Lj188 would be 2 bytes long here since it's a short jump, while 
setg %bl and movzbl %bl,%ebx are 3 bytes long apiece, so the code size 
goes grow by 4 bytes overall (it would grow by 6 bytes if a REX prefix 
has to be used to encode, say, %r8b etc.)

Some sizes are very hard to predict, like some optimisations are not 
performed under -Os because it would increase code size, but in some 
cases it causes a cascade that ends up both shrinking the code size and 
making the block several cycles faster.

I dare say, if there's one possible place for AI and machine learning, 
it would be compiler optimisation!

Gareth aka. Kit


-- 
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the fpc-devel mailing list