$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SwiftとCPUレジスタ
Search
rikusouda
June 24, 2019
Technology
2
670
SwiftとCPUレジスタ
rikusouda
June 24, 2019
Tweet
Share
More Decks by rikusouda
See All by rikusouda
末尾再帰なら安心でしょ?って信じてたSwiftコードが落ちた夜
rikusouda
0
180
Swiftのスタック変数とCPUレジスタの関係を読み解いた
rikusouda
2
2.5k
OSSを育てながらiOSアプリでパンくずリストを実現した
rikusouda
2
5.4k
fastlaneはともだち こわくないよ
rikusouda
1
1.1k
Other Decks in Technology
See All in Technology
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
220
世界最速級 memcached 互換サーバー作った
yasukata
0
150
翻訳・対話・越境で強いチームワークを作ろう! / Building Strong Teamwork through Interpretation, Dialogue, and Border-Crossing
ar_tama
4
1.6k
私のRails開発環境
yahonda
0
180
Master Dataグループ紹介資料
sansan33
PRO
1
4k
安いGPUレンタルサービスについて
aratako
1
2.2k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
980
AIにおける自由の追求
shujisado
3
470
MAP-7thplaceSolution
yukichi0403
2
250
Bakuraku Engineering Team Deck
layerx
PRO
11
5.8k
Introduction to Bill One Development Engineer
sansan33
PRO
0
330
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
460
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Scaling GitHub
holman
464
140k
Being A Developer After 40
akosma
91
590k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Docker and Python
trallard
46
3.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Optimizing for Happiness
mojombo
379
70k
How to Ace a Technical Interview
jacobian
280
24k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
120
20k
The Language of Interfaces
destraynor
162
25k
Practical Orchestrator
shlominoach
190
11k
Transcript
SwiftͱCPUϨδελ 2019/06/24 YUMEMI.swift #1 @rikusouda
ࣗݾհ • @rikusouda (٢Ԭ༞थ) • גࣜձࣾGunosy • ϧʔτϏΞ͕͖ • WWDC19͕ॳWWDC
None
Swiftͱ CPUϨδελ
ͳͥWWDC͔ΒϨδελͷ? • WWDCʹLab͕͋ΔɻAppleͷΤϯδχΞ ʹ࣭͕Ͱ͖Δॴ • Swiftؔ࿈ͷLabߦ͖ͬͯͨ • ղܾͰ͖ͳ͔ͬͨ͜ͱ͕͋Γɺຊʹؼͬͯ ͖͔ͯΒࣗͰௐͨ
CPUϨδελͬͯԿ͚ͩͬ • ԋࢉ͢Δͱ͖ʹ͏࡞ۀྖҬ = ൚༻Ϩδελ • CPUͷ෦ʹ͋ͬͯɺϝΠϯϝϞϦΑΓܻҧ ͍ʹૣ͍ • ͨͩ͠ेݸͱ͔ɺ͕ݶΒΕ͍ͯΔ
• Ϩδελʹͳ͍σʔλΛԋࢉ͢Δͱ͖ϝΠϯ ϝϞϦ͔ΒҰ୴ϩʔυ͢Δ
ࡐͷSwiftίʔυ
͜͏͍͏ܕͷม ʮελοΫͷϝϞϦྖҬʹ֬อ ͞ΕΔʯͱ͍͏ͷ༗໊ ࡐͷSwiftίʔυ
ϝΠϯϝϞϦΘͣʹϨδελ ͚ͩͬͨ΄͏͕ޮΑ͘ͳ͍ ͦ͏ͳ͍ͬͯΔ ࡐͷSwiftίʔυ
LabͰฉ͍ͯΈͨ • SwiftͷLabʹͯ • A. SwiftίϯύΠϥνʔϜͰ୲͍ͯ͠ͳ͍ൣғɻ LLVMͷਓʹฉ͘ͱΑͦ͞͏ • LLVMͷLabʹͯ •
A. SwiftΘ͔Βͳ͍ɻCݴޠͩͱ͢ΔͱYesɻLLVM IRͱ͔ΞηϯϒϥಡΉͱ͍Ζ͍ΖΘ͔ͬͯ໘ന͍Α
LLVM IRͱΞηϯϒϥͱ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf
LLVM IRͱΞηϯϒϥͱ http://llvm.org/devmtg/2015-10/slides/GroffLattner-SILHighLevelIR.pdf
LLVM IRݟͯΈΑ͏
Swiftίʔυ
swiftc -emit-ir -O test.swift > test.ll ௨ৗɺϦϦʔεϏϧυ࠷ద Խ͢ΔͷͰಉ༷ʹ࠷దԽ
None
࠷దԽ͞Ε͗͢!!
Swiftίʔυ
Swiftίʔυ ϝιουͷࢀরܦ༝ͷݺͼग़͠ʹ͠ ͯؔίʔϧ͕ͳ͘ͳΔͷΛආ͚Δ
swiftc -emit-ir -O test.swift > test.ll
LLVM IRίʔυ(barؔ)
LLVM IRίʔυ(barؔ) ͷؔΛίʔϧ݁͠ՌΛ GPPؔͷϙΠϯλ͕ʹೖ͍ͬͯΔ
LLVM IRίʔυ(barؔ) ʹΛͯ͠ɺΓΛʹ
LLVM IRίʔυ(barؔ) !MMWNTBEEXJUIPWFSqPXJͷΓ ߏମ͔Βܭࢉ݁ՌΛऔΓग़͠ɺ ͦΕΛΓͱͯ͠SFUVSO
Α͛͞
೦ͷҝΞηϯϒϥݟΑ͏ iPhoneΛఆ͠ARM64Ͱ
xcrun -sdk iphoneos swiftc - emit-assembly -O -target arm64- apple-ios12.0
test.swift > test.s ͜ͷίϚϯυ͕ϕετͳͷ͔ ࣗ৴͕ͳ͍ͷͰϚαΧϦืू
ARM64ͷ Ξηϯϒϥ
None
Y ΛҾͱͯ͠YʹඈͿ YʹGPPͷΞυϨε͕ೖ͍ͬͯΔ
Γ Y ΛYʹίϐʔ
YY ϨδελͱϦςϥϧͷՃࢉ ϝϞϦΞΫηεͳ͠
YΛΓͱͯ͠SFUVSO
SwiftͷؔͷInt ϨδελͰ͍݁ͯͨ͠
͜Ε͔Β • LLVMίʔυΛݟͯཪ͚͕Ͱ͖͍ͯͳ͍ͷͰ Γ͍ͨ • ↑͜͜·ͰͬͯiOSDCͷLTͰΓ͍ͨ
ϓϩϙʔβϧʹελʔ͍ͩ͘͞ • SwiftͷελοΫมͱCPUϨδελͷؔΛಡΈղ͍ͨ • https://fortee.jp/iosdc-japan-2019/proposal/ c2a89fff-ce66-4821-b2d4-4b7b6ff293d5 • SwiftͷࣝΛͬͯC++ͷੈքʹඈͼࠐ͏ • https://fortee.jp/iosdc-japan-2019/proposal/
c39e331a-8c70-42ef-b58e-38f798f40295 • “rikusouda”Ͱݕࡧ͢Εग़͖ͯ·͢
·ͱΊ • Swiftͷ෦ಈ࡞ΛΓ͍ͨ߹தؒίʔυ ΛಡΉ͚ͩͰ݁ߏ͔Δɻ • ໋ྩͷ༷ͱ͔άάΕ݁ߏಡΊΔ • ίϯύΠϥͷࣝͳͯ͘͜͜·Ͱߦ͚Δ • SwiftͷIntɺҰൠతʹ࠷దԽ͋ΓͳΒϨδ
ελͰ݁͢Δ͜ͱ͕Θ͔ͬͨ
None