;; Test where src and dst have a few large functions with small differences. | |
OpCapability Shader | |
%1 = OpExtInstImport "GLSL.std.450" | |
OpMemoryModel Logical GLSL450 | |
OpEntryPoint GLCompute %4 "main" %15 | |
OpExecutionMode %4 LocalSize 1 1 1 | |
OpSource ESSL 310 | |
OpName %4 "main" | |
OpName %6 "f1(" | |
OpName %8 "f2(" | |
OpName %12 "x" | |
OpName %15 "gl_LocalInvocationID" | |
OpName %20 "y" | |
OpName %27 "image" | |
OpName %44 "sum" | |
OpName %46 "i" | |
OpName %56 "j" | |
OpName %80 "BufferOut" | |
OpMemberName %80 0 "o_uv4" | |
OpMemberName %80 1 "o_v3" | |
OpMemberName %80 2 "o_i" | |
OpName %82 "" | |
OpName %88 "BufferIn" | |
OpMemberName %88 0 "i_u" | |
OpMemberName %88 1 "i_v4" | |
OpMemberName %88 2 "i_f" | |
OpName %90 "" | |
OpName %101 "i" | |
OpDecorate %15 BuiltIn LocalInvocationId | |
OpDecorate %27 DescriptorSet 0 | |
OpDecorate %27 Binding 2 | |
OpMemberDecorate %80 0 Offset 0 | |
OpMemberDecorate %80 1 Offset 16 | |
OpMemberDecorate %80 2 Offset 28 | |
OpDecorate %80 BufferBlock | |
OpDecorate %82 DescriptorSet 0 | |
OpDecorate %82 Binding 1 | |
OpMemberDecorate %88 0 Offset 0 | |
OpMemberDecorate %88 1 RowMajor | |
OpMemberDecorate %88 1 Offset 16 | |
OpMemberDecorate %88 1 MatrixStride 16 | |
OpMemberDecorate %88 2 Offset 80 | |
OpDecorate %88 Block | |
OpDecorate %90 DescriptorSet 0 | |
OpDecorate %90 Binding 0 | |
%2 = OpTypeVoid | |
%3 = OpTypeFunction %2 | |
%10 = OpTypeInt 32 0 | |
%11 = OpTypePointer Function %10 | |
%13 = OpTypeVector %10 3 | |
%14 = OpTypePointer Input %13 | |
%15 = OpVariable %14 Input | |
%16 = OpConstant %10 0 | |
%17 = OpTypePointer Input %10 | |
%21 = OpConstant %10 1 | |
%24 = OpTypeInt 32 1 | |
%25 = OpTypeImage %24 2D 0 0 0 2 R32i | |
%26 = OpTypePointer UniformConstant %25 | |
%27 = OpVariable %26 UniformConstant | |
%29 = OpTypeVector %10 2 | |
%32 = OpTypeVector %24 2 | |
%38 = OpTypeVector %24 4 | |
%40 = OpConstant %10 2 | |
%41 = OpConstant %10 3400 | |
%42 = OpConstant %10 264 | |
%43 = OpTypePointer Function %24 | |
%45 = OpConstant %24 0 | |
%53 = OpConstant %24 2 | |
%54 = OpTypeBool | |
%73 = OpConstant %24 1 | |
%77 = OpTypeVector %10 4 | |
%78 = OpTypeFloat 32 | |
%79 = OpTypeVector %78 3 | |
%80 = OpTypeStruct %77 %79 %24 | |
%81 = OpTypePointer Uniform %80 | |
%82 = OpVariable %81 Uniform | |
%84 = OpTypePointer Uniform %24 | |
%86 = OpTypeVector %78 4 | |
%87 = OpTypeMatrix %86 4 | |
%88 = OpTypeStruct %10 %87 %78 | |
%89 = OpTypePointer Uniform %88 | |
%90 = OpVariable %89 Uniform | |
%91 = OpTypePointer Uniform %87 | |
%94 = OpTypePointer Uniform %77 | |
%108 = OpConstant %24 3 | |
%110 = OpTypePointer Uniform %79 | |
%113 = OpTypePointer Uniform %78 | |
%129 = OpConstantComposite %32 %45 %45 | |
%4 = OpFunction %2 None %3 | |
%5 = OpLabel | |
%135 = OpFunctionCall %2 %6 | |
%136 = OpFunctionCall %2 %8 | |
OpReturn | |
OpFunctionEnd | |
%6 = OpFunction %2 None %3 | |
%7 = OpLabel | |
%12 = OpVariable %11 Function | |
%20 = OpVariable %11 Function | |
%44 = OpVariable %43 Function | |
%46 = OpVariable %43 Function | |
%56 = OpVariable %43 Function | |
%18 = OpAccessChain %17 %15 %16 | |
%19 = OpLoad %10 %18 | |
OpStore %12 %19 | |
%22 = OpAccessChain %17 %15 %21 | |
%23 = OpLoad %10 %22 | |
OpStore %20 %23 | |
%28 = OpLoad %25 %27 | |
%30 = OpLoad %13 %15 | |
%31 = OpVectorShuffle %29 %30 %30 0 1 | |
%33 = OpBitcast %32 %31 | |
%34 = OpLoad %10 %12 | |
%35 = OpLoad %10 %20 | |
%36 = OpIAdd %10 %34 %35 | |
%37 = OpBitcast %24 %36 | |
%39 = OpCompositeConstruct %38 %37 %37 %37 %37 | |
OpImageWrite %28 %33 %39 | |
OpMemoryBarrier %40 %41 | |
OpControlBarrier %40 %40 %42 | |
OpStore %44 %45 | |
OpStore %46 %45 | |
OpBranch %47 | |
%47 = OpLabel | |
OpLoopMerge %49 %50 None | |
OpBranch %51 | |
%51 = OpLabel | |
%52 = OpLoad %24 %46 | |
%55 = OpSLessThan %54 %52 %53 | |
OpBranchConditional %55 %48 %49 | |
%48 = OpLabel | |
OpStore %56 %45 | |
OpBranch %57 | |
%57 = OpLabel | |
OpLoopMerge %59 %60 None | |
OpBranch %61 | |
%61 = OpLabel | |
%62 = OpLoad %24 %56 | |
%63 = OpSLessThan %54 %62 %53 | |
OpBranchConditional %63 %58 %59 | |
%58 = OpLabel | |
%64 = OpLoad %25 %27 | |
%65 = OpLoad %24 %46 | |
%66 = OpLoad %24 %56 | |
%67 = OpCompositeConstruct %32 %65 %66 | |
%68 = OpImageRead %38 %64 %67 | |
%69 = OpCompositeExtract %24 %68 0 | |
%70 = OpLoad %24 %44 | |
%71 = OpIAdd %24 %70 %69 | |
OpStore %44 %71 | |
OpBranch %60 | |
%60 = OpLabel | |
%72 = OpLoad %24 %56 | |
%74 = OpIAdd %24 %72 %73 | |
OpStore %56 %74 | |
OpBranch %57 | |
%59 = OpLabel | |
OpBranch %50 | |
%50 = OpLabel | |
%75 = OpLoad %24 %46 | |
%76 = OpIAdd %24 %75 %73 | |
OpStore %46 %76 | |
OpBranch %47 | |
%49 = OpLabel | |
OpMemoryBarrier %40 %41 | |
OpControlBarrier %40 %40 %42 | |
%83 = OpLoad %24 %44 | |
%85 = OpAccessChain %84 %82 %53 | |
OpStore %85 %83 | |
OpReturn | |
OpFunctionEnd | |
%8 = OpFunction %2 None %3 | |
%9 = OpLabel | |
%101 = OpVariable %43 Function | |
%92 = OpAccessChain %91 %90 %73 | |
%93 = OpLoad %87 %92 | |
%95 = OpAccessChain %94 %82 %45 | |
%96 = OpLoad %77 %95 | |
%97 = OpConvertUToF %86 %96 | |
%98 = OpMatrixTimesVector %86 %93 %97 | |
%99 = OpConvertFToU %77 %98 | |
%100 = OpAccessChain %94 %82 %45 | |
OpStore %100 %99 | |
OpStore %101 %45 | |
OpBranch %102 | |
%102 = OpLabel | |
OpLoopMerge %104 %105 None | |
OpBranch %106 | |
%106 = OpLabel | |
%107 = OpLoad %24 %101 | |
%109 = OpSLessThan %54 %107 %108 | |
OpBranchConditional %109 %103 %104 | |
%103 = OpLabel | |
%111 = OpAccessChain %110 %82 %73 | |
%112 = OpLoad %79 %111 | |
%114 = OpAccessChain %113 %90 %53 | |
%115 = OpLoad %78 %114 | |
%116 = OpVectorTimesScalar %79 %112 %115 | |
%117 = OpConvertFToU %13 %116 | |
%118 = OpCompositeExtract %10 %117 0 | |
%119 = OpCompositeExtract %10 %117 1 | |
%120 = OpCompositeExtract %10 %117 2 | |
%121 = OpCompositeConstruct %77 %118 %119 %120 %16 | |
%122 = OpAccessChain %94 %82 %45 | |
%123 = OpLoad %77 %122 | |
%124 = OpIAdd %77 %123 %121 | |
%125 = OpAccessChain %94 %82 %45 | |
OpStore %125 %124 | |
OpBranch %105 | |
%105 = OpLabel | |
%126 = OpLoad %24 %101 | |
%127 = OpIAdd %24 %126 %73 | |
OpStore %101 %127 | |
OpBranch %102 | |
%104 = OpLabel | |
OpMemoryBarrier %40 %41 | |
OpControlBarrier %40 %40 %42 | |
%128 = OpLoad %25 %27 | |
%130 = OpImageRead %38 %128 %129 | |
%131 = OpCompositeExtract %24 %130 0 | |
%132 = OpConvertSToF %78 %131 | |
%133 = OpCompositeConstruct %79 %132 %132 %132 | |
%134 = OpAccessChain %110 %82 %73 | |
OpStore %134 %133 | |
OpReturn | |
OpFunctionEnd | |