On 2019-10-13 01:54, Ben Grasset wrote:

I guess this doesn't matter too much in the grand scheme of things, but I'm somewhat confused by it, so I thought I'd ask.

Specifically, the reporter of that issue, calling themselves "Alexander", used the following program as an "example" of what they called "too aggressive optimization":

program test:
var v:longword;
begin
if v=2 then while true do ;
end.

To me, that just shows a while loop that will very obviously be exited immediately in all cases, because "v" is very obviously *not* equal to 2. Yet they used a (tiny) snippet of assembler from this and deemed it "incorrect", without making any attempt to clarify what they meant.

The snippet came from the compiled program. It showed that the "while true do ;" infinite loop got removed by the peephole optimiser (as also mentioned by Martin). That was wrong. The peephole optimiser does not perform any dead code analyses. It's only supposed to transform code patterns into equivalent (but hopefully faster) ones.

Adding a "v:=2;" statement at the start of the program, which would make the loop reachable, did not affect the generated code (i.e., the loop was still removed).


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to