Recientemente recibí un informe de error sobre un programa que no se puede compilar con el modificador -O3 (consulte https://github.com/cschwan/sage-on-gentoo/issues/66). En particular, el problema es que la compilación se cuelga en un cierto punto. El problema se resuelve compilando con -O2 (estoy muy consciente del hecho de que los programas compilados con -O3 pueden estar rotos, pero no sabía que -O3 puede colgar el compilador). Si desea reproducir el problema ejecutar¿Cuál es la diferencia entre -O3 y (-O2 + indicadores que man gcc dice -O3 agrega a -O2)?
wget http://perso.ens-lyon.fr/xavier.pujol/fplll/libfplll-3.0.12.tar.gz
tar -xf libfplll-3.0.12.tar.gz
cd libfplll-3.0.12
./configure CXXFLAGS="-O3"
make
Me preguntaba por qué -O3 cuelga el compilador y así que traté de localizar el problema. Primero, intenté descubrir la diferencia entre -O2 entre -O3. página del manual de gcc afirma que -O3 permite a los interruptores de O2 y las siguientes (permite llamar x
):
-finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload
-ftree-vectorize -fipa-cp-clone
me comprobó que mediante la comparación de la salida de gcc cuando se invoca con -Q -O2 --help=optimizers
y -Q -O3 --help=optimizers
. Luego planeé eliminar selectivamente los interruptores para encontrar el que causa el problema. Sin embargo, la compilación funciona bien con O2 y los interruptores adicionales anteriormente, por lo que concluyen
-O3 != -O2 x
Ahora mi pregunta: (? Indocumentado) ¿Alguien sabe si existe una diferencia adicional entre O2 y O3, ¿Alguien ha experimentado un comportamiento similar? ¿Es esto quizás un error del compilador?
creo, se debe añadir al problema -O3 plazo tales opciones "-ftree-dump-todo-todo--frtl volcado -all-all "y para encontrar la última etapa que tiene un truco en él. Además, chech la pila de gcc con iniciarlo bajo 'gdb --args' y deteniéndolo con Ctrl-C. – osgx