Sto lavorando con LLVM 3.4 e voglio ottenere le informazioni sul numero di riga del file sorgente da IR. L'IR è generato da un semplice codice c con Clang. Voglio ottenere il numero di riga nel file sorgente c dalla linea nel corpo IR.Come ottenere il numero di linea sorgente dal file .ll LLVM
ho provato questo -
- per l'istruzione BI, non firmato Linea = Linea = BI> getDebugLoc() getline();.
- Per Loop L, std :: cout < < L-> getStartLoc(). GetLine();
Tuttavia, il risultato memorizzato/stampato è sempre 0. Non so come ottenere il numero di riga nella sorgente da IR LLVM.
Il mio file sorgente C è -
#include <stdio.h>
int main()
{
int i;
int inbuf[100];
int outbuf[100];
for(i = 0; i < 100; ++i)
inbuf[i] ^= outbuf[i];
inbuf[1] += 402;
inbuf[6] += 107;
inbuf[97] += 231;
for(i = 0; i < 100; ++i)
{
inbuf[i] += outbuf[i];
}
inbuf[47] += 312;
//print-statements
for (i=0;i<100;i++) {
printf("inbuf[%d] = %d\n",i,inbuf[i]);
}
return 0;
Comando Used- ~/LLVM/build/uscita + asserisce/bin/clang -O3 -fno-unroll-loop -fno-Vectorize -fno -slp-vectorize -S -emit-llvm sample.c -o sample.ll
Grazie!
si sta ottimizzando quindi non c'è ragione di aspettarsi l'uscita per rappresentare le sorgenti di ingresso, in linea fonte numero d'ordine né aspettarsi che ci siano pezzi di codice per linea di provenienza. Se llvm ha una libreria che riempie quelle e questo è quello che stai chiedendo, forse non c'è una linea per la cosa che stai guardando. magari provare non ottimizzato e vedere se questo cambia le cose. –
Grazie! Ho provato con -O0 ma mostra ancora il comando 0. : ~/llvm/build/Release + Asserisce/bin/clang -O0 -S -emit-llvm sample.c -o sample.ll Ho un pass funzionante che in grado di rilevare e analizzare i loop e le istruzioni. Lo sto usando all'interno della funzione - runOnLoop (Loop * L, LPPassManager & LPM) –
Sembra che tu non stia chiedendo informazioni di debug nella riga di comando compilata. – Mat