SPV: Implement GLSL built-in bitcast functions.
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
new file mode 100644
index 0000000..53f2d96
--- /dev/null
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -0,0 +1,232 @@
+spv.bitCast.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 172
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 154
+ ExecutionMode 4 OriginLowerLeft
+ Source GLSL 450
+ Name 4 "main"
+ Name 9 "idata"
+ Name 14 "f1"
+ Name 26 "f2"
+ Name 37 "f3"
+ Name 48 "f4"
+ Name 55 "udata"
+ Name 85 "fdata"
+ Name 89 "i1"
+ Name 98 "i2"
+ Name 107 "i3"
+ Name 116 "i4"
+ Name 122 "u1"
+ Name 130 "u2"
+ Name 139 "u3"
+ Name 148 "u4"
+ Name 154 "fragColor"
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7: TypeVector 6(int) 4
+ 8: TypePointer Function 7(ivec4)
+ 10: 6(int) Constant 0
+ 11: 7(ivec4) ConstantComposite 10 10 10 10
+ 12: TypeFloat 32
+ 13: TypePointer UniformConstant 12(float)
+ 14(f1): 13(ptr) Variable UniformConstant
+ 17: TypeInt 32 0
+ 18: 17(int) Constant 0
+ 19: TypePointer Function 6(int)
+ 24: TypeVector 12(float) 2
+ 25: TypePointer UniformConstant 24(fvec2)
+ 26(f2): 25(ptr) Variable UniformConstant
+ 28: TypeVector 6(int) 2
+ 35: TypeVector 12(float) 3
+ 36: TypePointer UniformConstant 35(fvec3)
+ 37(f3): 36(ptr) Variable UniformConstant
+ 39: TypeVector 6(int) 3
+ 46: TypeVector 12(float) 4
+ 47: TypePointer UniformConstant 46(fvec4)
+ 48(f4): 47(ptr) Variable UniformConstant
+ 53: TypeVector 17(int) 4
+ 54: TypePointer Function 53(ivec4)
+ 56: 53(ivec4) ConstantComposite 18 18 18 18
+ 59: TypePointer Function 17(int)
+ 65: TypeVector 17(int) 2
+ 73: TypeVector 17(int) 3
+ 84: TypePointer Function 46(fvec4)
+ 86: 12(float) Constant 0
+ 87: 46(fvec4) ConstantComposite 86 86 86 86
+ 88: TypePointer UniformConstant 6(int)
+ 89(i1): 88(ptr) Variable UniformConstant
+ 92: TypePointer Function 12(float)
+ 97: TypePointer UniformConstant 28(ivec2)
+ 98(i2): 97(ptr) Variable UniformConstant
+ 106: TypePointer UniformConstant 39(ivec3)
+ 107(i3): 106(ptr) Variable UniformConstant
+ 115: TypePointer UniformConstant 7(ivec4)
+ 116(i4): 115(ptr) Variable UniformConstant
+ 121: TypePointer UniformConstant 17(int)
+ 122(u1): 121(ptr) Variable UniformConstant
+ 129: TypePointer UniformConstant 65(ivec2)
+ 130(u2): 129(ptr) Variable UniformConstant
+ 138: TypePointer UniformConstant 73(ivec3)
+ 139(u3): 138(ptr) Variable UniformConstant
+ 147: TypePointer UniformConstant 53(ivec4)
+ 148(u4): 147(ptr) Variable UniformConstant
+ 153: TypePointer Output 46(fvec4)
+ 154(fragColor): 153(ptr) Variable Output
+ 159: TypeBool
+ 160: TypeVector 159(bool) 4
+ 168: 12(float) Constant 1045220557
+ 169: 46(fvec4) ConstantComposite 168 168 168 168
+ 4(main): 2 Function None 3
+ 5: Label
+ 9(idata): 8(ptr) Variable Function
+ 55(udata): 54(ptr) Variable Function
+ 85(fdata): 84(ptr) Variable Function
+ 155: 84(ptr) Variable Function
+ Store 9(idata) 11
+ 15: 12(float) Load 14(f1)
+ 16: 6(int) Bitcast 15
+ 20: 19(ptr) AccessChain 9(idata) 18
+ 21: 6(int) Load 20
+ 22: 6(int) IAdd 21 16
+ 23: 19(ptr) AccessChain 9(idata) 18
+ Store 23 22
+ 27: 24(fvec2) Load 26(f2)
+ 29: 28(ivec2) Bitcast 27
+ 30: 7(ivec4) Load 9(idata)
+ 31: 28(ivec2) VectorShuffle 30 30 0 1
+ 32: 28(ivec2) IAdd 31 29
+ 33: 7(ivec4) Load 9(idata)
+ 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3
+ Store 9(idata) 34
+ 38: 35(fvec3) Load 37(f3)
+ 40: 39(ivec3) Bitcast 38
+ 41: 7(ivec4) Load 9(idata)
+ 42: 39(ivec3) VectorShuffle 41 41 0 1 2
+ 43: 39(ivec3) IAdd 42 40
+ 44: 7(ivec4) Load 9(idata)
+ 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3
+ Store 9(idata) 45
+ 49: 46(fvec4) Load 48(f4)
+ 50: 7(ivec4) Bitcast 49
+ 51: 7(ivec4) Load 9(idata)
+ 52: 7(ivec4) IAdd 51 50
+ Store 9(idata) 52
+ Store 55(udata) 56
+ 57: 12(float) Load 14(f1)
+ 58: 17(int) Bitcast 57
+ 60: 59(ptr) AccessChain 55(udata) 18
+ 61: 17(int) Load 60
+ 62: 17(int) IAdd 61 58
+ 63: 59(ptr) AccessChain 55(udata) 18
+ Store 63 62
+ 64: 24(fvec2) Load 26(f2)
+ 66: 65(ivec2) Bitcast 64
+ 67: 53(ivec4) Load 55(udata)
+ 68: 65(ivec2) VectorShuffle 67 67 0 1
+ 69: 65(ivec2) IAdd 68 66
+ 70: 53(ivec4) Load 55(udata)
+ 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3
+ Store 55(udata) 71
+ 72: 35(fvec3) Load 37(f3)
+ 74: 73(ivec3) Bitcast 72
+ 75: 53(ivec4) Load 55(udata)
+ 76: 73(ivec3) VectorShuffle 75 75 0 1 2
+ 77: 73(ivec3) IAdd 76 74
+ 78: 53(ivec4) Load 55(udata)
+ 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3
+ Store 55(udata) 79
+ 80: 46(fvec4) Load 48(f4)
+ 81: 53(ivec4) Bitcast 80
+ 82: 53(ivec4) Load 55(udata)
+ 83: 53(ivec4) IAdd 82 81
+ Store 55(udata) 83
+ Store 85(fdata) 87
+ 90: 6(int) Load 89(i1)
+ 91: 12(float) Bitcast 90
+ 93: 92(ptr) AccessChain 85(fdata) 18
+ 94: 12(float) Load 93
+ 95: 12(float) FAdd 94 91
+ 96: 92(ptr) AccessChain 85(fdata) 18
+ Store 96 95
+ 99: 28(ivec2) Load 98(i2)
+ 100: 24(fvec2) Bitcast 99
+ 101: 46(fvec4) Load 85(fdata)
+ 102: 24(fvec2) VectorShuffle 101 101 0 1
+ 103: 24(fvec2) FAdd 102 100
+ 104: 46(fvec4) Load 85(fdata)
+ 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3
+ Store 85(fdata) 105
+ 108: 39(ivec3) Load 107(i3)
+ 109: 35(fvec3) Bitcast 108
+ 110: 46(fvec4) Load 85(fdata)
+ 111: 35(fvec3) VectorShuffle 110 110 0 1 2
+ 112: 35(fvec3) FAdd 111 109
+ 113: 46(fvec4) Load 85(fdata)
+ 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3
+ Store 85(fdata) 114
+ 117: 7(ivec4) Load 116(i4)
+ 118: 46(fvec4) Bitcast 117
+ 119: 46(fvec4) Load 85(fdata)
+ 120: 46(fvec4) FAdd 119 118
+ Store 85(fdata) 120
+ 123: 17(int) Load 122(u1)
+ 124: 12(float) Bitcast 123
+ 125: 92(ptr) AccessChain 85(fdata) 18
+ 126: 12(float) Load 125
+ 127: 12(float) FAdd 126 124
+ 128: 92(ptr) AccessChain 85(fdata) 18
+ Store 128 127
+ 131: 65(ivec2) Load 130(u2)
+ 132: 24(fvec2) Bitcast 131
+ 133: 46(fvec4) Load 85(fdata)
+ 134: 24(fvec2) VectorShuffle 133 133 0 1
+ 135: 24(fvec2) FAdd 134 132
+ 136: 46(fvec4) Load 85(fdata)
+ 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3
+ Store 85(fdata) 137
+ 140: 73(ivec3) Load 139(u3)
+ 141: 35(fvec3) Bitcast 140
+ 142: 46(fvec4) Load 85(fdata)
+ 143: 35(fvec3) VectorShuffle 142 142 0 1 2
+ 144: 35(fvec3) FAdd 143 141
+ 145: 46(fvec4) Load 85(fdata)
+ 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3
+ Store 85(fdata) 146
+ 149: 53(ivec4) Load 148(u4)
+ 150: 46(fvec4) Bitcast 149
+ 151: 46(fvec4) Load 85(fdata)
+ 152: 46(fvec4) FAdd 151 150
+ Store 85(fdata) 152
+ 156: 7(ivec4) Load 9(idata)
+ 157: 53(ivec4) Bitcast 156
+ 158: 53(ivec4) Load 55(udata)
+ 161: 160(bvec4) IEqual 157 158
+ 162: 159(bool) All 161
+ SelectionMerge 164 None
+ BranchConditional 162 163 166
+ 163: Label
+ 165: 46(fvec4) Load 85(fdata)
+ Store 155 165
+ Branch 164
+ 166: Label
+ 167: 46(fvec4) Load 85(fdata)
+ 170: 46(fvec4) FAdd 167 169
+ Store 155 170
+ Branch 164
+ 164: Label
+ 171: 46(fvec4) Load 155
+ Store 154(fragColor) 171
+ Return
+ FunctionEnd