Got it!  I would have solved this much sooner if I had just dived into the code instead of getting lost with git bisect!

https://gitlab.com/freepascal.org/fpc/source/-/merge_requests/655

It was an infinite loop in the "var13", "var14" and "var15" optimisations that don't trigger on the Pentium II (default option) and later.  They set the Result to True even if no changes were actually made and caused the compiler to check for the same optimisation over and over again without progressing.

Kit

P.S. Admittedly those optimisations could use some maintenance since I shouldn't need to set the operand sizes, but I'll save that for another day.

On 24/04/2024 05:08, J. Gareth Moreton via fpc-devel wrote:
I've gotten back as far as here, and it's still bad:

commit 7fbda0e0e8b1d071e72ccbc5e487dbb1c2173c63 (HEAD)
Author: Jonas Maebe <jo...@freepascal.org>
Date:   Wed Mar 24 14:33:09 2021 +0000

      * support building with FPC 3.2.2

    git-svn-id: trunk@49045 -

I can't check earlier without difficulty because 3.2.2 doesn't work.  However the hang (and also an eventual out of memory error) doesn't occur if -OoNOPEEPHOLE is specified, meaning the problem is located in the peephole optimizer.  So it looks like I'll have to try to debug this the hard way!

Kit

On 23/04/2024 17:27, J. Gareth Moreton via fpc-devel wrote:
I've reproduced the hang doing "make clean all CPU_TARGET=i386 OS_TARGET=win32 OPT="-Cp80486 -Op80486"" on my x86_64-win64 machine.

So far I haven't found the bad commit - this problem has been here a while.

Kit

I still haven't found the bad commit!

On 23/04/2024 12:46, J. Gareth Moreton via fpc-devel wrote:
Absolutely I can.  I'll see what I can find.

Gareth aka. Kit

On 23/04/2024 12:09, Tomas Hajny via fpc-devel wrote:
On 2024-04-23 11:50, Marģers . via fpc-devel wrote:
1) does not work
make clean singlezipinstall OS_TARGET=win32 CPU_TARGET=i386
ALLOW_WARNINGS=1 OPT="  -O2 -vxitl -Cp80486 -Op80486"

hangs on
system.inc(421,2) Start reading includefile
C:\Users\Lietotajs\Downloads\fora\a\486\gh\rtl\inc\generic.inc
 .
 .

Indeed. This is clearly an issue related to optimizations. The important point missing here is that it happens when compiling with ppc1.exe. I just tried building a trunk compiler (make rtl_all compiler_all) with "OPT=-O- -Cp80486 -Op80486" and then started another compilation round with compiler built this way, but using -O2 this time, in order to make sure that it wasn't an optimization bug in the released 3.2.2 compiler. The new compilation round (using a non-optimized compiler) hangs at an exactly the same place, i.e. it's a bug (probably endless loop?) in the optimization code specific to the trunk compiler. @Gareth, could you please have a look at it?

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

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

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

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

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

Reply via email to