diff mbox series

middle-end/104496 - fix vectorized_internal_fn_supported_p

Message ID 20220211102820.2CA1913BD9@imap2.suse-dmz.suse.de
State New
Headers show
Series middle-end/104496 - fix vectorized_internal_fn_supported_p | expand

Commit Message

Richard Biener Feb. 11, 2022, 10:28 a.m. UTC
This fixes vectorized_internal_fn_supported_p behavior when
facing vector types with an integer mode.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

2022-02-11  Richard Biener  <rguenther@suse.de>

	PR middle-end/104496
	* internal-fn.cc (vectorized_internal_fn_supported_p):
	Bail out for integer mode vector types.

	* gcc.target/i386/pr104496.c: New testcase.
---
 gcc/internal-fn.cc                       |  3 ++-
 gcc/testsuite/gcc.target/i386/pr104496.c | 12 ++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr104496.c
diff mbox series

Patch

diff --git a/gcc/internal-fn.cc b/gcc/internal-fn.cc
index 71ac483f88a..3f1fbc6c91a 100644
--- a/gcc/internal-fn.cc
+++ b/gcc/internal-fn.cc
@@ -4392,7 +4392,8 @@  vectorized_internal_fn_supported_p (internal_fn ifn, tree type)
     return direct_internal_fn_supported_p (ifn, type, OPTIMIZE_FOR_SPEED);
 
   scalar_mode smode;
-  if (!is_a <scalar_mode> (TYPE_MODE (type), &smode))
+  if (VECTOR_TYPE_P (type)
+      || !is_a <scalar_mode> (TYPE_MODE (type), &smode))
     return false;
 
   machine_mode vmode = targetm.vectorize.preferred_simd_mode (smode);
diff --git a/gcc/testsuite/gcc.target/i386/pr104496.c b/gcc/testsuite/gcc.target/i386/pr104496.c
new file mode 100644
index 00000000000..62d3bc60281
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr104496.c
@@ -0,0 +1,12 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O -mgeneral-regs-only -msse" } */
+
+typedef int __attribute__((__vector_size__ (8))) V;
+V a, b;
+int c;
+
+void
+foo (void)
+{
+  b = 0 != a | b << c;
+}