aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
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
commit34b7ae1dd5f0c01036b2a9308baf15329280733e (patch)
tree7334ed585a09e6f70e874513c99d7c48e3dcca74 /gcc/config
parent9c9cb582fc11b0106be24a3d9f428558aeb7cf45 (diff)
downloadgcc-34b7ae1dd5f0c01036b2a9308baf15329280733e.zip
gcc-34b7ae1dd5f0c01036b2a9308baf15329280733e.tar.gz
gcc-34b7ae1dd5f0c01036b2a9308baf15329280733e.tar.bz2
[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. From-SVN: r278800
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/rs6000/rs6000.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 2995348..3c22f64 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;
}