2010-04-23 9 views
9

Ich versuche LLVM Inline eine Funktion aus einer Bibliothek zu machen.Machen Sie LLVM inline eine Funktion aus einer Bibliothek

I LLVM Bitcode Dateien (manuell erzeugt), die ich zusammen mit llvm-link verbunden ist, und ich habe auch eine Bibliothek (geschrieben in C) zusammengestellt in Bitcode von clang und archiviert mit llvm-ar. Ich schaffe es, alles zusammen zu verbinden und auszuführen, aber ich kann es nicht schaffen, LLVM zu bekommen, um eine Funktion aus der Bibliothek zu verbinden. Irgendwelche Hinweise darauf, wie das gemacht werden sollte?

Antwort

8

Nachdem Sie die Bitcodedateien mit der Bibliothek verknüpft haben, führen Sie einen Internalize-Pass für den verknüpften Bitcode aus? Der Internalize-Pass macht alle Funktionen (außer main()) statisch und teilt dem Optimierer/Codegenerator mit, dass die Funktionen sicher inline sein können, ohne eine Kopie für eine (nicht vorhandene) externe Referenz verfügbar zu halten.

Ich manuell meine Bitcode-Dateien und Bitcode-Bibliotheken miteinander verbinden mit Code von llvm-ld geliehen und ich mache den Internalize-Pass, aber ich bin mir nicht sicher, ob llvm-link die Internalisierung besteht oder nicht.

+0

Arbeitete wie ein Charme – capitrane

+0

Wie kann ich einen Internalize-Pass starten? – osgx

+0

@osgx: siehe 'createInternalizePass' (' lib/Transforms/IPO/Internalize.cpp'). –