何やらAndroid NDKのclang++の秘孔を突いた(最適化バグにぶち当たった)ような感じだ。-O1 と -O2 の間にどんだけ違いがあるのかはちょっとどう調べたら良いのかわからんな…(clangのソースのどこかで定義されてるんだろうけど)
https://github.com/atsushieno/aap-core/issues/194
更に調べてNDK r23 → r24でリグレッションが発生したところまで突き止めてreproまで作った(minimum reproは無理だ)
https://github.com/atsushieno/aap-core/compare/main...issue194-experiment
どちらかというとこの差分をもとにLLVMのソースを追っかけたほうが早そう(どうせvectorization自体に大量の変更は無いだろう、という楽観視)
やっぱり最適化外しの影響は可能な限り小さく抑えようと思って、問題箇所をがんがん絞り込んでいって問題を再現できるコードまで特定した https://github.com/atsushieno/cmidi2/commit/4483594
うーんこれ最適化に失敗するのは仕方ないか…とはいえコードの最適化が理由で動かないコードが出来上がるのは問題か
-fno-vectorizeだけ付ければ今まで通りにビルドして使えるようになったからまあいいかと思ってたけど、よく考えたらオーディオ処理でvectorizationが効かないってけっこうデメリットでかいな??