Aviso: noté que this question está muy relacionado con este, por lo que si está interesado en mi pregunta, definitivamente debería leer esa otra y sus respuestas también.¿Qué tipos de optimización LLVM hace y qué tipo de optimizaciones tienen que implementar sus interfaces?
Puedo pensar en algunas optimizaciones que un frontend de lenguaje OOP podría hacer, como crear variables temporales para mantener los valores de las llamadas al método const llamadas en secuencia, sin llamadas intermedias no conformes al objeto en cuestión, cortar llamadas a funciones , pero no puedo pensar en muchos más. Me gustaría pedirle a las personas que creen una lista más larga de ejemplos.
Pregunto esto porque quiero crear un pequeño lenguaje como proyecto para mascotas y no estoy seguro de cómo estudiar este tema muy bien. Tal vez este es un caso para la wiki de la comunidad? Una lista completa de optimizaciones que hace el backend LLVM y que las interfaces deberían hacer por sí mismas, ¿qué opinas?
Ah, y sé que diferentes interfaces pueden tener necesidades muy diferentes, pero mi atención se centra en los lenguajes de procedimiento/OOP.
No me imaginaba que el clang no hiciera muchas optimizaciones. Pensé que haría al menos 5 o algo así (una vez más, no entiendo este tema, por lo que todo lo que digo es solo adivinar arbitrariamente, lol). Si está muy seguro de su respuesta, y como esta pregunta no se hizo popular en absoluto, puedo marcarla como aceptada. Solo esperando tu confirmación; muchas gracias;) –
Realmente no hace tanto ... piénselo de esta manera: si una optimización se puede expresar como una transformación IR a IR que no cambia la semántica, ¿por qué duplicar el código para hacerlo? en ASTs? (En realidad, clang ha creado algunos optimizadores de AST bastante potentes, pero los usamos para análisis estáticos, no para generación de código.) – servn
Sí, imaginé que LLVM probablemente exprime todo lo que puede salir de la IR, pero no tengo una visión clara de lo que entra en el IR y lo que se pierde (NRVO es un ejemplo). Supongo que no hay muchos ejemplos sutiles aquí. NRVO, la especialización de implementación depende del hardware disponible, las ramificaciones preferidas, todas son bastante obvias y no las extrañaría al escribir mi compilador. Pero gracias por aclarar, ¡ahora me siento más seguro! :RE –