With this update the isl AST generation extracts disjunctive constraints early
on. As a result, code that previously resulted in two branches with (close-to)
identical code within them:
if (P <= -1) {
for (int c0 = 0; c0 < N; c0 += 1)
Stmt_store(c0);
} else if (P >= 1)
for (int c0 = 0; c0 < N; c0 += 1)
Stmt_store(c0);
results now in only a single branch body:
if (P <= -1 || P >= 1)
for (int c0 = 0; c0 < N; c0 += 1)
Stmt_store(c0);
This resolves http://llvm.org/PR27559
Besides the above change, this isl update brings better simplification of
sets/maps containing existentially quantified dimensions and fixes a bug in
isl's coalescing.
llvm-svn: 272500
30 lines
822 B
C
30 lines
822 B
C
{
|
|
for (int c0 = 0; c0 < n - 31; c0 += 32)
|
|
for (int c1 = 0; c1 <= n; c1 += 32) {
|
|
if (n >= c1 + 32) {
|
|
for (int c2 = 0; c2 <= 31; c2 += 1)
|
|
for (int c3 = 0; c3 <= 31; c3 += 1)
|
|
S_1(c0 + c2, c1 + c3);
|
|
} else {
|
|
for (int c2 = 0; c2 <= 31; c2 += 1) {
|
|
for (int c3 = 0; c3 < n - c1; c3 += 1)
|
|
S_1(c0 + c2, c1 + c3);
|
|
S_2(c0 + c2);
|
|
}
|
|
}
|
|
}
|
|
for (int c1 = 0; c1 < n; c1 += 32) {
|
|
if (n >= c1 + 32) {
|
|
for (int c2 = 0; c2 < (n + 32) % 32; c2 += 1)
|
|
for (int c3 = 0; c3 <= 31; c3 += 1)
|
|
S_1(-((n + 32) % 32) + n + c2, c1 + c3);
|
|
} else {
|
|
for (int c2 = 0; c2 < n - c1; c2 += 1) {
|
|
for (int c3 = 0; c3 < n - c1; c3 += 1)
|
|
S_1(c1 + c2, c1 + c3);
|
|
S_2(c1 + c2);
|
|
}
|
|
}
|
|
}
|
|
}
|