// 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 cases of a switch in different order. constexpr char kSrc[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpName %4 "main" OpName %7 "BufferIn" OpMemberName %7 0 "i" OpName %9 "" OpName %23 "BufferOut" OpMemberName %23 0 "o" OpName %25 "" OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %22 = OpLabel OpReturn OpFunctionEnd)"; constexpr char kDst[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpName %4 "main" OpName %7 "BufferIn" OpMemberName %7 0 "i" OpName %9 "" OpName %23 "BufferOut" OpMemberName %23 0 "o" OpName %25 "" OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %22 = OpLabel OpReturn OpFunctionEnd )"; TEST(DiffTest, ReorderedSwitchBlocks) { constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 58 +; Bound: 62 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpName %4 "main" OpName %7 "BufferIn" OpMemberName %7 0 "i" OpName %9 "" OpName %23 "BufferOut" OpMemberName %23 0 "o" OpName %25 "" OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %22 = OpLabel OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrc, kDst, kDiff, options); } TEST(DiffTest, ReorderedSwitchBlocksNoDebug) { constexpr char kSrcNoDebug[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %22 = OpLabel OpReturn OpFunctionEnd )"; constexpr char kDstNoDebug[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %22 = OpLabel OpReturn OpFunctionEnd )"; constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 58 +; Bound: 62 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %4 "main" OpExecutionMode %4 LocalSize 1 1 1 OpSource ESSL 310 OpMemberDecorate %7 0 Offset 0 OpDecorate %7 Block OpDecorate %9 DescriptorSet 0 OpDecorate %9 Binding 0 OpMemberDecorate %23 0 Offset 0 OpDecorate %23 BufferBlock OpDecorate %25 DescriptorSet 0 OpDecorate %25 Binding 1 %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeInt 32 0 %7 = OpTypeStruct %6 %8 = OpTypePointer Uniform %7 %9 = OpVariable %8 Uniform %10 = OpTypeInt 32 1 %11 = OpConstant %10 0 %12 = OpTypePointer Uniform %6 %23 = OpTypeStruct %6 %24 = OpTypePointer Uniform %23 %25 = OpVariable %24 Uniform %28 = OpConstant %10 1 %34 = OpConstant %6 2 %52 = OpConstant %6 1 %4 = OpFunction %2 None %3 %5 = OpLabel %13 = OpAccessChain %12 %9 %11 %14 = OpLoad %6 %13 OpSelectionMerge %22 None OpSwitch %14 %21 0 %15 1 %16 2 %17 3 %18 4 %19 5 %20 %20 = OpLabel %53 = OpAccessChain %12 %25 %11 OpStore %53 %52 OpBranch %21 %19 = OpLabel %45 = OpAccessChain %12 %25 %11 %46 = OpLoad %6 %45 %47 = OpAccessChain %12 %25 %11 %48 = OpLoad %6 %47 %49 = OpIMul %6 %46 %48 %50 = OpAccessChain %12 %25 %11 OpStore %50 %49 OpBranch %22 %18 = OpLabel %40 = OpAccessChain %12 %25 %11 %41 = OpLoad %6 %40 %42 = OpUDiv %6 %41 %34 %43 = OpAccessChain %12 %25 %11 OpStore %43 %42 OpBranch %22 %16 = OpLabel %31 = OpAccessChain %12 %25 %11 %32 = OpLoad %6 %31 %33 = OpISub %6 %32 %28 OpStore %31 %33 OpBranch %17 %17 = OpLabel %35 = OpAccessChain %12 %25 %11 %36 = OpLoad %6 %35 %37 = OpIMul %6 %36 %34 %38 = OpAccessChain %12 %25 %11 OpStore %38 %37 OpBranch %22 %15 = OpLabel %26 = OpAccessChain %12 %25 %11 %27 = OpLoad %6 %26 %29 = OpIAdd %6 %27 %28 OpStore %26 %29 OpBranch %22 %21 = OpLabel %54 = OpAccessChain %12 %25 %11 %55 = OpLoad %6 %54 %56 = OpIAdd %6 %55 %34 %57 = OpAccessChain %12 %25 %11 OpStore %57 %56 OpBranch %22 %22 = OpLabel OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options); } } // namespace } // namespace diff } // namespace spvtools