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