In our testing work we've encountered an issue where inserting an empty loop:
for(int temp = 0; temp < C; temp++) {
}
leads to a problem when C is large.
The issue is detailed in full here, where the files are available:
Adding long-running empty loop causes browser to lose WebGL context · Issue #39 · mc-imperial/shader-compiler-bugs · Git…
On my Chromebook, I find that adding an empty loop to this fragment shader, to yield this variant fragment shader, makes the difference between the shader rendering an image, and nothing being rendered. In the case where nothing is rendered, the Chromebook screen goes blank, and Chrome reports that it has lost its WebGL context.
I don't expect ARM will regard this as a compiler bug, since clearly shaders should not be too long running. And reducing the loop bound make the problem disappear.
However, it does seem that it would be easy for the Mali GLSL compiler to optimise away the empty loop, and this might indicate that the compiler could do a better job in general of eliminating redundant code that graphics programmers have left in by accident.