Squashed 'third_party/SPIRV-Tools/' changes from 54cd5e196..1a7f71afb
1a7f71afb clean: constexpr-ify and unify anon namespace use (#4991)
8ea3ae6be Split EliminateDeadInputComponents into safe and unsafe versions. (#4984)
a8647f59c Use Python3 for presubmit (#4986)
68e8327f2 Instrument: Change output buffer offset definitions (#4961)
996d4c021 spirv-val: Multiple interface var with same SC (#4969)
aae7d4132 Fix macos kokoro builds (#4985)
525bc3806 Add pass to eliminate dead output components (#4982)
54d4e77fa spirv-opt: Add const folding for CompositeInsert (#4943)
a5e766b2b spirv-val: Add VUID label for 07703 (#4980)
d35a78db5 Switch SPIRV-Tools to use spirv.hpp11 internally (#4981)
c8e1588cf Add passes to eliminate dead output stores (#4970)
a52de681d Prevent eliminating case constructs in block merging (#4976)
4563d9093 Only validate full layout in Vulkan environments (#4972)
9f3a4afae spirv-val: Label new Vulkan OpPtrAccessChain VUs (#4975)
b49a2caa7 Revert "test" (#4974)
da215f10c test
7326b967a Prevent null pointer from being dereferenced (#4971)
0ebf83057 spirv-val: Add OpPtrAccessChain Base checks (#4965)
eb113f0fd spirv-val: Improve PR 4831 error message (#4968)
ecd5b9c16 spirv-val: Add remaining Component decoration validation (#4966)
b53d3a6be Start SPIRV-Tools v2022.5
eb0a36633 Finalize SPIRV-Tools v2022.4
4a6290b56 Update CHANGES
a9291988d Roll external/spirv-headers/ 4bd8fc0c8..85a1ed200 (4 commits)
a25a9d0b5 Roll external/re2/ 5723bb895..d2836d1b1 (11 commits)
59043d177 Roll external/googletest/ 548b13dc3..d9bb8412d (78 commits)
95ae2da35 Roll external/effcee/ ddf5e2bb9..35912e1b7 (1 commit)
a3350c0ff Update SPIRV-Headers revision (#4962)
1cecf9170 Support Narrow Types in BitCast Folding Rule (#4941)
a6e6454ef spirv-val: Add SPV_ARM_core_builtins validation (#4958)
4dbc66380 spirv-val: Use ostringstream in id validation tests (#4956)
07d361b67 spirv-val: Add an option to use friendly names or not (#4951)
3ec6b3698 spirv-val: Consistently quote ids in messages (#4950)
e1a8b5d60 build: Fix BUILD.gn build error (#4948)
49230a230 spirv-opt: Remove unused folding rule (#4942)
b53d7a8af spirv-val: Add initial SPV_EXT_mesh_shader validation (#4924)
265b455c9 Fix CreatDebugInlinedAt to not invoke def_use_mgr (#4939)
ddbee48f8 spirv-opt: Fix stacked CompositeExtract constant folds (#4932)
f98473cee Remove `spvOpcodeTerminatesExecution` (#4931)
21146c1b4 Fix builtin validator for unimplemented opcodes. (#4940)
aeb1c64d4 spirv-val: Make it legal to use arrays of ray queries (#4938)
11d0d1622 Cleanup code for 272e4b3d0 (#4934)
91c29a197 spirv-val: Fix comment for checking extended alignments (#4937)
0c4ce11b4 spirv-val: Update VUID from 1.3.228 Vulkan spec (#4936)
5f4ce362a spirv-val: Label VUID 07290 (#4927)
8422d8a44 spirv-val: Label ShaderRecordBufferKHR VUID (#4926)
c3f844aec spirv-val: Test file suffix consistency (#4925)
272e4b3d0 Fix missing and incorrect DebugValues (#4929)
49deada73 Also consider EmitMeshTasksEXT terminator in spirv-opt. (#4930)
fb27bbf30 Fix DebugInlinedAt Line operand (#4928)
f5b27b651 spirv-diff: Allow no SpecId (#4904)
59cf5b134 spirv-val: consider OpEmitMeshTasksEXT a terminator instruction (#4923)
934a05978 spirv-val: Label Builtin Array Test VUIDs (#4921)
5f45f793a Support building on OpenBSD (#4912)
529955e03 Improve time to build dominators (#4916)
8eb850983 build: cmake: Add support for GNU/Hurd (#4895)
4386afb05 spirv-opt: Remove unused fold spec const code (#4906)
4c456f7da Implement tool changes for SPV_EXT_mesh_shader. (#4915)
33113abf4 Instrument: Add OpNames to generated functions and variables (#4873)
b5d1040b9 Fix ADCE to mark scope and inlined_at of line instructions as live. (#4910)
d51dc53d2 Improve algorithm to reorder blocks in a function (#4911)
fca39d5cb spirv-val: Better message for using OpTypeBool in input/output (#4901)
66bdbacc9 spirv-val: Use lookup table for Decoration string (#4903)
f76431cba spirv-val: Add SPV_KHR_ray_tracing storage class (#4868)
a98f05d02 tests: Make InstrumentPass tests use SinglePassRunAndMatch<> and stateful pattern matching (#4897)
b41e3e131 Disable DebugInfoMgr during the entire CompactIds pass (#4905)
3c1a14b2b spirv-val: SBT Index for OpExecuteCallableKHR (#4900)
0073a1fa3 spirv-val: Remove ImageWrite Texel todo (#4899)
71b2aee6c Add structs to eliminate dead input components (#4894)
1728c1d40 spirv-opt: fix copy-propagate-arrays index opti on structs. (#4891)
9abacb34a Fix ADCE to not eliminate top level DebugInfo instructions (#4889)
3a8a961cf Fix array copy propagation (#4890)
afbb52b13 Start SPIRV-Tools v2022.4
409e11679 Finalize SPIRV-Tools v2022.3
0a43a84e0 Fix shuffle feeding shuffle with undef literal (#4883)
0ebcdc4d1 Allow spirv-opt print-all to show pretty IDs (#4888)
ed3b9c83b Local access chain convert: check for negative indexes (#4884)
f20e8d05f spirv-val: Add SPV_KHR_ray_tracing instructions (#4871)
5e61ea209 Update CHANGES (#4886)
b362d2b7d spirv-diff: Fix asserts in ComparePreambleInstructions() (#4872)
08c542d34 spirv-val: Label VUID 06997 (#4881)
git-subtree-dir: third_party/SPIRV-Tools
git-subtree-split: 1a7f71afb42983b8b21bef656260964eb3852942
Change-Id: I6b7cf32b13d9ea53b00fed1b1541d4fe34cb01f5
diff --git a/source/opt/optimizer.cpp b/source/opt/optimizer.cpp
index 381589b..4cf3292 100644
--- a/source/opt/optimizer.cpp
+++ b/source/opt/optimizer.cpp
@@ -60,6 +60,7 @@
spv_target_env target_env; // Target environment.
opt::PassManager pass_manager; // Internal implementation pass manager.
+ std::unordered_set<uint32_t> live_locs; // Arg to debug dead output passes
};
Optimizer::Optimizer(spv_target_env env) : impl_(new Impl(env)) {
@@ -524,7 +525,7 @@
} else if (pass_name == "remove-dont-inline") {
RegisterPass(CreateRemoveDontInlinePass());
} else if (pass_name == "eliminate-dead-input-components") {
- RegisterPass(CreateEliminateDeadInputComponentsPass());
+ RegisterPass(CreateEliminateDeadInputComponentsSafePass());
} else if (pass_name == "fix-func-call-param") {
RegisterPass(CreateFixFuncCallArgumentsPass());
} else if (pass_name == "convert-to-sampled-image") {
@@ -1016,9 +1017,35 @@
Optimizer::PassToken CreateEliminateDeadInputComponentsPass() {
return MakeUnique<Optimizer::PassToken::Impl>(
+ MakeUnique<opt::EliminateDeadInputComponentsPass>(
+ /* output_instead */ false, /* vertex_shader_only */ false));
+}
+
+Optimizer::PassToken CreateEliminateDeadOutputComponentsPass() {
+ return MakeUnique<Optimizer::PassToken::Impl>(
+ MakeUnique<opt::EliminateDeadInputComponentsPass>(
+ /* output_instead */ true, /* vertex_shader_only */ false));
+}
+
+Optimizer::PassToken CreateEliminateDeadInputComponentsSafePass() {
+ return MakeUnique<Optimizer::PassToken::Impl>(
MakeUnique<opt::EliminateDeadInputComponentsPass>());
}
+Optimizer::PassToken CreateAnalyzeLiveInputPass(
+ std::unordered_set<uint32_t>* live_locs,
+ std::unordered_set<uint32_t>* live_builtins) {
+ return MakeUnique<Optimizer::PassToken::Impl>(
+ MakeUnique<opt::AnalyzeLiveInputPass>(live_locs, live_builtins));
+}
+
+Optimizer::PassToken CreateEliminateDeadOutputStoresPass(
+ std::unordered_set<uint32_t>* live_locs,
+ std::unordered_set<uint32_t>* live_builtins) {
+ return MakeUnique<Optimizer::PassToken::Impl>(
+ MakeUnique<opt::EliminateDeadOutputStoresPass>(live_locs, live_builtins));
+}
+
Optimizer::PassToken CreateConvertToSampledImagePass(
const std::vector<opt::DescriptorSetAndBinding>&
descriptor_set_binding_pairs) {