| // GENERATED FILE - DO NOT EDIT. |
| // Generated by generate_tests.py |
| // |
| // Copyright (c) 2022 Google LLC. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "../diff_test_utils.h" |
| |
| #include "gtest/gtest.h" |
| |
| namespace spvtools { |
| namespace diff { |
| namespace { |
| |
| // Test where src and dst have a few large functions with large differences. |
| constexpr char kSrc[] = R"( 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" |
| OpName %128 "image2" |
| 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 |
| OpDecorate %128 DescriptorSet 0 |
| OpDecorate %128 Binding 3 |
| %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 |
| %128 = OpVariable %26 UniformConstant |
| %130 = OpConstantComposite %32 %45 %45 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %136 = OpFunctionCall %2 %6 |
| %137 = 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 = OpIMul %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 |
| %129 = OpLoad %25 %128 |
| %131 = OpImageRead %38 %129 %130 |
| %132 = OpCompositeExtract %24 %131 0 |
| %133 = OpConvertSToF %78 %132 |
| %134 = OpCompositeConstruct %79 %133 %133 %133 |
| %135 = OpAccessChain %110 %82 %73 |
| OpStore %135 %134 |
| OpReturn |
| OpFunctionEnd |
| )"; |
| constexpr char kDst[] = R"( OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %4 "main" %15 %110 |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource ESSL 310 |
| OpName %4 "main" |
| OpName %6 "f1(" |
| OpName %8 "f2(" |
| OpName %12 "x" |
| OpName %15 "gl_GlobalInvocationID" |
| OpName %20 "z" |
| OpName %26 "i" |
| OpName %40 "BufferOut" |
| OpMemberName %40 0 "o_uv4" |
| OpMemberName %40 1 "o_v3" |
| OpMemberName %40 2 "o_i" |
| OpName %42 "" |
| OpName %63 "image2" |
| OpName %79 "image" |
| OpName %89 "i" |
| OpName %110 "gl_LocalInvocationID" |
| OpName %127 "BufferIn" |
| OpMemberName %127 0 "i_u" |
| OpMemberName %127 1 "i_v4" |
| OpMemberName %127 2 "i_f" |
| OpName %129 "" |
| OpDecorate %15 BuiltIn GlobalInvocationId |
| OpMemberDecorate %40 0 Offset 0 |
| OpMemberDecorate %40 1 Offset 16 |
| OpMemberDecorate %40 2 Offset 28 |
| OpDecorate %40 BufferBlock |
| OpDecorate %42 DescriptorSet 0 |
| OpDecorate %42 Binding 1 |
| OpDecorate %63 DescriptorSet 0 |
| OpDecorate %63 Binding 3 |
| OpDecorate %79 DescriptorSet 0 |
| OpDecorate %79 Binding 2 |
| OpDecorate %110 BuiltIn LocalInvocationId |
| OpMemberDecorate %127 0 Offset 0 |
| OpMemberDecorate %127 1 RowMajor |
| OpMemberDecorate %127 1 Offset 16 |
| OpMemberDecorate %127 1 MatrixStride 16 |
| OpMemberDecorate %127 2 Offset 80 |
| OpDecorate %127 Block |
| OpDecorate %129 DescriptorSet 0 |
| OpDecorate %129 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 = OpTypePointer Function %24 |
| %27 = OpConstant %24 0 |
| %34 = OpConstant %24 2 |
| %35 = OpTypeBool |
| %37 = OpTypeVector %10 4 |
| %38 = OpTypeFloat 32 |
| %39 = OpTypeVector %38 3 |
| %40 = OpTypeStruct %37 %39 %24 |
| %41 = OpTypePointer Uniform %40 |
| %42 = OpVariable %41 Uniform |
| %46 = OpTypeVector %10 2 |
| %48 = OpTypePointer Uniform %37 |
| %53 = OpTypePointer Uniform %10 |
| %59 = OpConstant %24 1 |
| %61 = OpTypeImage %24 2D 0 0 0 2 R32i |
| %62 = OpTypePointer UniformConstant %61 |
| %63 = OpVariable %62 UniformConstant |
| %69 = OpTypeVector %24 2 |
| %71 = OpTypeVector %24 4 |
| %74 = OpTypePointer Uniform %24 |
| %76 = OpConstant %10 2 |
| %77 = OpConstant %10 3400 |
| %78 = OpConstant %10 264 |
| %79 = OpVariable %62 UniformConstant |
| %96 = OpConstant %24 3 |
| %103 = OpConstantComposite %69 %27 %27 |
| %107 = OpTypePointer Uniform %38 |
| %110 = OpVariable %14 Input |
| %113 = OpTypeVector %38 2 |
| %125 = OpTypeVector %38 4 |
| %126 = OpTypeMatrix %125 4 |
| %127 = OpTypeStruct %10 %126 %38 |
| %128 = OpTypePointer Uniform %127 |
| %129 = OpVariable %128 Uniform |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %123 = OpFunctionCall %2 %8 |
| %124 = OpFunctionCall %2 %6 |
| OpReturn |
| OpFunctionEnd |
| %6 = OpFunction %2 None %3 |
| %7 = OpLabel |
| %12 = OpVariable %11 Function |
| %20 = OpVariable %11 Function |
| %26 = OpVariable %25 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 |
| OpStore %26 %27 |
| OpBranch %28 |
| %28 = OpLabel |
| OpLoopMerge %30 %31 None |
| OpBranch %32 |
| %32 = OpLabel |
| %33 = OpLoad %24 %26 |
| %36 = OpSLessThan %35 %33 %34 |
| OpBranchConditional %36 %29 %30 |
| %29 = OpLabel |
| %43 = OpLoad %10 %12 |
| %44 = OpLoad %10 %20 |
| %45 = OpIAdd %10 %43 %44 |
| %47 = OpCompositeConstruct %46 %45 %45 |
| %49 = OpAccessChain %48 %42 %27 |
| %50 = OpLoad %37 %49 |
| %51 = OpVectorShuffle %46 %50 %50 0 1 |
| %52 = OpIAdd %46 %51 %47 |
| %54 = OpAccessChain %53 %42 %27 %16 |
| %55 = OpCompositeExtract %10 %52 0 |
| OpStore %54 %55 |
| %56 = OpAccessChain %53 %42 %27 %21 |
| %57 = OpCompositeExtract %10 %52 1 |
| OpStore %56 %57 |
| OpBranch %31 |
| %31 = OpLabel |
| %58 = OpLoad %24 %26 |
| %60 = OpIAdd %24 %58 %59 |
| OpStore %26 %60 |
| OpBranch %28 |
| %30 = OpLabel |
| %64 = OpLoad %61 %63 |
| %65 = OpLoad %10 %12 |
| %66 = OpBitcast %24 %65 |
| %67 = OpLoad %10 %20 |
| %68 = OpBitcast %24 %67 |
| %70 = OpCompositeConstruct %69 %66 %68 |
| %72 = OpImageRead %71 %64 %70 |
| %73 = OpCompositeExtract %24 %72 1 |
| %75 = OpAccessChain %74 %42 %34 |
| OpStore %75 %73 |
| OpMemoryBarrier %76 %77 |
| OpControlBarrier %76 %76 %78 |
| %80 = OpLoad %61 %79 |
| %81 = OpLoad %10 %20 |
| %82 = OpBitcast %24 %81 |
| %83 = OpLoad %10 %12 |
| %84 = OpBitcast %24 %83 |
| %85 = OpCompositeConstruct %69 %82 %84 |
| %86 = OpAccessChain %74 %42 %34 |
| %87 = OpLoad %24 %86 |
| %88 = OpCompositeConstruct %71 %87 %27 %27 %27 |
| OpImageWrite %80 %85 %88 |
| OpReturn |
| OpFunctionEnd |
| %8 = OpFunction %2 None %3 |
| %9 = OpLabel |
| %89 = OpVariable %25 Function |
| OpStore %89 %27 |
| OpBranch %90 |
| %90 = OpLabel |
| OpLoopMerge %92 %93 None |
| OpBranch %94 |
| %94 = OpLabel |
| %95 = OpLoad %24 %89 |
| %97 = OpSLessThan %35 %95 %96 |
| OpBranchConditional %97 %91 %92 |
| %91 = OpLabel |
| %98 = OpLoad %24 %89 |
| %99 = OpIEqual %35 %98 %27 |
| OpSelectionMerge %101 None |
| OpBranchConditional %99 %100 %109 |
| %100 = OpLabel |
| %102 = OpLoad %61 %63 |
| %104 = OpImageRead %71 %102 %103 |
| %105 = OpCompositeExtract %24 %104 0 |
| %106 = OpConvertSToF %38 %105 |
| %108 = OpAccessChain %107 %42 %59 %16 |
| OpStore %108 %106 |
| OpBranch %101 |
| %109 = OpLabel |
| %111 = OpLoad %13 %110 |
| %112 = OpConvertUToF %39 %111 |
| %114 = OpCompositeExtract %38 %112 0 |
| %115 = OpCompositeExtract %38 %112 1 |
| %116 = OpCompositeConstruct %113 %114 %115 |
| %117 = OpAccessChain %107 %42 %59 %21 |
| %118 = OpCompositeExtract %38 %116 0 |
| OpStore %117 %118 |
| %119 = OpAccessChain %107 %42 %59 %76 |
| %120 = OpCompositeExtract %38 %116 1 |
| OpStore %119 %120 |
| OpBranch %101 |
| %101 = OpLabel |
| OpBranch %93 |
| %93 = OpLabel |
| %121 = OpLoad %24 %89 |
| %122 = OpIAdd %24 %121 %59 |
| OpStore %89 %122 |
| OpBranch %90 |
| %92 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| |
| )"; |
| |
| TEST(DiffTest, LargeFunctionsLargeDiffs) { |
| constexpr char kDiff[] = R"( ; SPIR-V |
| ; Version: 1.6 |
| ; Generator: Khronos SPIR-V Tools Assembler; 0 |
| -; Bound: 138 |
| +; Bound: 190 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| -OpEntryPoint GLCompute %4 "main" %15 |
| +OpEntryPoint GLCompute %4 "main" %138 %15 |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource ESSL 310 |
| OpName %4 "main" |
| OpName %6 "f1(" |
| OpName %8 "f2(" |
| OpName %12 "x" |
| +OpName %138 "gl_GlobalInvocationID" |
| OpName %15 "gl_LocalInvocationID" |
| -OpName %20 "y" |
| +OpName %20 "z" |
| OpName %27 "image" |
| -OpName %44 "sum" |
| +OpName %44 "i" |
| -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" |
| OpName %128 "image2" |
| +OpDecorate %138 BuiltIn GlobalInvocationId |
| 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 |
| OpDecorate %128 DescriptorSet 0 |
| OpDecorate %128 Binding 3 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %10 = OpTypeInt 32 0 |
| %11 = OpTypePointer Function %10 |
| %13 = OpTypeVector %10 3 |
| %14 = OpTypePointer Input %13 |
| +%138 = OpVariable %14 Input |
| %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 |
| +%149 = OpTypePointer Uniform %10 |
| %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 |
| +%179 = OpTypeVector %78 2 |
| %94 = OpTypePointer Uniform %77 |
| %108 = OpConstant %24 3 |
| -%110 = OpTypePointer Uniform %79 |
| %113 = OpTypePointer Uniform %78 |
| %128 = OpVariable %26 UniformConstant |
| %130 = OpConstantComposite %32 %45 %45 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| -%136 = OpFunctionCall %2 %6 |
| %137 = OpFunctionCall %2 %8 |
| +%189 = OpFunctionCall %2 %6 |
| 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 |
| +%139 = OpAccessChain %17 %138 %16 |
| -%19 = OpLoad %10 %18 |
| +%19 = OpLoad %10 %139 |
| OpStore %12 %19 |
| -%22 = OpAccessChain %17 %15 %21 |
| +%140 = OpAccessChain %17 %138 %21 |
| -%23 = OpLoad %10 %22 |
| +%23 = OpLoad %10 %140 |
| 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 |
| +OpLoopMerge %49 %59 None |
| OpBranch %51 |
| %51 = OpLabel |
| -%52 = OpLoad %24 %46 |
| +%52 = OpLoad %24 %44 |
| %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 = OpIMul %24 %70 %69 |
| +%141 = OpLoad %10 %12 |
| +%142 = OpLoad %10 %20 |
| +%143 = OpIAdd %10 %141 %142 |
| +%144 = OpCompositeConstruct %29 %143 %143 |
| +%145 = OpAccessChain %94 %82 %45 |
| +%146 = OpLoad %77 %145 |
| +%147 = OpVectorShuffle %29 %146 %146 0 1 |
| +%148 = OpIAdd %29 %147 %144 |
| +%150 = OpAccessChain %149 %82 %45 %16 |
| +%151 = OpCompositeExtract %10 %148 0 |
| -OpStore %44 %71 |
| +OpStore %150 %151 |
| -OpBranch %60 |
| -%60 = OpLabel |
| -%72 = OpLoad %24 %56 |
| -%74 = OpIAdd %24 %72 %73 |
| +%152 = OpAccessChain %149 %82 %45 %21 |
| +%153 = OpCompositeExtract %10 %148 1 |
| -OpStore %56 %74 |
| +OpStore %152 %153 |
| -OpBranch %57 |
| +OpBranch %59 |
| %59 = OpLabel |
| -OpBranch %50 |
| -%50 = OpLabel |
| -%75 = OpLoad %24 %46 |
| +%75 = OpLoad %24 %44 |
| %76 = OpIAdd %24 %75 %73 |
| -OpStore %46 %76 |
| +OpStore %44 %76 |
| OpBranch %47 |
| %49 = OpLabel |
| +%154 = OpLoad %25 %128 |
| +%155 = OpLoad %10 %12 |
| +%156 = OpBitcast %24 %155 |
| +%157 = OpLoad %10 %20 |
| +%158 = OpBitcast %24 %157 |
| +%159 = OpCompositeConstruct %32 %156 %158 |
| +%160 = OpImageRead %38 %154 %159 |
| +%161 = OpCompositeExtract %24 %160 1 |
| +%162 = OpAccessChain %84 %82 %53 |
| +OpStore %162 %161 |
| OpMemoryBarrier %40 %41 |
| OpControlBarrier %40 %40 %42 |
| -%83 = OpLoad %24 %44 |
| +%163 = OpLoad %25 %27 |
| +%164 = OpLoad %10 %20 |
| +%165 = OpBitcast %24 %164 |
| +%166 = OpLoad %10 %12 |
| +%167 = OpBitcast %24 %166 |
| +%168 = OpCompositeConstruct %32 %165 %167 |
| %85 = OpAccessChain %84 %82 %53 |
| -OpStore %85 %83 |
| +%169 = OpLoad %24 %85 |
| +%170 = OpCompositeConstruct %38 %169 %45 %45 %45 |
| +OpImageWrite %163 %168 %170 |
| 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 |
| -OpStore %101 %45 |
| OpBranch %102 |
| %102 = OpLabel |
| -OpLoopMerge %104 %105 None |
| +OpLoopMerge %171 %172 None |
| OpBranch %106 |
| %106 = OpLabel |
| %107 = OpLoad %24 %101 |
| %109 = OpSLessThan %54 %107 %108 |
| -OpBranchConditional %109 %103 %104 |
| +OpBranchConditional %109 %103 %171 |
| %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 |
| +%173 = OpIEqual %54 %126 %45 |
| +OpSelectionMerge %174 None |
| +OpBranchConditional %173 %104 %176 |
| +%176 = OpLabel |
| +%177 = OpLoad %13 %15 |
| +%178 = OpConvertUToF %79 %177 |
| +%180 = OpCompositeExtract %78 %178 0 |
| +%181 = OpCompositeExtract %78 %178 1 |
| +%182 = OpCompositeConstruct %179 %180 %181 |
| +%183 = OpAccessChain %113 %82 %73 %21 |
| +%184 = OpCompositeExtract %78 %182 0 |
| -OpStore %101 %127 |
| +OpStore %183 %184 |
| +%185 = OpAccessChain %113 %82 %73 %40 |
| +%186 = OpCompositeExtract %78 %182 1 |
| +OpStore %185 %186 |
| -OpBranch %102 |
| +OpBranch %174 |
| %104 = OpLabel |
| -OpMemoryBarrier %40 %41 |
| -OpControlBarrier %40 %40 %42 |
| %129 = OpLoad %25 %128 |
| %131 = OpImageRead %38 %129 %130 |
| %132 = OpCompositeExtract %24 %131 0 |
| %133 = OpConvertSToF %78 %132 |
| -%134 = OpCompositeConstruct %79 %133 %133 %133 |
| -%135 = OpAccessChain %110 %82 %73 |
| +%175 = OpAccessChain %113 %82 %73 %16 |
| -OpStore %135 %134 |
| +OpStore %175 %133 |
| +OpBranch %174 |
| +%174 = OpLabel |
| +OpBranch %172 |
| +%172 = OpLabel |
| +%187 = OpLoad %24 %101 |
| +%188 = OpIAdd %24 %187 %73 |
| +OpStore %101 %188 |
| +OpBranch %102 |
| +%171 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| )"; |
| Options options; |
| DoStringDiffTest(kSrc, kDst, kDiff, options); |
| } |
| |
| TEST(DiffTest, LargeFunctionsLargeDiffsNoDebug) { |
| constexpr char kSrcNoDebug[] = R"( OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %4 "main" %15 |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource ESSL 310 |
| 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 |
| OpDecorate %128 DescriptorSet 0 |
| OpDecorate %128 Binding 3 |
| %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 |
| %128 = OpVariable %26 UniformConstant |
| %130 = OpConstantComposite %32 %45 %45 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %136 = OpFunctionCall %2 %6 |
| %137 = 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 = OpIMul %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 |
| %129 = OpLoad %25 %128 |
| %131 = OpImageRead %38 %129 %130 |
| %132 = OpCompositeExtract %24 %131 0 |
| %133 = OpConvertSToF %78 %132 |
| %134 = OpCompositeConstruct %79 %133 %133 %133 |
| %135 = OpAccessChain %110 %82 %73 |
| OpStore %135 %134 |
| OpReturn |
| OpFunctionEnd |
| |
| )"; |
| constexpr char kDstNoDebug[] = R"( OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %4 "main" %15 %110 |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource ESSL 310 |
| OpDecorate %15 BuiltIn GlobalInvocationId |
| OpMemberDecorate %40 0 Offset 0 |
| OpMemberDecorate %40 1 Offset 16 |
| OpMemberDecorate %40 2 Offset 28 |
| OpDecorate %40 BufferBlock |
| OpDecorate %42 DescriptorSet 0 |
| OpDecorate %42 Binding 1 |
| OpDecorate %63 DescriptorSet 0 |
| OpDecorate %63 Binding 3 |
| OpDecorate %79 DescriptorSet 0 |
| OpDecorate %79 Binding 2 |
| OpDecorate %110 BuiltIn LocalInvocationId |
| OpMemberDecorate %127 0 Offset 0 |
| OpMemberDecorate %127 1 RowMajor |
| OpMemberDecorate %127 1 Offset 16 |
| OpMemberDecorate %127 1 MatrixStride 16 |
| OpMemberDecorate %127 2 Offset 80 |
| OpDecorate %127 Block |
| OpDecorate %129 DescriptorSet 0 |
| OpDecorate %129 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 = OpTypePointer Function %24 |
| %27 = OpConstant %24 0 |
| %34 = OpConstant %24 2 |
| %35 = OpTypeBool |
| %37 = OpTypeVector %10 4 |
| %38 = OpTypeFloat 32 |
| %39 = OpTypeVector %38 3 |
| %40 = OpTypeStruct %37 %39 %24 |
| %41 = OpTypePointer Uniform %40 |
| %42 = OpVariable %41 Uniform |
| %46 = OpTypeVector %10 2 |
| %48 = OpTypePointer Uniform %37 |
| %53 = OpTypePointer Uniform %10 |
| %59 = OpConstant %24 1 |
| %61 = OpTypeImage %24 2D 0 0 0 2 R32i |
| %62 = OpTypePointer UniformConstant %61 |
| %63 = OpVariable %62 UniformConstant |
| %69 = OpTypeVector %24 2 |
| %71 = OpTypeVector %24 4 |
| %74 = OpTypePointer Uniform %24 |
| %76 = OpConstant %10 2 |
| %77 = OpConstant %10 3400 |
| %78 = OpConstant %10 264 |
| %79 = OpVariable %62 UniformConstant |
| %96 = OpConstant %24 3 |
| %103 = OpConstantComposite %69 %27 %27 |
| %107 = OpTypePointer Uniform %38 |
| %110 = OpVariable %14 Input |
| %113 = OpTypeVector %38 2 |
| %125 = OpTypeVector %38 4 |
| %126 = OpTypeMatrix %125 4 |
| %127 = OpTypeStruct %10 %126 %38 |
| %128 = OpTypePointer Uniform %127 |
| %129 = OpVariable %128 Uniform |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| %123 = OpFunctionCall %2 %8 |
| %124 = OpFunctionCall %2 %6 |
| OpReturn |
| OpFunctionEnd |
| %6 = OpFunction %2 None %3 |
| %7 = OpLabel |
| %12 = OpVariable %11 Function |
| %20 = OpVariable %11 Function |
| %26 = OpVariable %25 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 |
| OpStore %26 %27 |
| OpBranch %28 |
| %28 = OpLabel |
| OpLoopMerge %30 %31 None |
| OpBranch %32 |
| %32 = OpLabel |
| %33 = OpLoad %24 %26 |
| %36 = OpSLessThan %35 %33 %34 |
| OpBranchConditional %36 %29 %30 |
| %29 = OpLabel |
| %43 = OpLoad %10 %12 |
| %44 = OpLoad %10 %20 |
| %45 = OpIAdd %10 %43 %44 |
| %47 = OpCompositeConstruct %46 %45 %45 |
| %49 = OpAccessChain %48 %42 %27 |
| %50 = OpLoad %37 %49 |
| %51 = OpVectorShuffle %46 %50 %50 0 1 |
| %52 = OpIAdd %46 %51 %47 |
| %54 = OpAccessChain %53 %42 %27 %16 |
| %55 = OpCompositeExtract %10 %52 0 |
| OpStore %54 %55 |
| %56 = OpAccessChain %53 %42 %27 %21 |
| %57 = OpCompositeExtract %10 %52 1 |
| OpStore %56 %57 |
| OpBranch %31 |
| %31 = OpLabel |
| %58 = OpLoad %24 %26 |
| %60 = OpIAdd %24 %58 %59 |
| OpStore %26 %60 |
| OpBranch %28 |
| %30 = OpLabel |
| %64 = OpLoad %61 %63 |
| %65 = OpLoad %10 %12 |
| %66 = OpBitcast %24 %65 |
| %67 = OpLoad %10 %20 |
| %68 = OpBitcast %24 %67 |
| %70 = OpCompositeConstruct %69 %66 %68 |
| %72 = OpImageRead %71 %64 %70 |
| %73 = OpCompositeExtract %24 %72 1 |
| %75 = OpAccessChain %74 %42 %34 |
| OpStore %75 %73 |
| OpMemoryBarrier %76 %77 |
| OpControlBarrier %76 %76 %78 |
| %80 = OpLoad %61 %79 |
| %81 = OpLoad %10 %20 |
| %82 = OpBitcast %24 %81 |
| %83 = OpLoad %10 %12 |
| %84 = OpBitcast %24 %83 |
| %85 = OpCompositeConstruct %69 %82 %84 |
| %86 = OpAccessChain %74 %42 %34 |
| %87 = OpLoad %24 %86 |
| %88 = OpCompositeConstruct %71 %87 %27 %27 %27 |
| OpImageWrite %80 %85 %88 |
| OpReturn |
| OpFunctionEnd |
| %8 = OpFunction %2 None %3 |
| %9 = OpLabel |
| %89 = OpVariable %25 Function |
| OpStore %89 %27 |
| OpBranch %90 |
| %90 = OpLabel |
| OpLoopMerge %92 %93 None |
| OpBranch %94 |
| %94 = OpLabel |
| %95 = OpLoad %24 %89 |
| %97 = OpSLessThan %35 %95 %96 |
| OpBranchConditional %97 %91 %92 |
| %91 = OpLabel |
| %98 = OpLoad %24 %89 |
| %99 = OpIEqual %35 %98 %27 |
| OpSelectionMerge %101 None |
| OpBranchConditional %99 %100 %109 |
| %100 = OpLabel |
| %102 = OpLoad %61 %63 |
| %104 = OpImageRead %71 %102 %103 |
| %105 = OpCompositeExtract %24 %104 0 |
| %106 = OpConvertSToF %38 %105 |
| %108 = OpAccessChain %107 %42 %59 %16 |
| OpStore %108 %106 |
| OpBranch %101 |
| %109 = OpLabel |
| %111 = OpLoad %13 %110 |
| %112 = OpConvertUToF %39 %111 |
| %114 = OpCompositeExtract %38 %112 0 |
| %115 = OpCompositeExtract %38 %112 1 |
| %116 = OpCompositeConstruct %113 %114 %115 |
| %117 = OpAccessChain %107 %42 %59 %21 |
| %118 = OpCompositeExtract %38 %116 0 |
| OpStore %117 %118 |
| %119 = OpAccessChain %107 %42 %59 %76 |
| %120 = OpCompositeExtract %38 %116 1 |
| OpStore %119 %120 |
| OpBranch %101 |
| %101 = OpLabel |
| OpBranch %93 |
| %93 = OpLabel |
| %121 = OpLoad %24 %89 |
| %122 = OpIAdd %24 %121 %59 |
| OpStore %89 %122 |
| OpBranch %90 |
| %92 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| |
| )"; |
| constexpr char kDiff[] = R"( ; SPIR-V |
| ; Version: 1.6 |
| ; Generator: Khronos SPIR-V Tools Assembler; 0 |
| -; Bound: 138 |
| +; Bound: 220 |
| ; Schema: 0 |
| OpCapability Shader |
| %1 = OpExtInstImport "GLSL.std.450" |
| OpMemoryModel Logical GLSL450 |
| -OpEntryPoint GLCompute %4 "main" %15 |
| +OpEntryPoint GLCompute %4 "main" %143 %15 |
| OpExecutionMode %4 LocalSize 1 1 1 |
| OpSource ESSL 310 |
| +OpDecorate %143 BuiltIn GlobalInvocationId |
| 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 |
| OpDecorate %128 DescriptorSet 0 |
| OpDecorate %128 Binding 3 |
| %2 = OpTypeVoid |
| %3 = OpTypeFunction %2 |
| %10 = OpTypeInt 32 0 |
| %11 = OpTypePointer Function %10 |
| %13 = OpTypeVector %10 3 |
| %14 = OpTypePointer Input %13 |
| +%143 = OpVariable %14 Input |
| %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 |
| +%165 = OpTypePointer Uniform %10 |
| %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 |
| +%210 = OpTypeVector %78 2 |
| %94 = OpTypePointer Uniform %77 |
| %108 = OpConstant %24 3 |
| -%110 = OpTypePointer Uniform %79 |
| %113 = OpTypePointer Uniform %78 |
| %128 = OpVariable %26 UniformConstant |
| %130 = OpConstantComposite %32 %45 %45 |
| %4 = OpFunction %2 None %3 |
| %5 = OpLabel |
| -%136 = OpFunctionCall %2 %6 |
| +%136 = OpFunctionCall %2 %140 |
| -%137 = OpFunctionCall %2 %8 |
| +%137 = OpFunctionCall %2 %138 |
| 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 = OpIMul %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 |
| -%129 = OpLoad %25 %128 |
| -%131 = OpImageRead %38 %129 %130 |
| -%132 = OpCompositeExtract %24 %131 0 |
| -%133 = OpConvertSToF %78 %132 |
| -%134 = OpCompositeConstruct %79 %133 %133 %133 |
| -%135 = OpAccessChain %110 %82 %73 |
| -OpStore %135 %134 |
| -OpReturn |
| -OpFunctionEnd |
| +%138 = OpFunction %2 None %3 |
| +%139 = OpLabel |
| +%142 = OpVariable %11 Function |
| +%146 = OpVariable %11 Function |
| +%149 = OpVariable %43 Function |
| +%144 = OpAccessChain %17 %143 %16 |
| +%145 = OpLoad %10 %144 |
| +OpStore %142 %145 |
| +%147 = OpAccessChain %17 %143 %21 |
| +%148 = OpLoad %10 %147 |
| +OpStore %146 %148 |
| +OpStore %149 %45 |
| +OpBranch %150 |
| +%150 = OpLabel |
| +OpLoopMerge %152 %153 None |
| +OpBranch %154 |
| +%154 = OpLabel |
| +%155 = OpLoad %24 %149 |
| +%156 = OpSLessThan %54 %155 %53 |
| +OpBranchConditional %156 %151 %152 |
| +%151 = OpLabel |
| +%157 = OpLoad %10 %142 |
| +%158 = OpLoad %10 %146 |
| +%159 = OpIAdd %10 %157 %158 |
| +%160 = OpCompositeConstruct %29 %159 %159 |
| +%161 = OpAccessChain %94 %82 %45 |
| +%162 = OpLoad %77 %161 |
| +%163 = OpVectorShuffle %29 %162 %162 0 1 |
| +%164 = OpIAdd %29 %163 %160 |
| +%166 = OpAccessChain %165 %82 %45 %16 |
| +%167 = OpCompositeExtract %10 %164 0 |
| +OpStore %166 %167 |
| +%168 = OpAccessChain %165 %82 %45 %21 |
| +%169 = OpCompositeExtract %10 %164 1 |
| +OpStore %168 %169 |
| +OpBranch %153 |
| +%153 = OpLabel |
| +%170 = OpLoad %24 %149 |
| +%171 = OpIAdd %24 %170 %73 |
| +OpStore %149 %171 |
| +OpBranch %150 |
| +%152 = OpLabel |
| +%172 = OpLoad %25 %128 |
| +%173 = OpLoad %10 %142 |
| +%174 = OpBitcast %24 %173 |
| +%175 = OpLoad %10 %146 |
| +%176 = OpBitcast %24 %175 |
| +%177 = OpCompositeConstruct %32 %174 %176 |
| +%178 = OpImageRead %38 %172 %177 |
| +%179 = OpCompositeExtract %24 %178 1 |
| +%180 = OpAccessChain %84 %82 %53 |
| +OpStore %180 %179 |
| +OpMemoryBarrier %40 %41 |
| +OpControlBarrier %40 %40 %42 |
| +%181 = OpLoad %25 %27 |
| +%182 = OpLoad %10 %146 |
| +%183 = OpBitcast %24 %182 |
| +%184 = OpLoad %10 %142 |
| +%185 = OpBitcast %24 %184 |
| +%186 = OpCompositeConstruct %32 %183 %185 |
| +%187 = OpAccessChain %84 %82 %53 |
| +%188 = OpLoad %24 %187 |
| +%189 = OpCompositeConstruct %38 %188 %45 %45 %45 |
| +OpImageWrite %181 %186 %189 |
| +OpReturn |
| +OpFunctionEnd |
| +%140 = OpFunction %2 None %3 |
| +%141 = OpLabel |
| +%190 = OpVariable %43 Function |
| +OpStore %190 %45 |
| +OpBranch %191 |
| +%191 = OpLabel |
| +OpLoopMerge %193 %194 None |
| +OpBranch %195 |
| +%195 = OpLabel |
| +%196 = OpLoad %24 %190 |
| +%197 = OpSLessThan %54 %196 %108 |
| +OpBranchConditional %197 %192 %193 |
| +%192 = OpLabel |
| +%198 = OpLoad %24 %190 |
| +%199 = OpIEqual %54 %198 %45 |
| +OpSelectionMerge %201 None |
| +OpBranchConditional %199 %200 %207 |
| +%207 = OpLabel |
| +%208 = OpLoad %13 %15 |
| +%209 = OpConvertUToF %79 %208 |
| +%211 = OpCompositeExtract %78 %209 0 |
| +%212 = OpCompositeExtract %78 %209 1 |
| +%213 = OpCompositeConstruct %210 %211 %212 |
| +%214 = OpAccessChain %113 %82 %73 %21 |
| +%215 = OpCompositeExtract %78 %213 0 |
| +OpStore %214 %215 |
| +%216 = OpAccessChain %113 %82 %73 %40 |
| +%217 = OpCompositeExtract %78 %213 1 |
| +OpStore %216 %217 |
| +OpBranch %201 |
| +%200 = OpLabel |
| +%202 = OpLoad %25 %128 |
| +%203 = OpImageRead %38 %202 %130 |
| +%204 = OpCompositeExtract %24 %203 0 |
| +%205 = OpConvertSToF %78 %204 |
| +%206 = OpAccessChain %113 %82 %73 %16 |
| +OpStore %206 %205 |
| +OpBranch %201 |
| +%201 = OpLabel |
| +OpBranch %194 |
| +%194 = OpLabel |
| +%218 = OpLoad %24 %190 |
| +%219 = OpIAdd %24 %218 %73 |
| +OpStore %190 %219 |
| +OpBranch %191 |
| +%193 = OpLabel |
| +OpReturn |
| +OpFunctionEnd |
| )"; |
| Options options; |
| DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options); |
| } |
| |
| } // namespace |
| } // namespace diff |
| } // namespace spvtools |