Re: [PATCH, rs6000] Fix PR92566 by checking VECTOR_UNIT_NONE_P

2019-11-27 Thread Segher Boessenkool
On Wed, Nov 27, 2019 at 02:01:05PM +0800, Kewen.Lin wrote:
> 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.
> 
> Bootstrapped and tested on powerpc64le-linux-gnu.
> Is it ok for trunk?

Okay.  Thanks!


Segher


> 2019-11-27  Kewen Lin  
> 
>   PR tree-optimization/91790
>   * gcc/config/rs6000/rs6000.c (rs6000_preferred_simd_mode): Check by
>   VECTOR_UNIT_NONE_P instead.


[PATCH, rs6000] Fix PR92566 by checking VECTOR_UNIT_NONE_P

2019-11-26 Thread Kewen.Lin
Hi,

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.

Bootstrapped and tested on powerpc64le-linux-gnu.
Is it ok for trunk?

BR,
Kewen


gcc/ChangeLog

2019-11-27  Kewen Lin  

PR tree-optimization/91790
* gcc/config/rs6000/rs6000.c (rs6000_preferred_simd_mode): Check by
VECTOR_UNIT_NONE_P instead.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 5876714..40529e6 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4906,30 +4906,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;
 }