nir cast and if optimisations from sycl work
There is a fair few changes needed to get the unoptimised SPIR-V produced from SYCL into working NIR. This is the initial selection.
The first two just deal with cast derefs, and optimise out useless ones and convert some casts into struct derefs where possible to enable copy prop to do its work.
The second set are to enable if merging to allow loop unrolling to work. The first detects boolean const phis and converts them into bcsel, the second set enables if merging for scenarios where there are phis between the if blocks but only in certain cases, and the last patch enables if merging if the condition variables are opposite each other, by swapping the blocks in the second case.
I doubt these will have any effect on graphics shaders, they might help some CL shaders. There is also a lot more stuff needed to get SYCL shaders working.