diff options
author | Kewen Lin <linkw@gcc.gnu.org> | 2019-11-28 06:34:31 +0000 |
---|---|---|
committer | Kewen Lin <linkw@gcc.gnu.org> | 2019-11-28 06:34:31 +0000 |
commit | 34b7ae1dd5f0c01036b2a9308baf15329280733e (patch) | |
tree | 7334ed585a09e6f70e874513c99d7c48e3dcca74 /gcc/config | |
parent | 9c9cb582fc11b0106be24a3d9f428558aeb7cf45 (diff) | |
download | gcc-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.c | 29 |
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; } |