http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55838
--- Comment #6 from Steven Bosscher <steven at gcc dot gnu.org> 2013-01-01
19:51:12 UTC ---
The nonsense set comes from force_operand:
Breakpoint 7, unroll_loop_runtime_iterations (loop=0x7ffff6b46f68) at
../../trunk/gcc/loop-unroll.c:1041
1041 start_sequence ();
(gdb) next
1042 old_niter = niter = gen_reg_rtx (desc->mode);
(gdb)
1043 tmp = force_operand (copy_rtx (desc->niter_expr), niter);
(gdb) p debug_rtx(niter)
(reg:QI 124)
$31 = void
(gdb) next
1044 if (tmp != niter)
(gdb) p debug_rtx_list (get_last_insn(), -99)
(insn 91 0 92 (set (reg:QI 126)
(const_int -126 [0xffffffffffffff82])) -1
(nil))
(insn 92 91 93 (parallel [
(set (reg:QI 125)
(minus:QI (reg:QI 126)
(subreg:QI (reg:SI 113 [ ivtmp.14 ]) 0)))
(clobber (reg:CC 17 flags))
]) -1
(nil))
(insn 93 92 94 (set (reg:QI 127)
(const_int 129 [0x81])) -1
(nil))
(insn 94 93 95 (set (reg:CC 17 flags)
(compare:CC (reg:QI 125)
(reg:QI 127))) -1
(nil))
(insn 95 94 0 (set (reg:QI 128)
(geu:QI (reg:CC 17 flags)
(const_int 0 [0]))) -1
(expr_list:REG_EQUAL (udiv:QI (reg:QI 125)
(const_int 129 [0x81]))
(nil)))
$32 = void
(gdb)