https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105247
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The problem is that the ia64 backend for some strange reason uses DImode for the shift last operands, while e.g. in GIMPLE they are converted to integer_type_node or so: /* Why oh why didn't Intel arrange for SHIFT_COUNT_TRUNCATED? Now we've got to get rid of stray bits outside the SImode register. */ rtx subshift = gen_reg_rtx (DImode); emit_insn (gen_zero_extendsidi2 (subshift, operands[2])); operands[2] = subshift; and simplify-rtx.cc simply uses the mode of the shift for the shift count.