憶測で申し訳ないけど
a=calc0(a);
b=calc1(a);
が最終的にアセンブラレベルで

フィールドa = レジスタA
レジスタA =フィールドa

みたいなのが出てきた場合に
シングルスレッドであればあとのレジスタA=aの実行が無駄じゃないかと思って
実行しないとかありうるかもしれない
マルチスレッドならフィールドaが書き変わってる可能性あり