ruby-trunk-changes r62348 - r62366

今日は定数の内容が nil の時にインラインキャッシュが効いていなかった不具合の修正や、MJIT の JIT コンパイルの生成するソースやコンパイルオプションの修正などがありました。

k0kubun: r62348 2018-02-11 01:09:55 +0900

test/ruby/test_jit.rb に MJIT のテストをもう少し追加しています。VM 命令毎にその命令を使う文を JIT するように書いているみたいです。

svn: r62349 2018-02-11 01:09:56 +0900

version.h の日付更新。

nobu: r62350 2018-02-11 01:54:47 +0900

getinlinecache 命令の実装で vm_ic_hit_p() で取得した結果のキャッシュが Qnil だったらキャッシュなしと見做してしまっていたので、定数の内容が nil の場合にインラインキャッシュが効かず毎回取得していたのを修正しています。おおう。deprecate_constant でマークした定数でも中身が nil だと参照するたびに毎回警告が出てしまっていたようです。まあ nil を入れてる定数とかそんなにはないかもなぁ。

nobu: r62351 2018-02-11 09:19:03 +0900

printf() のフォーマット文字列で rb_serial_t 型のために利用する指示子を internal.h で型の定義と同時に PRI_SERIALT_PREFIX というマクロに適切なものを定義しておいて、MJIT が生成するコードで使うようにしています。

nobu: r62352 2018-02-11 10:01:09 +0900

mswin で VC のコンパイラの -Fi オプションが古いバージョンでは使えないそうなので win32/Makefile.sub の CPPOUTFLAG をバージョンによって定義を分けて古いものはリダイレクトを使うようにしています。

nobu: r62353 2018-02-11 11:41:49 +0900

tool/ruby_vm/views/_mjit_compile_insn.erb と tool/ruby_vm/views/_mjit_compile_send.erb で生成する C のコードに警告除去のための明示的キャストを追加。

nobu: r62354 2018-02-11 11:41:50 +0900

tool/ruby_vm/views/_mjit_compile_insn.erb で VM 命令のオペランドを C のコードに埋め込むところで単に VALUE の値を書いてキャストしていたのを comment_id() という関数を用意してオペランドの型に従って ID を取り出して渡し、名前を生成する C のソースコード上でコメントとして残しておくようにしています。C のソースコードを生成するための C のコードと Ruby のコードがあるのですごいこんがらがりますね。

k0kubun: r62355 2018-02-11 13:20:32 +0900

MJIT 用に rb_obj_info() も必要だったので MJIT_FUNC_EXPORTED をつけて export するようにしています。そして rb_mjit_header.h を生成する時にコンパイラオプション -DMJIT_HEADER を付けるようにしています。minimize 時に -D で指定されたマクロが削除されるのを抑制するためとのこと。

nobu: r62356 2018-02-11 13:54:15 +0900

r62343 でビルド時に生成するようにした mjit_config.h に MJIT_CC_COMMON、MJIT_CFLAGS、MJIT_OPTFLAGS、MJIT_DEBUGFLAGS、MJIT_LDSHARED、MJIT_DLDFLAGS などのマクロも追加しています。これらも本体のビルド時と同じものを使うべきということだと思います。

k0kubun: r62357 2018-02-11 14:29:13 +0900

r62355 の MJIT 用ヘッダ生成時に -DMJIT_HEADER を最初に渡す理由をコメントとして追記しています。

k0kubun: r62358 2018-02-11 14:32:17 +0900

NEWS ファイルに --jit コマンドラインオプションの追加について追記しています。

k0kubun: r62359 2018-02-11 14:49:37 +0900

.travis.yml の slack 通知のトークンを更新しています。通知先チャンネルを変更したみたいです。

k0kubun: r62360 2018-02-11 15:03:21 +0900

appveyor.yml でも Slack への通知の設定を追加しています。

k0kubun: r62361 2018-02-11 15:33:45 +0900

r62359 の再修正。 .travis.yml の Slack 通知のチャンネルを変更ではなく追加にして2つのチャンネルに通知するようにしています。

nobu: r62362 2018-02-11 16:10:37 +0900

r62356 の続き。 mjit_config.h の生成時のコマンドを修正しています。ちょっとよくわかってないのですがマクロの展開結果の複数行のエントリをカンマで区切るのを、行頭のほうにカンマを置く記法にしてたのを後に置くようにしたみたいです。

k0kubun: r62363 2018-02-11 16:28:03 +0900

r62360 で追加した appveyor.yml の Slack 通知設定のトークンを更新しています。Slack のアカウント権限の問題かなにかで k0kubun さんが作成したトークンでは通知ができなかったみたいです。

k0kubun: r62364 2018-02-11 16:35:48 +0900

apppveyor.yml の Slack 通知の設定でビルド成功時も通知するようにしていたのを off にして、エラー時と復旧時のみの通知にしています。

nobu: r62365 2018-02-11 17:57:22 +0900

mjit.c で JIT 用に起動するコンパイラへのオプションで PIC 用のオプションを GCC_PIC_FLAGS というマクロに抽出して、CC_LDSHARED_ARGS にもこのオプション群を追加するようにしています。PIC(位置独立コード)のバイナリは同じオプションでないと .so ファイルのロード/リンクに支障があるためではないかと。

nobu: r62366 2018-02-11 18:00:44 +0900

r62362 の win32/Makefile.sub の変更の typo 修正。