Allow 'continue' statements in 'foreach' loops.

This commit is contained in:
Matt Pharr
2011-12-03 09:31:02 -08:00
parent c3b55de1ad
commit a1c0b4f95a
17 changed files with 359 additions and 40 deletions

20
tests/foreach-20.ispc Normal file
View File

@@ -0,0 +1,20 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
for (uniform int i = 0; i < programCount; ++i)
RET[i] = 0;
foreach (i = 0 ... programCount) {
if (i % 2)
continue;
RET[i] = 1;
}
}
export void result(uniform float RET[]) {
RET[programIndex] = (programIndex % 2) ? 0 : 1;
}

20
tests/foreach-21.ispc Normal file
View File

@@ -0,0 +1,20 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
for (uniform int i = 0; i < programCount; ++i)
RET[i] = 0;
foreach (i = 0 ... programCount) {
if (i % 2)
ccontinue;
RET[i] = 1;
}
}
export void result(uniform float RET[]) {
RET[programIndex] = (programIndex % 2) ? 0 : 1;
}

27
tests/foreach-22.ispc Normal file
View File

@@ -0,0 +1,27 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
for (uniform int i = 0; i < 21; ++i)
x[i] = i;
foreach (i = 0 ... 21) {
if (i < 4)
ccontinue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = 1;
RET[0] = 0;
RET[1] = 1;
RET[2] = 2;
RET[3] = 3;
}

27
tests/foreach-23.ispc Normal file
View File

@@ -0,0 +1,27 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
for (uniform int i = 0; i < 21; ++i)
x[i] = i;
foreach (i = 0 ... 21) {
if (i < 4)
continue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = 1;
RET[0] = 0;
RET[1] = 1;
RET[2] = 2;
RET[3] = 3;
}

27
tests/foreach-24.ispc Normal file
View File

@@ -0,0 +1,27 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
for (uniform int i = 0; i < 21; ++i)
x[i] = i;
foreach (i = 0 ... 21) {
if (i < 4)
continue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = 1;
RET[0] = 0;
RET[1] = 1;
RET[2] = 2;
RET[3] = 3;
}

23
tests/foreach-25.ispc Normal file
View File

@@ -0,0 +1,23 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
foreach (i = 0 ... 21) {
x[i] = 0;
if (x[i] != 12345)
continue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = 0;
}

24
tests/foreach-26.ispc Normal file
View File

@@ -0,0 +1,24 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
for (uniform int i = 0; i < 21; ++i)
x[i] = i;
foreach (i = 0 ... 21) {
if (x[i] != 12345)
continue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = min(programIndex, 20);
}

23
tests/foreach-27.ispc Normal file
View File

@@ -0,0 +1,23 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_f(uniform float RET[], uniform float aFOO[]) {
uniform int x[21];
for (uniform int i = 0; i < 21; ++i)
x[i] = i;
foreach (i = 0 ... 21) {
if (x[i] == 12345)
continue;
x[i] = 1;
}
RET[programIndex] = x[min(programIndex, 20)];
}
export void result(uniform float RET[]) {
RET[programIndex] = 1;
}

21
tests/foreach-28.ispc Normal file
View File

@@ -0,0 +1,21 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float ub) {
float b = ub;
RET[programIndex] = 0;
foreach (i = 0 ... 10, j = 0 ... programCount + 1) {
if (b == 12345)
ccontinue;
if (j > 0)
++RET[j-1];
}
}
export void result(uniform float RET[]) {
RET[programIndex] = 10;
}

21
tests/foreach-29.ispc Normal file
View File

@@ -0,0 +1,21 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float ub) {
float b = ub;
RET[programIndex] = 0;
foreach (i = 0 ... 10, j = 0 ... programCount + 1) {
if (ub == 12345)
ccontinue;
if (j > 0)
++RET[j-1];
}
}
export void result(uniform float RET[]) {
RET[programIndex] = 10;
}

20
tests/foreach-30.ispc Normal file
View File

@@ -0,0 +1,20 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float ub) {
RET[programIndex] = 0;
foreach (i = 0 ... 10, j = 0 ... programCount + 1) {
if (i == 5)
continue;
if (j > 0)
++RET[j-1];
}
}
export void result(uniform float RET[]) {
RET[programIndex] = 9;
}

20
tests/foreach-31.ispc Normal file
View File

@@ -0,0 +1,20 @@
export uniform int width() { return programCount; }
uniform int foo(int i);
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float ub) {
RET[programIndex] = 0;
foreach (i = 0 ... 10, j = 0 ... programCount + 1) {
if (i == 5)
ccontinue;
if (j > 0)
++RET[j-1];
}
}
export void result(uniform float RET[]) {
RET[programIndex] = 9;
}