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