if registers are spilling, the question is where exactly - i.e. the expression after the conditional could be easily moved to a sub-routine that would get its own execution context. But if it's already the two prototypes at the top of the file, the problem is much more serious - and one would have to look at the whole compilation unit.
Otherwise, my suggestion would be to simplify complex expressions and introduce/use constants or pre-cache things to see if that makes any difference. Equally, an array with pointers may be easier to deal with for a buggy compiler than separate variables of the same type
llvm is generally a very robust piece of software, so it should be possible to come up with a workaround that works for people, without having to patch shaders - if in doubt, we could provide separate shaders, or even just use pre-processor flags, matched against the glsl-compiler string (about dialog)
https://bugs.freedesktop.org/show_bug.cgi?id=75276