Hi, Consider this embarassingly trivial function:
void foo (int a) { while (a--) ; } Here is the .optimized tree dump that we produce for this test: ;; Function foo (foo) Analyzing Edge Insertions. foo (a) { int D.1476; <L3>:; <L0>:; a = a - 1; D.1476 = -000000001; if (a != D.1476) goto <L0>; else goto <L2>; <L2>:; return; } Why is D.1476 not being propagated? IVOPTS introduces it, but I don't see any reason why... Also, why all the leading zeros? Is there something special about that constant? The initial RTL gcc produces for the assignment to D.1476 is also suboptimal: ;; D.1476 = -000000001 (insn 21 19 22 (set (reg:SI 64) (const_int -1 [0xffffffffffffffff])) -1 (nil) (nil)) (insn 22 21 0 (set (reg:SI 62 [ D.1476 ]) (reg:SI 64)) -1 (nil) (nil)) Strange... Does anyone know a reason for why this happens? Gr. Steven