So I'm now running the full test suite, including "make fullcycle" for my refactoring of instruction removal (replacing most references of "asml.remove(hp1); hp1.free;" etc. with "RemoveInstruction(hp1);".  Trying to get the optimiser to run before assigning real registers to the instructions is actually somewhat difficult.  Besides having to avoid certain optimisations like CMOV that don't allow writing to the stack (although this is under pass 2, which helps), removal of instructions can sometimes result in danglong pointers for the "livestart" and "liveend" fields for the register tracking.

I'll submit the 'removal refactor' patch once everything has passed, this helps reduce maintenance and avoids dangling pointers (i.e. forgetting to call "asml.remove" before freeing an instruction), but running pass 1 of the peephole optimizer before assigning registers is still very much experimental and may be too complicated.  I'll also have to look at the effects on compiler speed and the quality of the binaries produced to see if it's truly worthwhile.

Gareth aka. Kit

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

Reply via email to