[Bug tree-optimization/110666] [14 Regression] wrong code at -O1 and above on x86_64-linux-gnu
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jul 14 15:26:39 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110666
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I totally messed up the !=1/!=0 cases for the outer eq case:
Patch
diff --git a/gcc/match.pd b/gcc/match.pd
index 351d9285e92..3de30df8b06 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -6431,8 +6431,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* x != (typeof x)(x == CST) -> CST == 0 ? 1 : (CST == 1 ? (x!=0&&x!=1) : x !=
0) */
/* x != (typeof x)(x != CST) -> CST == 1 ? 1 : (CST == 0 ? (x!=0&&x!=1) : x !=
1) */
-/* x == (typeof x)(x == CST) -> CST == 0 ? 0 : (CST == 1 ? (x==0||x==1) : x !=
0) */
-/* x == (typeof x)(x != CST) -> CST == 1 ? 0 : (CST == 0 ? (x==0||x==1) : x !=
1) */
+/* x == (typeof x)(x == CST) -> CST == 0 ? 0 : (CST == 1 ? (x==0||x==1) : x ==
0) */
+/* x == (typeof x)(x != CST) -> CST == 1 ? 0 : (CST == 0 ? (x==0||x==1) : x ==
1) */
(for outer (ne eq)
(for inner (ne eq)
(simplify
@@ -6457,9 +6457,14 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
)
)
)
- (if (innereq)
- (ne @0 { build_zero_cst (TREE_TYPE (@0)); }))
- (ne @0 { build_one_cst (TREE_TYPE (@0)); }))
+ (with {
+ tree value = build_int_cst (TREE_TYPE (@0), !innereq);
+ }
+ (if (outereq)
+ (eq @0 { value; })
+ (ne @0 { value; })
+ )
+ )
)
)
)
More information about the Gcc-bugs
mailing list