tree-vn.c (vn_add): Handle TRUTH_*_EXPR.

2008-06-25  Richard Guenther  <rguenther@suse.de>

	* tree-vn.c (vn_add): Handle TRUTH_*_EXPR.
	(vn_lookup): Likewise.

	* g++.dg/torture/20080625-1.C: New testcase.

From-SVN: r137102
This commit is contained in:
Richard Guenther 2008-06-25 09:58:09 +00:00 committed by Richard Biener
parent ee1f127045
commit 8ef834ca4d
4 changed files with 58 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2008-06-25 Richard Guenther <rguenther@suse.de>
* tree-vn.c (vn_add): Handle TRUTH_*_EXPR.
(vn_lookup): Likewise.
2008-06-25 Richard Guenther <rguenther@suse.de>
PR tree-optimization/35518

View File

@ -1,3 +1,7 @@
2008-06-25 Richard Guenther <rguenther@suse.de>
* g++.dg/torture/20080625-1.C: New testcase.
2008-06-24 Paul Thomas <pault@gcc.gnu.org>
PR fortran/36371

View File

@ -0,0 +1,27 @@
extern "C" {
typedef unsigned char sal_Bool;
typedef struct _rtl_uString {
} rtl_uString;
void rtl_uString_release( rtl_uString * str ) throw ();
}
class OUString {
rtl_uString * pData;
public:
OUString() {}
~OUString() {
rtl_uString_release( pData );
}
sal_Bool equalsIgnoreAsciiCase( const OUString & str ) const;
};
bool findAndRemove();
long getAttributeProps()
{
long nAttrs = 0;
OUString aValue;
if (findAndRemove()
&& aValue.equalsIgnoreAsciiCase(OUString()))
;
else
nAttrs |= 1;
return nAttrs;
}

View File

@ -196,12 +196,19 @@ vn_add (tree expr, tree val)
SSA_NAME_VALUE (expr) = val;
break;
}
else if (TREE_CODE (expr) == ADDR_EXPR)
switch (TREE_CODE (expr))
{
case ADDR_EXPR:
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR:
case TRUTH_NOT_EXPR:
vn_nary_op_insert (expr, val);
break;
break;
default:
gcc_unreachable ();
}
/* FALLTHROUGH */
break;
default:
gcc_unreachable ();
}
@ -263,9 +270,18 @@ vn_lookup (tree expr)
return vn_reference_lookup (expr, NULL, false);
else if (TREE_CODE (expr) == SSA_NAME)
return SSA_NAME_VALUE (expr);
else if (TREE_CODE (expr) == ADDR_EXPR)
return vn_nary_op_lookup (expr);
/* FALLTHROUGH */
switch (TREE_CODE (expr))
{
case ADDR_EXPR:
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR:
case TRUTH_NOT_EXPR:
return vn_nary_op_lookup (expr);
default:
gcc_unreachable ();
}
break;
default:
gcc_unreachable ();
}