Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 71

4.3. PROGRAMMER’S MANUALE: OVERVIEW 4.3 71 Programmer’s Manuale: Overview Il flusso di esecuzione in LegUp è il seguente . In primo luogo , LLVM fronte end clang prende il file. C e li compila in LLVM rappresentazione intermedia , memorizzata in un file di codice byte ( .bc ) . Questo codice byte può contenere LLVM funzioni intrinseche , quali sono le funzioni che LLVM assume esiste nella libreria C : memcpy , memset , e memmove . Queste funzioni non esistono in hardware , in modo da sostituirli con funzioni che abbiamo scritto a mano . Questo viene fatto con opt -legup -prelto e quindi il collegamento nelle nostre versioni con LLVM -ld lib/intrinsics.a . Ora ci ritroviamo solo con LLVM IR e non intrinseci . Ora passiamo questo codice LLVM -ld e ettuare ottimizzazioni di collegamento di tempo . Infine , passiamo il bytecode ottimizzato per llc -march = v per eseguire il backend Verilog . Il flusso del backend Verilog è il seguente . In primo luogo , il pass manager LLVM chiama LegupPass : runOnModule ( ) . Questa funzione legge il file tcl cycloneII.tcl o stratixIV.tcl a seconda