---
# System prepended metadata

title: Compiler Basis
tags: [CS]

---

---
title: 'Compiler Basis'
tags: CS
---
## Table of Contents

[TOC]
## LLVM
> Reference: [Design decisions that shaped LLVM](http://www.aosabook.org/en/llvm.html)

### Q1:Why llvm?
LLVM provides separate front end, optimizer and back end modules. The modularization helps us easily take each output of each phase, like IR after front end works.
### Q2:Why GCC cannot do the same thing mentioned in Q1?
GCC suffers from layering problems and leaky abstractions: 
the back end walks front-end ASTs to generate debug info, the front ends generate back-end data structures, and the entire compiler depends on global data structures set up by the command line interface.
