Add strip-debug to webgpu-mode passes (#2368)
Fixes #2366
diff --git a/source/opt/optimizer.cpp b/source/opt/optimizer.cpp
index 1345be6..9d3cad7 100644
--- a/source/opt/optimizer.cpp
+++ b/source/opt/optimizer.cpp
@@ -218,7 +218,8 @@
}
Optimizer& Optimizer::RegisterWebGPUPasses() {
- return RegisterPass(CreateFlattenDecorationPass())
+ return RegisterPass(CreateStripDebugInfoPass())
+ .RegisterPass(CreateFlattenDecorationPass())
.RegisterPass(CreateAggressiveDCEPass())
.RegisterPass(CreateDeadBranchElimPass());
}
diff --git a/test/opt/optimizer_test.cpp b/test/opt/optimizer_test.cpp
index 964b45a..a7246b2 100644
--- a/test/opt/optimizer_test.cpp
+++ b/test/opt/optimizer_test.cpp
@@ -231,9 +231,9 @@
for (auto name = pass_names.begin(); name != pass_names.end(); ++name)
registered_passes.push_back(*name);
- std::vector<std::string> expected_passes = {"eliminate-dead-branches",
- "eliminate-dead-code-aggressive",
- "flatten-decorations"};
+ std::vector<std::string> expected_passes = {
+ "eliminate-dead-branches", "eliminate-dead-code-aggressive",
+ "flatten-decorations", "strip-debug"};
std::sort(registered_passes.begin(), registered_passes.end());
std::sort(expected_passes.begin(), expected_passes.end());
@@ -243,18 +243,12 @@
}
TEST(Optimizer, WebGPUModeFlattenDecorationsRuns) {
- const std::string input = R"(
-OpCapability Shader
+ const std::string input = R"(OpCapability Shader
OpCapability VulkanMemoryModelKHR
OpExtension "SPV_KHR_vulkan_memory_model"
OpMemoryModel Logical VulkanKHR
OpEntryPoint Fragment %main "main" %hue %saturation %value
OpExecutionMode %main OriginUpperLeft
-OpName %main "main"
-OpName %void_fn "void_fn"
-OpName %hue "hue"
-OpName %saturation "saturation"
-OpName %value "value"
OpDecorate %group Flat
OpDecorate %group NoPerspective
%group = OpDecorationGroup
@@ -275,21 +269,16 @@
OpCapability VulkanMemoryModelKHR
OpExtension "SPV_KHR_vulkan_memory_model"
OpMemoryModel Logical VulkanKHR
-OpEntryPoint Fragment %main "main" %hue %saturation %value
-OpExecutionMode %main OriginUpperLeft
-OpName %main "main"
-OpName %void_fn "void_fn"
-OpName %hue "hue"
-OpName %saturation "saturation"
-OpName %value "value"
+OpEntryPoint Fragment %1 "main" %2 %3 %4
+OpExecutionMode %1 OriginUpperLeft
%void = OpTypeVoid
-%void_fn = OpTypeFunction %void
+%7 = OpTypeFunction %void
%float = OpTypeFloat 32
%_ptr_Input_float = OpTypePointer Input %float
-%hue = OpVariable %_ptr_Input_float Input
-%saturation = OpVariable %_ptr_Input_float Input
-%value = OpVariable %_ptr_Input_float Input
-%main = OpFunction %void None %void_fn
+%2 = OpVariable %_ptr_Input_float Input
+%3 = OpVariable %_ptr_Input_float Input
+%4 = OpVariable %_ptr_Input_float Input
+%1 = OpFunction %void None %7
%10 = OpLabel
OpReturn
OpFunctionEnd
@@ -310,7 +299,54 @@
std::string disassembly;
tools.Disassemble(optimized.data(), optimized.size(), &disassembly);
- EXPECT_EQ(disassembly, expected);
+ EXPECT_EQ(expected, disassembly);
+}
+
+TEST(Optimizer, WebGPUModeStripDebugRuns) {
+ const std::string input = R"(OpCapability Shader
+OpCapability VulkanMemoryModelKHR
+OpExtension "SPV_KHR_vulkan_memory_model"
+OpMemoryModel Logical VulkanKHR
+OpEntryPoint Vertex %func "shader"
+OpName %main "main"
+OpName %void_fn "void_fn"
+%void = OpTypeVoid
+%void_f = OpTypeFunction %void
+%func = OpFunction %void None %void_f
+%label = OpLabel
+OpReturn
+OpFunctionEnd
+)";
+
+ const std::string expected = R"(OpCapability Shader
+OpCapability VulkanMemoryModelKHR
+OpExtension "SPV_KHR_vulkan_memory_model"
+OpMemoryModel Logical VulkanKHR
+OpEntryPoint Vertex %1 "shader"
+%void = OpTypeVoid
+%5 = OpTypeFunction %void
+%1 = OpFunction %void None %5
+%6 = OpLabel
+OpReturn
+OpFunctionEnd
+)";
+
+ SpirvTools tools(SPV_ENV_WEBGPU_0);
+ std::vector<uint32_t> binary;
+ tools.Assemble(input, &binary);
+
+ Optimizer opt(SPV_ENV_WEBGPU_0);
+ opt.RegisterWebGPUPasses();
+
+ std::vector<uint32_t> optimized;
+ ValidatorOptions validator_options;
+ ASSERT_TRUE(opt.Run(binary.data(), binary.size(), &optimized,
+ validator_options, true));
+
+ std::string disassembly;
+ tools.Disassemble(optimized.data(), optimized.size(), &disassembly);
+
+ EXPECT_EQ(expected, disassembly);
}
} // namespace