> In article <3989148news.pl@insigna.ie.u-ryukyu.ac.jp>
>    kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> > 河野真治 @ 琉球大学情報工学です。
> > inline で欲しいのは、本来はプログラム変換でのspecialization
> > であって、サブルーチンオーバヘッドではないはず。Specialiation
> > は通常のサブルーチンコールでも出来るので、inlineは、
> > なにか間違った選択だったと思います。

inlineしないspecializationって,specializeした色んなバージョンのサブルー
チンを作るってことでしょうか.だったらinliningしても良いような.

昔,MIPSのコンパイラはオブジェクトを中間コード(uコード)で出力しておい
て,リンク時に手続き間最適化やをしていましたが,あれは廃れたんですか
ね.

> /* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
>    a mechanism by which the user can annotate likely branch directions and
>    expect the blocks to be reordered appropriately.  Define __builtin_expect
>    to nothing for earlier compilers.  */

分岐予測というより,どちらかのパスを優先して分岐以外の命令をスケジュー
ルするんでしょうかね.trace schedulingみたいに.

> lilely() と unlikely() は、やめてくれって、というよりは、
> 「何間考えているんだ、このボケ」って感じ。こんなの人間がやる
> ことじゃないです。

if_likelyとif_unlikelyだと少しはましですかね(大差ないか).

商用のコンパイラだと,プロファイラのフィードバックが使えたりしますから,
人間が手でannotateするより楽ですね.

> そもそも、コンパイル時の静的な分岐予測って、効くんですかね。

ループに関してはある程度効くんじゃないですか.

> 最近のプロセッサは、動的な分岐予測はしているわけですよね。

今や,動的分岐予測なしでは話にならないです.分岐の結果が分かるまで待っ
ていたらフェッチが全然間に合いません.

最近のプロセッサの命令フェッチステージはたいてい,
  while (1) {
    fetch_block(pc);  // 複数の命令をフェッチ
    pc = predict(pc); // 次のフェッチ番地を予測
  }
みたいな作りになっていると思います.(分岐命令が含まれていないブロック
なら,予測器は次のブロックの番地を返す.)

                                前田敦司