------- Comment #4 from rearnsha at gcc dot gnu dot org 2008-12-10 15:38 ------- Some notes on the failure path:
combine generates the pattern (insn 1466 1464 1467 192 regeximp.h:320 (set (reg:SI 1002) (sign_extend:SI (mem/s/j:QI (plus:SI (reg:SI 1000) (mult:SI (reg/v:SI 246 [ opValue.1977 ]) (const_int 32 [0x20]))) [note the address in the mem is not in canonical form] Register allocation realises that a scaled register is not permitted for a sign_extend(mem()) operation and splits the entire sub-expression into a separate insn. However, because that insn is not in canonical form, it then fails to recognize the result. -- rearnsha at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rearnsha at gcc dot gnu dot | |org Keywords| |ice-on-valid-code http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37436