Fix bug in &&/|| short-circuiting.
Use full mask, not internal mask when checking "any lanes running" before evaluating expressions. Added some more tests to try to cover this case.
This commit is contained in:
25
tests/short-circuit-12.ispc
Normal file
25
tests/short-circuit-12.ispc
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
export uniform int width() { return programCount; }
|
||||
|
||||
uniform int * uniform ptr;
|
||||
|
||||
float foo(uniform float a[]) {
|
||||
int index = (programIndex & 1) * 10000;
|
||||
if (a[programIndex] < 10000 && a[index] == 1)
|
||||
return 1;
|
||||
else
|
||||
return 1234;
|
||||
}
|
||||
|
||||
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
||||
float a = aFOO[programIndex];
|
||||
float a0 = aFOO[0], a1 = aFOO[1];
|
||||
if ((programIndex & 1) == 0)
|
||||
RET[programIndex] = foo(aFOO);
|
||||
else
|
||||
RET[programIndex] = 2;
|
||||
}
|
||||
|
||||
export void result(uniform float RET[]) {
|
||||
RET[programIndex] = (programIndex & 1) ? 2 : 1;
|
||||
}
|
||||
Reference in New Issue
Block a user