Hi Richard, I see regressions with the current IBM z13 vector patchset which appear to be related to the new genrecog.
The following two insn definitions only differ in the mode and predicate of the shift count operand. (define_insn "lshr<mode>3" [(set (match_operand:VI 0 "register_operand" "=v") (lshiftrt:VI (match_operand:VI 1 "register_operand" "v") (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))] "TARGET_VX" "vesrl<bhfgq>\t%v0,%v1,%Y2" [(set_attr "op_type" "VRS")]) (define_insn "vlshr<mode>3" [(set (match_operand:VI 0 "register_operand" "=v") (lshiftrt:VI (match_operand:VI 1 "register_operand" "v") (match_operand:VI 2 "register_operand" "v")))] "TARGET_VX" "vesrlv<bhfgq>\t%v0,%v1,%v2" [(set_attr "op_type" "VRR")]) However, the insn-recog.c code only seem to check the predicate. This is a problem since shift_count_or_setmem_operand does not check the mode. if (shift_count_or_setmem_operand (operands[2], SImode) && #line 717 "/home3/andreas/patched/../gcc/gcc/config/s390/vector.md" (TARGET_VX)) return 600; /* lshrv2qi3 */ if (register_operand (operands[2], V2QImode) && #line 747 "/home3/andreas/patched/../gcc/gcc/config/s390/vector.md" (TARGET_VX)) return 630; /* vlshrv2qi3 */ break; I could add a mode check to the predicate. However, I just wanted to check whether this change was intentional. Bye, -Andreas-