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