So it appears at least the LLVM 3.9 backend can get confused when it gets hit with if (cond) discard type constructs, and we have a GLSL optimisation to convert this to discard_if, so I've ported that to NIR, and enabled it for radv. It fixes the hangs and the tests here. Dave.