Commit b65307e9 by Li Jia He Committed by Li Jia He

Fix a typo in two_value_replacement function

GCC revision 267634 implemented two_value_replacement function.
However, a typo occurred during the parameter check, which caused
us to miss some optimizations.

The intent of the code might be to check that the input parameters
are const int and their difference is one.  However, when I read
the code, I found that it is wrong to detect whether an input data
plus one is equal to itself.  This could be a typo.

2019-05-07  Li Jia He  <helijia@linux.ibm.com>

	* tree-ssa-phiopt.c (two_value_replacement): Fix a typo in parameter
	detection.
	* gcc.dg/tree-ssa/pr37508.c: Add the no-ssa-phiopt option to skip phi
	optimization.
	* gcc.dg/tree-ssa/pr88676-2.c: New testcase.

From-SVN: r270934
parent caa3bffa
2019-05-07 Li Jia He <helijia@linux.ibm.com>
* tree-ssa-phiopt.c (two_value_replacement): Fix a typo in parameter
detection.
2019-05-06 Segher Boessenkool <segher@kernel.crashing.org> 2019-05-06 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (FIRST_ALTIVEC_REGNO, LAST_ALTIVEC_REGNO) * config/rs6000/rs6000.md (FIRST_ALTIVEC_REGNO, LAST_ALTIVEC_REGNO)
......
2019-05-07 Li Jia He <helijia@linux.ibm.com>
* gcc.dg/tree-ssa/pr37508.c: Add the no-ssa-phiopt option to skip phi
optimization.
* gcc.dg/tree-ssa/pr88676-2.c: New testcase.
2019-05-06 Steven G. Kargl <kargl@gcc.gnu.org> 2019-05-06 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/90290 PR fortran/90290
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1" } */ /* { dg-options "-O2 -fno-ssa-phiopt -fno-tree-fre -fdump-tree-vrp1" } */
struct foo1 { struct foo1 {
int i:1; int i:1;
...@@ -22,7 +22,7 @@ int test2 (struct foo2 *x) ...@@ -22,7 +22,7 @@ int test2 (struct foo2 *x)
{ {
if (x->i == 0) if (x->i == 0)
return 1; return 1;
else if (x->i == -1) /* This test is already folded to false by ccp1. */ else if (x->i == -1) /* This test is already optimized by ccp1 or phiopt1. */
return 1; return 1;
return 0; return 0;
} }
...@@ -31,7 +31,7 @@ int test3 (struct foo1 *x) ...@@ -31,7 +31,7 @@ int test3 (struct foo1 *x)
{ {
if (x->i == 0) if (x->i == 0)
return 1; return 1;
else if (x->i == 1) /* This test is already folded to false by fold. */ else if (x->i == 1) /* This test is already optimized by ccp1 or phiopt1. */
return 1; return 1;
return 0; return 0;
} }
......
/* PR tree-optimization/88676 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-phiopt1" } */
/* { dg-final { scan-tree-dump-not " = PHI <" "phiopt1" } } */
struct foo1 {
int i:1;
};
struct foo2 {
unsigned i:1;
};
int test1 (struct foo1 *x)
{
if (x->i == 0)
return 1;
else if (x->i == 1)
return 1;
return 0;
}
int test2 (struct foo2 *x)
{
if (x->i == 0)
return 1;
else if (x->i == -1)
return 1;
return 0;
}
...@@ -602,7 +602,7 @@ two_value_replacement (basic_block cond_bb, basic_block middle_bb, ...@@ -602,7 +602,7 @@ two_value_replacement (basic_block cond_bb, basic_block middle_bb,
|| TREE_CODE (arg1) != INTEGER_CST || TREE_CODE (arg1) != INTEGER_CST
|| (tree_int_cst_lt (arg0, arg1) || (tree_int_cst_lt (arg0, arg1)
? wi::to_widest (arg0) + 1 != wi::to_widest (arg1) ? wi::to_widest (arg0) + 1 != wi::to_widest (arg1)
: wi::to_widest (arg1) + 1 != wi::to_widest (arg1))) : wi::to_widest (arg1) + 1 != wi::to_widest (arg0)))
return false; return false;
if (!empty_block_p (middle_bb)) if (!empty_block_p (middle_bb))
......
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