tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): Look through any value-preserving cast.

* tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): Look
        through any value-preserving cast.

From-SVN: r84244
This commit is contained in:
Richard Henderson 2004-07-07 17:03:08 -07:00 committed by Richard Henderson
parent b49fcebddd
commit d969ee71f4
2 changed files with 27 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2004-07-07 Richard Henderson <rth@redhat.com>
* tree-ssa-dom.c (simplify_switch_and_lookup_avail_expr): Look
through any value-preserving cast.
2004-07-07 Alexandre Oliva <aoliva@redhat.com>
* function.c (assign_parm_find_data_types): Call

View File

@ -2460,15 +2460,33 @@ simplify_switch_and_lookup_avail_expr (tree stmt,
def = TREE_OPERAND (def, 1);
if (TREE_CODE (def) == NOP_EXPR)
{
int need_precision;
bool fail;
def = TREE_OPERAND (def, 0);
#ifdef ENABLE_CHECKING
/* ??? Why was Jeff testing this? We are gimple... */
if (!is_gimple_val (def))
abort ();
#endif
to = TREE_TYPE (cond);
ti = TREE_TYPE (def);
/* If we have an extension that preserves sign, then we
/* If we have an extension that preserves value, then we
can copy the source value into the switch. */
if (TYPE_UNSIGNED (to) == TYPE_UNSIGNED (ti)
&& TYPE_PRECISION (to) >= TYPE_PRECISION (ti)
&& is_gimple_val (def))
need_precision = TYPE_PRECISION (ti);
fail = false;
if (TYPE_UNSIGNED (to) && !TYPE_UNSIGNED (ti))
fail = true;
else if (!TYPE_UNSIGNED (to) && TYPE_UNSIGNED (ti))
need_precision += 1;
if (TYPE_PRECISION (to) < need_precision)
fail = true;
if (!fail)
{
SWITCH_COND (stmt) = def;
ann->modified = 1;