[10/46] Temporarily make stmt_vec_info a class

Message ID 87pnzdq7mf.fsf@arm.com
State New
Headers show
Series
  • Remove vinfo_for_stmt etc.
Related show

Commit Message

Richard Sandiford July 24, 2018, 9:56 a.m.
This patch turns stmt_vec_info into an unspeakably bad wrapper class
and adds an implicit conversion to the associated gimple stmt.
Having this conversion makes the rest of the series easier to write,
but since the class goes away again at the end of the series, I've
not bothered adding any comments or tried to make it pretty.


2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vectorizer.h (stmt_vec_info): Temporarily change from
	a typedef to a wrapper class.
	(NULL_STMT_VEC_INFO): New macro.
	(vec_info::stmt_infos): Change to vec<stmt_vec_info>.
	(stmt_vec_info::operator*): New function.
	(stmt_vec_info::operator gimple *): Likewise.
	(set_vinfo_for_stmt): Use NULL_STMT_VEC_INFO.
	(add_stmt_costs): Likewise.
	* tree-vect-loop-manip.c (iv_phi_p): Likewise.
	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)
	(vect_get_known_peeling_cost): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	* tree-vect-patterns.c (vect_init_pattern_stmt): Likewise.
	* tree-vect-slp.c (vect_remove_slp_scalar_calls): Likewise.
	* tree-vect-stmts.c (vect_build_gather_load_calls): Likewise.
	(vectorizable_store, free_stmt_vec_infos): Likewise.
	(new_stmt_vec_info): Change return type of xcalloc to
	_stmt_vec_info *.

Comments

Richard Biener July 25, 2018, 9:14 a.m. | #1
On Tue, Jul 24, 2018 at 11:57 AM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>

> This patch turns stmt_vec_info into an unspeakably bad wrapper class

> and adds an implicit conversion to the associated gimple stmt.

> Having this conversion makes the rest of the series easier to write,

> but since the class goes away again at the end of the series, I've

> not bothered adding any comments or tried to make it pretty.


So I guess I do not need to approve it ;)

>

> 2018-07-24  Richard Sandiford  <richard.sandiford@arm.com>

>

> gcc/

>         * tree-vectorizer.h (stmt_vec_info): Temporarily change from

>         a typedef to a wrapper class.

>         (NULL_STMT_VEC_INFO): New macro.

>         (vec_info::stmt_infos): Change to vec<stmt_vec_info>.

>         (stmt_vec_info::operator*): New function.

>         (stmt_vec_info::operator gimple *): Likewise.

>         (set_vinfo_for_stmt): Use NULL_STMT_VEC_INFO.

>         (add_stmt_costs): Likewise.

>         * tree-vect-loop-manip.c (iv_phi_p): Likewise.

>         * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)

>         (vect_get_known_peeling_cost): Likewise.

>         (vect_estimate_min_profitable_iters): Likewise.

>         * tree-vect-patterns.c (vect_init_pattern_stmt): Likewise.

>         * tree-vect-slp.c (vect_remove_slp_scalar_calls): Likewise.

>         * tree-vect-stmts.c (vect_build_gather_load_calls): Likewise.

>         (vectorizable_store, free_stmt_vec_infos): Likewise.

>         (new_stmt_vec_info): Change return type of xcalloc to

>         _stmt_vec_info *.

>

> Index: gcc/tree-vectorizer.h

> ===================================================================

> --- gcc/tree-vectorizer.h       2018-07-24 10:22:30.401309046 +0100

> +++ gcc/tree-vectorizer.h       2018-07-24 10:22:33.829278607 +0100

> @@ -21,12 +21,31 @@ Software Foundation; either version 3, o

>  #ifndef GCC_TREE_VECTORIZER_H

>  #define GCC_TREE_VECTORIZER_H

>

> +class stmt_vec_info {

> +public:

> +  stmt_vec_info () {}

> +  stmt_vec_info (struct _stmt_vec_info *ptr) : m_ptr (ptr) {}

> +  struct _stmt_vec_info *operator-> () const { return m_ptr; }

> +  struct _stmt_vec_info &operator* () const;

> +  operator struct _stmt_vec_info * () const { return m_ptr; }

> +  operator gimple * () const;

> +  operator void * () const { return m_ptr; }

> +  operator bool () const { return m_ptr; }

> +  bool operator == (const stmt_vec_info &x) { return x.m_ptr == m_ptr; }

> +  bool operator == (_stmt_vec_info *x) { return x == m_ptr; }

> +  bool operator != (const stmt_vec_info &x) { return x.m_ptr != m_ptr; }

> +  bool operator != (_stmt_vec_info *x) { return x != m_ptr; }

> +

> +private:

> +  struct _stmt_vec_info *m_ptr;

> +};

> +

> +#define NULL_STMT_VEC_INFO (stmt_vec_info (NULL))

> +

>  #include "tree-data-ref.h"

>  #include "tree-hash-traits.h"

>  #include "target.h"

>

> -typedef struct _stmt_vec_info *stmt_vec_info;

> -

>  /* Used for naming of new temporaries.  */

>  enum vect_var_kind {

>    vect_simple_var,

> @@ -229,7 +248,7 @@ struct vec_info {

>    vec_info_shared *shared;

>

>    /* The mapping of GIMPLE UID to stmt_vec_info.  */

> -  vec<struct _stmt_vec_info *> stmt_vec_infos;

> +  vec<stmt_vec_info> stmt_vec_infos;

>

>    /* All SLP instances.  */

>    auto_vec<slp_instance> slp_instances;

> @@ -1052,6 +1071,17 @@ #define VECT_SCALAR_BOOLEAN_TYPE_P(TYPE)

>         && TYPE_PRECISION (TYPE) == 1           \

>         && TYPE_UNSIGNED (TYPE)))

>

> +inline _stmt_vec_info &

> +stmt_vec_info::operator* () const

> +{

> +  return *m_ptr;

> +}

> +

> +inline stmt_vec_info::operator gimple * () const

> +{

> +  return m_ptr ? m_ptr->stmt : NULL;

> +}

> +

>  extern vec<stmt_vec_info> *stmt_vec_info_vec;

>

>  void set_stmt_vec_info_vec (vec<stmt_vec_info> *);

> @@ -1084,7 +1114,7 @@ set_vinfo_for_stmt (gimple *stmt, stmt_v

>      }

>    else

>      {

> -      gcc_checking_assert (info == NULL);

> +      gcc_checking_assert (info == NULL_STMT_VEC_INFO);

>        (*stmt_vec_info_vec)[uid - 1] = info;

>      }

>  }

> @@ -1261,7 +1291,9 @@ add_stmt_costs (void *data, stmt_vector_

>    unsigned i;

>    FOR_EACH_VEC_ELT (*cost_vec, i, cost)

>      add_stmt_cost (data, cost->count, cost->kind,

> -                  cost->stmt ? vinfo_for_stmt (cost->stmt) : NULL,

> +                  (cost->stmt

> +                   ? vinfo_for_stmt (cost->stmt)

> +                   : NULL_STMT_VEC_INFO),

>                    cost->misalign, cost->where);

>  }

>

> Index: gcc/tree-vect-loop-manip.c

> ===================================================================

> --- gcc/tree-vect-loop-manip.c  2018-06-30 14:56:22.022893750 +0100

> +++ gcc/tree-vect-loop-manip.c  2018-07-24 10:22:33.821278677 +0100

> @@ -1344,7 +1344,7 @@ iv_phi_p (gphi *phi)

>      return false;

>

>    stmt_vec_info stmt_info = vinfo_for_stmt (phi);

> -  gcc_assert (stmt_info != NULL);

> +  gcc_assert (stmt_info != NULL_STMT_VEC_INFO);

>    if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def

>        || STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)

>      return false;

> Index: gcc/tree-vect-loop.c

> ===================================================================

> --- gcc/tree-vect-loop.c        2018-07-24 10:22:30.401309046 +0100

> +++ gcc/tree-vect-loop.c        2018-07-24 10:22:33.821278677 +0100

> @@ -1139,7 +1139,7 @@ vect_compute_single_scalar_iteration_cos

>                     j, si)

>      {

>        struct _stmt_vec_info *stmt_info

> -       = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +       = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>        (void) add_stmt_cost (target_cost_data, si->count,

>                             si->kind, stmt_info, si->misalign,

>                             vect_body);

> @@ -3351,7 +3351,7 @@ vect_get_known_peeling_cost (loop_vec_in

>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)

>         {

>           stmt_vec_info stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           retval += record_stmt_cost (prologue_cost_vec,

>                                       si->count * peel_iters_prologue,

>                                       si->kind, stmt_info, si->misalign,

> @@ -3361,7 +3361,7 @@ vect_get_known_peeling_cost (loop_vec_in

>      FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)

>         {

>           stmt_vec_info stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           retval += record_stmt_cost (epilogue_cost_vec,

>                                       si->count * *peel_iters_epilogue,

>                                       si->kind, stmt_info, si->misalign,

> @@ -3504,7 +3504,7 @@ vect_estimate_min_profitable_iters (loop

>                             j, si)

>             {

>               struct _stmt_vec_info *stmt_info

> -               = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +               = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>               (void) add_stmt_cost (target_cost_data, si->count,

>                                     si->kind, stmt_info, si->misalign,

>                                     vect_epilogue);

> @@ -3541,7 +3541,7 @@ vect_estimate_min_profitable_iters (loop

>        FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo), j, si)

>         {

>           struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           (void) add_stmt_cost (target_cost_data,

>                                 si->count * peel_iters_prologue,

>                                 si->kind, stmt_info, si->misalign,

> @@ -3573,7 +3573,7 @@ vect_estimate_min_profitable_iters (loop

>        FOR_EACH_VEC_ELT (prologue_cost_vec, j, si)

>         {

>           struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           (void) add_stmt_cost (data, si->count, si->kind, stmt_info,

>                                 si->misalign, vect_prologue);

>         }

> @@ -3581,7 +3581,7 @@ vect_estimate_min_profitable_iters (loop

>        FOR_EACH_VEC_ELT (epilogue_cost_vec, j, si)

>         {

>           struct _stmt_vec_info *stmt_info

> -           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;

> +           = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;

>           (void) add_stmt_cost (data, si->count, si->kind, stmt_info,

>                                 si->misalign, vect_epilogue);

>         }

> Index: gcc/tree-vect-patterns.c

> ===================================================================

> --- gcc/tree-vect-patterns.c    2018-07-24 10:22:27.281336751 +0100

> +++ gcc/tree-vect-patterns.c    2018-07-24 10:22:33.825278642 +0100

> @@ -103,7 +103,7 @@ vect_init_pattern_stmt (gimple *pattern_

>  {

>    vec_info *vinfo = orig_stmt_info->vinfo;

>    stmt_vec_info pattern_stmt_info = vinfo->lookup_stmt (pattern_stmt);

> -  if (pattern_stmt_info == NULL)

> +  if (pattern_stmt_info == NULL_STMT_VEC_INFO)

>      pattern_stmt_info = orig_stmt_info->vinfo->add_stmt (pattern_stmt);

>    gimple_set_bb (pattern_stmt, gimple_bb (orig_stmt_info->stmt));

>

> Index: gcc/tree-vect-slp.c

> ===================================================================

> --- gcc/tree-vect-slp.c 2018-07-24 10:22:27.281336751 +0100

> +++ gcc/tree-vect-slp.c 2018-07-24 10:22:33.825278642 +0100

> @@ -4039,7 +4039,7 @@ vect_remove_slp_scalar_calls (slp_tree n

>        if (!is_gimple_call (stmt) || gimple_bb (stmt) == NULL)

>         continue;

>        stmt_info = vinfo_for_stmt (stmt);

> -      if (stmt_info == NULL

> +      if (stmt_info == NULL_STMT_VEC_INFO

>           || is_pattern_stmt_p (stmt_info)

>           || !PURE_SLP_STMT (stmt_info))

>         continue;

> Index: gcc/tree-vect-stmts.c

> ===================================================================

> --- gcc/tree-vect-stmts.c       2018-07-24 10:22:30.401309046 +0100

> +++ gcc/tree-vect-stmts.c       2018-07-24 10:22:33.829278607 +0100

> @@ -2865,7 +2865,7 @@ vect_build_gather_load_calls (gimple *st

>           new_stmt = SSA_NAME_DEF_STMT (var);

>         }

>

> -      if (prev_stmt_info == NULL)

> +      if (prev_stmt_info == NULL_STMT_VEC_INFO)

>         STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;

>        else

>         STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;

> @@ -6550,7 +6550,7 @@ vectorizable_store (gimple *stmt, gimple

>

>           vect_finish_stmt_generation (stmt, new_stmt, gsi);

>

> -         if (prev_stmt_info == NULL)

> +         if (prev_stmt_info == NULL_STMT_VEC_INFO)

>             STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;

>           else

>             STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;

> @@ -9805,7 +9805,7 @@ vect_remove_stores (gimple *first_stmt)

>  new_stmt_vec_info (gimple *stmt, vec_info *vinfo)

>  {

>    stmt_vec_info res;

> -  res = (stmt_vec_info) xcalloc (1, sizeof (struct _stmt_vec_info));

> +  res = (_stmt_vec_info *) xcalloc (1, sizeof (struct _stmt_vec_info));

>

>    STMT_VINFO_TYPE (res) = undef_vec_info_type;

>    STMT_VINFO_STMT (res) = stmt;

> @@ -9862,7 +9862,7 @@ free_stmt_vec_infos (vec<stmt_vec_info>

>    unsigned int i;

>    stmt_vec_info info;

>    FOR_EACH_VEC_ELT (*v, i, info)

> -    if (info != NULL)

> +    if (info != NULL_STMT_VEC_INFO)

>        free_stmt_vec_info (STMT_VINFO_STMT (info));

>    if (v == stmt_vec_info_vec)

>      stmt_vec_info_vec = NULL;

Patch

Index: gcc/tree-vectorizer.h
===================================================================
--- gcc/tree-vectorizer.h	2018-07-24 10:22:30.401309046 +0100
+++ gcc/tree-vectorizer.h	2018-07-24 10:22:33.829278607 +0100
@@ -21,12 +21,31 @@  Software Foundation; either version 3, o
 #ifndef GCC_TREE_VECTORIZER_H
 #define GCC_TREE_VECTORIZER_H
 
+class stmt_vec_info {
+public:
+  stmt_vec_info () {}
+  stmt_vec_info (struct _stmt_vec_info *ptr) : m_ptr (ptr) {}
+  struct _stmt_vec_info *operator-> () const { return m_ptr; }
+  struct _stmt_vec_info &operator* () const;
+  operator struct _stmt_vec_info * () const { return m_ptr; }
+  operator gimple * () const;
+  operator void * () const { return m_ptr; }
+  operator bool () const { return m_ptr; }
+  bool operator == (const stmt_vec_info &x) { return x.m_ptr == m_ptr; }
+  bool operator == (_stmt_vec_info *x) { return x == m_ptr; }
+  bool operator != (const stmt_vec_info &x) { return x.m_ptr != m_ptr; }
+  bool operator != (_stmt_vec_info *x) { return x != m_ptr; }
+
+private:
+  struct _stmt_vec_info *m_ptr;
+};
+
+#define NULL_STMT_VEC_INFO (stmt_vec_info (NULL))
+
 #include "tree-data-ref.h"
 #include "tree-hash-traits.h"
 #include "target.h"
 
-typedef struct _stmt_vec_info *stmt_vec_info;
-
 /* Used for naming of new temporaries.  */
 enum vect_var_kind {
   vect_simple_var,
@@ -229,7 +248,7 @@  struct vec_info {
   vec_info_shared *shared;
 
   /* The mapping of GIMPLE UID to stmt_vec_info.  */
-  vec<struct _stmt_vec_info *> stmt_vec_infos;
+  vec<stmt_vec_info> stmt_vec_infos;
 
   /* All SLP instances.  */
   auto_vec<slp_instance> slp_instances;
@@ -1052,6 +1071,17 @@  #define VECT_SCALAR_BOOLEAN_TYPE_P(TYPE)
        && TYPE_PRECISION (TYPE) == 1		\
        && TYPE_UNSIGNED (TYPE)))
 
+inline _stmt_vec_info &
+stmt_vec_info::operator* () const
+{
+  return *m_ptr;
+}
+
+inline stmt_vec_info::operator gimple * () const
+{
+  return m_ptr ? m_ptr->stmt : NULL;
+}
+
 extern vec<stmt_vec_info> *stmt_vec_info_vec;
 
 void set_stmt_vec_info_vec (vec<stmt_vec_info> *);
@@ -1084,7 +1114,7 @@  set_vinfo_for_stmt (gimple *stmt, stmt_v
     }
   else
     {
-      gcc_checking_assert (info == NULL);
+      gcc_checking_assert (info == NULL_STMT_VEC_INFO);
       (*stmt_vec_info_vec)[uid - 1] = info;
     }
 }
@@ -1261,7 +1291,9 @@  add_stmt_costs (void *data, stmt_vector_
   unsigned i;
   FOR_EACH_VEC_ELT (*cost_vec, i, cost)
     add_stmt_cost (data, cost->count, cost->kind,
-		   cost->stmt ? vinfo_for_stmt (cost->stmt) : NULL,
+		   (cost->stmt
+		    ? vinfo_for_stmt (cost->stmt)
+		    : NULL_STMT_VEC_INFO),
 		   cost->misalign, cost->where);
 }
 
Index: gcc/tree-vect-loop-manip.c
===================================================================
--- gcc/tree-vect-loop-manip.c	2018-06-30 14:56:22.022893750 +0100
+++ gcc/tree-vect-loop-manip.c	2018-07-24 10:22:33.821278677 +0100
@@ -1344,7 +1344,7 @@  iv_phi_p (gphi *phi)
     return false;
 
   stmt_vec_info stmt_info = vinfo_for_stmt (phi);
-  gcc_assert (stmt_info != NULL);
+  gcc_assert (stmt_info != NULL_STMT_VEC_INFO);
   if (STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def
       || STMT_VINFO_DEF_TYPE (stmt_info) == vect_double_reduction_def)
     return false;
Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	2018-07-24 10:22:30.401309046 +0100
+++ gcc/tree-vect-loop.c	2018-07-24 10:22:33.821278677 +0100
@@ -1139,7 +1139,7 @@  vect_compute_single_scalar_iteration_cos
 		    j, si)
     {
       struct _stmt_vec_info *stmt_info
-	= si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	= si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
       (void) add_stmt_cost (target_cost_data, si->count,
 			    si->kind, stmt_info, si->misalign,
 			    vect_body);
@@ -3351,7 +3351,7 @@  vect_get_known_peeling_cost (loop_vec_in
     FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
 	{
 	  stmt_vec_info stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  retval += record_stmt_cost (prologue_cost_vec,
 				      si->count * peel_iters_prologue,
 				      si->kind, stmt_info, si->misalign,
@@ -3361,7 +3361,7 @@  vect_get_known_peeling_cost (loop_vec_in
     FOR_EACH_VEC_ELT (*scalar_cost_vec, j, si)
 	{
 	  stmt_vec_info stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  retval += record_stmt_cost (epilogue_cost_vec,
 				      si->count * *peel_iters_epilogue,
 				      si->kind, stmt_info, si->misalign,
@@ -3504,7 +3504,7 @@  vect_estimate_min_profitable_iters (loop
 			    j, si)
 	    {
 	      struct _stmt_vec_info *stmt_info
-		= si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+		= si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	      (void) add_stmt_cost (target_cost_data, si->count,
 				    si->kind, stmt_info, si->misalign,
 				    vect_epilogue);
@@ -3541,7 +3541,7 @@  vect_estimate_min_profitable_iters (loop
       FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo), j, si)
 	{
 	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  (void) add_stmt_cost (target_cost_data,
 				si->count * peel_iters_prologue,
 				si->kind, stmt_info, si->misalign,
@@ -3573,7 +3573,7 @@  vect_estimate_min_profitable_iters (loop
       FOR_EACH_VEC_ELT (prologue_cost_vec, j, si)
 	{
 	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
 				si->misalign, vect_prologue);
 	}
@@ -3581,7 +3581,7 @@  vect_estimate_min_profitable_iters (loop
       FOR_EACH_VEC_ELT (epilogue_cost_vec, j, si)
 	{
 	  struct _stmt_vec_info *stmt_info
-	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
+	    = si->stmt ? vinfo_for_stmt (si->stmt) : NULL_STMT_VEC_INFO;
 	  (void) add_stmt_cost (data, si->count, si->kind, stmt_info,
 				si->misalign, vect_epilogue);
 	}
Index: gcc/tree-vect-patterns.c
===================================================================
--- gcc/tree-vect-patterns.c	2018-07-24 10:22:27.281336751 +0100
+++ gcc/tree-vect-patterns.c	2018-07-24 10:22:33.825278642 +0100
@@ -103,7 +103,7 @@  vect_init_pattern_stmt (gimple *pattern_
 {
   vec_info *vinfo = orig_stmt_info->vinfo;
   stmt_vec_info pattern_stmt_info = vinfo->lookup_stmt (pattern_stmt);
-  if (pattern_stmt_info == NULL)
+  if (pattern_stmt_info == NULL_STMT_VEC_INFO)
     pattern_stmt_info = orig_stmt_info->vinfo->add_stmt (pattern_stmt);
   gimple_set_bb (pattern_stmt, gimple_bb (orig_stmt_info->stmt));
 
Index: gcc/tree-vect-slp.c
===================================================================
--- gcc/tree-vect-slp.c	2018-07-24 10:22:27.281336751 +0100
+++ gcc/tree-vect-slp.c	2018-07-24 10:22:33.825278642 +0100
@@ -4039,7 +4039,7 @@  vect_remove_slp_scalar_calls (slp_tree n
       if (!is_gimple_call (stmt) || gimple_bb (stmt) == NULL)
 	continue;
       stmt_info = vinfo_for_stmt (stmt);
-      if (stmt_info == NULL
+      if (stmt_info == NULL_STMT_VEC_INFO
 	  || is_pattern_stmt_p (stmt_info)
 	  || !PURE_SLP_STMT (stmt_info))
 	continue;
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c	2018-07-24 10:22:30.401309046 +0100
+++ gcc/tree-vect-stmts.c	2018-07-24 10:22:33.829278607 +0100
@@ -2865,7 +2865,7 @@  vect_build_gather_load_calls (gimple *st
 	  new_stmt = SSA_NAME_DEF_STMT (var);
 	}
 
-      if (prev_stmt_info == NULL)
+      if (prev_stmt_info == NULL_STMT_VEC_INFO)
 	STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
       else
 	STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
@@ -6550,7 +6550,7 @@  vectorizable_store (gimple *stmt, gimple
 
 	  vect_finish_stmt_generation (stmt, new_stmt, gsi);
 
-	  if (prev_stmt_info == NULL)
+	  if (prev_stmt_info == NULL_STMT_VEC_INFO)
 	    STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt;
 	  else
 	    STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt;
@@ -9805,7 +9805,7 @@  vect_remove_stores (gimple *first_stmt)
 new_stmt_vec_info (gimple *stmt, vec_info *vinfo)
 {
   stmt_vec_info res;
-  res = (stmt_vec_info) xcalloc (1, sizeof (struct _stmt_vec_info));
+  res = (_stmt_vec_info *) xcalloc (1, sizeof (struct _stmt_vec_info));
 
   STMT_VINFO_TYPE (res) = undef_vec_info_type;
   STMT_VINFO_STMT (res) = stmt;
@@ -9862,7 +9862,7 @@  free_stmt_vec_infos (vec<stmt_vec_info>
   unsigned int i;
   stmt_vec_info info;
   FOR_EACH_VEC_ELT (*v, i, info)
-    if (info != NULL)
+    if (info != NULL_STMT_VEC_INFO)
       free_stmt_vec_info (STMT_VINFO_STMT (info));
   if (v == stmt_vec_info_vec)
     stmt_vec_info_vec = NULL;