Move type checks from switch cases to beginning of `_Py_Specialize_BinaryOp`
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 36k
- PR マージ指標
- PR 指標を取得中
説明
Feature or enhancement
Proposal:
_Py_Specialize_BinaryOp: https://github.com/python/cpython/blob/aeb9b65aa26444529e4adc7d6e5b0d3dd9889ec2/Python/specialize.c#L2380-L2443
uses
if (!Py_IS_TYPE(lhs, Py_TYPE(rhs))) {
break;
}
check inside every switch case which is redundant. Placing this check before switch results in same performance but less generated code. Compiler with -O3 option seems to not recognize it. Attaching generated machine code (clang, apple silicon) for old and new versions
new.txt
old.txt
Feel free to close this if not worth it.
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response
Linked PRs
- gh-128311
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず gh-128311 を確認してください。この issue から、すでに進行中の作業にリンクされています。次に Python/specialize.c の _Py_Specialize_BinaryOp を読み、添付された old.txt と new.txt のコンパイラ出力を比較してください。冗長なチェックが一貫して処理され、生成されたコードが意図した結果になることが完了条件です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c
- 領域
- compilers, performance
- issue の種類
- 機能追加
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 25/100