Incredible effects of extending AtomicSDNode::Ops


As part of enhancing atomic operations in the ARM backend, we need to
extend the Ops array in AtomicSDNode.

This array is a private member of AtomicSDNode, so it's only
accessible within 85 lines of code, none of which have anything to do
with its size. Therefore, increasing the size of Ops shouldn't at all
affect the behaviour of LLVM, we supposed.

Much to our surprise, this isn't as trivial.

Even this innocuous change:

Hi Artyom,

We've just depleted our imagination on how this can at all be
possible, so we welcome your advice.

I suspect it's that SDNodes are allocated using a BumpPtrAllocator
(sort of) with a maximum size of sizeof(LargestSDNode). Changing that
typedef to AtomicSDNode with your additions makes all the tests pass
again for me.