Don't remove SPIR-V blocks before codegen.

A removed block releases its instructions, so Module::idToInstruction
suddenly contains dangling references.  The original motivation for
block removal was to skip some unreachable blocks, but that's already
achieved by InReadableOrder.cpp.

Also updated stale comments.
This commit is contained in:
Dejan Mircevski
2016-01-19 21:13:38 -05:00
parent 33782795d9
commit ed55bcd9f8
17 changed files with 1233 additions and 1252 deletions

View File

@@ -8,7 +8,7 @@ Linked compute stage:
TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 74
// Id's are bound by 75
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -20,28 +20,28 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
Name 10 "func(au1;"
Name 9 "c"
Name 12 "atoms("
Name 20 "counter"
Name 21 "param"
Name 24 "val"
Name 28 "countArr"
Name 35 "origi"
Name 37 "atomi"
Name 40 "origu"
Name 42 "atomu"
Name 44 "value"
Name 61 "dataSSB"
MemberName 61(dataSSB) 0 "f"
MemberName 61(dataSSB) 1 "n_frames_rendered"
Name 63 "result"
Name 71 "arrX"
Name 72 "arrY"
Name 73 "arrZ"
Decorate 20(counter) Binding 0
Decorate 28(countArr) Binding 0
MemberDecorate 61(dataSSB) 0 Offset 0
MemberDecorate 61(dataSSB) 1 Offset 16
Decorate 61(dataSSB) BufferBlock
Decorate 63(result) Binding 0
Name 21 "counter"
Name 22 "param"
Name 25 "val"
Name 29 "countArr"
Name 36 "origi"
Name 38 "atomi"
Name 41 "origu"
Name 43 "atomu"
Name 45 "value"
Name 62 "dataSSB"
MemberName 62(dataSSB) 0 "f"
MemberName 62(dataSSB) 1 "n_frames_rendered"
Name 64 "result"
Name 72 "arrX"
Name 73 "arrY"
Name 74 "arrZ"
Decorate 21(counter) Binding 0
Decorate 29(countArr) Binding 0
MemberDecorate 62(dataSSB) 0 Offset 0
MemberDecorate 62(dataSSB) 1 Offset 16
Decorate 62(dataSSB) BufferBlock
Decorate 64(result) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -49,51 +49,51 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
8: TypeFunction 6(int) 7(ptr)
14: 6(int) Constant 1
15: 6(int) Constant 0
18: 6(int) Constant 1024
19: TypePointer AtomicCounter 6(int)
20(counter): 19(ptr) Variable AtomicCounter
25: 6(int) Constant 4
26: TypeArray 6(int) 25
27: TypePointer AtomicCounter 26
28(countArr): 27(ptr) Variable AtomicCounter
29: TypeInt 32 1
30: 29(int) Constant 2
34: TypePointer Function 29(int)
36: TypePointer Workgroup 29(int)
37(atomi): 36(ptr) Variable Workgroup
38: 29(int) Constant 3
41: TypePointer Workgroup 6(int)
42(atomu): 41(ptr) Variable Workgroup
43: TypePointer UniformConstant 6(int)
44(value): 43(ptr) Variable UniformConstant
47: 6(int) Constant 7
52: 29(int) Constant 7
56: 6(int) Constant 10
59: TypeFloat 32
60: TypeVector 29(int) 4
61(dataSSB): TypeStruct 59(float) 60(ivec4)
62: TypePointer Uniform 61(dataSSB)
63(result): 62(ptr) Variable Uniform
64: 29(int) Constant 1
65: 6(int) Constant 2
66: TypePointer Uniform 29(int)
69: TypeArray 29(int) 14
70: TypePointer Private 69
71(arrX): 70(ptr) Variable Private
72(arrY): 70(ptr) Variable Private
73(arrZ): 70(ptr) Variable Private
19: 6(int) Constant 1024
20: TypePointer AtomicCounter 6(int)
21(counter): 20(ptr) Variable AtomicCounter
26: 6(int) Constant 4
27: TypeArray 6(int) 26
28: TypePointer AtomicCounter 27
29(countArr): 28(ptr) Variable AtomicCounter
30: TypeInt 32 1
31: 30(int) Constant 2
35: TypePointer Function 30(int)
37: TypePointer Workgroup 30(int)
38(atomi): 37(ptr) Variable Workgroup
39: 30(int) Constant 3
42: TypePointer Workgroup 6(int)
43(atomu): 42(ptr) Variable Workgroup
44: TypePointer UniformConstant 6(int)
45(value): 44(ptr) Variable UniformConstant
48: 6(int) Constant 7
53: 30(int) Constant 7
57: 6(int) Constant 10
60: TypeFloat 32
61: TypeVector 30(int) 4
62(dataSSB): TypeStruct 60(float) 61(ivec4)
63: TypePointer Uniform 62(dataSSB)
64(result): 63(ptr) Variable Uniform
65: 30(int) Constant 1
66: 6(int) Constant 2
67: TypePointer Uniform 30(int)
70: TypeArray 30(int) 14
71: TypePointer Private 70
72(arrX): 71(ptr) Variable Private
73(arrY): 71(ptr) Variable Private
74(arrZ): 71(ptr) Variable Private
4(main): 2 Function None 3
5: Label
21(param): 7(ptr) Variable Function
24(val): 7(ptr) Variable Function
MemoryBarrier 14 18
22: 6(int) Load 20(counter)
Store 21(param) 22
23: 6(int) FunctionCall 10(func(au1;) 21(param)
31: 19(ptr) AccessChain 28(countArr) 30
32: 6(int) AtomicLoad 31 14 15
Store 24(val) 32
33: 6(int) AtomicIDecrement 20(counter) 14 15
22(param): 7(ptr) Variable Function
25(val): 7(ptr) Variable Function
MemoryBarrier 14 19
23: 6(int) Load 21(counter)
Store 22(param) 23
24: 6(int) FunctionCall 10(func(au1;) 22(param)
32: 20(ptr) AccessChain 29(countArr) 31
33: 6(int) AtomicLoad 32 14 15
Store 25(val) 33
34: 6(int) AtomicIDecrement 21(counter) 14 15
Return
FunctionEnd
10(func(au1;): 6(int) Function None 8
@@ -104,29 +104,29 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
FunctionEnd
12(atoms(): 2 Function None 3
13: Label
35(origi): 34(ptr) Variable Function
40(origu): 7(ptr) Variable Function
39: 29(int) AtomicIAdd 37(atomi) 14 15 38
Store 35(origi) 39
45: 6(int) Load 44(value)
46: 6(int) AtomicAnd 42(atomu) 14 15 45
Store 40(origu) 46
48: 6(int) AtomicOr 42(atomu) 14 15 47
Store 40(origu) 48
49: 6(int) AtomicXor 42(atomu) 14 15 47
Store 40(origu) 49
50: 6(int) Load 44(value)
51: 6(int) AtomicUMin 42(atomu) 14 15 50
Store 40(origu) 51
53: 29(int) AtomicSMax 37(atomi) 14 15 52
Store 35(origi) 53
54: 29(int) Load 35(origi)
55: 29(int) AtomicExchange 37(atomi) 14 15 54
Store 35(origi) 55
57: 6(int) Load 44(value)
58: 6(int) AtomicCompareExchange 42(atomu) 14 15 15 57 56
Store 40(origu) 58
67: 66(ptr) AccessChain 63(result) 64 65
68: 29(int) AtomicIAdd 67 14 15 64
36(origi): 35(ptr) Variable Function
41(origu): 7(ptr) Variable Function
40: 30(int) AtomicIAdd 38(atomi) 14 15 39
Store 36(origi) 40
46: 6(int) Load 45(value)
47: 6(int) AtomicAnd 43(atomu) 14 15 46
Store 41(origu) 47
49: 6(int) AtomicOr 43(atomu) 14 15 48
Store 41(origu) 49
50: 6(int) AtomicXor 43(atomu) 14 15 48
Store 41(origu) 50
51: 6(int) Load 45(value)
52: 6(int) AtomicUMin 43(atomu) 14 15 51
Store 41(origu) 52
54: 30(int) AtomicSMax 38(atomi) 14 15 53
Store 36(origi) 54
55: 30(int) Load 36(origi)
56: 30(int) AtomicExchange 38(atomi) 14 15 55
Store 36(origi) 56
58: 6(int) Load 45(value)
59: 6(int) AtomicCompareExchange 43(atomu) 14 15 15 58 57
Store 41(origu) 59
68: 67(ptr) AccessChain 64(result) 65 66
69: 30(int) AtomicIAdd 68 14 15 65
Return
FunctionEnd