blob: 3d6c229a01633e50131dd9c8b7263cfce5f63c10 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/* The function below expands to a loop whose latch block starts with
a PHI node and the corresponding debug stmt. In RTL, there are no
PHI nodes, but the debug insn that references the incoming k
remains, even though one of the incoming edges has it
uninitialized. After unrolling, however, the debug insn becomes
unconditional, and this exposed a problem in the webizer. Because
DF doesn't combine the uses of an uninitialized pseudo into a
single UD chain, we created a separate web for each use.
Allocating separate registers or stack slots for each uninitialized
use is wasteful, but the problem became more apparent in
-fcompare-debug tests: register numbers went out of sync, and could
have caused codegen differences depending on whether or not the
debug insns were present. The fix was to arrange for web to
combine uninitialized uses into a single web. */
/* { dg-do compile } */
/* { dg-options "-g -O1 -funroll-loops -fcompare-debug -fdump-rtl-web" } */
void foo()
{
unsigned k;
while (--k > 0);
}
/* { dg-final { scan-rtl-dump-not "Web oldreg" "web" } } */
/* { dg-final { cleanup-rtl-dump "web" } } */
|