diff mbox series

[1/2] Add get_next_strinfo helper function

Message ID 87inl1ut56.fsf@linaro.org
State Accepted
Commit bde63fdea41c6c9952ab3607eb497d5c698e85c3
Headers show
Series [1/2] Add get_next_strinfo helper function | expand

Commit Message

Richard Sandiford May 16, 2017, 8:01 a.m. UTC
This patch just adds a helper function for getting the next strinfo
in a chain, since part 2 adds another place where we do that.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Thanks,
Richard


2017-05-16  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-ssa-strlen.c (get_next_strinfo): New function.
	(get_stridx_plus_constant): Use it.
	(zero_length_string): Likewise.
	(adjust_related_strinfos): Likewise.
	(adjust_last_stmt): Likewise.

Comments

Richard Sandiford May 31, 2017, 6:58 a.m. UTC | #1
Ping

Richard Sandiford <richard.sandiford@linaro.org> writes:
> This patch just adds a helper function for getting the next strinfo

> in a chain, since part 2 adds another place where we do that.

>

> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

>

> Thanks,

> Richard

>

>

> 2017-05-16  Richard Sandiford  <richard.sandiford@linaro.org>

>

> gcc/

> 	* tree-ssa-strlen.c (get_next_strinfo): New function.

> 	(get_stridx_plus_constant): Use it.

> 	(zero_length_string): Likewise.

> 	(adjust_related_strinfos): Likewise.

> 	(adjust_last_stmt): Likewise.

>

> Index: gcc/tree-ssa-strlen.c

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

> --- gcc/tree-ssa-strlen.c	2017-05-15 19:57:18.899053381 +0100

> +++ gcc/tree-ssa-strlen.c	2017-05-15 20:50:21.412511763 +0100

> @@ -156,6 +156,19 @@ get_strinfo (int idx)

>    return (*stridx_to_strinfo)[idx];

>  }

>  

> +/* Get the next strinfo in the chain after SI, or null if none.  */

> +

> +static inline strinfo *

> +get_next_strinfo (strinfo *si)

> +{

> +  if (si->next == 0)

> +    return NULL;

> +  strinfo *nextsi = get_strinfo (si->next);

> +  if (nextsi == NULL || nextsi->first != si->first || nextsi->prev != si->idx)

> +    return NULL;

> +  return nextsi;

> +}

> +

>  /* Helper function for get_stridx.  */

>  

>  static int

> @@ -665,10 +678,8 @@ get_stridx_plus_constant (strinfo *bases

>    gcc_checking_assert (compare_tree_int (si->length, off) != -1);

>    for (chainsi = si; chainsi->next; chainsi = si)

>      {

> -      si = get_strinfo (chainsi->next);

> +      si = get_next_strinfo (chainsi);

>        if (si == NULL

> -	  || si->first != chainsi->first

> -	  || si->prev != chainsi->idx

>  	  || si->length == NULL_TREE

>  	  || TREE_CODE (si->length) != INTEGER_CST)

>  	break;

> @@ -736,26 +747,18 @@ zero_length_string (tree ptr, strinfo *c

>        si = verify_related_strinfos (chainsi);

>        if (si)

>  	{

> -	  chainsi = si;

> -	  for (; chainsi->next; chainsi = si)

> +	  do

>  	    {

> -	      if (chainsi->endptr == NULL_TREE)

> +	      gcc_assert (si->length || si->stmt);

> +	      if (si->endptr == NULL_TREE)

>  		{

> -		  chainsi = unshare_strinfo (chainsi);

> -		  chainsi->endptr = ptr;

> +		  si = unshare_strinfo (si);

> +		  si->endptr = ptr;

>  		}

> -	      si = get_strinfo (chainsi->next);

> -	      if (si == NULL

> -		  || si->first != chainsi->first

> -		  || si->prev != chainsi->idx)

> -		break;

> -	    }

> -	  gcc_assert (chainsi->length || chainsi->stmt);

> -	  if (chainsi->endptr == NULL_TREE)

> -	    {

> -	      chainsi = unshare_strinfo (chainsi);

> -	      chainsi->endptr = ptr;

> +	      chainsi = si;

> +	      si = get_next_strinfo (si);

>  	    }

> +	  while (si != NULL);

>  	  if (chainsi->length && integer_zerop (chainsi->length))

>  	    {

>  	      if (chainsi->next)

> @@ -833,12 +836,8 @@ adjust_related_strinfos (location_t loc,

>  	  si->endptr = NULL_TREE;

>  	  si->dont_invalidate = true;

>  	}

> -      if (si->next == 0)

> -	return;

> -      nsi = get_strinfo (si->next);

> -      if (nsi == NULL

> -	  || nsi->first != si->first

> -	  || nsi->prev != si->idx)

> +      nsi = get_next_strinfo (si);

> +      if (nsi == NULL)

>  	return;

>        si = nsi;

>      }

> @@ -995,15 +994,9 @@ adjust_last_stmt (strinfo *si, gimple *s

>  	return;

>        while (firstsi != lastsi)

>  	{

> -	  strinfo *nextsi;

> -	  if (firstsi->next == 0)

> -	    return;

> -	  nextsi = get_strinfo (firstsi->next);

> -	  if (nextsi == NULL

> -	      || nextsi->prev != firstsi->idx

> -	      || nextsi->first != si->first)

> +	  firstsi = get_next_strinfo (firstsi);

> +	  if (firstsi == NULL)

>  	    return;

> -	  firstsi = nextsi;

>  	}

>      }

>
Jakub Jelinek May 31, 2017, 7:02 a.m. UTC | #2
On Wed, May 31, 2017 at 07:58:54AM +0100, Richard Sandiford wrote:
> Ping

> 

> Richard Sandiford <richard.sandiford@linaro.org> writes:

> > This patch just adds a helper function for getting the next strinfo

> > in a chain, since part 2 adds another place where we do that.

> >

> > Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

> >

> > Thanks,

> > Richard

> >

> >

> > 2017-05-16  Richard Sandiford  <richard.sandiford@linaro.org>

> >

> > gcc/

> > 	* tree-ssa-strlen.c (get_next_strinfo): New function.

> > 	(get_stridx_plus_constant): Use it.

> > 	(zero_length_string): Likewise.

> > 	(adjust_related_strinfos): Likewise.

> > 	(adjust_last_stmt): Likewise.


Ok, thanks.

	Jakub
diff mbox series

Patch

Index: gcc/tree-ssa-strlen.c
===================================================================
--- gcc/tree-ssa-strlen.c	2017-05-15 19:57:18.899053381 +0100
+++ gcc/tree-ssa-strlen.c	2017-05-15 20:50:21.412511763 +0100
@@ -156,6 +156,19 @@  get_strinfo (int idx)
   return (*stridx_to_strinfo)[idx];
 }
 
+/* Get the next strinfo in the chain after SI, or null if none.  */
+
+static inline strinfo *
+get_next_strinfo (strinfo *si)
+{
+  if (si->next == 0)
+    return NULL;
+  strinfo *nextsi = get_strinfo (si->next);
+  if (nextsi == NULL || nextsi->first != si->first || nextsi->prev != si->idx)
+    return NULL;
+  return nextsi;
+}
+
 /* Helper function for get_stridx.  */
 
 static int
@@ -665,10 +678,8 @@  get_stridx_plus_constant (strinfo *bases
   gcc_checking_assert (compare_tree_int (si->length, off) != -1);
   for (chainsi = si; chainsi->next; chainsi = si)
     {
-      si = get_strinfo (chainsi->next);
+      si = get_next_strinfo (chainsi);
       if (si == NULL
-	  || si->first != chainsi->first
-	  || si->prev != chainsi->idx
 	  || si->length == NULL_TREE
 	  || TREE_CODE (si->length) != INTEGER_CST)
 	break;
@@ -736,26 +747,18 @@  zero_length_string (tree ptr, strinfo *c
       si = verify_related_strinfos (chainsi);
       if (si)
 	{
-	  chainsi = si;
-	  for (; chainsi->next; chainsi = si)
+	  do
 	    {
-	      if (chainsi->endptr == NULL_TREE)
+	      gcc_assert (si->length || si->stmt);
+	      if (si->endptr == NULL_TREE)
 		{
-		  chainsi = unshare_strinfo (chainsi);
-		  chainsi->endptr = ptr;
+		  si = unshare_strinfo (si);
+		  si->endptr = ptr;
 		}
-	      si = get_strinfo (chainsi->next);
-	      if (si == NULL
-		  || si->first != chainsi->first
-		  || si->prev != chainsi->idx)
-		break;
-	    }
-	  gcc_assert (chainsi->length || chainsi->stmt);
-	  if (chainsi->endptr == NULL_TREE)
-	    {
-	      chainsi = unshare_strinfo (chainsi);
-	      chainsi->endptr = ptr;
+	      chainsi = si;
+	      si = get_next_strinfo (si);
 	    }
+	  while (si != NULL);
 	  if (chainsi->length && integer_zerop (chainsi->length))
 	    {
 	      if (chainsi->next)
@@ -833,12 +836,8 @@  adjust_related_strinfos (location_t loc,
 	  si->endptr = NULL_TREE;
 	  si->dont_invalidate = true;
 	}
-      if (si->next == 0)
-	return;
-      nsi = get_strinfo (si->next);
-      if (nsi == NULL
-	  || nsi->first != si->first
-	  || nsi->prev != si->idx)
+      nsi = get_next_strinfo (si);
+      if (nsi == NULL)
 	return;
       si = nsi;
     }
@@ -995,15 +994,9 @@  adjust_last_stmt (strinfo *si, gimple *s
 	return;
       while (firstsi != lastsi)
 	{
-	  strinfo *nextsi;
-	  if (firstsi->next == 0)
-	    return;
-	  nextsi = get_strinfo (firstsi->next);
-	  if (nextsi == NULL
-	      || nextsi->prev != firstsi->idx
-	      || nextsi->first != si->first)
+	  firstsi = get_next_strinfo (firstsi);
+	  if (firstsi == NULL)
 	    return;
-	  firstsi = nextsi;
 	}
     }