12b1773deb
* Add Canonicalize pass after CSE to erase graph differences between 64-bit and 32-bit platforms. These differences originate from different treatment of integers (we unbox more eagerly on 64-bit platform) and consequently affect load forwarding - which generates some redundant[1] phis on 64-bit platform, but not on 32-bit platform. Adding this pass also addresses other cases of unpredictable performance when IL changes can cause CSE not to trigger a Canonicalize inside itself and regress performance, by inhibiting subsequent optimizations. * Allow IL tests to check whether the graph was compiled in sound null safety mode or not - because graphs can have minor differences. * Use `"$i"` instead of `i.toString()` in the test to allow TFA to infer non-nullability of fields in non-sound-nullsafety mode. [1] The definition of redundant phi differs between canonicalization pass and load forwarding pass. The former unwraps redefinitions and the latter does not. We are going to address this difference in a more systematic way when we split input dependencies from control dependencies. TEST=ci Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-nnbd-linux-release-x64-try,vm-kernel-precomp-nnbd-linux-release-simarm_x64-try Change-Id: Ifbd68fbb7f3b374ecee8ada1b3a4a2249139a108 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/220541 Commit-Queue: Slava Egorov <vegorov@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com>