SPIRV-Cross/shaders-no-opt/asm/comp/fuzz-loop-variable-dominator-with-unreachable-continue-block.asm.comp
Hans-Kristian Arntzen f7e98c39db Avoid detection of false loop variables.
If the loop variable candidate has a dominating block that lives in an
unrelated loop, we have to reject the loop variable candidate.
2022-07-22 14:08:21 +02:00

377 lines
15 KiB
Plaintext

; SPIR-V
; Version: 1.3
; Generator: Khronos SPIR-V Tools Assembler; 0
; Bound: 257
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %1 "main" %gl_LocalInvocationIndex %gl_WorkGroupID
OpExecutionMode %1 LocalSize 1 1 1
OpDecorate %_struct_4 BufferBlock
OpMemberDecorate %_struct_4 0 Offset 0
OpDecorate %_arr_uint_uint_1 ArrayStride 4
OpDecorate %_struct_6 BufferBlock
OpMemberDecorate %_struct_6 0 Offset 0
OpDecorate %_arr_uint_uint_2 ArrayStride 4
OpDecorate %_struct_8 BufferBlock
OpMemberDecorate %_struct_8 0 Offset 0
OpDecorate %_arr_uint_uint_3 ArrayStride 4
OpDecorate %_struct_10 BufferBlock
OpMemberDecorate %_struct_10 0 Offset 0
OpDecorate %_arr_uint_uint_37 ArrayStride 4
OpDecorate %12 DescriptorSet 0
OpDecorate %12 Binding 0
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 1
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 2
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 3
OpDecorate %16 DescriptorSet 0
OpDecorate %16 Binding 4
OpDecorate %17 DescriptorSet 0
OpDecorate %17 Binding 5
OpDecorate %18 DescriptorSet 0
OpDecorate %18 Binding 6
OpDecorate %19 DescriptorSet 0
OpDecorate %19 Binding 7
OpDecorate %20 DescriptorSet 0
OpDecorate %20 Binding 8
OpDecorate %21 DescriptorSet 0
OpDecorate %21 Binding 9
OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%void = OpTypeVoid
%23 = OpTypeFunction %void
%bool = OpTypeBool
%uint = OpTypeInt 32 0
%true = OpConstantTrue %bool
%uint_0 = OpConstant %uint 0
%uint_666 = OpConstant %uint 666
%uint_0_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
%uint_3 = OpConstant %uint 3
%uint_8 = OpConstant %uint 8
%uint_9 = OpConstant %uint 9
%uint_10 = OpConstant %uint 10
%uint_11 = OpConstant %uint 11
%uint_12 = OpConstant %uint 12
%uint_13 = OpConstant %uint 13
%uint_14 = OpConstant %uint 14
%uint_15 = OpConstant %uint 15
%uint_16 = OpConstant %uint 16
%uint_17 = OpConstant %uint 17
%uint_18 = OpConstant %uint 18
%uint_19 = OpConstant %uint 19
%uint_20 = OpConstant %uint 20
%uint_21 = OpConstant %uint 21
%uint_22 = OpConstant %uint 22
%uint_23 = OpConstant %uint 23
%uint_24 = OpConstant %uint 24
%uint_25 = OpConstant %uint 25
%uint_26 = OpConstant %uint 26
%uint_27 = OpConstant %uint 27
%uint_28 = OpConstant %uint 28
%uint_29 = OpConstant %uint 29
%uint_30 = OpConstant %uint 30
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_33 = OpConstant %uint 33
%uint_37 = OpConstant %uint 37
%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
%_struct_4 = OpTypeStruct %_arr_uint_uint_1
%_ptr_Uniform__struct_4 = OpTypePointer Uniform %_struct_4
%12 = OpVariable %_ptr_Uniform__struct_4 Uniform
%13 = OpVariable %_ptr_Uniform__struct_4 Uniform
%19 = OpVariable %_ptr_Uniform__struct_4 Uniform
%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
%_struct_6 = OpTypeStruct %_arr_uint_uint_2
%_ptr_Uniform__struct_6 = OpTypePointer Uniform %_struct_6
%14 = OpVariable %_ptr_Uniform__struct_6 Uniform
%15 = OpVariable %_ptr_Uniform__struct_6 Uniform
%16 = OpVariable %_ptr_Uniform__struct_6 Uniform
%17 = OpVariable %_ptr_Uniform__struct_6 Uniform
%18 = OpVariable %_ptr_Uniform__struct_6 Uniform
%_arr_uint_uint_3 = OpTypeArray %uint %uint_3
%_struct_8 = OpTypeStruct %_arr_uint_uint_3
%_ptr_Uniform__struct_8 = OpTypePointer Uniform %_struct_8
%20 = OpVariable %_ptr_Uniform__struct_8 Uniform
%_arr_uint_uint_37 = OpTypeArray %uint %uint_37
%_struct_10 = OpTypeStruct %_arr_uint_uint_37
%_ptr_Uniform__struct_10 = OpTypePointer Uniform %_struct_10
%21 = OpVariable %_ptr_Uniform__struct_10 Uniform
%_ptr_Function_uint = OpTypePointer Function %uint
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%_ptr_Input_uint = OpTypePointer Input %uint
%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%1 = OpFunction %void None %23
%69 = OpLabel
%70 = OpVariable %_ptr_Function_uint Function %uint_0_0
%71 = OpVariable %_ptr_Function_uint Function %uint_0_0
%72 = OpVariable %_ptr_Function_uint Function %uint_0_0
%73 = OpVariable %_ptr_Function_uint Function %uint_0_0
%74 = OpVariable %_ptr_Function_uint Function %uint_0_0
%75 = OpVariable %_ptr_Function_uint Function %uint_0_0
%76 = OpVariable %_ptr_Function_uint Function %uint_0_0
%77 = OpVariable %_ptr_Function_uint Function %uint_0_0
%78 = OpVariable %_ptr_Function_uint Function %uint_0_0
%79 = OpVariable %_ptr_Function_uint Function %uint_0_0
%80 = OpLoad %uint %gl_LocalInvocationIndex
%81 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0_0
%82 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_1
%83 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_2
%84 = OpLoad %uint %81
%85 = OpLoad %uint %82
%86 = OpLoad %uint %83
%87 = OpIMul %uint %86 %uint_1
%88 = OpIMul %uint %85 %uint_1
%89 = OpIAdd %uint %88 %87
%90 = OpIAdd %uint %89 %84
%91 = OpIMul %uint %80 %uint_1
%92 = OpIMul %uint %80 %uint_1
%93 = OpIMul %uint %80 %uint_2
%94 = OpIMul %uint %80 %uint_2
%95 = OpIMul %uint %80 %uint_2
%96 = OpIMul %uint %80 %uint_2
%97 = OpIMul %uint %80 %uint_2
%98 = OpIMul %uint %80 %uint_1
%99 = OpIMul %uint %80 %uint_3
%100 = OpIMul %uint %90 %uint_1
%101 = OpIMul %uint %90 %uint_1
%102 = OpIMul %uint %90 %uint_2
%103 = OpIMul %uint %90 %uint_2
%104 = OpIMul %uint %90 %uint_2
%105 = OpIMul %uint %90 %uint_2
%106 = OpIMul %uint %90 %uint_2
%107 = OpIMul %uint %90 %uint_1
%108 = OpIMul %uint %90 %uint_3
%109 = OpIAdd %uint %100 %91
%110 = OpIAdd %uint %101 %92
%111 = OpIAdd %uint %102 %93
%112 = OpIAdd %uint %103 %94
%113 = OpIAdd %uint %104 %95
%114 = OpIAdd %uint %105 %96
%115 = OpIAdd %uint %106 %97
%116 = OpIAdd %uint %107 %98
%117 = OpIAdd %uint %108 %99
%118 = OpIMul %uint %80 %uint_37
%119 = OpIMul %uint %90 %uint_37
%120 = OpIAdd %uint %119 %118
OpStore %71 %109
OpStore %72 %110
OpStore %73 %111
OpStore %74 %112
OpStore %75 %113
OpStore %76 %114
OpStore %77 %115
OpStore %78 %116
OpStore %79 %117
OpStore %70 %120
%121 = OpLoad %uint %70
%122 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %121
OpStore %122 %uint_8
%123 = OpIAdd %uint %121 %uint_1
%124 = OpLoad %uint %71
%125 = OpAccessChain %_ptr_Uniform_uint %12 %uint_0_0 %124
%126 = OpLoad %uint %125
%127 = OpIAdd %uint %124 %uint_1
OpStore %71 %127
OpSelectionMerge %128 None
OpSwitch %126 %128
%128 = OpLabel
%129 = OpPhi %uint %130 %131 %123 %69
%132 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %129
OpStore %132 %uint_9
%133 = OpIAdd %uint %129 %uint_1
OpLoopMerge %134 %131 None
OpBranch %135
%135 = OpLabel
%136 = OpPhi %uint %uint_666 %137 %133 %128
%138 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %136
OpStore %138 %uint_12
%139 = OpIAdd %uint %136 %uint_1
OpLoopMerge %140 %137 None
OpBranch %140
%140 = OpLabel
%141 = OpPhi %uint %139 %135 %uint_666 %142
%143 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %141
OpStore %143 %uint_13
%144 = OpIAdd %uint %141 %uint_1
%145 = OpLoad %uint %75
OpLoopMerge %146 %142 None
OpBranch %147
%137 = OpLabel
OpBranch %135
%147 = OpLabel
%148 = OpPhi %uint %144 %140
%149 = OpPhi %uint %145 %140
%150 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %148
OpStore %150 %uint_17
%151 = OpIAdd %uint %148 %uint_1
%152 = OpAccessChain %_ptr_Uniform_uint %16 %uint_0_0 %149
%153 = OpLoad %uint %152
%154 = OpIEqual %bool %153 %uint_1
%155 = OpIAdd %uint %149 %uint_1
OpStore %75 %155
OpSelectionMerge %156 None
OpBranchConditional %154 %157 %156
%157 = OpLabel
%158 = OpPhi %uint %151 %147
%159 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %158
OpStore %159 %uint_19
%160 = OpIAdd %uint %158 %uint_1
%161 = OpLoad %uint %74
OpBranch %146
%156 = OpLabel
OpBranch %142
%142 = OpLabel
OpBranchConditional %true %140 %146
%146 = OpLabel
%162 = OpPhi %uint %160 %157 %uint_666 %142
%163 = OpPhi %uint %161 %157 %uint_666 %142
%164 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %162
OpStore %164 %uint_15
%165 = OpIAdd %uint %162 %uint_1
%166 = OpAccessChain %_ptr_Uniform_uint %15 %uint_0_0 %163
%167 = OpLoad %uint %166
%168 = OpIEqual %bool %167 %uint_1
%169 = OpIAdd %uint %163 %uint_1
OpStore %74 %169
%170 = OpLoad %uint %76
OpSelectionMerge %171 None
OpBranchConditional %168 %172 %173
%173 = OpLabel
%174 = OpPhi %uint %165 %146
%175 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %174
OpStore %175 %uint_22
%176 = OpIAdd %uint %174 %uint_1
%177 = OpLoad %uint %76
OpBranch %172
%172 = OpLabel
%178 = OpPhi %uint %176 %173 %165 %146
%179 = OpPhi %uint %177 %173 %170 %146
%180 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %178
OpStore %180 %uint_21
%181 = OpIAdd %uint %178 %uint_1
%182 = OpAccessChain %_ptr_Uniform_uint %17 %uint_0_0 %179
%183 = OpLoad %uint %182
%184 = OpIAdd %uint %179 %uint_1
OpStore %76 %184
OpSelectionMerge %185 None
OpSwitch %183 %185
%185 = OpLabel
%186 = OpPhi %uint %uint_666 %187 %181 %172
%188 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %186
OpStore %188 %uint_23
%189 = OpIAdd %uint %186 %uint_1
OpLoopMerge %190 %187 None
OpBranch %190
%190 = OpLabel
%191 = OpPhi %uint %189 %185 %192 %193
%194 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %191
OpStore %194 %uint_24
%195 = OpIAdd %uint %191 %uint_1
%196 = OpLoad %uint %79
OpLoopMerge %197 %193 None
OpBranch %198
%187 = OpLabel
OpBranch %185
%198 = OpLabel
%199 = OpPhi %uint %195 %190
%200 = OpPhi %uint %196 %190
%201 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %199
OpStore %201 %uint_28
%202 = OpIAdd %uint %199 %uint_1
%203 = OpAccessChain %_ptr_Uniform_uint %20 %uint_0_0 %200
%204 = OpLoad %uint %203
%205 = OpIAdd %uint %200 %uint_1
OpStore %79 %205
OpSelectionMerge %206 None
OpSwitch %204 %207 1 %206
%207 = OpLabel
%208 = OpPhi %uint %202 %198
%209 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %208
OpStore %209 %uint_30
%210 = OpIAdd %uint %208 %uint_1
%211 = OpLoad %uint %77
OpBranch %197
%206 = OpLabel
%212 = OpPhi %uint %202 %198
%213 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %212
OpStore %213 %uint_29
%214 = OpIAdd %uint %212 %uint_1
%215 = OpLoad %uint %78
OpBranch %193
%193 = OpLabel
%216 = OpPhi %uint %214 %206
%217 = OpPhi %uint %215 %206
%218 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %216
OpStore %218 %uint_27
%192 = OpIAdd %uint %216 %uint_1
%219 = OpAccessChain %_ptr_Uniform_uint %19 %uint_0_0 %217
%220 = OpLoad %uint %219
%221 = OpIEqual %bool %220 %uint_1
%222 = OpIAdd %uint %217 %uint_1
OpStore %78 %222
%223 = OpLoad %uint %77
OpBranchConditional %221 %190 %197
%197 = OpLabel
%224 = OpPhi %uint %210 %207 %192 %193
%225 = OpPhi %uint %211 %207 %223 %193
%226 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %224
OpStore %226 %uint_26
%227 = OpIAdd %uint %224 %uint_1
%228 = OpAccessChain %_ptr_Uniform_uint %18 %uint_0_0 %225
%229 = OpLoad %uint %228
%230 = OpIEqual %bool %229 %uint_1
%231 = OpIAdd %uint %225 %uint_1
OpStore %77 %231
%232 = OpLoad %uint %73
OpBranchConditional %230 %131 %171
%171 = OpLabel
OpBranch %131
%131 = OpLabel
%233 = OpPhi %uint %uint_666 %171 %227 %197
%234 = OpPhi %uint %uint_666 %171 %232 %197
%235 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %233
OpStore %235 %uint_11
%130 = OpIAdd %uint %233 %uint_1
%236 = OpAccessChain %_ptr_Uniform_uint %14 %uint_0_0 %234
%237 = OpLoad %uint %236
%238 = OpIEqual %bool %237 %uint_1
%239 = OpIAdd %uint %234 %uint_1
OpStore %73 %239
%240 = OpLoad %uint %72
OpBranchConditional %238 %128 %134
%134 = OpLabel
%241 = OpPhi %uint %130 %131
%242 = OpPhi %uint %240 %131
%243 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %241
OpStore %243 %uint_10
%244 = OpIAdd %uint %241 %uint_1
%245 = OpAccessChain %_ptr_Uniform_uint %13 %uint_0_0 %242
%246 = OpLoad %uint %245
%247 = OpIAdd %uint %242 %uint_1
OpStore %72 %247
OpSelectionMerge %248 None
OpSwitch %246 %249 1 %250
%249 = OpLabel
%251 = OpPhi %uint %244 %134
%252 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %251
OpStore %252 %uint_32
%253 = OpIAdd %uint %251 %uint_1
OpBranch %248
%250 = OpLabel
OpBranch %248
%248 = OpLabel
%254 = OpPhi %uint %253 %249 %uint_666 %250
%255 = OpAccessChain %_ptr_Uniform_uint %21 %uint_0_0 %254
OpStore %255 %uint_31
%256 = OpIAdd %uint %254 %uint_2
OpReturn
OpFunctionEnd