3. Why SIL?
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
4. Why SIL?
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
5. Why SIL?
• Better idea of Swift type system
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
6. Why SIL?
• Better idea of Swift type system
• Optimizations magic !✨
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
7. 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
8. SIL
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
10. SIL is a language
specific Intermediate
Representation
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
11. Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
12. Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
13. Swift Compiler
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
14. What SIL looks like?
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-sil sample.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
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
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
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
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'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
31. Thank you!
SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018