tint: Use MergeReturn transform in SPIR-V backend

Bug: tint:1627
Change-Id: I5a3639543b076e6f666bfcca8c61b22db7f2630e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/107363
Commit-Queue: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
James Price 2022-10-31 15:41:41 +00:00 committed by Dawn LUCI CQ
parent a3343d92d3
commit 3e1bc0a6da
13 changed files with 1302 additions and 1096 deletions

View File

@ -25,6 +25,7 @@
#include "src/tint/transform/expand_compound_assignment.h"
#include "src/tint/transform/for_loop_to_loop.h"
#include "src/tint/transform/manager.h"
#include "src/tint/transform/merge_return.h"
#include "src/tint/transform/promote_side_effects_to_decl.h"
#include "src/tint/transform/remove_phonies.h"
#include "src/tint/transform/remove_unreachable_statements.h"
@ -84,6 +85,7 @@ SanitizedResult Sanitize(const Program* in, const Options& options) {
manager.Add<transform::VectorizeScalarMatrixInitializers>();
manager.Add<transform::VectorizeMatrixConversions>();
manager.Add<transform::WhileToLoop>(); // ZeroInitWorkgroupMemory
manager.Add<transform::MergeReturn>();
manager.Add<transform::CanonicalizeEntryPointIO>();
manager.Add<transform::AddEmptyEntryPoint>();
manager.Add<transform::AddBlockAttribute>();

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 50
; Bound: 58
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -12,6 +12,8 @@
OpName %tint_discard "tint_discard"
OpName %f "f"
OpName %x "x"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %tint_discard_func "tint_discard_func"
OpName %main_inner "main_inner"
OpName %x_0 "x"
@ -32,65 +34,80 @@
%_ptr_Private_bool = OpTypePointer Private %bool
%tint_discard = OpVariable %_ptr_Private_bool Private %9
%12 = OpTypeFunction %int %int
%_ptr_Function_bool = OpTypePointer Function %bool
%_ptr_Function_int = OpTypePointer Function %int
%int_10 = OpConstant %int 10
%true = OpConstantTrue %bool
%void = OpTypeVoid
%21 = OpTypeFunction %void
%25 = OpTypeFunction %int %v3int
%_ptr_Function_int = OpTypePointer Function %int
%30 = OpTypeFunction %void
%34 = OpTypeFunction %int %v3int
%f = OpFunction %int None %12
%x = OpFunctionParameter %int
%15 = OpLabel
%17 = OpIEqual %bool %x %int_10
OpSelectionMerge %18 None
OpBranchConditional %17 %19 %18
%19 = OpLabel
%tint_return_flag = OpVariable %_ptr_Function_bool Function %9
%tint_return_value = OpVariable %_ptr_Function_int Function %7
%21 = OpIEqual %bool %x %int_10
OpSelectionMerge %22 None
OpBranchConditional %21 %23 %22
%23 = OpLabel
OpStore %tint_discard %true
OpReturnValue %7
%18 = OpLabel
OpReturnValue %x
OpStore %tint_return_flag %true
OpStore %tint_return_value %7
OpBranch %22
%22 = OpLabel
%26 = OpLoad %bool %tint_return_flag
%25 = OpLogicalNot %bool %26
OpSelectionMerge %27 None
OpBranchConditional %25 %28 %27
%28 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %x
OpBranch %27
%27 = OpLabel
%29 = OpLoad %int %tint_return_value
OpReturnValue %29
OpFunctionEnd
%tint_discard_func = OpFunction %void None %21
%24 = OpLabel
%tint_discard_func = OpFunction %void None %30
%33 = OpLabel
OpKill
OpFunctionEnd
%main_inner = OpFunction %int None %25
%main_inner = OpFunction %int None %34
%x_0 = OpFunctionParameter %v3int
%28 = OpLabel
%37 = OpLabel
%y = OpVariable %_ptr_Function_int Function %7
%29 = OpCompositeExtract %int %x_0 0
OpStore %y %29
OpBranch %32
%32 = OpLabel
OpLoopMerge %33 %34 None
OpBranch %35
%35 = OpLabel
%37 = OpLoad %int %y
%36 = OpFunctionCall %int %f %37
%38 = OpLoad %bool %tint_discard
OpSelectionMerge %39 None
OpBranchConditional %38 %40 %39
%38 = OpCompositeExtract %int %x_0 0
OpStore %y %38
OpBranch %40
%40 = OpLabel
%41 = OpFunctionCall %void %tint_discard_func
OpReturnValue %7
%39 = OpLabel
%42 = OpIEqual %bool %36 %7
OpSelectionMerge %43 None
OpBranchConditional %42 %44 %43
%44 = OpLabel
OpBranch %33
OpLoopMerge %41 %42 None
OpBranch %43
%43 = OpLabel
OpBranch %34
%34 = OpLabel
OpBranch %32
%33 = OpLabel
%45 = OpLoad %int %y
OpReturnValue %45
OpFunctionEnd
%main = OpFunction %void None %21
%44 = OpFunctionCall %int %f %45
%46 = OpLoad %bool %tint_discard
OpSelectionMerge %47 None
OpBranchConditional %46 %48 %47
%48 = OpLabel
%49 = OpFunctionCall %void %tint_discard_func
OpReturnValue %7
%47 = OpLabel
%49 = OpLoad %v3int %x_1
%48 = OpFunctionCall %int %main_inner %49
OpStore %value %48
%50 = OpIEqual %bool %44 %7
OpSelectionMerge %51 None
OpBranchConditional %50 %52 %51
%52 = OpLabel
OpBranch %41
%51 = OpLabel
OpBranch %42
%42 = OpLabel
OpBranch %40
%41 = OpLabel
%53 = OpLoad %int %y
OpReturnValue %53
OpFunctionEnd
%main = OpFunction %void None %30
%55 = OpLabel
%57 = OpLoad %v3int %x_1
%56 = OpFunctionCall %int %main_inner %57
OpStore %value %56
OpReturn
OpFunctionEnd

View File

@ -1,10 +1,10 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 189
; Bound: 199
; Schema: 0
OpCapability Shader
%71 = OpExtInstImport "GLSL.std.450"
%81 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %fClipDistance3_param_1 %fClipDistance4_param_1 %glFragColor_1_1
OpExecutionMode %main OriginUpperLeft
@ -29,6 +29,7 @@
OpName %glFragColor "glFragColor"
OpName %tint_discard "tint_discard"
OpName %main_1 "main_1"
OpName %tint_return_flag "tint_return_flag"
OpName %viewDirectionW "viewDirectionW"
OpName %baseColor "baseColor"
OpName %diffuseColor "diffuseColor"
@ -105,201 +106,220 @@
%tint_discard = OpVariable %_ptr_Private_bool Private %26
%void = OpTypeVoid
%29 = OpTypeFunction %void
%_ptr_Function_bool = OpTypePointer Function %bool
%_ptr_Function_v3float = OpTypePointer Function %v3float
%35 = OpConstantNull %v3float
%37 = OpConstantNull %v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_float = OpTypePointer Function %float
%v2float = OpTypeVector %float 2
%_ptr_Function_v2float = OpTypePointer Function %v2float
%45 = OpConstantNull %v2float
%47 = OpConstantNull %v2float
%true = OpConstantTrue %bool
%uint = OpTypeInt 32 0
%uint_0 = OpConstant %uint 0
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%float_1 = OpConstant %float 1
%78 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%88 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
%uint_3 = OpConstant %uint 3
%_ptr_Uniform_float = OpTypePointer Uniform %float
%105 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%106 = OpConstantComposite %v4float %11 %11 %11 %float_1
%115 = OpConstantComposite %v3float %float_1 %float_1 %float_1
%116 = OpConstantComposite %v4float %11 %11 %11 %float_1
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%uint_1 = OpConstant %uint 1
%main_out = OpTypeStruct %v4float
%169 = OpTypeFunction %main_out %float %float
%180 = OpConstantNull %main_out
%179 = OpTypeFunction %main_out %float %float
%190 = OpConstantNull %main_out
%main_1 = OpFunction %void None %29
%32 = OpLabel
%viewDirectionW = OpVariable %_ptr_Function_v3float Function %35
%tint_return_flag = OpVariable %_ptr_Function_bool Function %26
%viewDirectionW = OpVariable %_ptr_Function_v3float Function %37
%baseColor = OpVariable %_ptr_Function_v4float Function %8
%diffuseColor = OpVariable %_ptr_Function_v3float Function %35
%diffuseColor = OpVariable %_ptr_Function_v3float Function %37
%alpha = OpVariable %_ptr_Function_float Function %11
%normalW = OpVariable %_ptr_Function_v3float Function %35
%uvOffset = OpVariable %_ptr_Function_v2float Function %45
%baseAmbientColor = OpVariable %_ptr_Function_v3float Function %35
%normalW = OpVariable %_ptr_Function_v3float Function %37
%uvOffset = OpVariable %_ptr_Function_v2float Function %47
%baseAmbientColor = OpVariable %_ptr_Function_v3float Function %37
%glossiness = OpVariable %_ptr_Function_float Function %11
%diffuseBase = OpVariable %_ptr_Function_v3float Function %35
%diffuseBase = OpVariable %_ptr_Function_v3float Function %37
%shadow = OpVariable %_ptr_Function_float Function %11
%refractionColor = OpVariable %_ptr_Function_v4float Function %8
%reflectionColor = OpVariable %_ptr_Function_v4float Function %8
%emissiveColor = OpVariable %_ptr_Function_v3float Function %35
%finalDiffuse = OpVariable %_ptr_Function_v3float Function %35
%finalSpecular = OpVariable %_ptr_Function_v3float Function %35
%emissiveColor = OpVariable %_ptr_Function_v3float Function %37
%finalDiffuse = OpVariable %_ptr_Function_v3float Function %37
%finalSpecular = OpVariable %_ptr_Function_v3float Function %37
%color = OpVariable %_ptr_Function_v4float Function %8
%56 = OpLoad %float %fClipDistance3
%57 = OpFOrdGreaterThan %bool %56 %11
OpSelectionMerge %58 None
OpBranchConditional %57 %59 %58
%59 = OpLabel
%58 = OpLoad %float %fClipDistance3
%59 = OpFOrdGreaterThan %bool %58 %11
OpSelectionMerge %60 None
OpBranchConditional %59 %61 %60
%61 = OpLabel
OpStore %tint_discard %true
OpReturn
%58 = OpLabel
%61 = OpLoad %float %fClipDistance4
%62 = OpFOrdGreaterThan %bool %61 %11
OpSelectionMerge %63 None
OpBranchConditional %62 %64 %63
%64 = OpLabel
OpStore %tint_return_flag %true
OpBranch %60
%60 = OpLabel
%64 = OpLoad %bool %tint_return_flag
%63 = OpLogicalNot %bool %64
OpSelectionMerge %65 None
OpBranchConditional %63 %66 %65
%66 = OpLabel
%67 = OpLoad %float %fClipDistance4
%68 = OpFOrdGreaterThan %bool %67 %11
OpSelectionMerge %69 None
OpBranchConditional %68 %70 %69
%70 = OpLabel
OpStore %tint_discard %true
OpReturn
%63 = OpLabel
%68 = OpAccessChain %_ptr_Uniform_v4float %x_29 %uint_0
%69 = OpLoad %v4float %68
%72 = OpCompositeExtract %float %69 0
%73 = OpCompositeExtract %float %69 1
%74 = OpCompositeExtract %float %69 2
%75 = OpCompositeConstruct %v3float %72 %73 %74
%76 = OpFSub %v3float %75 %35
%70 = OpExtInst %v3float %71 Normalize %76
OpStore %viewDirectionW %70
OpStore %baseColor %78
%79 = OpAccessChain %_ptr_Uniform_v4float %x_49 %uint_0
%80 = OpLoad %v4float %79
%81 = OpCompositeExtract %float %80 0
%82 = OpCompositeExtract %float %80 1
%83 = OpCompositeExtract %float %80 2
%84 = OpCompositeConstruct %v3float %81 %82 %83
OpStore %diffuseColor %84
%87 = OpAccessChain %_ptr_Uniform_float %x_49 %uint_0 %uint_3
%88 = OpLoad %float %87
OpStore %alpha %88
OpStore %uvOffset %45
%89 = OpLoad %v4float %baseColor
%90 = OpCompositeExtract %float %89 0
%91 = OpCompositeExtract %float %89 1
%92 = OpCompositeExtract %float %89 2
%93 = OpCompositeConstruct %v3float %90 %91 %92
%94 = OpCompositeExtract %float %8 0
%95 = OpCompositeExtract %float %8 1
%96 = OpCompositeExtract %float %8 2
%97 = OpCompositeConstruct %v3float %94 %95 %96
%98 = OpFMul %v3float %93 %97
OpStore %tint_return_flag %true
OpBranch %69
%69 = OpLabel
%72 = OpLoad %bool %tint_return_flag
%71 = OpLogicalNot %bool %72
OpSelectionMerge %73 None
OpBranchConditional %71 %74 %73
%74 = OpLabel
%78 = OpAccessChain %_ptr_Uniform_v4float %x_29 %uint_0
%79 = OpLoad %v4float %78
%82 = OpCompositeExtract %float %79 0
%83 = OpCompositeExtract %float %79 1
%84 = OpCompositeExtract %float %79 2
%85 = OpCompositeConstruct %v3float %82 %83 %84
%86 = OpFSub %v3float %85 %37
%80 = OpExtInst %v3float %81 Normalize %86
OpStore %viewDirectionW %80
OpStore %baseColor %88
%89 = OpAccessChain %_ptr_Uniform_v4float %x_49 %uint_0
%90 = OpLoad %v4float %89
%91 = OpCompositeExtract %float %90 0
%92 = OpCompositeExtract %float %90 1
%93 = OpCompositeExtract %float %90 2
%94 = OpCompositeConstruct %v3float %91 %92 %93
OpStore %diffuseColor %94
%97 = OpAccessChain %_ptr_Uniform_float %x_49 %uint_0 %uint_3
%98 = OpLoad %float %97
OpStore %alpha %98
OpStore %uvOffset %47
%99 = OpLoad %v4float %baseColor
%100 = OpCompositeExtract %float %98 0
%101 = OpCompositeExtract %float %98 1
%102 = OpCompositeExtract %float %98 2
%103 = OpCompositeExtract %float %99 3
%104 = OpCompositeConstruct %v4float %100 %101 %102 %103
OpStore %baseColor %104
OpStore %baseAmbientColor %105
%100 = OpCompositeExtract %float %99 0
%101 = OpCompositeExtract %float %99 1
%102 = OpCompositeExtract %float %99 2
%103 = OpCompositeConstruct %v3float %100 %101 %102
%104 = OpCompositeExtract %float %8 0
%105 = OpCompositeExtract %float %8 1
%106 = OpCompositeExtract %float %8 2
%107 = OpCompositeConstruct %v3float %104 %105 %106
%108 = OpFMul %v3float %103 %107
%109 = OpLoad %v4float %baseColor
%110 = OpCompositeExtract %float %108 0
%111 = OpCompositeExtract %float %108 1
%112 = OpCompositeExtract %float %108 2
%113 = OpCompositeExtract %float %109 3
%114 = OpCompositeConstruct %v4float %110 %111 %112 %113
OpStore %baseColor %114
OpStore %baseAmbientColor %115
OpStore %glossiness %11
OpStore %diffuseBase %35
OpStore %diffuseBase %37
OpStore %shadow %float_1
OpStore %refractionColor %106
OpStore %reflectionColor %106
%108 = OpAccessChain %_ptr_Uniform_v3float %x_49 %uint_3
%109 = OpLoad %v3float %108
OpStore %emissiveColor %109
%110 = OpLoad %v3float %diffuseBase
%111 = OpLoad %v3float %diffuseColor
%112 = OpLoad %v3float %emissiveColor
%114 = OpAccessChain %_ptr_Uniform_v3float %x_49 %uint_1
%115 = OpLoad %v3float %114
%116 = OpLoad %v4float %baseColor
%118 = OpFMul %v3float %110 %111
%119 = OpFAdd %v3float %118 %112
%120 = OpFAdd %v3float %119 %115
%117 = OpExtInst %v3float %71 NClamp %120 %35 %105
%121 = OpCompositeExtract %float %116 0
%122 = OpCompositeExtract %float %116 1
%123 = OpCompositeExtract %float %116 2
%124 = OpCompositeConstruct %v3float %121 %122 %123
%125 = OpFMul %v3float %117 %124
OpStore %finalDiffuse %125
OpStore %finalSpecular %35
%126 = OpLoad %v3float %finalDiffuse
%127 = OpLoad %v3float %baseAmbientColor
%128 = OpLoad %v3float %finalSpecular
%129 = OpLoad %v4float %reflectionColor
%130 = OpLoad %v4float %refractionColor
%131 = OpFMul %v3float %126 %127
%132 = OpFAdd %v3float %131 %128
%133 = OpCompositeExtract %float %129 0
%134 = OpCompositeExtract %float %129 1
%135 = OpCompositeExtract %float %129 2
%136 = OpCompositeConstruct %v3float %133 %134 %135
%137 = OpFAdd %v3float %132 %136
%138 = OpCompositeExtract %float %130 0
%139 = OpCompositeExtract %float %130 1
%140 = OpCompositeExtract %float %130 2
%141 = OpCompositeConstruct %v3float %138 %139 %140
%142 = OpFAdd %v3float %137 %141
%143 = OpLoad %float %alpha
%144 = OpCompositeExtract %float %142 0
%145 = OpCompositeExtract %float %142 1
%146 = OpCompositeExtract %float %142 2
%147 = OpCompositeConstruct %v4float %144 %145 %146 %143
OpStore %color %147
%148 = OpLoad %v4float %color
%150 = OpCompositeExtract %float %148 0
%151 = OpCompositeExtract %float %148 1
%152 = OpCompositeExtract %float %148 2
%153 = OpCompositeConstruct %v3float %150 %151 %152
%149 = OpExtInst %v3float %71 NMax %153 %35
%154 = OpLoad %v4float %color
%155 = OpCompositeExtract %float %149 0
%156 = OpCompositeExtract %float %149 1
%157 = OpCompositeExtract %float %149 2
%158 = OpCompositeExtract %float %154 3
%159 = OpCompositeConstruct %v4float %155 %156 %157 %158
OpStore %color %159
%160 = OpAccessChain %_ptr_Uniform_float %x_137 %uint_0
%161 = OpLoad %float %160
%162 = OpAccessChain %_ptr_Function_float %color %uint_3
%163 = OpLoad %float %162
%164 = OpAccessChain %_ptr_Function_float %color %uint_3
%165 = OpFMul %float %163 %161
OpStore %164 %165
%166 = OpLoad %v4float %color
OpStore %glFragColor %166
OpStore %refractionColor %116
OpStore %reflectionColor %116
%118 = OpAccessChain %_ptr_Uniform_v3float %x_49 %uint_3
%119 = OpLoad %v3float %118
OpStore %emissiveColor %119
%120 = OpLoad %v3float %diffuseBase
%121 = OpLoad %v3float %diffuseColor
%122 = OpLoad %v3float %emissiveColor
%124 = OpAccessChain %_ptr_Uniform_v3float %x_49 %uint_1
%125 = OpLoad %v3float %124
%126 = OpLoad %v4float %baseColor
%128 = OpFMul %v3float %120 %121
%129 = OpFAdd %v3float %128 %122
%130 = OpFAdd %v3float %129 %125
%127 = OpExtInst %v3float %81 NClamp %130 %37 %115
%131 = OpCompositeExtract %float %126 0
%132 = OpCompositeExtract %float %126 1
%133 = OpCompositeExtract %float %126 2
%134 = OpCompositeConstruct %v3float %131 %132 %133
%135 = OpFMul %v3float %127 %134
OpStore %finalDiffuse %135
OpStore %finalSpecular %37
%136 = OpLoad %v3float %finalDiffuse
%137 = OpLoad %v3float %baseAmbientColor
%138 = OpLoad %v3float %finalSpecular
%139 = OpLoad %v4float %reflectionColor
%140 = OpLoad %v4float %refractionColor
%141 = OpFMul %v3float %136 %137
%142 = OpFAdd %v3float %141 %138
%143 = OpCompositeExtract %float %139 0
%144 = OpCompositeExtract %float %139 1
%145 = OpCompositeExtract %float %139 2
%146 = OpCompositeConstruct %v3float %143 %144 %145
%147 = OpFAdd %v3float %142 %146
%148 = OpCompositeExtract %float %140 0
%149 = OpCompositeExtract %float %140 1
%150 = OpCompositeExtract %float %140 2
%151 = OpCompositeConstruct %v3float %148 %149 %150
%152 = OpFAdd %v3float %147 %151
%153 = OpLoad %float %alpha
%154 = OpCompositeExtract %float %152 0
%155 = OpCompositeExtract %float %152 1
%156 = OpCompositeExtract %float %152 2
%157 = OpCompositeConstruct %v4float %154 %155 %156 %153
OpStore %color %157
%158 = OpLoad %v4float %color
%160 = OpCompositeExtract %float %158 0
%161 = OpCompositeExtract %float %158 1
%162 = OpCompositeExtract %float %158 2
%163 = OpCompositeConstruct %v3float %160 %161 %162
%159 = OpExtInst %v3float %81 NMax %163 %37
%164 = OpLoad %v4float %color
%165 = OpCompositeExtract %float %159 0
%166 = OpCompositeExtract %float %159 1
%167 = OpCompositeExtract %float %159 2
%168 = OpCompositeExtract %float %164 3
%169 = OpCompositeConstruct %v4float %165 %166 %167 %168
OpStore %color %169
%170 = OpAccessChain %_ptr_Uniform_float %x_137 %uint_0
%171 = OpLoad %float %170
%172 = OpAccessChain %_ptr_Function_float %color %uint_3
%173 = OpLoad %float %172
%174 = OpAccessChain %_ptr_Function_float %color %uint_3
%175 = OpFMul %float %173 %171
OpStore %174 %175
%176 = OpLoad %v4float %color
OpStore %glFragColor %176
OpStore %tint_return_flag %true
OpBranch %73
%73 = OpLabel
OpBranch %65
%65 = OpLabel
OpReturn
OpFunctionEnd
%tint_discard_func = OpFunction %void None %29
%168 = OpLabel
%178 = OpLabel
OpKill
OpFunctionEnd
%main_inner = OpFunction %main_out None %169
%main_inner = OpFunction %main_out None %179
%fClipDistance3_param = OpFunctionParameter %float
%fClipDistance4_param = OpFunctionParameter %float
%174 = OpLabel
%184 = OpLabel
OpStore %fClipDistance3 %fClipDistance3_param
OpStore %fClipDistance4 %fClipDistance4_param
%175 = OpFunctionCall %void %main_1
%176 = OpLoad %bool %tint_discard
OpSelectionMerge %177 None
OpBranchConditional %176 %178 %177
%178 = OpLabel
%179 = OpFunctionCall %void %tint_discard_func
OpReturnValue %180
%177 = OpLabel
%181 = OpLoad %v4float %glFragColor
%182 = OpCompositeConstruct %main_out %181
OpReturnValue %182
%185 = OpFunctionCall %void %main_1
%186 = OpLoad %bool %tint_discard
OpSelectionMerge %187 None
OpBranchConditional %186 %188 %187
%188 = OpLabel
%189 = OpFunctionCall %void %tint_discard_func
OpReturnValue %190
%187 = OpLabel
%191 = OpLoad %v4float %glFragColor
%192 = OpCompositeConstruct %main_out %191
OpReturnValue %192
OpFunctionEnd
%main = OpFunction %void None %29
%184 = OpLabel
%186 = OpLoad %float %fClipDistance3_param_1
%187 = OpLoad %float %fClipDistance4_param_1
%185 = OpFunctionCall %main_out %main_inner %186 %187
%188 = OpCompositeExtract %v4float %185 0
OpStore %glFragColor_1_1 %188
%194 = OpLabel
%196 = OpLoad %float %fClipDistance3_param_1
%197 = OpLoad %float %fClipDistance4_param_1
%195 = OpFunctionCall %main_out %main_inner %196 %197
%198 = OpCompositeExtract %v4float %195 0
OpStore %glFragColor_1_1 %198
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 48
; Bound: 60
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -11,6 +11,8 @@
OpMemberName %b_block 0 "inner"
OpName %b "b"
OpName %func_3 "func_3"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
OpName %j "j"
OpName %main "main"
@ -25,68 +27,90 @@
%b = OpVariable %_ptr_Uniform_b_block Uniform
%bool = OpTypeBool
%5 = OpTypeFunction %bool
%9 = OpConstantNull %int
%_ptr_Function_bool = OpTypePointer Function %bool
%11 = OpConstantNull %bool
%13 = OpConstantNull %int
%_ptr_Function_int = OpTypePointer Function %int
%uint = OpTypeInt 32 0
%uint_0 = OpConstant %uint 0
%_ptr_Uniform_int = OpTypePointer Uniform %int
%int_n1 = OpConstant %int -1
%int_1 = OpConstant %int 1
%38 = OpConstantNull %bool
%true = OpConstantTrue %bool
%void = OpTypeVoid
%43 = OpTypeFunction %void
%55 = OpTypeFunction %void
%func_3 = OpFunction %bool None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %9
%j = OpVariable %_ptr_Function_int Function %9
OpStore %i %9
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%17 = OpLoad %int %i
%21 = OpAccessChain %_ptr_Uniform_int %b %uint_0
%22 = OpLoad %int %21
%23 = OpSLessThan %bool %17 %22
%16 = OpLogicalNot %bool %23
OpSelectionMerge %24 None
OpBranchConditional %16 %25 %24
%25 = OpLabel
OpBranch %13
%24 = OpLabel
OpStore %j %int_n1
OpBranch %28
%28 = OpLabel
OpLoopMerge %29 %30 None
OpBranch %31
%31 = OpLabel
%33 = OpLoad %int %j
%35 = OpIEqual %bool %33 %int_1
%32 = OpLogicalNot %bool %35
OpSelectionMerge %36 None
OpBranchConditional %32 %37 %36
%37 = OpLabel
OpBranch %29
%36 = OpLabel
OpReturnValue %38
%30 = OpLabel
%39 = OpLoad %int %j
%40 = OpIAdd %int %39 %int_1
OpStore %j %40
OpBranch %28
%tint_return_flag = OpVariable %_ptr_Function_bool Function %11
%tint_return_value = OpVariable %_ptr_Function_bool Function %11
%i = OpVariable %_ptr_Function_int Function %13
%j = OpVariable %_ptr_Function_int Function %13
OpStore %i %13
OpBranch %16
%16 = OpLabel
OpLoopMerge %17 %18 None
OpBranch %19
%19 = OpLabel
%21 = OpLoad %int %i
%25 = OpAccessChain %_ptr_Uniform_int %b %uint_0
%26 = OpLoad %int %25
%27 = OpSLessThan %bool %21 %26
%20 = OpLogicalNot %bool %27
OpSelectionMerge %28 None
OpBranchConditional %20 %29 %28
%29 = OpLabel
OpBranch %14
%14 = OpLabel
%41 = OpLoad %int %i
%42 = OpIAdd %int %41 %int_1
OpStore %i %42
OpBranch %12
%13 = OpLabel
OpReturnValue %38
OpFunctionEnd
%main = OpFunction %void None %43
OpBranch %17
%28 = OpLabel
OpStore %j %int_n1
OpBranch %32
%32 = OpLabel
OpLoopMerge %33 %34 None
OpBranch %35
%35 = OpLabel
%37 = OpLoad %int %j
%39 = OpIEqual %bool %37 %int_1
%36 = OpLogicalNot %bool %39
OpSelectionMerge %40 None
OpBranchConditional %36 %41 %40
%41 = OpLabel
OpBranch %33
%40 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %11
OpBranch %33
%34 = OpLabel
%43 = OpLoad %int %j
%44 = OpIAdd %int %43 %int_1
OpStore %j %44
OpBranch %32
%33 = OpLabel
%45 = OpLoad %bool %tint_return_flag
OpSelectionMerge %46 None
OpBranchConditional %45 %47 %46
%47 = OpLabel
OpBranch %17
%46 = OpLabel
%47 = OpFunctionCall %bool %func_3
OpBranch %18
%18 = OpLabel
%48 = OpLoad %int %i
%49 = OpIAdd %int %48 %int_1
OpStore %i %49
OpBranch %16
%17 = OpLabel
%51 = OpLoad %bool %tint_return_flag
%50 = OpLogicalNot %bool %51
OpSelectionMerge %52 None
OpBranchConditional %50 %53 %52
%53 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %11
OpBranch %52
%52 = OpLabel
%54 = OpLoad %bool %tint_return_value
OpReturnValue %54
OpFunctionEnd
%main = OpFunction %void None %55
%58 = OpLabel
%59 = OpFunctionCall %bool %func_3
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 386
; Bound: 390
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -98,6 +98,7 @@
OpName %m21 "m21"
OpName %o4 "o4"
OpName %main1 "main1"
OpName %tint_return_flag "tint_return_flag"
OpName %t_PosMtx "t_PosMtx"
OpName %t_TexSpaceCoord "t_TexSpaceCoord"
OpName %VertexOutput "VertexOutput"
@ -228,17 +229,20 @@
%274 = OpTypeFunction %Mat4x3_ %Mat4x4_
%void = OpTypeVoid
%290 = OpTypeFunction %void
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%297 = OpConstantNull %bool
%_ptr_Function_v2float = OpTypePointer Function %v2float
%int = OpTypeInt 32 1
%_ptr_Uniform_Mat4x3_ = OpTypePointer Uniform %Mat4x3_
%_ptr_Uniform_Mat4x4_ = OpTypePointer Uniform %Mat4x4_
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%float_2 = OpConstant %float 2
%bool = OpTypeBool
%341 = OpConstantNull %int
%344 = OpConstantNull %int
%_ptr_Uniform_Mat4x2_ = OpTypePointer Uniform %Mat4x2_
%true = OpConstantTrue %bool
%VertexOutput = OpTypeStruct %v4float %v2float %v4float
%361 = OpTypeFunction %VertexOutput %v3float %v2float %v4float %v3float %float
%365 = OpTypeFunction %VertexOutput %v3float %v2float %v4float %v3float %float
%Mat4x3GetCol0_ = OpFunction %v3float None %54
%m = OpFunctionParameter %Mat4x3_
%57 = OpLabel
@ -514,108 +518,111 @@
OpFunctionEnd
%main1 = OpFunction %void None %290
%293 = OpLabel
%tint_return_flag = OpVariable %_ptr_Function_bool Function %297
%t_PosMtx = OpVariable %_ptr_Function_Mat4x3_ Function %60
%t_TexSpaceCoord = OpVariable %_ptr_Function_v2float Function %19
%297 = OpLoad %float %a_PosMtxIdx1
%298 = OpConvertFToS %int %297
%301 = OpAccessChain %_ptr_Uniform_Mat4x3_ %global2 %uint_0 %298
%302 = OpLoad %Mat4x3_ %301
OpStore %t_PosMtx %302
%303 = OpLoad %Mat4x3_ %t_PosMtx
%304 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %303
%305 = OpLoad %v3float %a_Position1
%306 = OpLoad %Mat4x3_ %t_PosMtx
%307 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %306
%308 = OpLoad %v3float %a_Position1
%310 = OpCompositeExtract %float %308 0
%311 = OpCompositeExtract %float %308 1
%312 = OpCompositeExtract %float %308 2
%313 = OpCompositeConstruct %v4float %310 %311 %312 %float_1
%309 = OpFunctionCall %v4float %Mul %307 %313
%315 = OpAccessChain %_ptr_Uniform_Mat4x4_ %global %uint_0
%316 = OpLoad %Mat4x4_ %315
%317 = OpLoad %Mat4x3_ %t_PosMtx
%318 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %317
%319 = OpLoad %v3float %a_Position1
%320 = OpLoad %Mat4x3_ %t_PosMtx
%321 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %320
%322 = OpLoad %v3float %a_Position1
%324 = OpCompositeExtract %float %322 0
%325 = OpCompositeExtract %float %322 1
%326 = OpCompositeExtract %float %322 2
%327 = OpCompositeConstruct %v4float %324 %325 %326 %float_1
%323 = OpFunctionCall %v4float %Mul %321 %327
%328 = OpFunctionCall %v4float %Mul %316 %323
OpStore %gl_Position %328
%329 = OpLoad %v4float %a_Color1
OpStore %v_Color %329
%331 = OpAccessChain %_ptr_Uniform_v4float %global1 %uint_1
%332 = OpLoad %v4float %331
%333 = OpCompositeExtract %float %332 0
%335 = OpFOrdEqual %bool %333 %float_2
OpSelectionMerge %337 None
OpBranchConditional %335 %338 %339
%338 = OpLabel
%340 = OpLoad %v3float %a_Normal1
%343 = OpAccessChain %_ptr_Uniform_Mat4x2_ %global1 %uint_0 %341
%344 = OpLoad %Mat4x2_ %343
%345 = OpLoad %v3float %a_Normal1
%347 = OpCompositeExtract %float %345 0
%348 = OpCompositeExtract %float %345 1
%349 = OpCompositeExtract %float %345 2
%350 = OpCompositeConstruct %v4float %347 %348 %349 %float_1
%346 = OpFunctionCall %v2float %Mul2 %344 %350
%351 = OpVectorShuffle %v2float %346 %346 0 1
OpStore %v_TexCoord %351
OpReturn
%339 = OpLabel
%352 = OpLoad %v2float %a_UV1
%353 = OpAccessChain %_ptr_Uniform_Mat4x2_ %global1 %uint_0 %341
%354 = OpLoad %Mat4x2_ %353
%355 = OpLoad %v2float %a_UV1
%357 = OpCompositeExtract %float %355 0
%358 = OpCompositeExtract %float %355 1
%359 = OpCompositeConstruct %v4float %357 %358 %float_1 %float_1
%356 = OpFunctionCall %v2float %Mul2 %354 %359
%360 = OpVectorShuffle %v2float %356 %356 0 1
OpStore %v_TexCoord %360
OpReturn
%337 = OpLabel
%301 = OpLoad %float %a_PosMtxIdx1
%302 = OpConvertFToS %int %301
%305 = OpAccessChain %_ptr_Uniform_Mat4x3_ %global2 %uint_0 %302
%306 = OpLoad %Mat4x3_ %305
OpStore %t_PosMtx %306
%307 = OpLoad %Mat4x3_ %t_PosMtx
%308 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %307
%309 = OpLoad %v3float %a_Position1
%310 = OpLoad %Mat4x3_ %t_PosMtx
%311 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %310
%312 = OpLoad %v3float %a_Position1
%314 = OpCompositeExtract %float %312 0
%315 = OpCompositeExtract %float %312 1
%316 = OpCompositeExtract %float %312 2
%317 = OpCompositeConstruct %v4float %314 %315 %316 %float_1
%313 = OpFunctionCall %v4float %Mul %311 %317
%319 = OpAccessChain %_ptr_Uniform_Mat4x4_ %global %uint_0
%320 = OpLoad %Mat4x4_ %319
%321 = OpLoad %Mat4x3_ %t_PosMtx
%322 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %321
%323 = OpLoad %v3float %a_Position1
%324 = OpLoad %Mat4x3_ %t_PosMtx
%325 = OpFunctionCall %Mat4x4_ %x_Mat4x4_1 %324
%326 = OpLoad %v3float %a_Position1
%328 = OpCompositeExtract %float %326 0
%329 = OpCompositeExtract %float %326 1
%330 = OpCompositeExtract %float %326 2
%331 = OpCompositeConstruct %v4float %328 %329 %330 %float_1
%327 = OpFunctionCall %v4float %Mul %325 %331
%332 = OpFunctionCall %v4float %Mul %320 %327
OpStore %gl_Position %332
%333 = OpLoad %v4float %a_Color1
OpStore %v_Color %333
%335 = OpAccessChain %_ptr_Uniform_v4float %global1 %uint_1
%336 = OpLoad %v4float %335
%337 = OpCompositeExtract %float %336 0
%339 = OpFOrdEqual %bool %337 %float_2
OpSelectionMerge %340 None
OpBranchConditional %339 %341 %342
%341 = OpLabel
%343 = OpLoad %v3float %a_Normal1
%346 = OpAccessChain %_ptr_Uniform_Mat4x2_ %global1 %uint_0 %344
%347 = OpLoad %Mat4x2_ %346
%348 = OpLoad %v3float %a_Normal1
%350 = OpCompositeExtract %float %348 0
%351 = OpCompositeExtract %float %348 1
%352 = OpCompositeExtract %float %348 2
%353 = OpCompositeConstruct %v4float %350 %351 %352 %float_1
%349 = OpFunctionCall %v2float %Mul2 %347 %353
%354 = OpVectorShuffle %v2float %349 %349 0 1
OpStore %v_TexCoord %354
OpStore %tint_return_flag %true
OpBranch %340
%342 = OpLabel
%356 = OpLoad %v2float %a_UV1
%357 = OpAccessChain %_ptr_Uniform_Mat4x2_ %global1 %uint_0 %344
%358 = OpLoad %Mat4x2_ %357
%359 = OpLoad %v2float %a_UV1
%361 = OpCompositeExtract %float %359 0
%362 = OpCompositeExtract %float %359 1
%363 = OpCompositeConstruct %v4float %361 %362 %float_1 %float_1
%360 = OpFunctionCall %v2float %Mul2 %358 %363
%364 = OpVectorShuffle %v2float %360 %360 0 1
OpStore %v_TexCoord %364
OpStore %tint_return_flag %true
OpBranch %340
%340 = OpLabel
OpReturn
OpFunctionEnd
%main_inner = OpFunction %VertexOutput None %361
%main_inner = OpFunction %VertexOutput None %365
%a_Position = OpFunctionParameter %v3float
%a_UV = OpFunctionParameter %v2float
%a_Color = OpFunctionParameter %v4float
%a_Normal = OpFunctionParameter %v3float
%a_PosMtxIdx = OpFunctionParameter %float
%369 = OpLabel
%373 = OpLabel
OpStore %a_Position1 %a_Position
OpStore %a_UV1 %a_UV
OpStore %a_Color1 %a_Color
OpStore %a_Normal1 %a_Normal
OpStore %a_PosMtxIdx1 %a_PosMtxIdx
%370 = OpFunctionCall %void %main1
%371 = OpLoad %v4float %v_Color
%372 = OpLoad %v2float %v_TexCoord
%373 = OpLoad %v4float %gl_Position
%374 = OpCompositeConstruct %VertexOutput %371 %372 %373
OpReturnValue %374
%374 = OpFunctionCall %void %main1
%375 = OpLoad %v4float %v_Color
%376 = OpLoad %v2float %v_TexCoord
%377 = OpLoad %v4float %gl_Position
%378 = OpCompositeConstruct %VertexOutput %375 %376 %377
OpReturnValue %378
OpFunctionEnd
%main = OpFunction %void None %290
%376 = OpLabel
%378 = OpLoad %v3float %a_Position_1
%379 = OpLoad %v2float %a_UV_1
%380 = OpLoad %v4float %a_Color_1
%381 = OpLoad %v3float %a_Normal_1
%382 = OpLoad %float %a_PosMtxIdx_1
%377 = OpFunctionCall %VertexOutput %main_inner %378 %379 %380 %381 %382
%383 = OpCompositeExtract %v4float %377 0
OpStore %v_Color_1 %383
%384 = OpCompositeExtract %v2float %377 1
OpStore %v_TexCoord_1 %384
%385 = OpCompositeExtract %v4float %377 2
OpStore %member_1 %385
%380 = OpLabel
%382 = OpLoad %v3float %a_Position_1
%383 = OpLoad %v2float %a_UV_1
%384 = OpLoad %v4float %a_Color_1
%385 = OpLoad %v3float %a_Normal_1
%386 = OpLoad %float %a_PosMtxIdx_1
%381 = OpFunctionCall %VertexOutput %main_inner %382 %383 %384 %385 %386
%387 = OpCompositeExtract %v4float %381 0
OpStore %v_Color_1 %387
%388 = OpCompositeExtract %v2float %381 1
OpStore %v_TexCoord_1 %388
%389 = OpCompositeExtract %v4float %381 2
OpStore %member_1 %389
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd

View File

@ -1,10 +1,10 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 96
; Bound: 106
; Schema: 0
OpCapability Shader
%46 = OpExtInstImport "GLSL.std.450"
%55 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID_param_1
OpExecutionMode %main LocalSize 128 1 1
@ -26,6 +26,8 @@
OpName %getAAtOutCoords_ "getAAtOutCoords_"
OpName %unaryOperation_f1_ "unaryOperation_f1_"
OpName %a "a"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %setOutput_i1_f1_ "setOutput_i1_f1_"
OpName %flatIndex "flatIndex"
OpName %value "value"
@ -83,17 +85,20 @@
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%_ptr_Function_float = OpTypePointer Function %float
%30 = OpTypeFunction %float %_ptr_Function_float
%37 = OpConstantNull %float
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%38 = OpConstantNull %bool
%40 = OpConstantNull %float
%true = OpConstantTrue %bool
%float_0x1p_128 = OpConstant %float 0x1p+128
%void = OpTypeVoid
%_ptr_Function_int = OpTypePointer Function %int
%47 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_float
%59 = OpTypeFunction %void
%63 = OpConstantNull %int
%57 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_float
%69 = OpTypeFunction %void
%73 = OpConstantNull %int
%uint_4 = OpConstant %uint 4
%_ptr_Uniform_int = OpTypePointer Uniform %int
%87 = OpTypeFunction %void %v3uint
%97 = OpTypeFunction %void %v3uint
%getAAtOutCoords_ = OpFunction %float None %20
%22 = OpLabel
%25 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
@ -105,68 +110,82 @@
%unaryOperation_f1_ = OpFunction %float None %30
%a = OpFunctionParameter %_ptr_Function_float
%34 = OpLabel
%36 = OpLoad %float %a
%38 = OpFOrdLessThan %bool %36 %37
OpSelectionMerge %40 None
OpBranchConditional %38 %41 %40
%41 = OpLabel
OpReturnValue %float_0x1p_128
%40 = OpLabel
%44 = OpLoad %float %a
%45 = OpExtInst %float %46 Log %44
OpReturnValue %45
%tint_return_flag = OpVariable %_ptr_Function_bool Function %38
%tint_return_value = OpVariable %_ptr_Function_float Function %40
%42 = OpLoad %float %a
%43 = OpFOrdLessThan %bool %42 %40
OpSelectionMerge %44 None
OpBranchConditional %43 %45 %44
%45 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %float_0x1p_128
OpBranch %44
%44 = OpLabel
%49 = OpLoad %bool %tint_return_flag
%48 = OpLogicalNot %bool %49
OpSelectionMerge %50 None
OpBranchConditional %48 %51 %50
%51 = OpLabel
%53 = OpLoad %float %a
OpStore %tint_return_flag %true
%54 = OpExtInst %float %55 Log %53
OpStore %tint_return_value %54
OpBranch %50
%50 = OpLabel
%56 = OpLoad %float %tint_return_value
OpReturnValue %56
OpFunctionEnd
%setOutput_i1_f1_ = OpFunction %void None %47
%setOutput_i1_f1_ = OpFunction %void None %57
%flatIndex = OpFunctionParameter %_ptr_Function_int
%value = OpFunctionParameter %_ptr_Function_float
%53 = OpLabel
%55 = OpLoad %int %flatIndex
%57 = OpLoad %float %value
%58 = OpAccessChain %_ptr_StorageBuffer_float %x_16 %uint_0 %55
OpStore %58 %57
%63 = OpLabel
%65 = OpLoad %int %flatIndex
%67 = OpLoad %float %value
%68 = OpAccessChain %_ptr_StorageBuffer_float %x_16 %uint_0 %65
OpStore %68 %67
OpReturn
OpFunctionEnd
%main_1 = OpFunction %void None %59
%61 = OpLabel
%index = OpVariable %_ptr_Function_int Function %63
%a_1 = OpVariable %_ptr_Function_float Function %37
%param = OpVariable %_ptr_Function_float Function %37
%param_1 = OpVariable %_ptr_Function_int Function %63
%param_2 = OpVariable %_ptr_Function_float Function %37
%68 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
%69 = OpLoad %uint %68
%70 = OpBitcast %int %69
OpStore %index %70
%71 = OpLoad %int %index
%74 = OpAccessChain %_ptr_Uniform_int %x_24 %uint_4
%75 = OpLoad %int %74
%76 = OpSLessThan %bool %71 %75
OpSelectionMerge %77 None
OpBranchConditional %76 %78 %77
%78 = OpLabel
%79 = OpFunctionCall %float %getAAtOutCoords_
OpStore %a_1 %79
%80 = OpLoad %float %a_1
OpStore %param %80
%81 = OpFunctionCall %float %unaryOperation_f1_ %param
%83 = OpLoad %int %index
OpStore %param_1 %83
OpStore %param_2 %81
%84 = OpFunctionCall %void %setOutput_i1_f1_ %param_1 %param_2
OpBranch %77
%77 = OpLabel
%main_1 = OpFunction %void None %69
%71 = OpLabel
%index = OpVariable %_ptr_Function_int Function %73
%a_1 = OpVariable %_ptr_Function_float Function %40
%param = OpVariable %_ptr_Function_float Function %40
%param_1 = OpVariable %_ptr_Function_int Function %73
%param_2 = OpVariable %_ptr_Function_float Function %40
%78 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
%79 = OpLoad %uint %78
%80 = OpBitcast %int %79
OpStore %index %80
%81 = OpLoad %int %index
%84 = OpAccessChain %_ptr_Uniform_int %x_24 %uint_4
%85 = OpLoad %int %84
%86 = OpSLessThan %bool %81 %85
OpSelectionMerge %87 None
OpBranchConditional %86 %88 %87
%88 = OpLabel
%89 = OpFunctionCall %float %getAAtOutCoords_
OpStore %a_1 %89
%90 = OpLoad %float %a_1
OpStore %param %90
%91 = OpFunctionCall %float %unaryOperation_f1_ %param
%93 = OpLoad %int %index
OpStore %param_1 %93
OpStore %param_2 %91
%94 = OpFunctionCall %void %setOutput_i1_f1_ %param_1 %param_2
OpBranch %87
%87 = OpLabel
OpReturn
OpFunctionEnd
%main_inner = OpFunction %void None %87
%main_inner = OpFunction %void None %97
%gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
%90 = OpLabel
%100 = OpLabel
OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param
%91 = OpFunctionCall %void %main_1
%101 = OpFunctionCall %void %main_1
OpReturn
OpFunctionEnd
%main = OpFunction %void None %59
%93 = OpLabel
%95 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
%94 = OpFunctionCall %void %main_inner %95
%main = OpFunction %void None %69
%103 = OpLabel
%105 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
%104 = OpFunctionCall %void %main_inner %105
OpReturn
OpFunctionEnd

View File

@ -1,10 +1,10 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 102
; Bound: 112
; Schema: 0
OpCapability Shader
%42 = OpExtInstImport "GLSL.std.450"
%51 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID_param_1
OpExecutionMode %main LocalSize 1 1 1
@ -27,6 +27,8 @@
OpName %binaryOperation_f1_f1_ "binaryOperation_f1_f1_"
OpName %a "a"
OpName %b "b"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %x_26 "x_26"
OpName %main_1 "main_1"
OpName %index "index"
@ -83,93 +85,110 @@
%x_46 = OpVariable %_ptr_Uniform_Uniforms Uniform
%_ptr_Function_float = OpTypePointer Function %float
%23 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
%30 = OpConstantNull %float
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%32 = OpConstantNull %bool
%34 = OpConstantNull %float
%true = OpConstantTrue %bool
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%void = OpTypeVoid
%69 = OpTypeFunction %void
%79 = OpTypeFunction %void
%_ptr_Function_int = OpTypePointer Function %int
%75 = OpConstantNull %int
%85 = OpConstantNull %int
%uint_0 = OpConstant %uint 0
%_ptr_Private_uint = OpTypePointer Private %uint
%int_n10 = OpConstant %int -10
%float_n4 = OpConstant %float -4
%float_n3 = OpConstant %float -3
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%93 = OpTypeFunction %void %v3uint
%103 = OpTypeFunction %void %v3uint
%binaryOperation_f1_f1_ = OpFunction %float None %23
%a = OpFunctionParameter %_ptr_Function_float
%b = OpFunctionParameter %_ptr_Function_float
%28 = OpLabel
%x_26 = OpVariable %_ptr_Function_float Function %30
%32 = OpLoad %float %b
%33 = OpFOrdEqual %bool %32 %30
OpSelectionMerge %35 None
OpBranchConditional %33 %36 %35
%36 = OpLabel
OpReturnValue %float_1
%35 = OpLabel
%39 = OpLoad %float %b
%45 = OpFDiv %float %39 %float_2
%44 = OpExtInst %float %42 Floor %45
%46 = OpFMul %float %float_2 %44
%47 = OpFSub %float %39 %46
%41 = OpExtInst %float %42 RoundEven %47
%48 = OpFOrdEqual %bool %41 %float_1
%40 = OpLogicalNot %bool %48
OpSelectionMerge %49 None
OpBranchConditional %40 %50 %51
%50 = OpLabel
%53 = OpLoad %float %a
%55 = OpLoad %float %b
%57 = OpExtInst %float %42 FAbs %53
%56 = OpExtInst %float %42 Pow %57 %55
OpStore %x_26 %56
OpBranch %49
%51 = OpLabel
%59 = OpLoad %float %a
%61 = OpLoad %float %a
%63 = OpLoad %float %b
%64 = OpExtInst %float %42 FSign %59
%66 = OpExtInst %float %42 FAbs %61
%65 = OpExtInst %float %42 Pow %66 %63
%67 = OpFMul %float %64 %65
OpStore %x_26 %67
OpBranch %49
%49 = OpLabel
%68 = OpLoad %float %x_26
OpReturnValue %68
%tint_return_flag = OpVariable %_ptr_Function_bool Function %32
%tint_return_value = OpVariable %_ptr_Function_float Function %34
%x_26 = OpVariable %_ptr_Function_float Function %34
%37 = OpLoad %float %b
%38 = OpFOrdEqual %bool %37 %34
OpSelectionMerge %39 None
OpBranchConditional %38 %40 %39
%40 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %float_1
OpBranch %39
%39 = OpLabel
%44 = OpLoad %bool %tint_return_flag
%43 = OpLogicalNot %bool %44
OpSelectionMerge %45 None
OpBranchConditional %43 %46 %45
%46 = OpLabel
%48 = OpLoad %float %b
%54 = OpFDiv %float %48 %float_2
%53 = OpExtInst %float %51 Floor %54
%55 = OpFMul %float %float_2 %53
%56 = OpFSub %float %48 %55
%50 = OpExtInst %float %51 RoundEven %56
%57 = OpFOrdEqual %bool %50 %float_1
%49 = OpLogicalNot %bool %57
OpSelectionMerge %58 None
OpBranchConditional %49 %59 %60
%59 = OpLabel
%62 = OpLoad %float %a
%64 = OpLoad %float %b
%66 = OpExtInst %float %51 FAbs %62
%65 = OpExtInst %float %51 Pow %66 %64
OpStore %x_26 %65
OpBranch %58
%60 = OpLabel
%68 = OpLoad %float %a
%70 = OpLoad %float %a
%72 = OpLoad %float %b
%73 = OpExtInst %float %51 FSign %68
%75 = OpExtInst %float %51 FAbs %70
%74 = OpExtInst %float %51 Pow %75 %72
%76 = OpFMul %float %73 %74
OpStore %x_26 %76
OpBranch %58
%58 = OpLabel
%77 = OpLoad %float %x_26
OpStore %tint_return_flag %true
OpStore %tint_return_value %77
OpBranch %45
%45 = OpLabel
%78 = OpLoad %float %tint_return_value
OpReturnValue %78
OpFunctionEnd
%main_1 = OpFunction %void None %69
%72 = OpLabel
%index = OpVariable %_ptr_Function_int Function %75
%a_1 = OpVariable %_ptr_Function_int Function %75
%param = OpVariable %_ptr_Function_float Function %30
%param_1 = OpVariable %_ptr_Function_float Function %30
%81 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
%82 = OpLoad %uint %81
%83 = OpBitcast %int %82
OpStore %index %83
%main_1 = OpFunction %void None %79
%82 = OpLabel
%index = OpVariable %_ptr_Function_int Function %85
%a_1 = OpVariable %_ptr_Function_int Function %85
%param = OpVariable %_ptr_Function_float Function %34
%param_1 = OpVariable %_ptr_Function_float Function %34
%91 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
%92 = OpLoad %uint %91
%93 = OpBitcast %int %92
OpStore %index %93
OpStore %a_1 %int_n10
%85 = OpLoad %int %index
%95 = OpLoad %int %index
OpStore %param %float_n4
OpStore %param_1 %float_n3
%88 = OpFunctionCall %float %binaryOperation_f1_f1_ %param %param_1
%92 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %85
OpStore %92 %88
%98 = OpFunctionCall %float %binaryOperation_f1_f1_ %param %param_1
%102 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %95
OpStore %102 %98
OpReturn
OpFunctionEnd
%main_inner = OpFunction %void None %93
%main_inner = OpFunction %void None %103
%gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
%96 = OpLabel
%106 = OpLabel
OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param
%97 = OpFunctionCall %void %main_1
%107 = OpFunctionCall %void %main_1
OpReturn
OpFunctionEnd
%main = OpFunction %void None %69
%99 = OpLabel
%101 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
%100 = OpFunctionCall %void %main_inner %101
%main = OpFunction %void None %79
%109 = OpLabel
%111 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
%110 = OpFunctionCall %void %main_inner %111
OpReturn
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 26
; Bound: 32
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -9,42 +9,52 @@
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%12 = OpConstantNull %bool
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%15 = OpConstantNull %int
%int_1 = OpConstant %int 1
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%true = OpConstantTrue %bool
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
OpReturn
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%16 = OpLoad %int %i
%18 = OpIAdd %int %16 %int_1
OpStore %i %18
%19 = OpLoad %int %i
%21 = OpSGreaterThan %bool %19 %int_4
OpSelectionMerge %23 None
OpBranchConditional %21 %24 %23
%24 = OpLabel
%25 = OpLoad %int %i
OpReturnValue %25
%23 = OpLabel
OpBranch %14
%14 = OpLabel
OpBranch %12
%13 = OpLabel
OpReturnValue %11
%tint_return_flag = OpVariable %_ptr_Function_bool Function %12
%tint_return_value = OpVariable %_ptr_Function_int Function %15
%i = OpVariable %_ptr_Function_int Function %15
OpBranch %17
%17 = OpLabel
OpLoopMerge %18 %19 None
OpBranch %20
%20 = OpLabel
%21 = OpLoad %int %i
%23 = OpIAdd %int %21 %int_1
OpStore %i %23
%24 = OpLoad %int %i
%26 = OpSGreaterThan %bool %24 %int_4
OpSelectionMerge %27 None
OpBranchConditional %26 %28 %27
%28 = OpLabel
OpStore %tint_return_flag %true
%30 = OpLoad %int %i
OpStore %tint_return_value %30
OpBranch %18
%27 = OpLabel
OpBranch %19
%19 = OpLabel
OpBranch %17
%18 = OpLabel
%31 = OpLoad %int %tint_return_value
OpReturnValue %31
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 29
; Bound: 39
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -9,15 +9,20 @@
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%12 = OpConstantNull %bool
%_ptr_Function_int = OpTypePointer Function %int
%15 = OpConstantNull %int
%int_4 = OpConstant %int 4
%true = OpConstantTrue %bool
%int_1 = OpConstant %int 1
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
@ -25,29 +30,43 @@
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%16 = OpLoad %int %i
%18 = OpSGreaterThan %bool %16 %int_4
OpSelectionMerge %20 None
OpBranchConditional %18 %21 %20
%21 = OpLabel
%22 = OpLoad %int %i
OpReturnValue %22
%tint_return_flag = OpVariable %_ptr_Function_bool Function %12
%tint_return_value = OpVariable %_ptr_Function_int Function %15
%i = OpVariable %_ptr_Function_int Function %15
OpBranch %17
%17 = OpLabel
OpLoopMerge %18 %19 None
OpBranch %20
%20 = OpLabel
OpBranch %14
%14 = OpLabel
%23 = OpLoad %int %i
%25 = OpIAdd %int %23 %int_1
OpStore %i %25
%26 = OpLoad %int %i
%27 = OpIEqual %bool %26 %int_4
OpBranchConditional %27 %13 %12
%13 = OpLabel
%21 = OpLoad %int %i
%23 = OpSGreaterThan %bool %21 %int_4
OpSelectionMerge %24 None
OpBranchConditional %23 %25 %24
%25 = OpLabel
OpStore %tint_return_flag %true
%27 = OpLoad %int %i
OpStore %tint_return_value %27
OpBranch %18
%24 = OpLabel
OpBranch %19
%19 = OpLabel
%28 = OpLoad %int %i
OpReturnValue %28
%30 = OpIAdd %int %28 %int_1
OpStore %i %30
%31 = OpLoad %int %i
%32 = OpIEqual %bool %31 %int_4
OpBranchConditional %32 %18 %17
%18 = OpLabel
%34 = OpLoad %bool %tint_return_flag
%33 = OpLogicalNot %bool %34
OpSelectionMerge %35 None
OpBranchConditional %33 %36 %35
%36 = OpLabel
OpStore %tint_return_flag %true
%37 = OpLoad %int %i
OpStore %tint_return_value %37
OpBranch %35
%35 = OpLabel
%38 = OpLoad %int %tint_return_value
OpReturnValue %38
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 26
; Bound: 32
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -9,15 +9,20 @@
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%12 = OpConstantNull %bool
%_ptr_Function_int = OpTypePointer Function %int
%15 = OpConstantNull %int
%int_4 = OpConstant %int 4
%true = OpConstantTrue %bool
%int_1 = OpConstant %int 1
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
@ -25,26 +30,31 @@
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%16 = OpLoad %int %i
%18 = OpSGreaterThan %bool %16 %int_4
OpSelectionMerge %20 None
OpBranchConditional %18 %21 %20
%21 = OpLabel
%22 = OpLoad %int %i
OpReturnValue %22
%tint_return_flag = OpVariable %_ptr_Function_bool Function %12
%tint_return_value = OpVariable %_ptr_Function_int Function %15
%i = OpVariable %_ptr_Function_int Function %15
OpBranch %17
%17 = OpLabel
OpLoopMerge %18 %19 None
OpBranch %20
%20 = OpLabel
OpBranch %14
%14 = OpLabel
%23 = OpLoad %int %i
%25 = OpIAdd %int %23 %int_1
OpStore %i %25
OpBranch %12
%13 = OpLabel
OpReturnValue %11
%21 = OpLoad %int %i
%23 = OpSGreaterThan %bool %21 %int_4
OpSelectionMerge %24 None
OpBranchConditional %23 %25 %24
%25 = OpLabel
OpStore %tint_return_flag %true
%27 = OpLoad %int %i
OpStore %tint_return_value %27
OpBranch %18
%24 = OpLabel
OpBranch %19
%19 = OpLabel
%28 = OpLoad %int %i
%30 = OpIAdd %int %28 %int_1
OpStore %i %30
OpBranch %17
%18 = OpLabel
%31 = OpLoad %int %tint_return_value
OpReturnValue %31
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 37
; Bound: 43
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -9,17 +9,22 @@
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
OpName %j "j"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%12 = OpConstantNull %bool
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%15 = OpConstantNull %int
%int_1 = OpConstant %int 1
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%true = OpConstantTrue %bool
%int_2 = OpConstant %int 2
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
@ -27,45 +32,52 @@
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
%j = OpVariable %_ptr_Function_int Function %11
OpBranch %13
%13 = OpLabel
OpLoopMerge %14 %15 None
OpBranch %16
%16 = OpLabel
%17 = OpLoad %int %i
%19 = OpIAdd %int %17 %int_1
OpStore %i %19
%20 = OpLoad %int %i
%22 = OpSGreaterThan %bool %20 %int_4
OpSelectionMerge %24 None
OpBranchConditional %22 %25 %24
%25 = OpLabel
OpReturnValue %int_1
%24 = OpLabel
OpBranch %26
%26 = OpLabel
OpLoopMerge %27 %28 None
OpBranch %29
%tint_return_flag = OpVariable %_ptr_Function_bool Function %12
%tint_return_value = OpVariable %_ptr_Function_int Function %15
%i = OpVariable %_ptr_Function_int Function %15
%j = OpVariable %_ptr_Function_int Function %15
OpBranch %18
%18 = OpLabel
OpLoopMerge %19 %20 None
OpBranch %21
%21 = OpLabel
%22 = OpLoad %int %i
%24 = OpIAdd %int %22 %int_1
OpStore %i %24
%25 = OpLoad %int %i
%27 = OpSGreaterThan %bool %25 %int_4
OpSelectionMerge %28 None
OpBranchConditional %27 %29 %28
%29 = OpLabel
%30 = OpLoad %int %j
%31 = OpIAdd %int %30 %int_1
OpStore %j %31
%32 = OpLoad %int %j
%33 = OpSGreaterThan %bool %32 %int_4
OpSelectionMerge %34 None
OpBranchConditional %33 %35 %34
%35 = OpLabel
OpReturnValue %int_2
%34 = OpLabel
OpBranch %28
OpStore %tint_return_flag %true
OpStore %tint_return_value %int_1
OpBranch %19
%28 = OpLabel
OpBranch %26
%27 = OpLabel
OpBranch %15
%15 = OpLabel
OpBranch %13
%14 = OpLabel
OpReturnValue %11
OpBranch %31
%31 = OpLabel
OpLoopMerge %32 %33 None
OpBranch %34
%34 = OpLabel
%35 = OpLoad %int %j
%36 = OpIAdd %int %35 %int_1
OpStore %j %36
%37 = OpLoad %int %j
%38 = OpSGreaterThan %bool %37 %int_4
OpSelectionMerge %39 None
OpBranchConditional %38 %40 %39
%40 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %int_2
OpBranch %32
%39 = OpLabel
OpBranch %33
%33 = OpLabel
OpBranch %31
%32 = OpLabel
OpBranch %19
%20 = OpLabel
OpBranch %18
%19 = OpLabel
%42 = OpLoad %int %tint_return_value
OpReturnValue %42
OpFunctionEnd

View File

@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 37
; Bound: 43
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@ -9,16 +9,21 @@
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %tint_return_flag "tint_return_flag"
OpName %tint_return_value "tint_return_value"
OpName %i "i"
OpName %j "j"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%_ptr_Function_bool = OpTypePointer Function %bool
%12 = OpConstantNull %bool
%_ptr_Function_int = OpTypePointer Function %int
%15 = OpConstantNull %int
%int_4 = OpConstant %int 4
%true = OpConstantTrue %bool
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%unused_entry_point = OpFunction %void None %1
@ -27,45 +32,52 @@
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
%j = OpVariable %_ptr_Function_int Function %11
OpBranch %13
%13 = OpLabel
OpLoopMerge %14 %15 None
OpBranch %16
%16 = OpLabel
%17 = OpLoad %int %i
%19 = OpSGreaterThan %bool %17 %int_4
OpSelectionMerge %21 None
OpBranchConditional %19 %22 %21
%22 = OpLabel
OpReturnValue %int_1
%tint_return_flag = OpVariable %_ptr_Function_bool Function %12
%tint_return_value = OpVariable %_ptr_Function_int Function %15
%i = OpVariable %_ptr_Function_int Function %15
%j = OpVariable %_ptr_Function_int Function %15
OpBranch %18
%18 = OpLabel
OpLoopMerge %19 %20 None
OpBranch %21
%21 = OpLabel
OpBranch %24
%24 = OpLabel
OpLoopMerge %25 %26 None
OpBranch %27
%27 = OpLabel
%28 = OpLoad %int %j
%29 = OpSGreaterThan %bool %28 %int_4
OpSelectionMerge %30 None
OpBranchConditional %29 %31 %30
%31 = OpLabel
OpReturnValue %int_2
%30 = OpLabel
OpBranch %26
%22 = OpLoad %int %i
%24 = OpSGreaterThan %bool %22 %int_4
OpSelectionMerge %25 None
OpBranchConditional %24 %26 %25
%26 = OpLabel
%33 = OpLoad %int %j
%34 = OpIAdd %int %33 %int_1
OpStore %j %34
OpBranch %24
OpStore %tint_return_flag %true
OpStore %tint_return_value %int_1
OpBranch %19
%25 = OpLabel
OpBranch %15
%15 = OpLabel
%35 = OpLoad %int %i
%36 = OpIAdd %int %35 %int_1
OpStore %i %36
OpBranch %13
%14 = OpLabel
OpReturnValue %11
OpBranch %29
%29 = OpLabel
OpLoopMerge %30 %31 None
OpBranch %32
%32 = OpLabel
%33 = OpLoad %int %j
%34 = OpSGreaterThan %bool %33 %int_4
OpSelectionMerge %35 None
OpBranchConditional %34 %36 %35
%36 = OpLabel
OpStore %tint_return_flag %true
OpStore %tint_return_value %int_2
OpBranch %30
%35 = OpLabel
OpBranch %31
%31 = OpLabel
%38 = OpLoad %int %j
%39 = OpIAdd %int %38 %int_1
OpStore %j %39
OpBranch %29
%30 = OpLabel
OpBranch %19
%20 = OpLabel
%40 = OpLoad %int %i
%41 = OpIAdd %int %40 %int_1
OpStore %i %41
OpBranch %18
%19 = OpLabel
%42 = OpLoad %int %tint_return_value
OpReturnValue %42
OpFunctionEnd