This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Mostly rewrite genrecog


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-


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]