2016-03-24 13 views
0

Für eine bedingte Verzweigung Befehl in LLVM IR (als Terminator eines Basisblocks), würde ich gerne feststellen, ob es eine Schleife oder eine if-Anweisung im Quellcode entspricht. Gibt es eine Möglichkeit, dies zu analysieren?LLVM-Verzweigungsanweisung: if-Anweisung oder Schleife in der Quelle?

+0

Es gibt nicht unbedingt ein Konzept des Quellcodes im Umgang mit LLVM IR. Sprichst du z.B. IR generiert von C oder C++ Code? –

+0

Ja! Das meinte ich (IR, erzeugt von C). – Seves

Antwort

2

Konzeptionell ist eine Verzweigung vorwärts eine "if-Anweisung" und eine Verzweigung rückwärts ist eine Schleife. Dies könnte jedoch hinter einer gewissen Komplexität verborgen sein, z. das Frontend könnte eine bedingte Verzweigung erzeugen, die zu einer unbedingten Verzweigung zurückführt, also insgesamt eine Schleife.

Wenn Sie sicher sein möchten, generieren Sie die IR mit Debug-Informationen, und verwenden Sie dann diese Informationen - insbesondere die Zeilennummer - um zu verstehen, was der ursprüngliche Code war.