LLVM

A Quick Introduction to Classical Compiler Design

  • LLVM์€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
  • ์ „ํ†ต์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋ก ํŠธ์—”๋“œ, ์˜ตํ‹ฐ๋งˆ์ด์ €, ๋ฐฑ์—”๋“œ three-phase ์ผ์ฒดํ˜• ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋œ๋‹ค. Three Major Components of a Three-Phase Compiler
  • ํ”„๋ก ํŠธ์—”๋“œ: ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์‹ฑ, ์—๋Ÿฌ ์ฒดํฌ, AST ์ƒ์„ฑ
  • ์˜ตํ‹ฐ๋งˆ์ด์ €: ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ์ œ๊ฑฐ ๋“ฑ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ๊ฐ์ข… ๋ณ€ํ™˜
  • ๋ฐฑ์—”๋“œ: target instruction set์— ์ฝ”๋“œ ๋งคํ•‘, ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น, ๋ช…๋ น ์Šค์ผ€์ค„๋ง
  • ์ „ํ†ต์ ์ธ ์„ค๊ณ„์˜ ๋ฌธ์ œ๋Š” ํ•˜๋‚˜์˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—ฌ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • LLVM์€ ์ „ํ†ต์ ์ธ ์„ค๊ณ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. Retargetablity
  • ์œ„์™€ ๊ฐ™์ด retargetableํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด ๊ธฐ์กด ์˜ตํ‹ฐ๋งˆ์ด์ €์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„๋กœ ์ƒˆ๋กœ์šด ํ”„๋ก ํŠธ์—”๋“œ๋งŒ์„ ์ถ”๊ฐ€ํ•ด ์ƒˆ ์–ธ์–ด๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค.

Existing Language Implementations

  • ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์— ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์„ฑ๊ณต ์Šคํ† ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.
    1. ์ž๋ฐ”์™€ .NET ๊ฐ€์ƒ ๋จธ์‹  - JIT ์ปดํŒŒ์ผ๋กœ ์ œ๊ณต, ๋Ÿฐํƒ€์ž„ ์ง€์›, ์ž˜ ์ •์˜๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ.
    2. ์†Œ์Šค๋ฅผ C ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , C ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ - ์‰ฌ์šด ์ดํ•ด์™€ ๊ตฌํ˜„, ํ•˜์ง€๋งŒ ์—ด์•…ํ•œ ํ™˜๊ฒฝ๊ณผ ๊ฐ์ข… ๋ฌธ์ œ.
    3. GCC - ๋งŽ์€ ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ ์ง€์›, ํ™œ๋™์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ, ์˜ค๋ž˜๋œ ์—ญ์‚ฌ.
  • GCC๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ๋งŽ๋‹ค.
    • ๊ด‘๋ฒ”์œ„ํ•œ ์ „์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ, ๋ถˆ๋ณ€์— ๋Œ€ํ•œ ์•ฝํ•œ ๊ฐ•์ œ, ์ž˜๋ชป ์„ค๊ณ„๋œ ์ž๋ฃŒ ๊ตฌ์กฐ.
    • ๊ฐ€์žฅ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ: ์ดˆ๊ธฐ ์„ค๊ณ„ ๋ฌธ์ œ์™€ ์‹œ๋Œ€์—์„œ ๋น„๋กฏ๋œ ๊ณ ์œ ํ•œ ๊ตฌ์กฐ์  ๋ฌธ์ œ.
    • ๋ ˆ์ด์–ด๋ง ๋ฌธ์ œ์™€ ์ถ”์ƒํ™”๋กœ ์ธํ•œ ๊ณ ํ†ต: ๋ฐฑ์—”๋“œ๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ AST๋ฅผ ์ฐธ์กฐํ•ด ๋””๋ฒ„๊ทธ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์ด ๋ฌธ์„œ๋ฅผ ์ธ์šฉํ•œ ๋ฌธ์„œ