More aggressively prune unreachable code as follows.
When no control flow edges reach a merge block or continue target:
- delete their contents so that:
  - a merge block becomes OpLabel, then OpUnreachable
  - a continue target becomes OpLabel, then an OpBranch back to the
    loop header
- any basic block which is dominated by such a merge block or continue
  target is removed as well.
- decorations targeting the removed instructions are removed.
Enables the SPIR-V builder post-processing step the GLSLANG_WEB case.
		
	
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			635 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			635 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
float4 f0(float4 input) {
 | 
						|
    if (all(input == input))
 | 
						|
        return input;
 | 
						|
    else
 | 
						|
        return -input;
 | 
						|
}
 | 
						|
 | 
						|
float4 f1(float4 input) {
 | 
						|
    if (all(input == input)) {
 | 
						|
        return input;
 | 
						|
    } else {
 | 
						|
        return -input;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
float4 PixelShaderFunction(float4 input) : COLOR0
 | 
						|
{
 | 
						|
    if (all(input == input))
 | 
						|
        return input;
 | 
						|
 | 
						|
    f0(input);
 | 
						|
 | 
						|
    if (all(input == input))
 | 
						|
        ;
 | 
						|
 | 
						|
    if (all(input == input))
 | 
						|
        ;
 | 
						|
    else
 | 
						|
        ;
 | 
						|
 | 
						|
    [flatten] if (all(input == input)) {
 | 
						|
        return input;
 | 
						|
    }
 | 
						|
 | 
						|
    f1(input);
 | 
						|
 | 
						|
	int ii;
 | 
						|
	if (float ii = input.z)
 | 
						|
	    ++ii;
 | 
						|
	++ii;
 | 
						|
    if (float(ii) == 1.0)
 | 
						|
        ++ii;
 | 
						|
}
 |