0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

わいわいSwiftc 番外編ワークショップ vol.3 福岡 3時間目(応用)

Last updated at Posted at 2020-05-16

応用問題として、Passに関係ある話題を演習としておいておきます

応用課題: コンパイラにPassを登録しよう。ついでにコンパイラにオプションつけよう

さて、このWaiWaiOptimizerですが、一つ問題があります。私達がsil-optをSchemeに追加したようにswiftのSchemeを追加してswiftcをビルドしても、今の段階でそのswiftcからWaiWaiOptimizerが呼ばれることはありません

では、swiftcからSILOptimizerのフェーズでWaiWaiOptimizerが呼ばれるようにしてください。

ただし、制約をつけます。

  • Guaranteed Passesの一つとしてPipelineに登録してください。(Hint: PassであるAllocBoxToStackクラスがどのように使われているかをソースコードをたどりながら見るとわかる)
  • swiftcの自作オプションでTriggerをするようにしてください。(Hint: 本物のAssumeSingleThreadedクラスの実装を参照)
    • オプションがOFFでもPassが呼ばれても大丈夫ですが、その時はrunで即returnするなどして最適化しないようにしてください。

Hintを踏んでればだいたい解けますし、HintのことをやっているとちょっとだけPass関係のソースコードの渡り方を知ることができます。

事前準備で行ったsil-opt同様、新しくswiftのSchemeを追加してswiftcをビルドしてください。
ビルドされたswiftcsil-optと同じディレクトリにビルドされます。

問題が終わったら?

問題をテストしてください。テストの方法は以下のコマンドで可能です。

とおったpassの名前をすべて表示するコマンド.sh
# swiftディレクトリにいる前提
$ ../build/Xcode-DebugAssert/swift-macosx-x86_64/Debug/bin/swiftc [作ったオプション] 適当なswiftコードへのパス.swift -Xllvm -sil-print-pass-name

-Xllvm -sil-print-pass-name オプションを付けると最適化のときに通ったパスが表示されます。

以下、出力の例です。(-waiwai-optionという名前のオプションを追加したときの例)
ここに、その中にWaiWaiOptimizerという名前が出てきたら成功です。

$ ../build/Xcode-DebugAssert/swift-macosx-x86_64/Debug/bin/swiftc -waiwai-option waiwai.swift -Xllvm -sil-print-pass-name
  Run module pass #0, stage Guaranteed Passes, pass 0: SILGenCleanup (silgen-cleanup)
Start function passes at stage: Guaranteed Passes
  Run #1, stage Guaranteed Passes, pass 1: DiagnoseInvalidEscapingCaptures (diagnose-invalid-escaping-captures), Function: main
  Run #2, stage Guaranteed Passes, pass 2: DiagnoseStaticExclusivity (diagnose-static-exclusivity), Function: main
  Run #3, stage Guaranteed Passes, pass 1: DiagnoseInvalidEscapingCaptures (diagnose-invalid-escaping-captures), Function: $s4zeroAASiyF
  Run #4, stage Guaranteed Passes, pass 2: DiagnoseStaticExclusivity (diagnose-static-exclusivity), Function: $s4zeroAASiyF
 ... # 成功すれば、WaiWaiOptimizerが呼ばれている旨が出てくる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?