aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKewen Lin <linkw@gcc.gnu.org>2019-11-28 06:34:31 +0000
committerKewen Lin <linkw@gcc.gnu.org>2019-11-28 06:34:31 +0000
commit36232ce998893db84994430ea6a21cb377f664f5 (patch)
tree7334ed585a09e6f70e874513c99d7c48e3dcca74
parent18bb97d0d14680171f1e21dbb66c79c72ad8f126 (diff)
[rs6000] Fix PR92566 by checking VECTOR_UNIT_NONE_P
As Segher pointed out in PR92566, we shouldn't offer some vector modes which aren't supported under current setting. This patch is to make it check by VECTOR_UNIT_NONE_P which is initialized as current architecture masks. 2019-11-28 Kewen Lin <linkw@gcc.gnu.org> PR target/92566 * gcc/config/rs6000/rs6000.c (rs6000_preferred_simd_mode): Check by VECTOR_UNIT_NONE_P instead. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@278800 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c29
2 files changed, 11 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3061b9e7600..7c7ff3f0300 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-28 Kewen Lin <linkw@gcc.gnu.org>
+
+ PR target/92566
+ * gcc/config/rs6000/rs6000.c (rs6000_preferred_simd_mode): Check
+ by VECTOR_UNIT_NONE_P instead.
+
2019-11-28 Hongtao Liu <hongtao.liu@inte.com>
* gcc/config/i386/sse.md (avx512f_maskcmp<mode>3):
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2995348f3ce..3c22f64c139 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4915,30 +4915,11 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
static machine_mode
rs6000_preferred_simd_mode (scalar_mode mode)
{
- if (TARGET_VSX)
- switch (mode)
- {
- case E_DFmode:
- return V2DFmode;
- default:;
- }
- if (TARGET_ALTIVEC || TARGET_VSX)
- switch (mode)
- {
- case E_SFmode:
- return V4SFmode;
- case E_TImode:
- return V1TImode;
- case E_DImode:
- return V2DImode;
- case E_SImode:
- return V4SImode;
- case E_HImode:
- return V8HImode;
- case E_QImode:
- return V16QImode;
- default:;
- }
+ opt_machine_mode vmode = mode_for_vector (mode, 16 / GET_MODE_SIZE (mode));
+
+ if (vmode.exists () && !VECTOR_UNIT_NONE_P (vmode.require ()))
+ return vmode.require ();
+
return word_mode;
}