https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62312
Bug ID: 62312 Summary: [4.9/5 Regression] [SH] Invalid operands for opcode div0s Product: gcc Version: 4.9.1 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: kkojima at gcc dot gnu.org CC: glaubitz at physik dot fu-berlin.de, olegendo at gcc dot gnu.org Target: sh*-*-* Created attachment 33420 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33420&action=edit A reduced test case for -O2 The attached test case generates an invalid instruction like "div0s @(4,r8),r1" with -O2. It seems that (define_insn "*cmp_div0s_0" [(set (reg:SI T_REG) (eq:SI (lshiftrt:SI (match_operand:SI 0 "arith_reg_operand") (const_int 31)) (ge:SI (match_operand:SI 1 "arith_reg_operand") (const_int 0))))] "TARGET_SH1" "div0s %0,%1" [(set_attr "type" "arith")]) has no constraints.