2017-11-11 3 views
2

Ich habe eine LLVM-Bitcode-Datei und ich führe einen Loop-Durchlauf auf es. Jedes Mal, wenn ich zu einer Schleife komme ("runOnLoop"), extrahiere ich mehrere Informationen über den Schleifenkörper (d. H. Die Anzahl der Anweisungen im Körper) und drucke sie aus. Ich brauche jedoch eine Möglichkeit, diese Information mit einer bestimmten Schleife zu verknüpfen - mit anderen Worten, ich muss den "Namen" der Schleife drucken, aus der die Information extrahiert wurde.Wie identifiziere ich eine Schleife in LLVM-Bitcode?

Antwort

1

Ich bin mir nicht sicher, was Sie mit "Name" meinen, aber eine Möglichkeit besteht darin, Debugging-Informationen (Zeilennummer/Spalte) zu drucken, die dem Loop-Latch-Block oder etwas Ähnlichem zugeordnet sind.

Eine andere Möglichkeit besteht darin, Metadaten zu verwenden, um jede Schleife eindeutig zu identifizieren und die extrahierten Informationen mit dieser Kennung zu verknüpfen.

Ich hatte eine ähnliche Notwendigkeit, also habe ich eine pass dafür erstellt. Beachten Sie, dass dieser Ansatz empfindlich auf Compileroptimierungen reagiert und die ID nicht beibehält, wenn dies geschieht (z. B. wenn eine Funktion, die eine Schleife enthält, inline ist). Für beste Ergebnisse (näher an der Quelle) verwenden Sie es über IR, die mit -O0 kompiliert wurde. Darüber hinaus können Optimierungen anschließend angewendet werden, wenn Sie Ihre Informationsbeschaffung abgeschlossen haben.

Allerdings, für etwas einfaches, würde ich mit dem ersten Ansatz gehen.

Verwandte Themen