We need to use LCMPXCHG16B_SAVE_RBX if RBX/EBX is being used as
the frame pointer. We previously checked for this during type
legalization, but that's too early to know for sure if the base
pointer is needed.
This patch adds a new pseudo instruction to emit from isel that
uses a virtual register for the RBX input. Then we use the custom
inserter hook to emit LCMPXCHG16B if RBX isn't needed as a base
pointer or LCMPXCHG16B_SAVE_RBX if it is.
The test case is taken from the bugzilla with minor cleanup, but
it's still pretty large.
This also removes LCMPXCHG8B_SAVE_EBX which was not used.
Fixes PR42064.
clang-format not found in user's PATH; not linting file.