📖2015 LLVM Developers’ Meeting: Joseph Groff & Chris Lattner “Swift's High-Level IR: A Case Study..."

url
https://www.youtube.com/watch?v=Ntj8ab-5cvE
slides

https://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf

  • even though C/C++ are pretty low-level languages, the gap between C/C++ and LLVM IR is still great
  • LLVM IR is too low-level for language analysis (uninitialized, unreachable, etc), so clang developed a side pipeline
  • design of SIL
    • very similar to LLVM IR
    • high-level type system (including generics)
    • $Swift.Int is just a structure struct Int { var value: Builtin.Int64 }
    • constants are instructions
      • attached source location
      • no value/constant divide
    • phi nodes → basic block arguments (jump with arguments)
      • more uniform IR
      • more natural
      • (maps nicely to CPS’s continuation call)
    • builtin can reference LLVM instructions directly
  • SIL passes
    • raw SIL + canonical SIL
    • there are some mandatory optimizations that always guaranteed run
  • Lowering
    • SILGen handles operational lowering
    • IRGen handles type lowering & concretization of the target
  • SIL is a big investment: lowering, pass manager, inliner, testing infrastructure, etc. (lots of duplication)

Backlinks