Assign result of get_string_lenth to a SSA_NAME (PR tree-optimization/83552).

2017-12-27  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/83552
	* tree-ssa-strlen.c (fold_strstr_to_strncmp): Assign result
	of get_string_lenth to a SSA_NAME if not a GIMPLE value.
2017-12-27  Martin Liska  <mliska@suse.cz>

	PR tree-optimization/83552
	* gcc.dg/pr83552.c: New test.

From-SVN: r256009
This commit is contained in:
Martin Liska 2017-12-27 10:30:14 +01:00 committed by Martin Liska
parent 7ec16b79f0
commit 96863f32b5
4 changed files with 34 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2017-12-27 Martin Liska <mliska@suse.cz>
PR tree-optimization/83552
* tree-ssa-strlen.c (fold_strstr_to_strncmp): Assign result
of get_string_lenth to a SSA_NAME if not a GIMPLE value.
2017-12-27 Tom de Vries <tom@codesourcery.com>
* config/nvptx/nvptx.c (nvptx_option_override): Disable

View file

@ -1,3 +1,8 @@
2017-12-27 Martin Liska <mliska@suse.cz>
PR tree-optimization/83552
* gcc.dg/pr83552.c: New test.
2017-12-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/83540

View file

@ -0,0 +1,13 @@
/* PR tree-optimization/83364 */
/* { dg-options "-O2" } */
char *b;
char d[100];
void a ();
void
c (void)
{
__builtin_strcat (d, "12345");
if (__builtin_strstr (b, d) == b)
a ();
}

View file

@ -3005,6 +3005,16 @@ fold_strstr_to_strncmp (tree rhs1, tree rhs2, gimple *stmt)
{
gimple_stmt_iterator gsi = gsi_for_stmt (call_stmt);
tree strncmp_decl = builtin_decl_explicit (BUILT_IN_STRNCMP);
if (!is_gimple_val (arg1_len))
{
tree arg1_len_tmp = make_ssa_name (TREE_TYPE (arg1_len));
gassign *arg1_stmt = gimple_build_assign (arg1_len_tmp,
arg1_len);
gsi_insert_before (&gsi, arg1_stmt, GSI_SAME_STMT);
arg1_len = arg1_len_tmp;
}
gcall *strncmp_call = gimple_build_call (strncmp_decl, 3,
arg0, arg1, arg1_len);
tree strncmp_lhs = make_ssa_name (integer_type_node);