https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116413
Michael Matz <matz at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |matz at gcc dot gnu.org --- Comment #8 from Michael Matz <matz at gcc dot gnu.org> --- Yeah, reload doesn't expect ASHIFTs within operands here. The below would fix that: diff --git a/gcc/final.cc b/gcc/final.cc index eb9e065d9f0..5d911586de5 100644 --- a/gcc/final.cc +++ b/gcc/final.cc @@ -3146,6 +3146,7 @@ walk_alter_subreg (rtx *xp, bool *changed) case PLUS: case MULT: case AND: + case ASHIFT: XEXP (x, 0) = walk_alter_subreg (&XEXP (x, 0), changed); XEXP (x, 1) = walk_alter_subreg (&XEXP (x, 1), changed); break;