4b5c267dbd
This CL allows register allocator to mark functions as frameless in AOT bare instructions mode if they don't contain calls (with an exception for write barrier related calls), don't require spills and don't use optional or named parameters. Calls to Write Barrier helper stubs introduce some complexity on ARM/ARM64, where we need to take into account that return address needs to be explicitly spilled from LR register. To keep the code size balance (frame setup vs manual LR spilling on WB slow path) we allow one instruction with a write barrier per frameless function. Flutter Gallery snapshot becomes 800KB smaller (3% reduction), but APK size for some reason increases by .1%. On a large internal application effect is much smaller (60K - 0.16% reduction). Flutter Gallery is disproportionally affected by the change due to abnormal amount of small getters originating from localizations: each localized phrase becomes a getter returning a constant on a localization specific class. TEST=tested through normal test suite Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-ffi-android-release-arm64-try,vm-ffi-android-release-arm-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-android-release-arm64-try Change-Id: I86cb45a57567ee654ead388957ac4e561634ef9c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175304 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>