------- Comment #3 from rguenth at gcc dot gnu dot org  2008-07-28 19:19 -------
The problem is that the cast in

item = (ce3801b__B_1__fix_io__num___XF_1_10_1_16) iftmp.130;

is stripped away.  item (QImode) is of type

    type <integer_type 0xb7da3000 ce3801b__B_1__fix_io__num___XF_1_10_1_16
        type <integer_type 0xb7d9de38 ce3801b__B_1__TfixB___XF_1_10_1_16
sizes-gimplified public HI
            size <integer_cst 0xb7cc055c constant 16>
            unit size <integer_cst 0xb7cc0578 constant 2>
            align 16 symtab 0 alias set -1 canonical type 0xb7d9de38 precision
16 min <integer_cst 0xb7d9e348 -32768> max <integer_cst 0xb7d9e47c 32767> RM
size <integer_cst 0xb7cc055c 16>>
        sizes-gimplified unsigned QI
        size <integer_cst 0xb7cc047c constant 8>
        unit size <integer_cst 0xb7cc0498 constant 1>
        align 8 symtab 0 alias set 0 canonical type 0xb7da3000 precision 8 min
<integer_cst 0xb7d9e4d0 16> max <integer_cst 0xb7d9e4ec 160> RM size
<integer_cst 0xb7cc047c 8>>

and iftmp.130 is of its base-type (HImode).

This happens in fold_gimple_assign

    case GIMPLE_UNARY_RHS:
      result = fold_unary (subcode,
                           gimple_expr_type (stmt),
                           gimple_assign_rhs1 (stmt));

where gimple_expr_type always returns the base-type and so makes this
a no-op cast.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36957

Reply via email to