Obtención del nombre de la variable original para un valor LLVM

Los operandos para unllvm::User (por ejemplo, instrucciones) sonllvm::Values.

Después de lamem2reg pasar, las variables estan enFormulario de SSA, y sus nombres correspondientes al código fuente original se pierden.Value::getName() sólo está establecido para algunas cosas; Para la mayoría de las variables, que son intermediarios, no se establece.

losinstnamer El pase se puede ejecutar para dar todos los nombres de variables comotmp1 ytmp2, pero esto no captura de donde vienen originalmente. Aquí hay algunos LLVM IR al lado del código C original:

Estoy creando una página html simple para visualizar y depurar algunas optimizaciones en las que estoy trabajando, y quiero mostrar las variables SSA comonombrever notación, en lugar de solo nombres temporales de instnamer. Es sólo para ayudar a mi legibilidad.

Estoy obteniendo mi LLVM IR de clang con una línea de comandos como:

 clang -g3 -O1 -emit-llvm -o test.bc -c test.c

Hay llamadas allvm.dbg.declare yllvm.dbg.value en el IR; ¿Cómo se convierten los nombres de código fuente originales y los números de versión de SSA?

Entonces, ¿cómo puedo determinar la variable original (o el nombre de una constante nombrada) a partir de unallvm::Value? Los depuradores deben poder hacer esto, entonces, ¿cómo puedo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta