Slide 1

Slide 1 text

SwiftίϯύΠϥʹContribute͢Δ·Ͱ freddi (LINE Fukuoka) Engineer Casual Meetup - Oct. 9 2020

Slide 2

Slide 2 text

Agenda • Contributeͨ͠಺༰ ͷ͸ͳ͠ • Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • Swift Intermediate Language ͷ͸ͳ͠ • SILOptimizer ʹ͍ͭͯ • (͋ΒͨΊͯ) Contributeͨ͠಺༰ ͷ͸ͳ͠

Slide 3

Slide 3 text

Agenda • Contributeͨ͠಺༰ ͷ͸ͳ͠ • Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • Swift Intermediate Language ͷ͸ͳ͠ • SILOptimizer ʹ͍ͭͯ • (͋ΒͨΊͯ) Contributeͨ͠಺༰ ͷ͸ͳ͠ ๻ͷೖ໳ϑϩʔ

Slide 4

Slide 4 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ̎ͭ Contribute ͨ͠ • https://github.com/apple/swift/pull/33851 • ࠷దԽϩδοΫͷϛε • https://github.com/apple/swift/pull/31847 • Docs ͷ BNF Ͱॻ͔Εͨ Grammer ͷϛε

Slide 5

Slide 5 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • https://github.com/apple/swift/pull/33851 • ࠷దԽϩδοΫͷϛε • ʮ෭࡞༻͕͋Δ͔΋஌Εͳ͍ʯϩδοΫͷݕग़ϛε • Ұ෦ڧ੍Ϋϥογϡ͕ʮ෭࡞༻ͳ͠ʯʹͳΔϛε • ࠷దԽϩδοΫ͕ҙਤͨ͠ͷͰ͸ͳ͘ͳΔՄೳੑ

Slide 6

Slide 6 text

Contributeͨ͠಺༰ ͷ͸ͳ͠

Slide 7

Slide 7 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • https://github.com/apple/swift/pull/31847 • υΩϡϝϯτͰղઆ͍ͯ͠Δ Grammer ͷϛε • ࣗ෼͕ಡΜͩ SIL ͷίʔυ ͱҧ͏͔Βؾ͍ͮͨ • SIL ͷυΩϡϝϯτ͸ͨ·ʹΨόΨό

Slide 8

Slide 8 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • https://github.com/apple/swift/pull/33851 • ࠷దԽϩδοΫͷϛε ← ࠓ೔͸ͬͪ͜ͷ࿩ • ͜ͷ มߋͷཧղΛ௨ͯ͡SwiftίϯύΠϥʹೖ໳͢Δ

Slide 9

Slide 9 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • Swift ͸͜ΜͳϑϩʔͰίϯύΠϧ͞ΕΔ • Swift ίϯύΠϥ΍Δͱ਌ͷإΑΓݟΔ͜ͱʹͳΔ

Slide 10

Slide 10 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • օ͞Μ͓ͳ͡Έ Swift ίʔυ

Slide 11

Slide 11 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • AST (ந৅ߏจ໦) • ϓϩάϥϜΛจ๏ͷߏ଄ʹ฿ͬͨ໦ߏ଄ʹͨ͠΋ͷ

Slide 12

Slide 12 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • AST (ந৅ߏจ໦) • ԋࢉࢠͷ༏ઌ౓ͱ͔΋ߏจ໦ͷߏ଄Ͱܾ·ͬͨΓ

Slide 13

Slide 13 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • SIL (Swift Intermediate Language) • Swift ಛ༗ͷந৅දݱ

Slide 14

Slide 14 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • SIL (Swift Intermediate Language) • ͜͜ͰSwiftಛ༗ͷ ࠷దԽ౳͕ߦΘΕΔ • ࠓ೔ͷTopic

Slide 15

Slide 15 text

Swift ͷίϯύΠϧϑϩʔ ͷ͸ͳ͠ • LLVM IR => … • SIL Λ LLVM IR ʹ௚ͯ͠LLVM ʹ౤͛Δ • ͦͷ͋ͱϦϯΧʹ౤͛ΒΕͨΓ • όΠφϦ౳ʹͳΔ

Slide 16

Slide 16 text

Swift Intermediate Language ͷ͸ͳ͠ • Swift ಛ༗ͷதؒදݱ • ͜͜Ͱ Swiftಛ༗ͷ࠷దԽ͕ߦΘΕΔ

Slide 17

Slide 17 text

Swift Intermediate Language ͷ͸ͳ͠ • ͲͪΒ΋खݩʹ swiftc ίϚϯυ͕͋Ε͹ੜ੒Մೳ

Slide 18

Slide 18 text

Swift Intermediate Language ͷ͸ͳ͠ • ࢼ͠ʹ hello world! Λ SIL Ͱ ੜ੒ͯ͠ΈΔ • ࠓճ͸͕࣌ؒͳ͍ͷͰ raw SIL ͚ͩ

Slide 19

Slide 19 text

Swift Intermediate Language ͷ͸ͳ͠ • ௕͍ɾಡΈͮΒ͍ʢʁʣ

Slide 20

Slide 20 text

Swift Intermediate Language ͷ͸ͳ͠ • SIL͕swiftίʔυΑΓ௕͘ͳΔཧ༝ • ؔ਺ʢԾ૝ʣςʔϒϧͷ৘ใ • ࡉ͔͍ϝϞϦͷ֬อ΍ϦϑΝϨϯεΧ΢ϯτͷ໋ྩ • Main ؔ਺ͳͲͷల։

Slide 21

Slide 21 text

Swift Intermediate Language ͷ͸ͳ͠ • SIL ͷߏ଄Λେ͖͍ॱʹ • SILModule (ιʔείʔυશମ) • SILFunction (֤ؔ਺) • SILBasicBlock (͍ΘΏΔείʔϓ) • SILInstruction (SILίʔυҰจҰจ)

Slide 22

Slide 22 text

Swift Intermediate Language ͷ͸ͳ͠ • ͍͍ͩͨ͜ΕΒΛཧղ͢ΔͱSIL͸ͬ͘͟ΓಡΊΔ • SIL͕swiftίʔυΑΓ௕͘ͳΔཧ༝ • SIL ͷߏ଄ͷॱং

Slide 23

Slide 23 text

Swift Intermediate Language ͷ͸ͳ͠ • SILModule

Slide 24

Slide 24 text

SILFunction

Slide 25

Slide 25 text

SILBasicBlock

Slide 26

Slide 26 text

SILBasicBlock

Slide 27

Slide 27 text

SILBasicBlock Α͘ΈͨΒ bb0: ͬͯͳ͍ͬͯΔ -> basic block ͷུͰ͢ ৚݅෼ذ౳ͰBasic Block͸૿͑Δ

Slide 28

Slide 28 text

SILInstruction

Slide 29

Slide 29 text

Swift Intermediate Language ͷ͸ͳ͠ • ͜ͷߏ଄Λ஌͍ͬͯΔͱίϯύΠϥͷίʔυͷҰ෦͕
 ಡΊΔΑ͏ʹͳΔ • ͦΕ͕ SILOptimizer ͷίʔυ

Slide 30

Slide 30 text

SILOptimizer ʹ͍ͭͯ • SIL (Swift Intermediate Language) • ͜͜ͰSwiftಛ༗ͷ ࠷దԽ౳͕ߦΘΕΔ

Slide 31

Slide 31 text

SILOptimizer ʹ͍ͭͯ

Slide 32

Slide 32 text

SILOptimizer ʹ͍ͭͯ

Slide 33

Slide 33 text

SILOptimizer ʹ͍ͭͯ • raw SIL ੜ੒ޙɺSILOptimizer ʹΑͬͯ࠷దԽ͞ΕΔ • SILOptimizerதͷͨ͘͞Μ͋ΔPassͱ͍͏ϞδϡʔϧͰ ͦΕͧΕͷ໨తͷ࠷దԽ͕ߦΘΕΔ • ࠓ೔͸ͦͷPassͷίʔυΛಡΉ • Passͷίʔυͷجૅ͕٧·͍ͬͯΔ

Slide 34

Slide 34 text

SILOptimizer ʹ͍ͭͯ • ࠓ೔͸ AssumeSingleThreaded ΛಡΉ • γϯάϧεϨου͚ͩͰಈ͔͞ΕΔͷʹಛԽ͢ΔΑ͏ʹ ͢Δ࠷దԽ • ΦϓγϣϯͰൃಈ͞ΕΔ • PassͷதͰଟ෼Ұ൪୹͍

Slide 35

Slide 35 text

SILOptimizer ʹ͍ͭͯ

Slide 36

Slide 36 text

SILOptimizer ʹ͍ͭͯ SILFunctionTransform Λܧঝ -> FuncitonΛ૸ࠪ͢ΔPassʹͳΔ

Slide 37

Slide 37 text

SILOptimizer ʹ͍ͭͯ Ծ૝ؔ਺ run Λ࣮૷ -> Pass ͷ࠷దԽϩδοΫ͸͜͜ʹॻ͘

Slide 38

Slide 38 text

SILOptimizer ʹ͍ͭͯ ίϯύΠϥͷυϥΠόʢίϚϯυʣʹ౉͞ΕͨΦϓγϣϯΛΈΔ

Slide 39

Slide 39 text

SILOptimizer ʹ͍ͭͯ ࠓݟ͍ͯΔؔ਺ΛSILFunctionܕͷ σʔλͱͯ͠ड͚औΔ

Slide 40

Slide 40 text

SILOptimizer ʹ͍ͭͯ SILFunction͸SILBasicBlockͷCollection ͱͯ͠ѻ͑ΔʢͳͷͰBBʣ

Slide 41

Slide 41 text

SILOptimizer ʹ͍ͭͯ SILBasicBlock͸SILInstructionͷCollection ͱͯ͠ѻ͑ΔʢͳͷͰIʣ

Slide 42

Slide 42 text

SILOptimizer ʹ͍ͭͯ ͳͷͰɺ͜͜Ͱ͸ؔ਺಺ͷ InstructionΛ૸͍ࠪͯ͠Δ

Slide 43

Slide 43 text

SILOptimizer ʹ͍ͭͯ ֤Instruction͸ܕͰදݱ͞Ε͍ͯΔ ΩϟετͰಛఆͷInstruction͔ௐ΂Δ

Slide 44

Slide 44 text

SILOptimizer ʹ͍ͭͯ ϦϑΝϨϯεΧ΢ϯλؔ܎ͷInscrutionͳΒ NonAtomicʹ͢Δ

Slide 45

Slide 45 text

SILOptimizer ʹ͍ͭͯ • AssumeSingleThreaded ʹ͍ͭͯ • Function಺ͷInstructionΛ૸ࠪ • ϦϑΝϨϯεΧ΢ϯλؔ܎ͩͬͨΒnon Atomicʹ͢Δ

Slide 46

Slide 46 text

SILOptimizer ʹ͍ͭͯ • SILOptimizer ͷίʔυΛಡΉͱ͖ͷTips • ུޠ͕ଟ͍ͷͰίϯςΫετͰ൑அ͢Δ • ෳࡶͳϩδοΫ͸ C++ Λཧղ͔ͯ͠ΒಡΉ

Slide 47

Slide 47 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ࠓճ௚ͨ͠ͷ͸ɺmayHaveSideEffect ͱ͍͏ؔ਺ • ʮ෭࡞༻͕͋Δ͔΋஌Εͳ͍ʯInstructionΛݟΔ • SILInstruction ܕͷ ϝϯόม਺ • Dead Code Elimination౳ʹ࢖ΘΕΔ

Slide 48

Slide 48 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ͜ͷ৚݅ͷ̍൪໨͕ϛε͍ͬͯͨ(mayTrap ؔ਺)

Slide 49

Slide 49 text

Contributeͨ͠಺༰ ͷ͸ͳ͠

Slide 50

Slide 50 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ίϯύΠϥ಺ͷInstructionͷछྨͷදݱํ๏ • ઌఔਃ্͛ͨ͠ܕʹΑΔදݱʢΩϟετʹΑΔ൑ผʣ • Enum ʹΑΔදݱʢswitch ͳͲ ʹΑΔ൑ผʣ • मਖ਼Օॴ͸ͬͪ͜Ͱදݱ͞Ε͍ͯΔ

Slide 51

Slide 51 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ͪΐͬͱ̎൪Ίͷ঺հ

Slide 52

Slide 52 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ϝϞϦΞΫηε͕ى͜Γͦ͏ͳInstructionͷݕ஌ํ๏ • SILInstruction ͷଐੑΛݟΔ • LLVMͷInstruction ͷଐੑΛݟΔ • apply Instruction ͳΒݺͼग़͠ઌͷؔ਺ͷଐੑΛݟΔ • ͜͜Β΁Μͷॲཧ͸ͯͯ͝͝ͷXϚΫϩ͕ೖͬͨॲཧͳͷ ͰׂѪɻڵຯ͕͋ͬͨΒ࣭໰Ͱฉ͍͍ͯͩ͘͞

Slide 53

Slide 53 text

Contributeͨ͠಺༰ ͷ͸ͳ͠

Slide 54

Slide 54 text

Contributeͨ͠಺༰ ͷ͸ͳ͠

Slide 55

Slide 55 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ΋͏গ͠஌Γ͍ͨํ͸ Θ͍Θ͍swiftc #20 ͷ๻ͷࢿྉΛݟ͍ͯͩ͘͞ 
 
 
 
 
 
 
 • 
 
 
 https://speakerdeck.com/freddi/mayhavesideeffect

Slide 56

Slide 56 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • ͜ͷमਖ਼ՕॴͳΜͰݟ͚ͭͨͷʁ • झຯͰίϯύΠϥίʔυಡΜͰ͍ͨΒۮવΈ͚ͭͨ • bug.swift.orgͰόάνέοτʹ͸ͳ͔ͬͨ

Slide 57

Slide 57 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • PRग़ͨ͠ΒɺTest ॻ͍ͨΒϚʔδ͢ΔͱݴΘΕͨ • SILͷςετ΋ LLVMͷlitΛ࢖͍ͬͯΔΒ͍͠ • LLVM Integrated Tester ͷུ • ͦΜͳ͜ΜͳͰϚʔδ͞Εͨ • ΂ͭʹόάνέοτΛ੾Δඞཁ͸ͳ͍Β͍͠

Slide 58

Slide 58 text

Contributeͨ͠಺༰ ͷ͸ͳ͠ • SIL.rst ͱ͍͏υΩϡϝϯτ͕SILʹ͍ͭͯৄ͘͠هࡌ • https://github.com/apple/swift/blob/main/docs/SIL.rst • ͨͩ͠ɺSIL.rst ͸ΨόΨόͳͷͰContributeνϟϯε͕
 ͨ͘͞Μ͋Δ • ͜͜΋मਖ਼Λ౤͛ͨ͜ͱ͕͋Δ

Slide 59

Slide 59 text

·ͱΊ • SILΛಡΈ͸͡ΊΔͱίϯύΠϥೖ໳΍Γ΍͍͢ • SIL͕ಡΊΔͱ࠷దԽͷίʔυ͕ಡΊΔΑ͏ʹͳΔ • Contributeʹؔͯ͠΋ݫ͍͠ϧʔϧ͸ͳ͍ͷͰ
 ؾܰʹͰ͖Δ • ಛʹυΩϡϝϯτΨόΨόͳͷͰContributeͯ͠ΈΑ͏