https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99305
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
--- gcc/tree-ssa-phiopt.c.jj 2021-01-22 11:41:38.078708425 +0100
+++ gcc/tree-ssa-phiopt.c 2021-03-09 13:15:02.649094949 +0100
@@ -808,14 +808,14 @@ conditional_replacement (basic_block con
nonzero_arg = arg0;
else
return false;
- if (integer_all_onesp (nonzero_arg))
- neg = true;
- else if (integer_pow2p (nonzero_arg))
+ if (integer_pow2p (nonzero_arg))
{
shift = tree_log2 (nonzero_arg);
if (shift && POINTER_TYPE_P (TREE_TYPE (nonzero_arg)))
return false;
}
+ else if (integer_all_onesp (nonzero_arg))
+ neg = true;
else
return false;
should fix this I think. For bool, integer_all_onesp and integer_onep and
integer_pow2p are all true...
We shouldn't negate in that case.