* [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).