public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/marxin/heads/PR93274-make-resolver-static-v2)] i386: Fix up *{add, sub}v<dwi>4_doubleword patterns (PR target/93412)
@ 2020-01-27 10:17 Martin Liska
  0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2020-01-27 10:17 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:a9947bac0799b0c91e21b7c612b80cd0b54016f0

commit a9947bac0799b0c91e21b7c612b80cd0b54016f0
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Sun Jan 26 12:12:36 2020 +0100

    i386: Fix up *{add,sub}v<dwi>4_doubleword patterns (PR target/93412)
    
    In the *{add,sub}v<dwi>4_doubleword patterns, we don't really want to see a
    VOIDmode last operand, because it then means invalid RTL
    (sign_extend:{TI,POI} (const_int ...)) or so, and therefore something we
    don't really handle in the splitter either.  We have
    *{add,sub}v<dwi>4_doubleword_1 pattern for those and that is what combine
    will match, the problem in this testcase is just that it was only RA that
    propagated the constant into the instruction.
    
    In the similar *{add,sub}v<mode>4 patterns, we make sure not to accept
    VOIDmode operand and similarly to these have _1 suffixed variant that allows
    constants.
    
    2020-01-26  Jakub Jelinek  <jakub@redhat.com>
    
    	PR target/93412
    	* config/i386/i386.md (*addv<dwi>4_doubleword, *subv<dwi>4_doubleword):
    	Use nonimmediate_operand instead of x86_64_hilo_general_operand and
    	drop <di> from constraint of last operand.
    
    	* gcc.dg/pr93412.c: New test.

Diff:
---
 gcc/ChangeLog                  |  5 +++++
 gcc/config/i386/i386.md        |  4 ++--
 gcc/testsuite/ChangeLog        |  3 +++
 gcc/testsuite/gcc.dg/pr93412.c | 15 +++++++++++++++
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index db62a7a..420a124 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
 2020-01-26  Jakub Jelinek  <jakub@redhat.com>
 
+	PR target/93412
+	* config/i386/i386.md (*addv<dwi>4_doubleword, *subv<dwi>4_doubleword):
+	Use nonimmediate_operand instead of x86_64_hilo_general_operand and
+	drop <di> from constraint of last operand.
+
 	PR target/93430
 	* config/i386/sse.md (*avx_vperm_broadcast_<mode>): Disallow for
 	TARGET_AVX2 and V4DFmode not in the split condition, but in the
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 98d452a..6e9c9bd 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -6135,7 +6135,7 @@
 	    (sign_extend:<QPWI>
 	      (match_operand:<DWI> 1 "nonimmediate_operand" "%0,0"))
 	    (sign_extend:<QPWI>
-	      (match_operand:<DWI> 2 "x86_64_hilo_general_operand" "r<di>,o")))
+	      (match_operand:<DWI> 2 "nonimmediate_operand" "r,o")))
 	  (sign_extend:<QPWI>
 	    (plus:<DWI> (match_dup 1) (match_dup 2)))))
    (set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
@@ -6644,7 +6644,7 @@
 	    (sign_extend:<QPWI>
 	      (match_operand:<DWI> 1 "nonimmediate_operand" "0,0"))
 	    (sign_extend:<QPWI>
-	      (match_operand:<DWI> 2 "x86_64_hilo_general_operand" "r<di>,o")))
+	      (match_operand:<DWI> 2 "nonimmediate_operand" "r,o")))
 	  (sign_extend:<QPWI>
 	    (minus:<DWI> (match_dup 1) (match_dup 2)))))
    (set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 860d56d..0cbd048 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
 2020-01-26  Jakub Jelinek  <jakub@redhat.com>
 
+	PR target/93412
+	* gcc.dg/pr93412.c: New test.
+
 	PR target/93430
 	* gcc.dg/pr93430.c: New test.
 	* gcc.target/i386/avx2-pr93430.c: New test.
diff --git a/gcc/testsuite/gcc.dg/pr93412.c b/gcc/testsuite/gcc.dg/pr93412.c
new file mode 100644
index 0000000..ba82ae1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr93412.c
@@ -0,0 +1,15 @@
+/* PR target/93412 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-Og" } */
+
+unsigned char a;
+int b;
+unsigned c;
+
+int
+foo (int e, int f, int g, int h, int k, int i, short j)
+{
+  b = __builtin_add_overflow (a, 0, &c);
+  b = __builtin_add_overflow_p (b, a, (unsigned __int128) 0) ? b : 0;
+  return e + f + g + a + h + k + i + j + c;
+}


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

only message in thread, other threads:[~2020-01-27 10:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-27 10:17 [gcc(refs/users/marxin/heads/PR93274-make-resolver-static-v2)] i386: Fix up *{add, sub}v<dwi>4_doubleword patterns (PR target/93412) Martin Liska

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