Add a class that multiplexes two pointer types
This patch adds a pointer_mux<T1, T2> class that provides similar
functionality to:
union { T1 *a; T2 *b; };
...
bool is_b_rather_than_a;
except that the is_b_rather_than_a tag is stored in the low bit
of the pointer. See the comments in the patch for a comparison
between the two approaches and why this one can be more efficient.
I've tried to microoptimise the class a fair bit, since a later
patch uses it extensively in order to keep the sizes of data
structures down.
gcc/
* mux-utils.h: New file.