これは程度の問題かなという気がして、既存の sanitizer で数倍とかの規模で遅くなるやつはかなり困るから sanitizer として分けてほしいし、 sanitizer はそれなりに false positive か false negative が少ないことを要求したいけど、 UB を利用した最適化がコストも精度もそこまででないなら普通にオプションとしてありかなと (それを “最適化” と呼ぶかはまたちょっと話が変わってくるけど)
「UB を積極的に壊さないオプション」もまあありえるけど (-fno-strict-aliasing みたいに)、それって結局効果はコンパイラ依存だしエコシステムがそれを前提にしていくと「規格に準拠したコンパイラなのに意図したバイナリを出せない」みたいなのが増えていくわけで、いや……ちょっとそれはなぁ……
プログラマはそんなに馬鹿じゃないから自制できるだろというのはもう既に歴史に否定されていると思っていて、これからはそういう「エコシステムを腐らせないための “税金”」を徴収して健全性を保つような仕組みも視野に入れるべきなんじゃないかなぁ、というのが最近の考えです
まあ「未定義動作が出現する」がどういう形であるべきかは議論の余地があるし (何であれ壊れはしているので random value が読まれるだけでも致命傷になりうるけど)、そこでせっかくだから最適化に使おうというのはそんなに理不尽な話ではないと思っている。
まあ未定義動作をアグレッシブに最適化に使おうとする人々がそういう強い思想や動機をもってやっているかは知らないけど……
-O2 と -O3 が分かれているのはコンパイラ開発者の良識のあらわれだと思っている