C-Reduceを使ってみたよ

2020年12月27日日曜日

llvm

t f B! P L
以前から気になってた、C-Reduceを、ついに使ってみました!

Cコードを破壊的に削っていくプログラムなのですが、コンパイラのバグが出たコードを、問題の箇所だけに削るのに便利なプログラムです。

案に違わず、なんでこれまで使ってなかったんだ、俺の馬鹿馬鹿!みたいな結果でした。まずは分かりやすく結果から。

$ ls -l test.cc
-rw-r--r-- 1 jam jam 13892 Dec 27 09:02 test.cc
$ creduce test.sh test.cc
...
#include "re.h"
namespace benchmark {
void a(std::string b) {
std::string d;
Regex c;
c.Init(b, &d);
}
} // namespace benchmark

え、そんだけ!?!?そんなに削ってくれるの!?

関数単位で削ってくれるだけかな?とか思ってたんですが、関数内のコードもガンガン削って、変数名なども適当に付け替えてくれて、超有能です!!

作るテストスクリプトは以下みたいな感じ。検出したい、エラーが出るパターンに!を付けます。!パターンだけだと、削り過ぎてsyntax errorが出るようになった時にcompile errorとsyntax errorが区別できなくなるので、コンパイルできて(syntax errorじゃなくて)、かつ最適化するとエラーになる物を検出としています。

$ cat test.sh
#!/bin/bash
clang -O3 -fno-vectorize ... &&\
! clang -O3 -fvectorize ...

いやあ、超便利!有能!なんで俺はこれまで使ってこなかったんだ・・・!!

ラベル

AndroidTV (1) chromebook (2) DIY (4) docker (1) git (4) Ingress (4) llvm (3) MacBook (1) MVNO (1) narou (1) PS4 (2) QNAPNAS (9) SIMD (9) SmartBand (8) Ubuntu (9) VAIO (1) Windows (2) wsl (2) wsl2 (1) Xperia (20) トルネ (3) プログラム (26) ルーター (18) 音楽 (6) 家事 (2) 自炊 (2) 電子書籍 (2) 洋食 (4)

フォロワー

QooQ