// 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 the true and false blocks of an if reordered. constexpr char kSrc[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %8 "v" OpName %44 "color" OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %23 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %28 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %33 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %21 = OpConstant %6 -0.5 %22 = OpConstant %6 -0.300000012 %38 = OpConstant %6 0.5 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %13 %32 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Log %18 %20 = OpLoad %6 %8 %23 = OpExtInst %6 %1 FClamp %20 %21 %22 %24 = OpFMul %6 %19 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Sin %25 %27 = OpLoad %6 %8 %28 = OpExtInst %6 %1 Cos %27 %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Exp %29 %31 = OpCompositeConstruct %15 %24 %26 %28 %30 OpBranch %14 %32 = OpLabel %33 = OpLoad %6 %8 %34 = OpExtInst %6 %1 Sqrt %33 %35 = OpLoad %6 %8 %36 = OpExtInst %6 %1 FSign %35 %37 = OpLoad %6 %8 %39 = OpExtInst %6 %1 FMax %37 %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Floor %40 %42 = OpCompositeConstruct %15 %34 %36 %39 %41 OpBranch %14 %14 = OpLabel %45 = OpPhi %15 %31 %13 %42 %32 OpStore %44 %45 OpReturn OpFunctionEnd)"; constexpr char kDst[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %8 "v" OpName %44 "color" OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %21 RelaxedPrecision OpDecorate %22 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %38 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %23 = OpConstant %6 0.5 %32 = OpConstant %6 -0.5 %33 = OpConstant %6 -0.300000012 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %28 %13 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Sqrt %18 %20 = OpLoad %6 %8 %21 = OpExtInst %6 %1 FSign %20 %22 = OpLoad %6 %8 %24 = OpExtInst %6 %1 FMax %22 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Floor %25 %27 = OpCompositeConstruct %15 %19 %21 %24 %26 OpBranch %14 %28 = OpLabel %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Log %29 %31 = OpLoad %6 %8 %34 = OpExtInst %6 %1 FClamp %31 %32 %33 %35 = OpFMul %6 %30 %34 %36 = OpLoad %6 %8 %37 = OpExtInst %6 %1 Sin %36 %38 = OpLoad %6 %8 %39 = OpExtInst %6 %1 Cos %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Exp %40 %42 = OpCompositeConstruct %15 %35 %37 %39 %41 OpBranch %14 %14 = OpLabel %45 = OpPhi %15 %27 %13 %42 %28 OpStore %44 %45 OpReturn OpFunctionEnd )"; TEST(DiffTest, ReorderedIfBlocks) { constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 46 +; Bound: 47 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpName %4 "main" OpName %8 "v" OpName %44 "color" OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %23 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %28 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %33 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %21 = OpConstant %6 -0.5 %22 = OpConstant %6 -0.300000012 %38 = OpConstant %6 0.5 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %13 %32 %32 = OpLabel %33 = OpLoad %6 %8 %34 = OpExtInst %6 %1 Sqrt %33 %35 = OpLoad %6 %8 %36 = OpExtInst %6 %1 FSign %35 %37 = OpLoad %6 %8 %39 = OpExtInst %6 %1 FMax %37 %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Floor %40 %42 = OpCompositeConstruct %15 %34 %36 %39 %41 OpBranch %14 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Log %18 %20 = OpLoad %6 %8 %23 = OpExtInst %6 %1 FClamp %20 %21 %22 %24 = OpFMul %6 %19 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Sin %25 %27 = OpLoad %6 %8 %28 = OpExtInst %6 %1 Cos %27 %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Exp %29 %31 = OpCompositeConstruct %15 %24 %26 %28 %30 OpBranch %14 %14 = OpLabel -%45 = OpPhi %15 %31 %13 %42 %32 +%45 = OpPhi %15 %42 %32 %31 %13 OpStore %44 %45 OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrc, kDst, kDiff, options); } TEST(DiffTest, ReorderedIfBlocksNoDebug) { constexpr char kSrcNoDebug[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %23 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %28 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %33 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %21 = OpConstant %6 -0.5 %22 = OpConstant %6 -0.300000012 %38 = OpConstant %6 0.5 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %13 %32 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Log %18 %20 = OpLoad %6 %8 %23 = OpExtInst %6 %1 FClamp %20 %21 %22 %24 = OpFMul %6 %19 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Sin %25 %27 = OpLoad %6 %8 %28 = OpExtInst %6 %1 Cos %27 %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Exp %29 %31 = OpCompositeConstruct %15 %24 %26 %28 %30 OpBranch %14 %32 = OpLabel %33 = OpLoad %6 %8 %34 = OpExtInst %6 %1 Sqrt %33 %35 = OpLoad %6 %8 %36 = OpExtInst %6 %1 FSign %35 %37 = OpLoad %6 %8 %39 = OpExtInst %6 %1 FMax %37 %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Floor %40 %42 = OpCompositeConstruct %15 %34 %36 %39 %41 OpBranch %14 %14 = OpLabel %45 = OpPhi %15 %31 %13 %42 %32 OpStore %44 %45 OpReturn OpFunctionEnd )"; constexpr char kDstNoDebug[] = R"( OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %21 RelaxedPrecision OpDecorate %22 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %38 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %23 = OpConstant %6 0.5 %32 = OpConstant %6 -0.5 %33 = OpConstant %6 -0.300000012 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %28 %13 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Sqrt %18 %20 = OpLoad %6 %8 %21 = OpExtInst %6 %1 FSign %20 %22 = OpLoad %6 %8 %24 = OpExtInst %6 %1 FMax %22 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Floor %25 %27 = OpCompositeConstruct %15 %19 %21 %24 %26 OpBranch %14 %28 = OpLabel %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Log %29 %31 = OpLoad %6 %8 %34 = OpExtInst %6 %1 FClamp %31 %32 %33 %35 = OpFMul %6 %30 %34 %36 = OpLoad %6 %8 %37 = OpExtInst %6 %1 Sin %36 %38 = OpLoad %6 %8 %39 = OpExtInst %6 %1 Cos %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Exp %40 %42 = OpCompositeConstruct %15 %35 %37 %39 %41 OpBranch %14 %14 = OpLabel %45 = OpPhi %15 %27 %13 %42 %28 OpStore %44 %45 OpReturn OpFunctionEnd )"; constexpr char kDiff[] = R"( ; SPIR-V ; Version: 1.6 ; Generator: Khronos SPIR-V Tools Assembler; 0 -; Bound: 46 +; Bound: 47 ; Schema: 0 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint Fragment %4 "main" %8 %44 OpExecutionMode %4 OriginUpperLeft OpSource ESSL 310 OpDecorate %8 RelaxedPrecision OpDecorate %8 Location 0 OpDecorate %9 RelaxedPrecision OpDecorate %18 RelaxedPrecision OpDecorate %19 RelaxedPrecision OpDecorate %20 RelaxedPrecision OpDecorate %23 RelaxedPrecision OpDecorate %24 RelaxedPrecision OpDecorate %25 RelaxedPrecision OpDecorate %26 RelaxedPrecision OpDecorate %27 RelaxedPrecision OpDecorate %28 RelaxedPrecision OpDecorate %29 RelaxedPrecision OpDecorate %30 RelaxedPrecision OpDecorate %31 RelaxedPrecision OpDecorate %33 RelaxedPrecision OpDecorate %34 RelaxedPrecision OpDecorate %35 RelaxedPrecision OpDecorate %36 RelaxedPrecision OpDecorate %37 RelaxedPrecision OpDecorate %39 RelaxedPrecision OpDecorate %40 RelaxedPrecision OpDecorate %41 RelaxedPrecision OpDecorate %42 RelaxedPrecision OpDecorate %44 RelaxedPrecision OpDecorate %44 Location 0 OpDecorate %45 RelaxedPrecision %2 = OpTypeVoid %3 = OpTypeFunction %2 %6 = OpTypeFloat 32 %7 = OpTypePointer Input %6 %8 = OpVariable %7 Input %10 = OpConstant %6 0 %11 = OpTypeBool %15 = OpTypeVector %6 4 %16 = OpTypePointer Function %15 %21 = OpConstant %6 -0.5 %22 = OpConstant %6 -0.300000012 %38 = OpConstant %6 0.5 %43 = OpTypePointer Output %15 %44 = OpVariable %43 Output %4 = OpFunction %2 None %3 %5 = OpLabel %9 = OpLoad %6 %8 %12 = OpFOrdLessThanEqual %11 %9 %10 OpSelectionMerge %14 None OpBranchConditional %12 %13 %32 %32 = OpLabel %33 = OpLoad %6 %8 %34 = OpExtInst %6 %1 Sqrt %33 %35 = OpLoad %6 %8 %36 = OpExtInst %6 %1 FSign %35 %37 = OpLoad %6 %8 %39 = OpExtInst %6 %1 FMax %37 %38 %40 = OpLoad %6 %8 %41 = OpExtInst %6 %1 Floor %40 %42 = OpCompositeConstruct %15 %34 %36 %39 %41 OpBranch %14 %13 = OpLabel %18 = OpLoad %6 %8 %19 = OpExtInst %6 %1 Log %18 %20 = OpLoad %6 %8 %23 = OpExtInst %6 %1 FClamp %20 %21 %22 %24 = OpFMul %6 %19 %23 %25 = OpLoad %6 %8 %26 = OpExtInst %6 %1 Sin %25 %27 = OpLoad %6 %8 %28 = OpExtInst %6 %1 Cos %27 %29 = OpLoad %6 %8 %30 = OpExtInst %6 %1 Exp %29 %31 = OpCompositeConstruct %15 %24 %26 %28 %30 OpBranch %14 %14 = OpLabel -%45 = OpPhi %15 %31 %13 %42 %32 +%45 = OpPhi %15 %42 %32 %31 %13 OpStore %44 %45 OpReturn OpFunctionEnd )"; Options options; DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options); } } // namespace } // namespace diff } // namespace spvtools