On 11/21/2015 01:30 AM, Richard Biener wrote:
What happens if we remove the nops stripping from integer_zerop? Do other integer predicates strip nops?
Many predicates do, but removing that doesn't break anything in the testsuite. So, how about this?
commit b4714ac166ce22b54e89ebb860d52637a210c550 Author: Jason Merrill <ja...@redhat.com> Date: Sat Nov 21 07:45:01 2015 -0500 PR c++/68385 * tree.c (integer_zerop, integer_onep, integer_each_onep) (integer_all_onesp, integer_minus_onep, integer_pow2p) (integer_nonzerop, integer_truep, tree_log2, tree_floor_log2) (real_zerop, real_onep, real_minus_onep): Remove STRIP_NOPS. diff --git a/gcc/tree.c b/gcc/tree.c index 779fe93..01b2aa8 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -2273,8 +2273,6 @@ zerop (const_tree expr) int integer_zerop (const_tree expr) { - STRIP_NOPS (expr); - switch (TREE_CODE (expr)) { case INTEGER_CST: @@ -2301,8 +2299,6 @@ integer_zerop (const_tree expr) int integer_onep (const_tree expr) { - STRIP_NOPS (expr); - switch (TREE_CODE (expr)) { case INTEGER_CST: @@ -2329,8 +2325,6 @@ integer_onep (const_tree expr) int integer_each_onep (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST) return (integer_onep (TREE_REALPART (expr)) && integer_onep (TREE_IMAGPART (expr))); @@ -2344,8 +2338,6 @@ integer_each_onep (const_tree expr) int integer_all_onesp (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST && integer_all_onesp (TREE_REALPART (expr)) && integer_all_onesp (TREE_IMAGPART (expr))) @@ -2371,8 +2363,6 @@ integer_all_onesp (const_tree expr) int integer_minus_onep (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST) return (integer_all_onesp (TREE_REALPART (expr)) && integer_zerop (TREE_IMAGPART (expr))); @@ -2386,8 +2376,6 @@ integer_minus_onep (const_tree expr) int integer_pow2p (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST && integer_pow2p (TREE_REALPART (expr)) && integer_zerop (TREE_IMAGPART (expr))) @@ -2405,8 +2393,6 @@ integer_pow2p (const_tree expr) int integer_nonzerop (const_tree expr) { - STRIP_NOPS (expr); - return ((TREE_CODE (expr) == INTEGER_CST && !wi::eq_p (expr, 0)) || (TREE_CODE (expr) == COMPLEX_CST @@ -2421,8 +2407,6 @@ integer_nonzerop (const_tree expr) int integer_truep (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == VECTOR_CST) return integer_all_onesp (expr); return integer_onep (expr); @@ -2443,8 +2427,6 @@ fixed_zerop (const_tree expr) int tree_log2 (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST) return tree_log2 (TREE_REALPART (expr)); @@ -2457,8 +2439,6 @@ tree_log2 (const_tree expr) int tree_floor_log2 (const_tree expr) { - STRIP_NOPS (expr); - if (TREE_CODE (expr) == COMPLEX_CST) return tree_log2 (TREE_REALPART (expr)); @@ -2582,8 +2562,6 @@ tree_ctz (const_tree expr) int real_zerop (const_tree expr) { - STRIP_NOPS (expr); - switch (TREE_CODE (expr)) { case REAL_CST: @@ -2612,8 +2590,6 @@ real_zerop (const_tree expr) int real_onep (const_tree expr) { - STRIP_NOPS (expr); - switch (TREE_CODE (expr)) { case REAL_CST: @@ -2641,8 +2617,6 @@ real_onep (const_tree expr) int real_minus_onep (const_tree expr) { - STRIP_NOPS (expr); - switch (TREE_CODE (expr)) { case REAL_CST: