http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54128
--- Comment #6 from Steve Ellcey <sje at gcc dot gnu.org> 2012-08-10 20:10:56 UTC --- It looks like the code generation is going different (between -g and no -g) during the IRA/reload phase. With the cut down test case and using -O2 -g the x.i.195r.reload file (for debug) contains: insn=71, live_throughout: 4, 5, 6, 7, 28, 29, 79, 209, dead_or_set: 2 Insn 71 is: (debug_insn 71 23 25 3 (var_location:SI D#1 (reg:SI 2 $2)) -1 (nil)) (debug_insn 25 71 85 3 (var_location:DI step_c (concatn/v:DI [ (debug_expr:SI D#1) (debug_expr:SI D#2) ])) x.i:55 -1 (nil)) but something about this is causing IRA to think that $2 is a used psuedo register that cannot be used for anything else so it uses $3 instead and that is where the debug and non-debug code differs.