SPIRV-Cross/shaders-no-opt/asm/frag/late-expression-invalidation-2.asm.frag
Hans-Kristian Arntzen 1d13a3e36a Rework how loop iteration counts are validated.
Introduces an idea of a recompilation making forward progress.

There are some extreme edge cases where we need more than 3 loops, but
only allow this in specific circumstances where we can reason about
forward progress being made.
2022-01-17 14:12:01 +01:00

626 lines
24 KiB
JavaScript

; SPIR-V
; Version: 1.0
; Generator: Khronos SPIR-V Tools Assembler; 0
; Bound: 761
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %_GLF_color
OpExecutionMode %main OriginUpperLeft
OpSource ESSL 320
OpName %main "main"
OpName %pos "pos"
OpName %gl_FragCoord "gl_FragCoord"
OpName %buf0 "buf0"
OpMemberName %buf0 0 "resolution"
OpName %_ ""
OpName %ipos "ipos"
OpName %i "i"
OpName %map "map"
OpName %p "p"
OpName %canwalk "canwalk"
OpName %v "v"
OpName %directions "directions"
OpName %j "j"
OpName %d "d"
OpName %_GLF_color "_GLF_color"
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %buf0 0 Offset 0
OpDecorate %buf0 Block
OpDecorate %_ DescriptorSet 0
OpDecorate %_ Binding 0
OpDecorate %_GLF_color Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v2float = OpTypeVector %float 2
%_ptr_Function_v2float = OpTypePointer Function %v2float
%v4float = OpTypeVector %float 4
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%buf0 = OpTypeStruct %v2float
%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
%_ = OpVariable %_ptr_Uniform_buf0 Uniform
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
%v2int = OpTypeVector %int 2
%_ptr_Function_v2int = OpTypePointer Function %v2int
%uint = OpTypeInt 32 0
%uint_0 = OpConstant %uint 0
%_ptr_Function_float = OpTypePointer Function %float
%float_16 = OpConstant %float 16
%uint_1 = OpConstant %uint 1
%_ptr_Function_int = OpTypePointer Function %int
%int_256 = OpConstant %int 256
%bool = OpTypeBool
%uint_256 = OpConstant %uint 256
%_arr_int_uint_256 = OpTypeArray %int %uint_256
%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
%map = OpVariable %_ptr_Private__arr_int_uint_256 Private
%_ptr_Private_int = OpTypePointer Private %int
%int_1 = OpConstant %int 1
%63 = OpConstantComposite %v2int %int_0 %int_0
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%int_2 = OpConstant %int 2
%int_16 = OpConstant %int 16
%int_14 = OpConstant %int 14
%false = OpConstantFalse %bool
%int_8 = OpConstant %int 8
%_ptr_Output_v4float = OpTypePointer Output %v4float
%_GLF_color = OpVariable %_ptr_Output_v4float Output
%float_1 = OpConstant %float 1
%437 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%float_0 = OpConstant %float 0
%441 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
%mat2v4float = OpTypeMatrix %v4float 2
%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
%556 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%557 = OpConstantComposite %mat2v4float %556 %556
%558 = OpVariable %_ptr_Private_mat2v4float Private %557
%760 = OpConstantNull %bool
%main = OpFunction %void None %3
%5 = OpLabel
%pos = OpVariable %_ptr_Function_v2float Function
%ipos = OpVariable %_ptr_Function_v2int Function
%i = OpVariable %_ptr_Function_int Function
%p = OpVariable %_ptr_Function_v2int Function
%canwalk = OpVariable %_ptr_Function_bool Function
%v = OpVariable %_ptr_Function_int Function
%directions = OpVariable %_ptr_Function_int Function
%j = OpVariable %_ptr_Function_int Function
%d = OpVariable %_ptr_Function_int Function
%13 = OpLoad %v4float %gl_FragCoord
%14 = OpVectorShuffle %v2float %13 %13 0 1
%564 = OpISub %int %int_256 %int_14
%21 = OpAccessChain %_ptr_Uniform_v2float %_ %int_0
%22 = OpLoad %v2float %21
%566 = OpSNegate %int %564
%23 = OpFDiv %v2float %14 %22
OpStore %pos %23
%30 = OpAccessChain %_ptr_Function_float %pos %uint_0
%31 = OpLoad %float %30
%33 = OpFMul %float %31 %float_16
%34 = OpConvertFToS %int %33
%36 = OpAccessChain %_ptr_Function_float %pos %uint_1
%37 = OpLoad %float %36
%38 = OpFMul %float %37 %float_16
%39 = OpConvertFToS %int %38
%40 = OpCompositeConstruct %v2int %34 %39
OpStore %ipos %40
OpStore %i %int_0
OpBranch %43
%43 = OpLabel
OpLoopMerge %45 %46 None
OpBranch %47
%47 = OpLabel
%48 = OpLoad %int %i
%51 = OpSLessThan %bool %48 %int_256
OpBranchConditional %51 %44 %45
%44 = OpLabel
%56 = OpLoad %int %i
%58 = OpAccessChain %_ptr_Private_int %map %56
OpStore %58 %int_0
OpBranch %46
%46 = OpLabel
%59 = OpLoad %int %i
%61 = OpIAdd %int %59 %int_1
OpStore %i %61
OpBranch %43
%45 = OpLabel
OpStore %p %63
OpStore %canwalk %true
OpStore %v %int_0
OpBranch %68
%68 = OpLabel
OpLoopMerge %70 %71 None
OpBranch %69
%69 = OpLabel
%72 = OpLoad %int %v
%73 = OpIAdd %int %72 %int_1
OpStore %v %73
OpStore %directions %int_0
%75 = OpAccessChain %_ptr_Function_int %p %uint_0
%76 = OpLoad %int %75
%77 = OpSGreaterThan %bool %76 %int_0
OpSelectionMerge %79 None
OpBranchConditional %77 %78 %79
%78 = OpLabel
%80 = OpAccessChain %_ptr_Function_int %p %uint_0
%81 = OpLoad %int %80
%83 = OpISub %int %81 %int_2
%84 = OpAccessChain %_ptr_Function_int %p %uint_1
%85 = OpLoad %int %84
%87 = OpIMul %int %85 %int_16
%88 = OpIAdd %int %83 %87
%89 = OpAccessChain %_ptr_Private_int %map %88
%90 = OpLoad %int %89
%91 = OpIEqual %bool %90 %int_0
OpBranch %79
%79 = OpLabel
%92 = OpPhi %bool %77 %69 %91 %78
OpSelectionMerge %94 None
OpBranchConditional %92 %93 %94
%93 = OpLabel
%95 = OpLoad %int %directions
%96 = OpIAdd %int %95 %int_1
OpStore %directions %96
OpBranch %94
%94 = OpLabel
%97 = OpAccessChain %_ptr_Function_int %p %uint_1
%98 = OpLoad %int %97
%99 = OpSGreaterThan %bool %98 %int_0
OpSelectionMerge %101 None
OpBranchConditional %99 %100 %101
%100 = OpLabel
%102 = OpAccessChain %_ptr_Function_int %p %uint_0
%103 = OpLoad %int %102
%104 = OpAccessChain %_ptr_Function_int %p %uint_1
%105 = OpLoad %int %104
%106 = OpISub %int %105 %int_2
%107 = OpIMul %int %106 %int_16
%108 = OpIAdd %int %103 %107
%109 = OpAccessChain %_ptr_Private_int %map %108
%110 = OpLoad %int %109
%111 = OpIEqual %bool %110 %int_0
OpBranch %101
%101 = OpLabel
%112 = OpPhi %bool %99 %94 %111 %100
OpSelectionMerge %114 None
OpBranchConditional %112 %113 %114
%113 = OpLabel
%115 = OpLoad %int %directions
%116 = OpIAdd %int %115 %int_1
OpStore %directions %116
OpBranch %114
%114 = OpLabel
%117 = OpAccessChain %_ptr_Function_int %p %uint_0
%118 = OpLoad %int %117
%120 = OpSLessThan %bool %118 %int_14
OpSelectionMerge %122 None
OpBranchConditional %120 %121 %122
%121 = OpLabel
%123 = OpAccessChain %_ptr_Function_int %p %uint_0
%124 = OpLoad %int %123
%125 = OpIAdd %int %124 %int_2
%126 = OpAccessChain %_ptr_Function_int %p %uint_1
%127 = OpLoad %int %126
%128 = OpIMul %int %127 %int_16
%129 = OpIAdd %int %125 %128
%130 = OpAccessChain %_ptr_Private_int %map %129
%131 = OpLoad %int %130
%132 = OpIEqual %bool %131 %int_0
OpBranch %122
%122 = OpLabel
%133 = OpPhi %bool %120 %114 %132 %121
OpSelectionMerge %135 None
OpBranchConditional %133 %134 %135
%134 = OpLabel
%136 = OpLoad %int %directions
%137 = OpIAdd %int %136 %int_1
OpStore %directions %137
OpBranch %135
%135 = OpLabel
%594 = OpISub %int %int_256 %566
%138 = OpAccessChain %_ptr_Function_int %p %uint_1
%139 = OpLoad %int %138
%140 = OpSLessThan %bool %139 %int_14
OpSelectionMerge %142 None
OpBranchConditional %140 %141 %142
%141 = OpLabel
%143 = OpAccessChain %_ptr_Function_int %p %uint_0
%144 = OpLoad %int %143
%145 = OpAccessChain %_ptr_Function_int %p %uint_1
%146 = OpLoad %int %145
%147 = OpIAdd %int %146 %int_2
%148 = OpIMul %int %147 %int_16
%149 = OpIAdd %int %144 %148
%150 = OpAccessChain %_ptr_Private_int %map %149
%151 = OpLoad %int %150
%152 = OpIEqual %bool %151 %int_0
OpBranch %142
%142 = OpLabel
%153 = OpPhi %bool %140 %135 %152 %141
OpSelectionMerge %155 None
OpBranchConditional %153 %154 %155
%154 = OpLabel
%156 = OpLoad %int %directions
%157 = OpIAdd %int %156 %int_1
OpStore %directions %157
OpBranch %155
%155 = OpLabel
%158 = OpLoad %int %directions
%159 = OpIEqual %bool %158 %int_0
OpSelectionMerge %161 None
OpBranchConditional %159 %160 %207
%160 = OpLabel
OpStore %canwalk %false
OpStore %i %int_0
OpBranch %163
%163 = OpLabel
OpLoopMerge %165 %166 None
OpBranch %167
%167 = OpLabel
%168 = OpLoad %int %i
%170 = OpSLessThan %bool %168 %int_8
OpBranchConditional %170 %164 %165
%164 = OpLabel
OpStore %j %int_0
%609 = OpISub %int %594 %168
OpStore %558 %557
OpBranchConditional %760 %166 %172
%172 = OpLabel
OpLoopMerge %174 %175 Unroll
OpBranch %176
%176 = OpLabel
%177 = OpLoad %int %j
%178 = OpSLessThan %bool %177 %int_8
OpBranchConditional %178 %173 %174
%173 = OpLabel
%179 = OpLoad %int %j
%180 = OpIMul %int %179 %int_2
%181 = OpLoad %int %i
%182 = OpIMul %int %181 %int_2
%183 = OpIMul %int %182 %int_16
%184 = OpIAdd %int %180 %183
%185 = OpAccessChain %_ptr_Private_int %map %184
%186 = OpLoad %int %185
%187 = OpIEqual %bool %186 %int_0
OpSelectionMerge %189 None
OpBranchConditional %187 %188 %189
%188 = OpLabel
%190 = OpLoad %int %j
%191 = OpIMul %int %190 %int_2
%192 = OpAccessChain %_ptr_Function_int %p %uint_0
OpStore %192 %191
%193 = OpLoad %int %i
%194 = OpIMul %int %193 %int_2
%195 = OpAccessChain %_ptr_Function_int %p %uint_1
OpStore %195 %194
OpStore %canwalk %true
OpBranch %189
%189 = OpLabel
OpBranch %175
%175 = OpLabel
%196 = OpLoad %int %j
%197 = OpIAdd %int %196 %int_1
OpStore %j %197
OpBranch %172
%174 = OpLabel
OpBranch %166
%166 = OpLabel
%198 = OpLoad %int %i
%199 = OpIAdd %int %198 %int_1
OpStore %i %199
OpBranch %163
%165 = OpLabel
%200 = OpAccessChain %_ptr_Function_int %p %uint_0
%201 = OpLoad %int %200
%202 = OpAccessChain %_ptr_Function_int %p %uint_1
%203 = OpLoad %int %202
%204 = OpIMul %int %203 %int_16
%205 = OpIAdd %int %201 %204
%206 = OpAccessChain %_ptr_Private_int %map %205
OpStore %206 %int_1
OpBranch %161
%207 = OpLabel
%209 = OpLoad %int %v
%210 = OpLoad %int %directions
%211 = OpSMod %int %209 %210
OpStore %d %211
%212 = OpLoad %int %directions
%213 = OpLoad %int %v
%214 = OpIAdd %int %213 %212
OpStore %v %214
%215 = OpLoad %int %d
%216 = OpSGreaterThanEqual %bool %215 %int_0
OpSelectionMerge %218 None
OpBranchConditional %216 %217 %218
%217 = OpLabel
%219 = OpAccessChain %_ptr_Function_int %p %uint_0
%220 = OpLoad %int %219
%221 = OpSGreaterThan %bool %220 %int_0
OpBranch %218
%218 = OpLabel
%222 = OpPhi %bool %216 %207 %221 %217
OpSelectionMerge %224 None
OpBranchConditional %222 %223 %224
%223 = OpLabel
%225 = OpAccessChain %_ptr_Function_int %p %uint_0
%226 = OpLoad %int %225
%227 = OpISub %int %226 %int_2
%228 = OpAccessChain %_ptr_Function_int %p %uint_1
%229 = OpLoad %int %228
%230 = OpIMul %int %229 %int_16
%231 = OpIAdd %int %227 %230
%232 = OpAccessChain %_ptr_Private_int %map %231
%233 = OpLoad %int %232
%234 = OpIEqual %bool %233 %int_0
OpBranch %224
%224 = OpLabel
%235 = OpPhi %bool %222 %218 %234 %223
OpSelectionMerge %237 None
OpBranchConditional %235 %236 %237
%236 = OpLabel
%238 = OpLoad %int %d
%239 = OpISub %int %238 %int_1
OpStore %d %239
%240 = OpAccessChain %_ptr_Function_int %p %uint_0
%241 = OpLoad %int %240
%242 = OpAccessChain %_ptr_Function_int %p %uint_1
%243 = OpLoad %int %242
%244 = OpIMul %int %243 %int_16
%245 = OpIAdd %int %241 %244
%246 = OpAccessChain %_ptr_Private_int %map %245
OpStore %246 %int_1
%247 = OpAccessChain %_ptr_Function_int %p %uint_0
%248 = OpLoad %int %247
%249 = OpISub %int %248 %int_1
%250 = OpAccessChain %_ptr_Function_int %p %uint_1
%251 = OpLoad %int %250
%252 = OpIMul %int %251 %int_16
%253 = OpIAdd %int %249 %252
%254 = OpAccessChain %_ptr_Private_int %map %253
OpStore %254 %int_1
%255 = OpAccessChain %_ptr_Function_int %p %uint_0
%256 = OpLoad %int %255
%257 = OpISub %int %256 %int_2
%258 = OpAccessChain %_ptr_Function_int %p %uint_1
%259 = OpLoad %int %258
%260 = OpIMul %int %259 %int_16
%261 = OpIAdd %int %257 %260
%262 = OpAccessChain %_ptr_Private_int %map %261
OpStore %262 %int_1
%263 = OpAccessChain %_ptr_Function_int %p %uint_0
%264 = OpLoad %int %263
%265 = OpISub %int %264 %int_2
%266 = OpAccessChain %_ptr_Function_int %p %uint_0
OpStore %266 %265
OpBranch %237
%237 = OpLabel
%267 = OpLoad %int %d
%268 = OpSGreaterThanEqual %bool %267 %int_0
OpSelectionMerge %270 None
OpBranchConditional %268 %269 %270
%269 = OpLabel
%271 = OpAccessChain %_ptr_Function_int %p %uint_1
%272 = OpLoad %int %271
%273 = OpSGreaterThan %bool %272 %int_0
OpBranch %270
%270 = OpLabel
%274 = OpPhi %bool %268 %237 %273 %269
OpSelectionMerge %276 None
OpBranchConditional %274 %275 %276
%275 = OpLabel
%277 = OpAccessChain %_ptr_Function_int %p %uint_0
%278 = OpLoad %int %277
%279 = OpAccessChain %_ptr_Function_int %p %uint_1
%280 = OpLoad %int %279
%281 = OpISub %int %280 %int_2
%282 = OpIMul %int %281 %int_16
%283 = OpIAdd %int %278 %282
%284 = OpAccessChain %_ptr_Private_int %map %283
%285 = OpLoad %int %284
%286 = OpIEqual %bool %285 %int_0
OpBranch %276
%276 = OpLabel
%287 = OpPhi %bool %274 %270 %286 %275
OpSelectionMerge %289 None
OpBranchConditional %287 %288 %289
%288 = OpLabel
%290 = OpLoad %int %d
%291 = OpISub %int %290 %int_1
OpStore %d %291
%292 = OpAccessChain %_ptr_Function_int %p %uint_0
%293 = OpLoad %int %292
%294 = OpAccessChain %_ptr_Function_int %p %uint_1
%295 = OpLoad %int %294
%296 = OpIMul %int %295 %int_16
%297 = OpIAdd %int %293 %296
%298 = OpAccessChain %_ptr_Private_int %map %297
OpStore %298 %int_1
%299 = OpAccessChain %_ptr_Function_int %p %uint_0
%300 = OpLoad %int %299
%301 = OpAccessChain %_ptr_Function_int %p %uint_1
%302 = OpLoad %int %301
%303 = OpISub %int %302 %int_1
%304 = OpIMul %int %303 %int_16
%305 = OpIAdd %int %300 %304
%306 = OpAccessChain %_ptr_Private_int %map %305
OpStore %306 %int_1
%307 = OpAccessChain %_ptr_Function_int %p %uint_0
%308 = OpLoad %int %307
%309 = OpAccessChain %_ptr_Function_int %p %uint_1
%310 = OpLoad %int %309
%311 = OpISub %int %310 %int_2
%312 = OpIMul %int %311 %int_16
%313 = OpIAdd %int %308 %312
%314 = OpAccessChain %_ptr_Private_int %map %313
OpStore %314 %int_1
%315 = OpAccessChain %_ptr_Function_int %p %uint_1
%316 = OpLoad %int %315
%317 = OpISub %int %316 %int_2
%318 = OpAccessChain %_ptr_Function_int %p %uint_1
OpStore %318 %317
OpBranch %289
%289 = OpLabel
%319 = OpLoad %int %d
%320 = OpSGreaterThanEqual %bool %319 %int_0
OpSelectionMerge %322 None
OpBranchConditional %320 %321 %322
%321 = OpLabel
%323 = OpAccessChain %_ptr_Function_int %p %uint_0
%324 = OpLoad %int %323
%325 = OpSLessThan %bool %324 %int_14
OpBranch %322
%322 = OpLabel
%326 = OpPhi %bool %320 %289 %325 %321
OpSelectionMerge %328 None
OpBranchConditional %326 %327 %328
%327 = OpLabel
%329 = OpAccessChain %_ptr_Function_int %p %uint_0
%330 = OpLoad %int %329
%331 = OpIAdd %int %330 %int_2
%332 = OpAccessChain %_ptr_Function_int %p %uint_1
%333 = OpLoad %int %332
%334 = OpIMul %int %333 %int_16
%335 = OpIAdd %int %331 %334
%336 = OpAccessChain %_ptr_Private_int %map %335
%337 = OpLoad %int %336
%338 = OpIEqual %bool %337 %int_0
OpBranch %328
%328 = OpLabel
%339 = OpPhi %bool %326 %322 %338 %327
OpSelectionMerge %341 None
OpBranchConditional %339 %340 %341
%340 = OpLabel
%342 = OpLoad %int %d
%343 = OpISub %int %342 %int_1
OpStore %d %343
%344 = OpAccessChain %_ptr_Function_int %p %uint_0
%345 = OpLoad %int %344
%346 = OpAccessChain %_ptr_Function_int %p %uint_1
%347 = OpLoad %int %346
%348 = OpIMul %int %347 %int_16
%349 = OpIAdd %int %345 %348
%350 = OpAccessChain %_ptr_Private_int %map %349
OpStore %350 %int_1
%351 = OpAccessChain %_ptr_Function_int %p %uint_0
%352 = OpLoad %int %351
%353 = OpIAdd %int %352 %int_1
%354 = OpAccessChain %_ptr_Function_int %p %uint_1
%355 = OpLoad %int %354
%356 = OpIMul %int %355 %int_16
%357 = OpIAdd %int %353 %356
%358 = OpAccessChain %_ptr_Private_int %map %357
OpStore %358 %int_1
%359 = OpAccessChain %_ptr_Function_int %p %uint_0
%360 = OpLoad %int %359
%361 = OpIAdd %int %360 %int_2
%362 = OpAccessChain %_ptr_Function_int %p %uint_1
%363 = OpLoad %int %362
%364 = OpIMul %int %363 %int_16
%365 = OpIAdd %int %361 %364
%366 = OpAccessChain %_ptr_Private_int %map %365
OpStore %366 %int_1
%367 = OpAccessChain %_ptr_Function_int %p %uint_0
%368 = OpLoad %int %367
%369 = OpIAdd %int %368 %int_2
%370 = OpAccessChain %_ptr_Function_int %p %uint_0
OpStore %370 %369
OpBranch %341
%341 = OpLabel
%371 = OpLoad %int %d
%372 = OpSGreaterThanEqual %bool %371 %int_0
OpSelectionMerge %374 None
OpBranchConditional %372 %373 %374
%373 = OpLabel
%375 = OpAccessChain %_ptr_Function_int %p %uint_1
%376 = OpLoad %int %375
%377 = OpSLessThan %bool %376 %int_14
OpBranch %374
%374 = OpLabel
%378 = OpPhi %bool %372 %341 %377 %373
OpSelectionMerge %380 None
OpBranchConditional %378 %379 %380
%379 = OpLabel
%381 = OpAccessChain %_ptr_Function_int %p %uint_0
%382 = OpLoad %int %381
%383 = OpAccessChain %_ptr_Function_int %p %uint_1
%384 = OpLoad %int %383
%385 = OpIAdd %int %384 %int_2
%386 = OpIMul %int %385 %int_16
%387 = OpIAdd %int %382 %386
%388 = OpAccessChain %_ptr_Private_int %map %387
%389 = OpLoad %int %388
%390 = OpIEqual %bool %389 %int_0
OpBranch %380
%380 = OpLabel
%391 = OpPhi %bool %378 %374 %390 %379
OpSelectionMerge %393 None
OpBranchConditional %391 %392 %393
%392 = OpLabel
%394 = OpLoad %int %d
%395 = OpISub %int %394 %int_1
OpStore %d %395
%396 = OpAccessChain %_ptr_Function_int %p %uint_0
%397 = OpLoad %int %396
%398 = OpAccessChain %_ptr_Function_int %p %uint_1
%399 = OpLoad %int %398
%400 = OpIMul %int %399 %int_16
%401 = OpIAdd %int %397 %400
%402 = OpAccessChain %_ptr_Private_int %map %401
OpStore %402 %int_1
%403 = OpAccessChain %_ptr_Function_int %p %uint_0
%404 = OpLoad %int %403
%405 = OpAccessChain %_ptr_Function_int %p %uint_1
%406 = OpLoad %int %405
%407 = OpIAdd %int %406 %int_1
%408 = OpIMul %int %407 %int_16
%409 = OpIAdd %int %404 %408
%410 = OpAccessChain %_ptr_Private_int %map %409
OpStore %410 %int_1
%411 = OpAccessChain %_ptr_Function_int %p %uint_0
%412 = OpLoad %int %411
%413 = OpAccessChain %_ptr_Function_int %p %uint_1
%414 = OpLoad %int %413
%415 = OpIAdd %int %414 %int_2
%416 = OpIMul %int %415 %int_16
%417 = OpIAdd %int %412 %416
%418 = OpAccessChain %_ptr_Private_int %map %417
OpStore %418 %int_1
%419 = OpAccessChain %_ptr_Function_int %p %uint_1
%420 = OpLoad %int %419
%421 = OpIAdd %int %420 %int_2
%422 = OpAccessChain %_ptr_Function_int %p %uint_1
OpStore %422 %421
OpBranch %393
%393 = OpLabel
OpBranch %161
%161 = OpLabel
%423 = OpAccessChain %_ptr_Function_int %ipos %uint_1
%424 = OpLoad %int %423
%425 = OpIMul %int %424 %int_16
%426 = OpAccessChain %_ptr_Function_int %ipos %uint_0
%427 = OpLoad %int %426
%428 = OpIAdd %int %425 %427
%429 = OpAccessChain %_ptr_Private_int %map %428
%430 = OpLoad %int %429
%431 = OpIEqual %bool %430 %int_1
OpSelectionMerge %433 None
OpBranchConditional %431 %432 %433
%432 = OpLabel
OpStore %_GLF_color %437
OpReturn
%433 = OpLabel
OpBranch %71
%71 = OpLabel
%439 = OpLoad %bool %canwalk
OpBranchConditional %439 %68 %70
%70 = OpLabel
OpStore %_GLF_color %441
OpReturn
OpFunctionEnd