blob: 78a92785c52e68247a543b0a1337a136803fe2b3 [file] [log] [blame]
;; 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