[LLVMbugs] [Bug 530] NEW: Loop simplify pass messes up CFG
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Sun Feb 27 11:54:35 PST 2005
http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=530
Summary: Loop simplify pass messes up CFG
Product: libraries
Version: trunk
Platform: All
OS/Version: All
Status: NEW
Severity: critical
Priority: P2
Component: Scalar Optimizations
AssignedTo: unassignedbugs at nondot.org
ReportedBy: jeffc at jolt-lang.org
The loop simplify pass is taking something like this:
for ()
X
if ()
Y
else
Z
Which looks like this:
for:
X
br YBB, ZBB
YBB:
Y
br for
ZBB:
Z
br for
... and transforming it. Note that it *should* cannonicalize this loop, because
there are two backedges. The problem is that it should generate this:
for:
X
br YBB, ZBB
YBB:
Y
br LoopEnd
ZBB:
Z
br LoopEnd
LoopEnd:
br For // single backedge
But instead it is turning it into a bastardized nested loop like this:
for2:
br for
for:
X
br YBB, ZBB
YBB:
Y
br for // single backedge for 'for' loop
ZBB:
Z
br for2 // single backedge for 'for2' loop
... which is ... *NOT GOOD*.
A concrete example of C code that reproduces this is:
int func(int x);
double init_board(double a[10][10], int n)
{
int i;
int j;
double k = 0;
for (j = 0; j < n; j++)
for (i = 0; i < n; i++) {
if (func(i))
a[j][i] = 0.4;
else
k = a[j][i];
}
return k;
}
Note the code generated for the call to func().
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list