I just noticed we have a spare flag bit in gimple_statement_base which causes subcode to start at bit 15 with consequences for code-generation on the very frequent accesses to this field. Oops.
This is a regression from 4.6 which has /* Padding to get subcode to 16 bit alignment. */ unsigned pad : 1; eeeh ... This is caused by improper reversion of 2012-02-28 Aldy Hernandez <al...@redhat.com> PR middle-end/51752 * gimple.h (gimple_in_transaction): New. (gimple_set_in_transaction): New. (struct gimple_statement_base): Add in_transaction field. Committed to all affected branches as obvious. Richard. 2014-04-01 Richard Biener <rguent...@suse.de> * gimple.h (struct gimple_statement_base): Align subcode to 16 bits. Index: gcc/gimple.h =================================================================== --- gcc/gimple.h (revision 208975) +++ gcc/gimple.h (working copy) @@ -166,6 +166,9 @@ struct GTY((desc ("gimple_statement_stru /* Nonzero if this statement contains volatile operands. */ unsigned has_volatile_ops : 1; + /* Unused. Make sure to align subcode to 16 bits. */ + unsigned pad : 1; + /* The SUBCODE field can be used for tuple-specific flags for tuples that do not require subcodes. Note that SUBCODE should be at least as wide as tree codes, as several tuples store tree codes