Commit bb3a37ac by Roger Sayle

re PR rtl-optimization/14669 (Wrong code with -O for enum values expression E4 <= t && t <= E6)

2004-03-23  Kazu Hirata  <kazu@cs.umass.edu>

	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
parent f2c79f80
2004-03-23 Kazu Hirata <kazu@cs.umass.edu>
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 <jakub@redhat.com>
* config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file.
......
......@@ -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
......
2004-03-23 Roger Sayle <roger@eyesopen.com>
PR optimization/14669
* g++.dg/opt/fold2.C: New test case.
2004-03-22 Jakub Jelinek <jakub@redhat.com>
PR c/14069
......
// 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);
}
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