最適化 - likely()
概要
値が0でないことを確認し、0以外の場合に最適化されたコードを生成する
詳細
比較する値xを引数として受け取り、CONFIG_TRACE_BRANCH_PROFILINGとDISABLE_BRANCH_PROFILING、__CHECKER__の値によって以下のように処理が異なる
- CONFIG_TRACE_BRANCH_PROFILINGが定義済されており、かつDISABLE_BRANCH_PROFILINGと__CHECKER__未定義の場合
- __builtin_constant_p()によりxが定数の場合は0か1のいずれかの値を返し、定数でない場合は、branch_check()に引数の値と1を引数として実行した結果を返す
- それ以外
- __builtin_expect()の第一引数にx、第二引数に1を渡すことでxが0以外のときに高速に処理できるようコンパイルされる