Arm Backend's GlobalISel Status

What’s the status of GlobalISel for the ARM backend?

I see there is some support and tests for GlobalISel (and a file with unsupported cases: llvm/test/CodeGen/ARM/GlobalISel/arm-unsupported.ll). I want to learn GlobalISel, and this seems to me to be a reasonable place to start, as I believe the Arm backend has less effort focussed on it than e.g. the AArch64 backend.

As someone with a reasonable knowledge of LLVM backends, where would be a good place to start contributing?

To the best of my knowledge, nobody is actively working on GlobalISel for ARM, so it’s great if you want to pick it up. We have a buildbot here that runs the test-suite on armv7 with GlobalISel enabled. This is at -O0, and with the fallback to SelectionDAG enabled (which means it won’t crash if GlobalISel can’t handle something).

From memory, some of the things that are definitely not supported are vectors and Thumb 1. However, I think the best way to start working on this is to just run the test-suite at -O0 without the fallback enabled and see where it breaks.

I did a small writeup in 2018 with what still needed to be done at that point and how I was generally working. Some of it might be out of date but the broad lines might be useful. Hope that helps!

And do let me know if you have any CI-related needs, we can always modify the existing buildbot or add another one for Thumb if you think it would be useful.

1 Like

Thanks for the comprehensive answer!

I think for the moment, we probably don’t need another buildbot, given the current one is also finding issues. Once I’ve shown some real progress, then maybe we can re-evaluate.

I’m not sure how long it will be until I have a first patch prepared, but would you be willing to review patches when I post them?

I’m happy to help review any non-ARM-specific commits (e.g. generic combines) :slight_smile:

1 Like