]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix vector-compare-1 regressions on sh4/sh4eb caused by pattern clobbering T...
authorJeff Law <law@redhat.com>
Wed, 25 Mar 2020 20:33:08 +0000 (14:33 -0600)
committerJeff Law <law@redhat.com>
Wed, 25 Mar 2020 20:33:08 +0000 (14:33 -0600)
            PR rtl-optimization/90275
            * config/sh/sh.md (mov_neg_si_t): Clobber the T register in the
            pattern.

gcc/config/sh/sh.md

index 4a1797160cf0f4ca0d252a1901637a50885af3bd..fc80278a395bef5e742a52446e8c8905fca0ba33 100644 (file)
 ;; Store (negated) T bit as all zeros or ones in a reg.
 ;;     subc    Rn,Rn   ! Rn = Rn - Rn - T; T = T
 ;;     not     Rn,Rn   ! Rn = 0 - Rn
+;;
+;; Note the call to sh_split_treg_set_expr may clobber
+;; the T reg.  We must express this, even though it's
+;; not immediately obvious this pattern changes the
+;; T register.
 (define_insn_and_split "mov_neg_si_t"
   [(set (match_operand:SI 0 "arith_reg_dest" "=r")
-       (neg:SI (match_operand 1 "treg_set_expr")))]
+       (neg:SI (match_operand 1 "treg_set_expr")))
+   (clobber (reg:SI T_REG))]
   "TARGET_SH1"
 {
   gcc_assert (t_reg_operand (operands[1], VOIDmode));