[llvm-dev] RFC: Building GlobalISel by default

Renato Golin via llvm-dev llvm-dev at lists.llvm.org
Sat Jan 14 12:54:53 PST 2017

On 14 January 2017 at 20:03, Mehdi Amini <mehdi.amini at apple.com> wrote:
> Because everyone on their local machine will get the failure before pushing their patch.
> And it’s not just the people working on GlobalISel that will have to cleanup behind.

That's a good point, but goes back to Michael's question, which is
non-trivial. (and largely unrelated to the buildbots question).

> This is a very similar situation to any experimental backend: we turn them on by default when they are stable enough to not disturb the other features in LLVM. There has never be a constraint about “being able to bootstrap” or “run the test-suite”, I don’t see any reason to apply such criteria to GlobalISel, that seems totally arbitrary to me.

That was the second step, enablement, which is not arbitrary. I joined
all stages into one email, and that's the source of confusion. To be
clear, I don't think GlobalISel need to self-host to be built by

But there are environment factors that need to be done in steps.
Building it by default will make all bots instantly build them, and
we'll have to clean up all failures, which sometimes aren't obvious.

Just as an (slightly unrelated) example, we moved from Ubuntu 14 (gcc
4.8) to Ubuntu 16 (gcc 5.4) and found dozens of failures. After 4
months investigating, we realised most of those errors were in GCC or
LD or GLIBC, which we can't easily fix.

Turning on GlobalISel would probably not be that big a deal, but I'd
much rather do it incrementally. I can't see why not.

I didn't know there was a Green Dragon bot, now I do. That puts away
half of my worries. But there's still AArch64 and ARM that I care
about, and I suspect other target maintainers care about their bots
too. So, we should do this one at a time, enabling it via a flag, and
if everything is good, we turn GlobalISel building by default.

> With this state of mind, Green dragon would build X86 and ARM and disable all the other targets, because... why should we care about these? They only make our build less “stable” and “take time”.

That's exactly what I do for that exact reason.

Mind you, "take time" right now, with only ARM and AArch64 building,
one of our bots takes *at least* 4hs. We can't make it faster and we
can't disable it. Turning all targets almost doubles that time, and
I'm not willing to pay that price. I trust the other bots are catching
bugs on their own without that one bot's help.


More information about the llvm-dev mailing list