https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68536
--- Comment #2 from ktkachov at gcc dot gnu.org --- Sorry, I was doing this on top of the patch posted at https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00686.html The subreg_highpart_operator predicate is defined as: (define_special_predicate "subreg_highpart_operator" (and (match_code "subreg") (match_test "GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))) && SUBREG_BYTE (op) == subreg_highpart_offset (mode, GET_MODE (SUBREG_REG (op)))")))