Estoy trabajando en un compilador para una máquina de pila (específicamente CIL) y he analizado el código en un gráfico de bloques básicos. Desde aquí estoy buscando aplicar SSA a los métodos, pero no va muy bien. Mi primer intento (mientras trabajaba con una lista plana, en lugar del gráfico) fue iterar sobre el código y mantener una pila de identificadores de SSA (es decir, para los objetivos de asignación), empujándolos cuando produzco una tarea, apareciendo cuando están usados. Esto funciona bien para un solo bloque básico, pero simplemente no puedo entender cómo manejar las funciones Φ de producción.SSA para el código de máquina de pila
La idea que he estado dando vueltas es adjuntar una posición de pila a los identificadores SSA y luego ver qué hay en la pila cuando convergen las rutas de código, pero esto no parece ser el modo correcto (TM) de hacer cosas.
¿Hay un algoritmo simple para rastrear las manipulaciones de la pila en varias rutas de código y determinar las colisiones cuando convergen?
¿Algo salió del compilador? Estoy pensando en hacer exactamente lo mismo. –