Large GEP splitting, introduced in rL332015, uses a DenseMap<AssertingVH<Value>, ...>. This causes an assertion to fail (in debug builds) or undefined behaviour to occur (in release builds) when a value is RAUWed.
This manifested itself in the 7zip benchmark from the llvm test suite built on ARM with -fstrict-vtable-pointers enabled while RAUWing invariant group launders and splits in CodeGenPrepare.
This patch merges the large offsets of the argument and the result of an invariant.group strip/launder intrinsic before RAUWing.
Please add a comment explaining why the keys can be RAUW'ed, but the values can't.
Please add a comment explaining what happens if the result of the RAUW already exists in the map... or if that isn't possible, why it isn't possible.