SPIR-V: Aggressively prune unreachable merge, continue target
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.
This commit is contained in:
parent
b131630e7c
commit
8c3d5b4b6c
44 changed files with 2398 additions and 1423 deletions
54
Test/baseResults/spv.dead-after-continue.vert.out
Normal file
54
Test/baseResults/spv.dead-after-continue.vert.out
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
spv.dead-after-continue.vert
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80007
|
||||
// Id's are bound by 29
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Vertex 4 "main" 20 28
|
||||
Source GLSL 450
|
||||
Name 4 "main"
|
||||
Name 8 "i"
|
||||
Name 20 "o"
|
||||
Name 28 "c"
|
||||
Decorate 20(o) Location 0
|
||||
Decorate 28(c) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
7: TypePointer Function 6(int)
|
||||
9: 6(int) Constant 0
|
||||
16: 6(int) Constant 5
|
||||
17: TypeBool
|
||||
19: TypePointer Output 6(int)
|
||||
20(o): 19(ptr) Variable Output
|
||||
21: 6(int) Constant 1
|
||||
23: 6(int) Constant 2
|
||||
26: 6(int) Constant 3
|
||||
27: TypePointer Input 6(int)
|
||||
28(c): 27(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(i): 7(ptr) Variable Function
|
||||
Store 8(i) 9
|
||||
Branch 10
|
||||
10: Label
|
||||
LoopMerge 12 13 None
|
||||
Branch 14
|
||||
14: Label
|
||||
15: 6(int) Load 8(i)
|
||||
18: 17(bool) SLessThan 15 16
|
||||
BranchConditional 18 11 12
|
||||
11: Label
|
||||
Store 20(o) 21
|
||||
Branch 13
|
||||
13: Label
|
||||
24: 6(int) Load 8(i)
|
||||
25: 6(int) IAdd 24 21
|
||||
Store 8(i) 25
|
||||
Branch 10
|
||||
12: Label
|
||||
Store 20(o) 26
|
||||
Return
|
||||
FunctionEnd
|
||||
Loading…
Add table
Add a link
Reference in a new issue