KEMBAR78
SIL for First Time Leaners LT | PDF
SIL for First Time
Learners
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Hi, I'm Yusuke
@kitasuke
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Why SIL? 
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Why SIL?
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Why SIL?
• Better idea of Swift type system
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Why SIL?
• Better idea of Swift type system
• Optimizations magic !✨
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Why SIL?
• Better idea of Swift type system
• Optimizations magic !✨
• Just for fun!
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
SIL  
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Swift
Intermediate
Language
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
SIL is a language
specific Intermediate
Representation
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
What SIL looks like?
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.swift
func number() -> Int {
let x: Int
x = 1
return x
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Emit SIL
$swiftc -emit-sil sample.swift -o sample.sil
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.sil
sil hidden @_T06sample6numberSiyF : $@convention(thin) () -> Int {
bb0:
%0 = alloc_stack $Int, let, name "x"
%1 = integer_literal $Builtin.Int64, 1
%2 = struct $Int (%1 : $Builtin.Int64)
store %2 to %0 : $*Int
dealloc_stack %0 : $*Int
return %2 : $Int
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Emit SIL with -O
$swiftc -emit-sil -O sample.swift -o sample.sil
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.sil with -O
sil hidden @_T06sample6numberSiyF : $@convention(thin) () -> Int {
bb0:
%0 = integer_literal $Builtin.Int64, 1
%1 = struct $Int (%0 : $Builtin.Int64)
return %1 : $Int
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.swift
func number() -> Int {
let x: Int
x = 1
return x
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.swift
func number() -> Int {
return 1
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Diff
sil hidden @_T06sample6numberSiyF : $@convention(thin) () -> Int {
bb0:
%0 = alloc_stack $Int, let, name "x"
%1 = integer_literal $Builtin.Int64, 1
%2 = struct $Int (%1 : $Builtin.Int64)
store %2 to %0 : $*Int
dealloc_stack %0 : $*Int
return %2 : $Int
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
sample.sil with -O
sil hidden @_T06sample6numberSiyF : $@convention(thin) () -> Int {
bb0:
%0 = integer_literal $Builtin.Int64, 1
%1 = struct $Int (%0 : $Builtin.Int64)
return %1 : $Int
}
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Optimizations !✨
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Optimization flag
• -Onone
• -O
• -Ounchecked
• -Osize New!
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Summary
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Summary
• Somehow understandable
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Summary
• Somehow understandable
• Better idea of how Swift Compiler works
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Summary
• Somehow understandable
• Better idea of how Swift Compiler works
• Definitely worth learning!
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
References
• swift/docs/SIL.rst
• Swift's High-Level IR: A Case Study of Complementing LLVM
IR with Language-Specific Optimization
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
Thank you!
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018

SIL for First Time Leaners LT

  • 1.
    SIL for FirstTime Learners SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 2.
    Hi, I'm Yusuke @kitasuke SILfor First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 3.
    Why SIL?  SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 4.
    Why SIL? SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 5.
    Why SIL? • Betteridea of Swift type system SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 6.
    Why SIL? • Betteridea of Swift type system • Optimizations magic !✨ SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 7.
    Why SIL? • Betteridea of Swift type system • Optimizations magic !✨ • Just for fun! SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 8.
    SIL   SIL for FirstTime Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 9.
    Swift Intermediate Language SIL for FirstTime Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 10.
    SIL is alanguage specific Intermediate Representation SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 11.
    Swift Compiler SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 12.
    Swift Compiler SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 13.
    Swift Compiler SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 14.
    What SIL lookslike? SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 15.
    sample.swift func number() ->Int { let x: Int x = 1 return x } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 16.
    Emit SIL $swiftc -emit-silsample.swift -o sample.sil SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 17.
    sample.sil sil hidden @_T06sample6numberSiyF: $@convention(thin) () -> Int { bb0: %0 = alloc_stack $Int, let, name "x" %1 = integer_literal $Builtin.Int64, 1 %2 = struct $Int (%1 : $Builtin.Int64) store %2 to %0 : $*Int dealloc_stack %0 : $*Int return %2 : $Int } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 18.
    Emit SIL with-O $swiftc -emit-sil -O sample.swift -o sample.sil SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 19.
    sample.sil with -O silhidden @_T06sample6numberSiyF : $@convention(thin) () -> Int { bb0: %0 = integer_literal $Builtin.Int64, 1 %1 = struct $Int (%0 : $Builtin.Int64) return %1 : $Int } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 20.
    sample.swift func number() ->Int { let x: Int x = 1 return x } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 21.
    sample.swift func number() ->Int { return 1 } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 22.
    Diff sil hidden @_T06sample6numberSiyF: $@convention(thin) () -> Int { bb0: %0 = alloc_stack $Int, let, name "x" %1 = integer_literal $Builtin.Int64, 1 %2 = struct $Int (%1 : $Builtin.Int64) store %2 to %0 : $*Int dealloc_stack %0 : $*Int return %2 : $Int } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 23.
    sample.sil with -O silhidden @_T06sample6numberSiyF : $@convention(thin) () -> Int { bb0: %0 = integer_literal $Builtin.Int64, 1 %1 = struct $Int (%0 : $Builtin.Int64) return %1 : $Int } SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 24.
    Optimizations !✨ SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 25.
    Optimization flag • -Onone •-O • -Ounchecked • -Osize New! SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 26.
    Summary SIL for FirstTime Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 27.
    Summary • Somehow understandable SILfor First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 28.
    Summary • Somehow understandable •Better idea of how Swift Compiler works SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 29.
    Summary • Somehow understandable •Better idea of how Swift Compiler works • Definitely worth learning! SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 30.
    References • swift/docs/SIL.rst • Swift'sHigh-Level IR: A Case Study of Complementing LLVM IR with Language-Specific Optimization SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 31.
    Thank you! SIL forFirst Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018