AArch64 -> ARM64 merge status

Hi all,

The AArch64->ARM64 merge is progressing at a rapid pace. Below I have taken the requirements drawn up in Edinburgh (which were sent to the list for comment) and annotated them with the current progress.

The TL;DR is that we still have a couple of issues outstanding but we’re well on track for removing AArch64 (and re-bikeshedding ARM64) for the 3.5 release!

Times are incredibly approximate and are in man-days/weeks.

· Requirement: No regressions

o Correctness

§ [2w] Regression tests

· All AArch64 Clang regression tests in Driver/, Sema/, Basic/ and Preprocessor/ ported. Only those in CodeGen{,CXX}/ left.

· Most LLVM regression tests ported. A couple of more intricate tests remain, along with the MC tests which may be a headache to dig through.

§ [?] QuIC internal tests

· Nightly runs show 11 test failures. Some compile-time (front-end issues), link-time and runtime (miscomparison) failures too.

§ [2d] ARM internal tests

· All our test suites apart from Emperor and Perennial are passing.

· Emperor mentioned below, Perennial runs ongoing.

§ [0d] Apple internal tests

· Tim says we’re “looking reasonable” here J

· This only blocks a “go/no-go”, and there are no actual actions here at the moment (according to Tim)

§ [DONE] LLVM test suite

§ [1d] MC Hammer

· One issue with aliasing remains. Patch being sent out to the list Friday.

§ [3d] Emperor

· One issue still outstanding. Patch being sent to the list very shortly.

· This is a random test suite so has the possibility to uncover more problems. Our acceptance criterion is 3 days runtime without finding any bugs.

o Performance

§ No precise fixed performance baseline

§ [DONE] Investigate significant performance regressions – justify fix/not fix.

· No performance blockers reported.

· Requirement: Feature parity

o [1-2w] Big endian

§ This comes in two parts. Big endian support with no NEON is almost completely ported – the last patches are being sent to the list on Friday.

§ NEON support for Big Endian hasn’t been committed to AArch64. There’s a whole kettle of fish there, that probably have about 1-2 weeks of effort left to fix. But this shouldn’t be a merge completion blocker.

o [2d] Support for no fpu/no neon/ no crc

§ Support has been ported, but some regression tests from AArch64 haven’t been ported over to ARM64 yet. There is at least one ISel crash that I can see, so there’s still at least some effort left here.

o [DONE] A53 scheduler

§ The A53 scheduler has been ported across and ARM64 now has as much of a schedule as AArch64 does.

o [DONE-ish] Inline assembly

§ All work done – One patch has seen contention from Eric and Jim so may have to be reverted. No big deal if it is though.

o [DONE] Predefines

§ All predefines and driver flags should be correct.

o [?] Conditionalise cyclone/Darwin

§ Not done yet, but noone’s raised any issues about it so perhaps there isn’t much to do!

o [?] ADRP CSE

§ This optimization, being worked on by Jiangning, has been half ported to ARM64. But it hasn’t been committed to AArch64 yet, so it can’t be considered a merge blocker.

o [2d] fastcc & guaranteed tail opt

o [1d?] Post-increment NEON ld/st

§ Kevin is now working on this

Cheers,

James

The TL;DR is that we still have a couple of issues outstanding but we’re
well on track for removing AArch64 (and re-bikeshedding ARM64) for the 3.5
release!

Hi James,

Thanks for the info, back from holidays and getting in shape to work
again, this was right on the spot. :wink:

§ [3d] Emperor
· This is a random test suite so has the possibility to uncover more
problems. Our acceptance criterion is 3 days runtime without finding any
bugs.

I agree partially. I don't think that Emperor (or any random test)
reported failures should block to the merge, but I think they should
block release 3.5 up until the last release candidate.

cheers,
--renato