]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/69713 (Invalid code of optimization in SH)
authorOleg Endo <olegendo@gcc.gnu.org>
Thu, 11 Feb 2016 09:15:26 +0000 (09:15 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Thu, 11 Feb 2016 09:15:26 +0000 (09:15 +0000)
gcc/
Backport from mainline
2016-02-11  Oleg Endo  <olegendo@gcc.gnu.org>

PR target/69713
* config/sh/sh.md (casesi_worker_0): Add T_REG use.

From-SVN: r233329

gcc/ChangeLog
gcc/config/sh/sh.md

index 5ac9db343a7890b7ddaa294c31af0fdea5290fb4..6c91448fb758048eaa48ae88ed7b3657def9a322 100644 (file)
@@ -1,3 +1,11 @@
+2016-02-11  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       Backport from mainline
+       2016-02-11  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/69713
+       * config/sh/sh.md (casesi_worker_0): Add T_REG use.
+
 2016-02-11  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index c1caabd3a10f8dc035dbc553929d4c7952bf44ea..906abb77365290d520017a909f97cce1fb8b1923 100644 (file)
@@ -10719,12 +10719,16 @@ label:
 ;; ??? reload might clobber r0 if we use it explicitly in the RTL before
 ;; reload; using a R0_REGS pseudo reg is likely to give poor code.
 ;; So we keep the use of r0 hidden in a R0_REGS clobber until after reload.
+;;
+;; The use on the T_REG in the casesi_worker* patterns links the bounds
+;; checking insns and the table memory access.  See also PR 69713.
 (define_insn "casesi_worker_0"
   [(set (match_operand:SI 0 "register_operand" "=r,r")
        (unspec:SI [(match_operand:SI 1 "register_operand" "0,r")
                 (label_ref (match_operand 2 "" ""))] UNSPEC_CASESI))
    (clobber (match_scratch:SI 3 "=X,1"))
-   (clobber (match_scratch:SI 4 "=&z,z"))]
+   (clobber (match_scratch:SI 4 "=&z,z"))
+   (use (reg:SI T_REG))]
   "TARGET_SH1"
   "#")
 
@@ -10733,7 +10737,8 @@ label:
        (unspec:SI [(match_operand:SI 1 "register_operand" "")
                    (label_ref (match_operand 2 "" ""))] UNSPEC_CASESI))
    (clobber (match_scratch:SI 3 ""))
-   (clobber (match_scratch:SI 4 ""))]
+   (clobber (match_scratch:SI 4))
+   (use (reg:SI T_REG))]
   "TARGET_SH1 && ! TARGET_SH2 && reload_completed"
   [(set (reg:SI R0_REG) (unspec:SI [(label_ref (match_dup 2))] UNSPEC_MOVA))
    (parallel [(set (match_dup 0)
@@ -10751,7 +10756,8 @@ label:
        (unspec:SI [(match_operand:SI 1 "register_operand" "")
                    (label_ref (match_operand 2 "" ""))] UNSPEC_CASESI))
    (clobber (match_scratch:SI 3 ""))
-   (clobber (match_scratch:SI 4 ""))]
+   (clobber (match_scratch:SI 4))
+   (use (reg:SI T_REG))]
   "TARGET_SH2 && reload_completed"
   [(set (reg:SI R0_REG) (unspec:SI [(label_ref (match_dup 2))] UNSPEC_MOVA))
    (parallel [(set (match_dup 0)