public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [committed] Fix H8 testsuite failures after recent cselib changes
@ 2020-04-07 23:56 Jeff Law
  0 siblings, 0 replies; only message in thread
From: Jeff Law @ 2020-04-07 23:56 UTC (permalink / raw)
  To: gcc-patches List

[-- Attachment #1: Type: text/plain, Size: 1681 bytes --]

Whee, more fallout from the cselib work.  This is clearly another backend bug.

The H8 port has this peephole:
;; Turn
;;
;;   mov.l er7,er0
;;   add.l #10,er0  (takes 8 bytes)
;;
;; into
;;
;;   sub.l er0,er0
;;   add.b #10,r0l
;;   add.l er7,er0  (takes 6 bytes)

(define_peephole2
  [(set (match_operand:SI 0 "register_operand" "")
        (match_operand:SI 1 "register_operand" ""))
   (set (match_dup 0)
        (plus:SI (match_dup 0)
                 (match_operand:SI 2 "const_int_operand" "")))]
  "(TARGET_H8300H || TARGET_H8300S)
    && REG_P (operands[0]) && REG_P (operands[1])
    && REGNO (operands[0]) != REGNO (operands[1])
    && !satisfies_constraint_L (operands[2])
    && !satisfies_constraint_N (operands[2])
    && ((INTVAL (operands[2]) & 0xff) == INTVAL (operands[2])
        || (INTVAL (operands[2]) & 0xff00) == INTVAL (operands[2])
        || INTVAL (operands[2]) == 0xffff
        || INTVAL (operands[2]) == 0xfffe)"
  [(set (match_dup 0)
        (match_dup 2))
   (set (match_dup 0)
        (plus:SI (match_dup 0)
                 (match_dup 1)))]
  "")

As the comment indicates this saves a couple bytes of space.  But boy it's a bad
idea if operand0 is the stack pointer.  Aside from ICE related to ARG_SIZE notes,
imagine what happens if you take an interrupt after zero-ing $sp, but before the
final add.l.  Nothing good.

The fix is pretty simple, verify operands[0] is not the stack pointer.  I looked
briefly at the other peepholes, but none of the others seem to be fundamentally
broken when a destination is the stack pointer.


The ICE showed up in a good variety of existing tests.  So there's no new test.

Committing to the trunk.

Jeff


[-- Attachment #2: P --]
[-- Type: text/plain, Size: 1256 bytes --]

commit 14162197fd4cf0e3a848d32bd9385876e1b1f249
Author: Jeff Law <law@redhat.com>
Date:   Tue Apr 7 17:55:00 2020 -0600

    Fix a variety of testsuite failures on the H8 after recent cselib changes
    
            PR rtl-optimization/92264
            * config/h8300/h8300.md (mov;add peephole2): Avoid applying when
            the destination is the stack pointer.

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 12803e90b0a..6f2dcfb766c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-07  Jeff Law  <law@redhat.com>
+
+	PR rtl-optimization/92264
+	* config/h8300/h8300.md (mov;add peephole2): Avoid applying when
+	the destination is the stack pointer.
+
 2020-04-07  Jakub Jelinek  <jakub@redhat.com>
 
 	PR rtl-optimization/94291
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index bcc78a4ce4d..fdd2d8b02d7 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -4299,6 +4299,7 @@
 	(plus:SI (match_dup 0)
 		 (match_operand:SI 2 "const_int_operand" "")))]
   "(TARGET_H8300H || TARGET_H8300S)
+    && operands[0] != stack_pointer_rtx
     && REG_P (operands[0]) && REG_P (operands[1])
     && REGNO (operands[0]) != REGNO (operands[1])
     && !satisfies_constraint_L (operands[2])

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-07 23:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-07 23:56 [committed] Fix H8 testsuite failures after recent cselib changes Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).