I have posted 4 previous versions of this patch (April 26th, March 28th, March 24th, and March 21st).
In this patch, rather than just add changes to the existing code in genfusion.pl, I rewrote the function completely. There are two patches within this patch set: * The first patch rewrites the perl function to be more readable. This patch produces the same output for fusion.md that the current version generates. * The second patch then using the rewrite in the first patch adds the changes to fix the problem. The issue with the original bug is the power10 load GPR + cmpi -1/0/1 fusion optimization generates illegal assembler code when the -fstack-protector option is used. Ultimately the code was dying because the fusion load + compare -1/0/1 patterns did not handle the possibility that the load might be prefixed. The main cause is the constraints for the individual loads in the fusion did not match the machine. In particular, LWA is a ds format instruction when it is unprefixed. The code did not also set the prefixed attribute correctly. These patch hav been tested on: * Little endian power9 with both IEEE and IBM long double * Little endian power10 * Big endian power8 using both 32-bit and 64-bit code generation. Can I check these into the master branch? Assuming I can check this in, I will also commit to the active GCC branches after a burn-in period. -- Michael Meissner, IBM PO Box 98, Ayer, Massachusetts, USA, 01432 email: meiss...@linux.ibm.com