------- 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