There's some problem with this tree (on ia64): <mult_expr 0x2000000000349fb0 type <integer_type 0x20000000002ec750 int SI size <integer_cst 0x20000000002e8930 constant 32> unit size <integer_cst 0x20000000002e8a80 constant 4> align 32 symtab 0 alias set 3 precision 32 min <integer_cst 0x20000000002e8a20 -2147483648> max <integer_cst 0x20000000002e8a50 2147483647> pointer_to_this <pointer_type 0x2000000000316630>> arg 0 <truth_or_expr 0x2000000000349f50 type <integer_type 0x20000000002ec9c0 long unsigned int unsigned DI size <integer_cst 0x20000000002e8ab0 constant 64> unit size <integer_cst 0x20000000002e8c00 constant 8> align 64 symtab 0 alias set -1 precision 64 min <integer_cst 0x20000000002e8c90 0> max <integer_cst 0x20000000002e8cc0 18446744073709551615>> arg 0 <eq_expr 0x2000000000349bf0 type <integer_type 0x20000000002ec9c0 long unsigned int> arg 0 <parm_decl 0x20000000003852b0 block> arg 1 <integer_cst 0x2000000000349bc0 constant 1>> arg 1 <eq_expr 0x2000000000349c50 type <integer_type 0x20000000002ec9c0 long unsigned int> arg 0 <parm_decl 0x20000000003852b0 block> arg 1 <integer_cst 0x2000000000349c20 constant 3>>> arg 1 <integer_cst 0x2000000000349b90 type <integer_type 0x20000000002ec750 int> constant 8>>
expand_mult eventually gets passed (reg:DI XXX) and (const_int 8) and doesn't like the result mode being different from arg0's mode. I'm not sure whether it is supposed to. Also, shouldn't the type of eq_expr and truth_or_expr always be int? Maybe somebody more knowledgeable can comment on this... -- Falk