[committed] Add missing T register clobber for SH port

Jeff Law law@redhat.com
Wed Mar 25 20:14:42 GMT 2020


Whee, more fallout from the pr90275 changes.  Thankfully this time it's a target
issue.

The sh4/sh4eb ports are failing vector-compare-1 execution tests after the cse
changes.  They only run once a week, so this wasn't caught immediately and took
some time to reproduce and analyze.

Ultimately the problem is one define_insn_and_split which, when split, may
clobber the T register.  However, the define_insn_and_split does not show this in
the insn pattern.  This can lead to various passes assuming the previous value in
the T register is still valid when in fact, it's going to be clobbered.  The CSE
changes made this scenario more likely and it showed up as execution failures in
the sh4/sh4eb testsuite.

All the other places where we use sh_split_treg_set_expr have the appropriate
clobber of the T register.

Bootstrapped on sh4-linux-gnu and sh4eb-linux-gnu.  Regression testing in
progress (won't finish for ~12 hours).  No new test as it's covered by vector-
compare-1 in the testsuite.

Jeff




-------------- next part --------------
commit eeb0c7c07133634eb5e98ba0348392684a763c95
Author: Jeff Law <law@redhat.com>
Date:   Wed Mar 25 14:12:32 2020 -0600

    Fix vector-compare-1 regressions on sh4/sh4eb caused by pattern clobbering T reg without expressing that in its RTL.
    
            PR rtl-optimization/90275
            * config/sh/sh.md (mov_neg_si_t): Clobber the T register in the
            pattern.

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 06b06ab68de..3ad7a7aae0d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-25  Jeff Law  <law@redhat.com>
+
+	PR rtl-optimization/90275
+	* config/sh/sh.md (mov_neg_si_t): Clobber the T register in the
+	pattern.
+
 2020-03-25  Jakub Jelinek  <jakub@redhat.com>
 
 	PR target/94292


More information about the Gcc-patches mailing list