はじめに Qiitaでは、コンパイラの最適化の話が少ないな~と思ったので、コンパイラのバックエンドの話をしようかと思います。 自分はCOINS(コンパイラ共通インフラストラクチャ)や、Ocelotで実装したことがあります。COINSはJavaで、OcelotはC++です。 まぁ、もちろん自作したコンパイラ上に実装しても良いと思いますが、今の時代に一人で現実的なコンパイラを作るのはナンセンスですからね。素直に共通インフラストラクチャとか使うのが良いと思います。 最適化とは コンパイラは、フロントエンドで字句解析、構文解析などをして、バックエンドでCFG(Control Flow Graph、制御フローグラフ)作成、各種最適化、レジスタ割り付け、実行可能コードの出力などの処理を行います。 今回は、そのうちの最適化の話です。最適化とは、簡単に言ってしまえば、より早く、より効率的にプログラムが動作
![コンパイラバックエンド処理 データフロー解析 : Reaching Definition - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/82115b51138cc83d9151b00e070fd4a191ddf542/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgyJUIzJUUzJTgzJUIzJUUzJTgzJTkxJUUzJTgyJUE0JUUzJTgzJUE5JUUzJTgzJTkwJUUzJTgzJTgzJUUzJTgyJUFGJUUzJTgyJUE4JUUzJTgzJUIzJUUzJTgzJTg5JUU1JTg3JUE2JUU3JTkwJTg2JTIwJUUzJTgzJTg3JUUzJTgzJUJDJUUzJTgyJUJGJUUzJTgzJTk1JUUzJTgzJUFEJUUzJTgzJUJDJUU4JUE3JUEzJUU2JTlFJTkwJTIwJTNBJTIwUmVhY2hpbmclMjBEZWZpbml0aW9uJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1kNzg0ZjJkMGEyYjIxNmRhMmE4ZThjMGQyZWQ3OTQ1ZQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBmdWtrdW4mdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWE4MmM4OTYzNDI2NWFiNmQ3ZGM0ZDFjMjFiODQ3MjE5%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D3e5af05f0e9b8200464fc2325e75633a)