SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
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

Más contenido relacionado

Más de Yusuke Kita

WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由
Yusuke Kita
 
Search APIs in Spotlight and Safari
Search APIs in Spotlight and SafariSearch APIs in Spotlight and Safari
Search APIs in Spotlight and Safari
Yusuke Kita
 

Más de Yusuke Kita (20)

[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipeline[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipeline
 
Creating your own Bitrise step
Creating your own Bitrise stepCreating your own Bitrise step
Creating your own Bitrise step
 
Introducing swift-format
Introducing swift-formatIntroducing swift-format
Introducing swift-format
 
Unidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUIUnidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUI
 
Writing a compiler in go
Writing a compiler in goWriting a compiler in go
Writing a compiler in go
 
Writing an interpreter in swift
Writing an interpreter in swiftWriting an interpreter in swift
Writing an interpreter in swift
 
var, let in SIL
var, let in SILvar, let in SIL
var, let in SIL
 
How to try! Swift
How to try! SwiftHow to try! Swift
How to try! Swift
 
SIL for the first time
SIL for the first timeSIL for the first time
SIL for the first time
 
Introducing protobuf in Swift
Introducing protobuf in SwiftIntroducing protobuf in Swift
Introducing protobuf in Swift
 
Type-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConfType-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConf
 
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSConType-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
 
Swift core
Swift coreSwift core
Swift core
 
SwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみたSwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみた
 
Search APIs & Universal Links
Search APIs & Universal LinksSearch APIs & Universal Links
Search APIs & Universal Links
 
Introducing Cardio
Introducing CardioIntroducing Cardio
Introducing Cardio
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swift
 
WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由
 
Search APIs in Spotlight and Safari
Search APIs in Spotlight and SafariSearch APIs in Spotlight and Safari
Search APIs in Spotlight and Safari
 
Protocol in Swift
Protocol in SwiftProtocol in Swift
Protocol in Swift
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

SIL for First Time Leaners LT

  • 1. SIL for First Time Learners SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 2. Hi, I'm Yusuke @kitasuke SIL for First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 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
  • 9. Swift Intermediate Language 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
  • 24. Optimizations !✨ SIL for First 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 First Time Learners, Yusuke Kita (@kitasuke), try! Swift Tokyo 2018
  • 27. Summary • Somehow understandable 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