Commit b3c3685a by Jakub Jelinek Committed by Jakub Jelinek

tree-ssa-strlen.c: Include expr.h.

	* tree-ssa-strlen.c: Include expr.h.
	(get_stridx): Don't use c_strlen, instead use string_constant
	and compute string length from it.
	* Makefile.in (tree-ssa-strlen.o): Depend on $(EXPR_H).

From-SVN: r180574
parent 2286a26f
2011-10-27 Jakub Jelinek <jakub@redhat.com>
* tree-ssa-strlen.c: Include expr.h.
(get_stridx): Don't use c_strlen, instead use string_constant
and compute string length from it.
* Makefile.in (tree-ssa-strlen.o): Depend on $(EXPR_H).
2011-10-27 Eric Botcazou <ebotcazou@adacore.com> 2011-10-27 Eric Botcazou <ebotcazou@adacore.com>
PR rtl-optimization/46603 PR rtl-optimization/46603
...@@ -3173,7 +3173,7 @@ tree-ssa-ccp.o : tree-ssa-ccp.c $(TREE_FLOW_H) $(CONFIG_H) \ ...@@ -3173,7 +3173,7 @@ tree-ssa-ccp.o : tree-ssa-ccp.c $(TREE_FLOW_H) $(CONFIG_H) \
$(DBGCNT_H) tree-pretty-print.h gimple-pretty-print.h gimple-fold.h $(DBGCNT_H) tree-pretty-print.h gimple-pretty-print.h gimple-fold.h
tree-ssa-strlen.o : tree-ssa-strlen.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ tree-ssa-strlen.o : tree-ssa-strlen.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TREE_FLOW_H) $(TREE_PASS_H) domwalk.h alloc-pool.h tree-ssa-propagate.h \ $(TREE_FLOW_H) $(TREE_PASS_H) domwalk.h alloc-pool.h tree-ssa-propagate.h \
gimple-pretty-print.h $(PARAMS_H) gimple-pretty-print.h $(PARAMS_H) $(EXPR_H)
tree-sra.o : tree-sra.c $(CONFIG_H) $(SYSTEM_H) coretypes.h alloc-pool.h \ tree-sra.o : tree-sra.c $(CONFIG_H) $(SYSTEM_H) coretypes.h alloc-pool.h \
$(TM_H) $(TREE_H) $(GIMPLE_H) $(CGRAPH_H) $(TREE_FLOW_H) \ $(TM_H) $(TREE_H) $(GIMPLE_H) $(CGRAPH_H) $(TREE_FLOW_H) \
$(IPA_PROP_H) $(DIAGNOSTIC_H) statistics.h $(TREE_DUMP_H) $(TIMEVAR_H) \ $(IPA_PROP_H) $(DIAGNOSTIC_H) statistics.h $(TREE_DUMP_H) $(TIMEVAR_H) \
......
...@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-propagate.h" #include "tree-ssa-propagate.h"
#include "gimple-pretty-print.h" #include "gimple-pretty-print.h"
#include "params.h" #include "params.h"
#include "expr.h"
/* A vector indexed by SSA_NAME_VERSION. 0 means unknown, positive value /* A vector indexed by SSA_NAME_VERSION. 0 means unknown, positive value
is an index into strinfo vector, negative value stands for is an index into strinfo vector, negative value stands for
...@@ -176,7 +177,7 @@ get_addr_stridx (tree exp) ...@@ -176,7 +177,7 @@ get_addr_stridx (tree exp)
static int static int
get_stridx (tree exp) get_stridx (tree exp)
{ {
tree l; tree s, o;
if (TREE_CODE (exp) == SSA_NAME) if (TREE_CODE (exp) == SSA_NAME)
return VEC_index (int, ssa_ver_to_stridx, SSA_NAME_VERSION (exp)); return VEC_index (int, ssa_ver_to_stridx, SSA_NAME_VERSION (exp));
...@@ -188,14 +189,17 @@ get_stridx (tree exp) ...@@ -188,14 +189,17 @@ get_stridx (tree exp)
return idx; return idx;
} }
l = c_strlen (exp, 0); s = string_constant (exp, &o);
if (l != NULL_TREE if (s != NULL_TREE
&& host_integerp (l, 1)) && (o == NULL_TREE || host_integerp (o, 0))
&& TREE_STRING_LENGTH (s) > 0)
{ {
unsigned HOST_WIDE_INT len = tree_low_cst (l, 1); HOST_WIDE_INT offset = o ? tree_low_cst (o, 0) : 0;
if (len == (unsigned int) len const char *p = TREE_STRING_POINTER (s);
&& (int) len >= 0) int max = TREE_STRING_LENGTH (s) - 1;
return ~(int) len;
if (p[max] == '\0' && offset >= 0 && offset <= max)
return ~(int) strlen (p + offset);
} }
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment