From: Roger Sayle Date: Tue, 23 Mar 2004 14:26:43 +0000 (+0000) Subject: re PR rtl-optimization/14669 (Wrong code with -O for enum values expression E4 <... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bb3a37acf0479f9d12c64852163b02cb63fef69e;p=gcc.git re PR rtl-optimization/14669 (Wrong code with -O for enum values expression E4 <= t && t <= E6) 2004-03-23 Kazu Hirata PR optimization/14669 * fold-const.c (fold): Only unwiden integer comparisons for equality or inequality operators, or when the signedness is the same. * g++.dg/opt/fold2.C: New test case. From-SVN: r79859 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index deb8826cd25..5343f2cce94 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-03-23 Kazu Hirata + + PR optimization/14669 + * fold-const.c (fold): Only unwiden integer comparisons for equality + and inequality operators, or when the signedness doesn't change. + 2004-03-23 Jakub Jelinek * config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 84c605528ba..ab43be8d880 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -7535,6 +7535,9 @@ fold (tree expr) else if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE && TREE_CODE (arg0) == NOP_EXPR && (tem = get_unwidened (arg0, NULL_TREE)) != arg0 + && (code == EQ_EXPR || code == NE_EXPR + || TREE_UNSIGNED (TREE_TYPE (arg0)) + == TREE_UNSIGNED (TREE_TYPE (tem))) && (t1 = get_unwidened (arg1, TREE_TYPE (tem))) != 0 && (TREE_TYPE (t1) == TREE_TYPE (tem) || (TREE_CODE (t1) == INTEGER_CST diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 359124ca2c8..c111369c3e3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-03-23 Roger Sayle + + PR optimization/14669 + * g++.dg/opt/fold2.C: New test case. + 2004-03-22 Jakub Jelinek PR c/14069 diff --git a/gcc/testsuite/g++.dg/opt/fold2.C b/gcc/testsuite/g++.dg/opt/fold2.C new file mode 100644 index 00000000000..95063d7ab0b --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/fold2.C @@ -0,0 +1,19 @@ +// PR optimization/14669 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" void abort (void); +extern "C" void exit (int); + +enum ActionType { EE=-1, E0=0, E1, E2 }; + +int main(void) +{ + ActionType t = E0; + + if (E1 <= t && t <= E2) + abort (); + + exit (0); +} +