Add a class that multiplexes two pointer types
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 17 Dec 2020 00:15:01 +0000 (00:15 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 17 Dec 2020 00:15:01 +0000 (00:15 +0000)
commitac62dce5e5ff8e02682e2129e8fecc211c707551
tree3f623df1dae7e03110c1be32b07cccc3ce074ec5
parent0dd48296433763ba6f3a1c9068ce3991fb71e9b9
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.
gcc/mux-utils.h [new file with mode: 0644]