This shows you the differences between two versions of the page.
cpl:labs:04 [2016/10/22 17:39] bogdan.nitulescu [Tool-uri pentru lucrul cu IR-ul] |
cpl:labs:04 [2016/10/22 18:24] (current) bogdan.nitulescu [04. Introduction to LLVM] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== 04. Introduction to LLVM ===== | ===== 04. Introduction to LLVM ===== | ||
- | |||
- | **TO BE UPDATED SOON** | ||
LLVM conține o serie de biblioteci și utilitare care pot fi folosite pentru a construi compilatoare, interpretoare și alte tool-uri similare. Găsiți [[http://adriansampson.net/blog/llvm.html|aici]] o introducere și câteva exemple interesante de utilizare a LLVM-ului. Pentru și mai multe exemple, există o [[http://llvm.org/ProjectsWithLLVM/|pagină cu proiecte]] care folosesc LLVM. | LLVM conține o serie de biblioteci și utilitare care pot fi folosite pentru a construi compilatoare, interpretoare și alte tool-uri similare. Găsiți [[http://adriansampson.net/blog/llvm.html|aici]] o introducere și câteva exemple interesante de utilizare a LLVM-ului. Pentru și mai multe exemple, există o [[http://llvm.org/ProjectsWithLLVM/|pagină cu proiecte]] care folosesc LLVM. | ||
Line 47: | Line 45: | ||
IR-ul de LLVM pentru fiecare funcție este organizat sub forma unui **control flow graph**, alcătuit din basic block-uri. Un **basic block** este o secvență de instrucțiuni neîntreruptă de transferuri de control. Transferurile de control se realizează prin intermediul unor instrucțiuni de tip ''branch'', ''return'', ''switch'' etc (cunoscute sub numele de ''terminators''). | IR-ul de LLVM pentru fiecare funcție este organizat sub forma unui **control flow graph**, alcătuit din basic block-uri. Un **basic block** este o secvență de instrucțiuni neîntreruptă de transferuri de control. Transferurile de control se realizează prin intermediul unor instrucțiuni de tip ''branch'', ''return'', ''switch'' etc (cunoscute sub numele de ''terminators''). | ||
+ | |||
+ | **Atenție!** In LLVM, ultima instrucțiune din fiecare basic block trebuie neapărat să fie un terminator. | ||
**Control flow graph**-ul poate fi vizualizat grafic sub forma unui fișier ''DOT''. Pentru obținerea fișierelor, se poate utiliza utilitarul ''opt'': | **Control flow graph**-ul poate fi vizualizat grafic sub forma unui fișier ''DOT''. Pentru obținerea fișierelor, se poate utiliza utilitarul ''opt'': |