2012-03-23 4 views
6

il clangore 3.0 demo online pagina http://llvm.org/demo/index.cgi fornisce la possibilità di uscita LLVM codice C++ API" che rappresenta la LLVM-IR per il programma di input.È possibile generare automaticamente llvm codice C++ api da LLVM-IR?

È "produrre codice API uscita un'opzione clang LLVM C++"(e in caso affermativo, di cosa si tratta)?

O è un'opzione strumento LLVM (quale)?

E 'possibile fare la stessa cosa, ma da input LLVM-IR? Fondamentalmente mi piacerebbe vedere la corretta LLVM chiamate di C++ api necessarie per produrre una particolare sequenza di llvm-ir. Mi piacerebbe imparare a ritroso con l'esempio piuttosto che in avanti dalla documentazione

Le pagine del manuale e --help e --help-hidden per clang, llvm-as e llvm-dis non mostrano nulla di ovvio.

modifica: OK ora vedo nell'output su quella pagina Web "generato da llvm2cpp". Ma non riesco a trovare quello strumento nelle recenti versioni di llvm, solo vecchie versioni, ha un nuovo strumento in 2.9 e 3.0 preso per llvm2cpp?

risposta

8

Sì. Il backend C++ è lo strumento che fa questo. Prova "llc -march = cpp foo.bc"

+0

grazie. Ho appena trovato le note sulla versione 2.3 "Lo strumento llvm2cpp è stato ripiegato in llc, usa llc -march = cpp invece di llvm2cpp". BTW -march = C++ non funziona in 3.0, ma -march = cpp fa – Bogatyr

+0

Sfortunatamente lcc -march = cpp fallisce sui file con i metadati di debug. Qualche soluzione nota a questo? Il mio unico scopo era vedere l'apis C++ per aggiungere i metadati di debug, quindi questo è uno showstopper. – Bogatyr

+0

@Bogatyr: questo dovrebbe essere considerato un bug. Sentiti libero di compilare un PR in bugzilla LLVM con un riproduttore piccolo. –

1

Ho incontrato esattamente lo stesso problema e ho visto il CPPBuilder menzionato un paio di volte. Questo approccio purtroppo non funziona più sulle versioni recenti di LLVM poiché il CPPBackend è stato rimosso tra 3.8 e 3.9.

Se si desidera che il CPP backend voi (i) necessario configurare LLVM e aggiungere cppbackend al -DLLVM_TARGETS_TO_BUILD durante il configure iniziale e (ii) eseguire un LLVM < = 3.8.

La funzionalità è stata rimossa perché non utilizzava IRBuilder e quasi nessuno lo ha usato. La mia soluzione era di fare affidamento sulla vecchia versione per essere ispirata, quindi implementarla personalmente.