Kompilátory. Cvičenie 6: LLVM. Peter Kostolányi. 21. novembra 2017

Σχετικά έγγραφα
Αναπτύσσοντας developer tools στην Αpple. Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ

Matematika Funkcia viac premenných, Parciálne derivácie

7. FUNKCIE POJEM FUNKCIE

1. Limita, spojitost a diferenciálny počet funkcie jednej premennej

Prechod z 2D do 3D. Martin Florek 3. marca 2009

Ekvačná a kvantifikačná logika

Goniometrické rovnice a nerovnice. Základné goniometrické rovnice

Matematika prednáška 4 Postupnosti a rady 4.5 Funkcionálne rady - mocninové rady - Taylorov rad, MacLaurinov rad

Εισαγωγή στον Προγραμματισμό

Motivácia Denícia determinantu Výpo et determinantov Determinant sú inu matíc Vyuºitie determinantov. Determinanty. 14. decembra 2010.

Δομημένος Προγραμματισμός

Start. Vstup r. O = 2*π*r S = π*r*r. Vystup O, S. Stop. Start. Vstup P, C V = P*C*1,19. Vystup V. Stop

HASLIM112V, HASLIM123V, HASLIM136V HASLIM112Z, HASLIM123Z, HASLIM136Z HASLIM112S, HASLIM123S, HASLIM136S

KATEDRA DOPRAVNEJ A MANIPULAČNEJ TECHNIKY Strojnícka fakulta, Žilinská Univerzita

Cvičenie č. 4,5 Limita funkcie

Obvod a obsah štvoruholníka

Računarska grafika. Rasterizacija linije

AerobTec Altis Micro

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Δομημένος Προγραμματισμός (ΤΛ1006)

ibemo Kazakhstan Republic of Kazakhstan, West Kazakhstan Oblast, Aksai, Pramzone, BKKS office complex Phone: ; Fax:

Writing kernels for fun and profit

Gramatická indukcia a jej využitie

Priamkové plochy. Ak každým bodom plochy Φ prechádza aspoň jedna priamka, ktorá (celá) na nej leží potom plocha Φ je priamková. Santiago Calatrava

Προγραμματισμός Συστημάτων

ΖΕΡΔΑΛΗΣ ΣΩΤΗΡΙΟΣ ΤΟ ΟΥΤΙ ΣΤΗ ΒΕΡΟΙΑ (1922-ΣΗΜΕΡΑ) ΘΕΣΣΑΛΟΝΙΚΗ

ARMA modely čast 2: moving average modely (MA)

ELEKTROTEHNIČKI ODJEL

4. Výrokové funkcie (formy), ich definičný obor a obor pravdivosti

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

ARMA modely čast 2: moving average modely (MA)

Κεφάλαιο 1 Πραγματικοί Αριθμοί 1.1 Σύνολα

Τύποι Δεδομένων Είσοδος/Έξοδος

Ispitivanje toka i skiciranje grafika funkcija

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

PROMO AKCIA. Platí do konca roka 2017 APKW 0602-HF APKT PDTR APKT 0602-HF

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

Οι συναρτήσεις στη γλώσσα C

Funkcie - základné pojmy

M6: Model Hydraulický systém dvoch zásobníkov kvapaliny s interakciou

Návrh vzduchotesnosti pre detaily napojení

Δομημένος Προγραμματισμός (ΤΛ1006)

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

Προγραμματισμός Η/Υ (ΤΛ2007 )

SLOVENSKO maloobchodný cenník (bez DPH)

Pevné ložiská. Voľné ložiská

π π ELEKTROTEHNIČKI ODJEL i) f (x) = x 3 x 2 x + 1, a = 1, b = 1;

Μεταβλητές, σταθερές, τύποι και δηλώσεις. Εντολές αντικατάστασης, τελεστές και παραστάσεις. Εμβέλεια και χρόνος ζωής μεταβλητών

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Πίνακας Συμβόλων

Elementi spektralne teorije matrica

Definícia parciálna derivácia funkcie podľa premennej x. Definícia parciálna derivácia funkcie podľa premennej y. Ak existuje limita.

Podnikateľ 90 Mobilný telefón Cena 95 % 50 % 25 %

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Tomáš Madaras Prvočísla

Program testirati pomoću podataka iz sledeće tabele:

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

6 Limita funkcie. 6.1 Myšlienka limity, interval bez bodu

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

ΕΠΛ 131 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ι

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ. p: i: 3 p: i: 5

Deliteľnosť a znaky deliteľnosti

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ

KURZ JAZYKA C učebný text pre kvartu a kvintu osemročného gymnázia

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

KURZ JAZYKA C učebný text pre kvartu a kvintu osemročného gymnázia

IZVODI ZADACI (I deo)

EPL475:Εργαστήριο 5, GDB

Ένα απλό πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΠΛ Εισαγωγή στον Προγραµµατισµό: Λογισµικό. Το λογισµικό του συστήµατος: 1 Εισαγωγή ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΕΙΣΑΓΩΓΗ. Στόχοι του μαθήματος

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

Otpornost R u kolu naizmjenične struje

C. Kontaktný fasádny zatepľovací systém

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τα επιμέρους τμήματα ΥΠΟΛΟΓΙΣΤΗ Η ΔΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ. Αναπαράσταση μεγεθών. Αναλογική αναπαράσταση ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ ΜΟΝΑΔΑ ΕΛΕΓΧΟΥ

Υλοποίηςη Αλγορίθμου με υπολογιςτή - Προγραμματιςμόσ

radni nerecenzirani materijal za predavanja R(f) = {f(x) x D}

M086 LA 1 M106 GRP. Tema: Baza vektorskog prostora. Koordinatni sustav. Norma. CSB nejednakost

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Διάλεξη 5: Δείκτες και Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

bits and bytes q Ο υπολογιστής χρησιμοποιεί τη κύρια μνήμη για αποθήκευση δεδομένων

Planárne a rovinné grafy

Harmonizované technické špecifikácie Trieda GP - CS lv EN Pevnosť v tlaku 6 N/mm² EN Prídržnosť

Transcript:

Kompilátory Cvičenie 6: LLVM Peter Kostolányi 21. novembra 2017

LLVM V podstate sada nástrojov pre tvorbu kompilátorov

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie Inštalácia:

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie Inštalácia: Na Linuxe treba nainštalovať balík LLVM

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie Inštalácia: Na Linuxe treba nainštalovať balík LLVM Pod Windowsom:

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie Inštalácia: Na Linuxe treba nainštalovať balík LLVM Pod Windowsom: Je potrebné nainštalovať Cygwin s LLVM a GCC

LLVM V podstate sada nástrojov pre tvorbu kompilátorov Pôvodne Low Level Virtual Machine My budeme nástroje LLVM používať ako back end kompilátora Medzijazyk LLVM IR a nástroje na jeho ďalšie spracovanie Inštalácia: Na Linuxe treba nainštalovať balík LLVM Pod Windowsom: Je potrebné nainštalovať Cygwin s LLVM a GCC Adresár s binárnymi súbormi je vhodné pridať do premennej PATH

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Medzijazyk, bitkód a preklad do strojového kódu program.ll (Program v medzijazyku LLVM) llvm-dis llvm-as program.bc (Program v bitkóde LLVM) lli llc llc -filetype=obj program.obj (Objektový súbor) gcc program.s (Program v Assembleri) gcc Spustitel ný súbor

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu llvm-dis: LLVM disassembler realizujúci opačnú transformáciu

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu llvm-dis: LLVM disassembler realizujúci opačnú transformáciu lli: LLVM interpreter pre programy v LLVM bitkóde

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu llvm-dis: LLVM disassembler realizujúci opačnú transformáciu lli: LLVM interpreter pre programy v LLVM bitkóde llc: LLVM kompilátor prekladajúci z LLVM bitkódu do ozajstného assembleru, resp. priamo vytvárajúci objektové súbory

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu llvm-dis: LLVM disassembler realizujúci opačnú transformáciu lli: LLVM interpreter pre programy v LLVM bitkóde llc: LLVM kompilátor prekladajúci z LLVM bitkódu do ozajstného assembleru, resp. priamo vytvárajúci objektové súbory opt: Optimalizátor LLVM kódu

Najdôležitejšie nástroje llvm-as: LLVM assembler prekladajúci z človekom čitateľného medzijazyka do bitkódu llvm-dis: LLVM disassembler realizujúci opačnú transformáciu lli: LLVM interpreter pre programy v LLVM bitkóde llc: LLVM kompilátor prekladajúci z LLVM bitkódu do ozajstného assembleru, resp. priamo vytvárajúci objektové súbory opt: Optimalizátor LLVM kódu clang: Front end kompilátora pre jazyk C využívajúci LLVM ako svoj back end

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM:

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html Popisy všetkých dostupných inštrukcií

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html Popisy všetkých dostupných inštrukcií Dokumentácia k nástrojom LLVM:

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html Popisy všetkých dostupných inštrukcií Dokumentácia k nástrojom LLVM: https://llvm.org/docs/commandguide/

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html Popisy všetkých dostupných inštrukcií Dokumentácia k nástrojom LLVM: https://llvm.org/docs/commandguide/ Preklad z C do LLVM:

Zdroje informácií o LLVM Dokumentácia k medzijazyku LLVM: http://llvm.org/docs/langref.html Popisy všetkých dostupných inštrukcií Dokumentácia k nástrojom LLVM: https://llvm.org/docs/commandguide/ Preklad z C do LLVM: clang -S -emit-llvm cokolvek.c

Hello, World! v medzijazyku LLVM Súbor Hello.ll:

Hello, World! v medzijazyku LLVM Súbor Hello.ll: 1 @s = global [16 x i8] c" Hello, world!\0d\0a \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { ; toto je komentar start : 7 %pointer = getelementptr [16 x i8], [16 x i8 ]* @s, i32 0, i32 0 call i32 (i8*,...) @printf (i8* %pointer ) 9 ret i32 0 }

Hello, World! v medzijazyku LLVM Súbor Hello.ll: 1 @s = global [16 x i8] c" Hello, world!\0d\0a \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { ; toto je komentar start : 7 %pointer = getelementptr [16 x i8], [16 x i8 ]* @s, i32 0, i32 0 call i32 (i8*,...) @printf (i8* %pointer ) 9 ret i32 0 } llvm-as Hello.ll

Hello, World! v medzijazyku LLVM Súbor Hello.ll: 1 @s = global [16 x i8] c" Hello, world!\0d\0a \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { ; toto je komentar start : 7 %pointer = getelementptr [16 x i8], [16 x i8 ]* @s, i32 0, i32 0 call i32 (i8*,...) @printf (i8* %pointer ) 9 ret i32 0 } llvm-as Hello.ll lli Hello.bc

Hello, World! v medzijazyku LLVM Súbor Hello.ll: 1 @s = global [16 x i8] c" Hello, world!\0d\0a \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { ; toto je komentar start : 7 %pointer = getelementptr [16 x i8], [16 x i8 ]* @s, i32 0, i32 0 call i32 (i8*,...) @printf (i8* %pointer ) 9 ret i32 0 } llvm-as Hello.ll lli Hello.bc llc -filetype=obj Hello.bc

Hello, World! v medzijazyku LLVM Súbor Hello.ll: 1 @s = global [16 x i8] c" Hello, world!\0d\0a \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { ; toto je komentar start : 7 %pointer = getelementptr [16 x i8], [16 x i8 ]* @s, i32 0, i32 0 call i32 (i8*,...) @printf (i8* %pointer ) 9 ret i32 0 } llvm-as Hello.ll lli Hello.bc llc -filetype=obj Hello.bc gcc -o Hello Hello.obj

Typy v LLVM Typy prvej triedy :

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*...

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*... Zložené typy:

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*... Zložené typy: Polia: Napríklad [4 x i32] alebo [3 x [4 x i32]]

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*... Zložené typy: Polia: Napríklad [4 x i32] alebo [3 x [4 x i32]]...

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*... Zložené typy: Polia: Napríklad [4 x i32] alebo [3 x [4 x i32]]... Ďalšie typy:

Typy v LLVM Typy prvej triedy : in: N-bitové celé čísla pre nejaké 1 N 2 23 1 float: 32-bitové floating-point reálne čísla double: 64-bitové floating-point reálne čísla Smerníky: Napríklad i32*, float*... Zložené typy: Polia: Napríklad [4 x i32] alebo [3 x [4 x i32]]... Ďalšie typy: Napríklad funkcie

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @ Lokálne identifikátory musia začínať symbolom %

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @ Lokálne identifikátory musia začínať symbolom % Korektné pomenovania sú popísané regulárnym výrazom [%@][-a-za-z$._][-a-za-z$._0-9]*

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @ Lokálne identifikátory musia začínať symbolom % Korektné pomenovania sú popísané regulárnym výrazom [%@][-a-za-z$._][-a-za-z$._0-9]* Globálne premenné sú vždy smerníky

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @ Lokálne identifikátory musia začínať symbolom % Korektné pomenovania sú popísané regulárnym výrazom [%@][-a-za-z$._][-a-za-z$._0-9]* Globálne premenné sú vždy smerníky Napríklad @n = global i32 41 definuje premennú @n typu i32*

Identifikátory v LLVM Globálne identifikátory musia začínať symbolom @ Lokálne identifikátory musia začínať symbolom % Korektné pomenovania sú popísané regulárnym výrazom [%@][-a-za-z$._][-a-za-z$._0-9]* Globálne premenné sú vždy smerníky Napríklad @n = global i32 41 definuje premennú @n typu i32* 1 @n = global i32 41 @format = global [5 x i8] c"%d \0D\0A \00" 3 declare i32 @printf (i8*,...) 5 define i32 @main () { 7 start : %nn = load i32, i32* @n 9 %r = add i32 %nn, 1 %pointer = getelementptr [5 x i8 ], [5 x i8 ]* @format, i32 0, i32 0 11 call i32 (i8*,...) @printf (i8* %pointer, i32 %r) ret i32 0 13 }

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov:

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... )

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... ) Prvý základný blok funkcie:

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... ) Prvý základný blok funkcie: Vykonáva sa po zavolaní funkcie

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... ) Prvý základný blok funkcie: Vykonáva sa po zavolaní funkcie Môže, ale nemusí byť pomenovaný

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... ) Prvý základný blok funkcie: Vykonáva sa po zavolaní funkcie Môže, ale nemusí byť pomenovaný V programe nemôže byť žiaden skok na takýto blok

Štruktúra programu v LLVM Každá funkcia pozostáva z niekoľkých základných blokov: Skoky v programe: iba z koncov blokov a iba na začiatky blokov Každý základný blok musí skončiť príkazom na ukončenie bloku (podmienený alebo nepodmienený br, ret,... ) Prvý základný blok funkcie: Vykonáva sa po zavolaní funkcie Môže, ale nemusí byť pomenovaný V programe nemôže byť žiaden skok na takýto blok Na množine vrcholov zodpovedajúcich blokom možno skonštruovať graf programu

SSA forma a funkcia Φ SSA = Static Single Assignment

SSA forma a funkcia Φ SSA = Static Single Assignment Do každej premennej možno priraďovať práve raz

SSA forma a funkcia Φ SSA = Static Single Assignment Do každej premennej možno priraďovať práve raz Problém napríklad pri vetvení programu, cykloch, atď.

SSA forma a funkcia Φ SSA = Static Single Assignment Do každej premennej možno priraďovať práve raz Problém napríklad pri vetvení programu, cykloch, atď. Funkcia Φ realizovaná inštrukciou phi:

SSA forma a funkcia Φ SSA = Static Single Assignment Do každej premennej možno priraďovať práve raz Problém napríklad pri vetvení programu, cykloch, atď. Funkcia Φ realizovaná inštrukciou phi: Umožňuje priradiť do premennej jednu z viacerých možných hodnôt na základe naposledy vykonaného bloku

SSA forma a funkcia Φ SSA = Static Single Assignment Do každej premennej možno priraďovať práve raz Problém napríklad pri vetvení programu, cykloch, atď. Funkcia Φ realizovaná inštrukciou phi: Umožňuje priradiť do premennej jednu z viacerých možných hodnôt na základe naposledy vykonaného bloku Inštrukcie phi musia byť na začiatku bloku (nesmú byť pred nimi inštrukcie iné ako phi)

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne:

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c gcc -fpic -shared -o library.so library.c

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c gcc -fpic -shared -o library.so library.c llvm-as main.ll

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c gcc -fpic -shared -o library.so library.c llvm-as main.ll lli -load=./library.so main.bc

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c gcc -fpic -shared -o library.so library.c llvm-as main.ll lli -load=./library.so main.bc llc -load=./library.so -filetype=obj main.bc

Použitie externých modulov Funkcie definované v library.c možno použiť v LLVM kóde nasledovne: Nech main.ll obsahuje deklarácie a volania funkcií z library.c gcc -fpic -shared -o library.so library.c llvm-as main.ll lli -load=./library.so main.bc llc -load=./library.so -filetype=obj main.bc gcc -L. -l:library.so -o main main.obj