Message ID | 87inl1ut56.fsf@linaro.org |
---|---|
State | Accepted |
Commit | bde63fdea41c6c9952ab3607eb497d5c698e85c3 |
Headers | show |
Series | [1/2] Add get_next_strinfo helper function | expand |
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; > } > } >
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
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; } }