Squashed 'third_party/SPIRV-Tools/' changes from 65e362b7a..c3f22f7cb
c3f22f7cb Update README (#3047)
1f2af55f2 Update README (#3048)
3da910d55 Avoid uninit warning in GCC (#3044)
cdd6829a3 utils/vscode: Add SPIR-V language server support
b96c9a057 utils/vscode: Add go language server packages.
ab3cdcaef Fix operand access of composite in upgrade memory model (#3021)
1a18d491f Validate array stride does not cause overlap (#3028)
12e54dae1 Update Offset to ConstOffset bitmask if operand is constant. (#3024)
3e4abc9ac Try to fix go linter: exported constant comment (#3026)
c5e6761ac spirv-fuzz: Eliminate spurious semicolons (#3025)
041f0a024 spirv-fuzz: simplify transformation for replacing an id with a synonym (#3020)
528c00c01 Re-enable OpReadClockKHR validation (#3013)
8a35bf030 Python 3: remove deprecated U qualifier on 'open' (#3019)
989f62fb9 Remove semicolon (#3022)
dc59b4b07 spirv-fuzz: vector shuffle transformation (#3015)
87efe0a8b Add basic documentation about spirv-fuzz (#3016)
d9fbf0234 Fix Go lint issues: comment exported symbols (#3014)
3724cfbea spirv-fuzz: better computation of data synonym facts (#3010)
fb6bac889 spirv-fuzz: make equivalence classes deterministic (#3011)
e0d5544c9 Add missing headers to GN. (#3009)
178c4ddea Correct "environment" typo (#3007)
f1e5cd73f spirv-fuzz: improvements to representation of data synonym facts (#3006)
cdee051e2 Add iOS as a supported platform (#3001)
5f6fb2f34 Reset pointers before iterating in fuzzer to avoid double free (#3003)
618ee5094 Fix some clang-tidy issues in graphics_robust_access_pass (#2998)
466908b50 Add description of wrap-opkill. (#3000)
f893d4d41 [opt] Do not compare optimized binary with an invalidated buffer (#2999)
7e2cba6a5 utils/vscode: Change assembly file ext to .spvasm (#2995)
42f885238 utils: Add a vscode extension for SPIR-V disassembly files (#2987)
5ea709937 Add two new simplifications. (#2984)
fac166162 spirv-fuzz: Transformation to extract from a composite object (#2991)
ec12de913 spirv-fuzz: rename class, and fix bug related to dominance (#2990)
0dbd4e358 spirv-fuzz: Rework management of data synonyms (#2989)
b34fa7319 spirv-fuzz: add class to represent equivalence relation (#2988)
4517c7b88 Update DEPS (#2986)
570582d8d spirv-fuzz: fuzzer pass to adjust memory access operands (#2968)
02910ffdf Instrument: Add missing def-use analysis. (#2985)
8357b878d spirv-fuzz: add missing functionality for matrix composites (#2974)
615918c91 Update CHANGES
e8c3f9b0b Ensure timestamp does not vary with timezone. (#2982)
6a9be627c Keep NOPs when comparing with original binary (#2931)
2a3cbe7c3 Check that derivatives operate on 32-bit values (#2983)
3cdd6444c Check text->str before destroying (#2981)
e3da3143b Disallow use of OpCompositeExtract/OpCompositeInsert with no indices (#2980)
2ca4fcfdc Add fuzzer for spirv-dis call path (#2977)
024417d83 Check binary->code existence before destroying (#2979)
9c0ae6bb8 Improved CMake install step. (#2963)
e99b91822 Support constant-folding UConvert and SConvert (#2960)
8e8977853 Add fuzzer for spirv-as call path (#2976)
00170cc5e spirv-fuzz: Refactor 'copy object' and 'construct composite' transformations (#2966)
964dc52df Update SPIR-V binary header test for SPIR-V 1.5 (#2967)
1b6fd37fa spirv-fuzz: Refactor 'split blocks' to identify instructions differently (#2961)
2276e5978 Validate that selections are structured (#2962)
3eda1b9ff spirv-fuzz: Rework id descriptors (#2959)
eba98c4eb spirv-fuzz: Add fuzzer pass to add NoContraction decorations (#2950)
91232f7f7 spirv-fuzz: Add fuzzer pass to change function controls (#2951)
feb154921 reduce: add large tests and fix (#2947)
253806adc spirv-fuzz: Add fuzzer pass to change loop controls (#2949)
1cea3b785 Fixed include paths and order according to Google style. (#2957)
82f84c4b8 Use a longer timeout for Bazel tests. (#2956)
c705032b2 Remove non-existent files from BUILD.gn (#2955)
c1d42038f Disable scope validation for OpReadClockKHR (#2953)
df15a4a3c CMake: Add support for building with emscripten (#2948)
c3ca04741 Update CHANGES
32f76efa6 Link cfg and dominator analysis in the context (#2946)
5910bb8e9 spirv-fuzz: add transformation and pass to construct composites (#2941)
2f6a87f61 reduce: improve remove unref instr pass (#2945)
81d227f36 spirv-fuzz: add disabled test to document known issue (#2942)
26dba32c4 spirv-fuzz: Add fuzzer pass to change selection controls (#2944)
3c7ff8d4f Enable OpTypeCooperativeMatrix specialization (#2927)
c18c9ff6b Handle OpKill better (#2933)
ad3d23f47 Generate null pointer by converting uint64 zero to pointer. (#2935)
8fa0f1a65 spirv-fuzz: option to convert shader into a form that renders red (#2934)
bc37fd585 Add SPV_KHR_shader_clock validation (#2879)
bd839ca6b reduce/fuzz: improve command line args (#2932)
9d7428b05 Validate physical storage buffer restrictions (#2930)
44b32176e fuzz: add shrinker-temp-file-prefix (#2928)
9eb1c9a4c Add continue construct analysis to struct cfg analysis (#2922)
85c67b5e0 Record trailing line dbg instructions (#2926)
4075b921f Add removing references to debug instructions when removing them (#2923)
ef4679a58 spirv-fuzz: allow interestingness script arguments (#2925)
bc84daff2 Add Kokoro bots for building with Bazel. (#2914)
10951a7c9 Refactor the InstructionPass (#2924)
84b197606 spirv-fuzz: do not allow a dead break to target an unreachable block (#2917)
27238bcca spirv-fuzz: preserve some analyses when permuting blocks (#2918)
510ca9d61 Only allow previously declared forward refs in structs (#2920)
2a11f365b Handle id overflow in wrap-opkill (#2916)
70097c776 spirv-fuzz: do not replace struct indices with synonyms (#2915)
c1e03834e spirv-fuzz: Fixes to preconditions for adding dead break/continue edges (#2904)
7bc114ba2 spirv-fuzz: do not replace a pointer argument to a function call with a synonym (#2901)
290f6a820 spirv-fuzz: do not replace boolean constant argument to OpPhi instruction (#2903)
527a68930 Remove validate_datarules.cpp (#2911)
55ea57a78 Handle extract with no indexes (#2910)
a03cd1f3e Add Bazel build configuration. (#2891)
6f26d9ad8 Handle id overflow in convert local access chains (#2908)
71e0ba606 Add OpCopyMemory test to SVA. (#2885)
3a762d54f Add missing GN dependency (#2899)
958f7e72a Employ the "swarm testing" idea in spirv-fuzz (#2890)
b83535da5 Fix operand index in spirv-fuzz (#2895)
f62ee4a4a Update DEPS: effcee, re2, googletest (#2881)
8d0ca43da Add method comment for opt::Function::WhileEachInst (#2867)
6b0721265 Use OpReturn* in wrap-opkill (#2886)
465312726 Fix to CMakeLists for spirv-fuzz tests (#2888)
7275a7165 Allow validation during spirv-fuzz replay (#2873)
4eee71e78 Disable long-running fuzzer tests by default (#2887)
61edde52a Revert "Use OpReturn* in wrap-opkill"
87f0fa432 Use OpReturn* in wrap-opkill
08fcf8a4a Fix header include syntax. (#2882)
248c80b04 Handle OpConstantNull in copy-prop-arrays. (#2870)
d06fe0848 Fix comment typo found by protobufs linter (#2884)
47e354b0c Move docs into docs/ folder (#2872)
605c2e3c0 Add WebGPU SPIR-V Assembler in JavaScript. (#2876)
acf20302c Android.mk: Add dependency from optimizer file to amd-shader-ballot-insts.inc (#2883)
c02a6191a Update SPIRV-Headers in DEPS (#2880)
e59b60de0 Fix detection of blocks bypassed by new edge (#2874)
ccd7bf167 Fix CMake issue related to spirv-fuzz (#2877)
0a07cd1c9 Add fuzzer pass to replace ids with synonyms (#2857)
bbb29870b Relaxed bitcast with pointers (#2878)
36c1c0e22 Fix Fuchsia build. (#2868)
99793fa67 Adding valilidation checks for OpEntryPoint duplicate names and execution mode (#2862)
932561935 Extra resource interface validation (#2864)
1e146e8a3 Split capability tests (#2866)
5a48c0da1 SPIRV-Tools support for SPIR-V 1.5 (#2865)
ad7f2c5c4 Add fuzzer pass to copy objects (#2853)
67b87f22c Handle another case where creating a constant can fail (#2854)
c7a39bc40 Don't inline function containing OpKill (#2842)
4f9256db3 Handle id overflow in wrap op kill. (#2851)
9f188e337 Assembler: Can't set an ID in instruction without result ID (#2852)
c0e980709 Handle creating a new constant failing gracefully (#2848)
e2e95172d Rework management of probabilities in spirv-fuzz (#2839)
7ee8f443e Fix add-dead-break and add-dead-continue passes to respect dominance (#2838)
35c9518c4 Handle id overflow in the ssa rewriter. (#2845)
7f7236f1e Handle id overflow in the constant manager. (#2844)
a464ac1a2 Add generic builtin validation of target (#2843)
6797173cf Don't register duplicate decoration in validator. (#2841)
76261e2a7 Replace CubeFaceCoord and CubeFaceIndexAMD (#2840)
b218ad199 Fold Min, Max, and Clamp instructions. (#2836)
a41520eaa Replace uses of SPV_AMD_shader_trinary_minmax extension (#2835)
19b256616 For WebGPU<->Vulkan optimization, set correct execution environment (#2834)
1dfb5fc12 Export SPIRV-Tools targets on installation (#2785)
635b583cf GN: Add Chromium GoogleTest deps. (#2832)
9b3cc3e05 Upadate CHANGES
c77045b4a Instrument: Be sure Float16 capability on when generating float16 null (#2831)
d11725b1d Add --relax-float-ops and --convert-relaxed-to-half (#2808)
1c9ca422d GN: Make SPIRV-Tools target use public_deps. (#2828)
b54d95029 Fold Fmix should accept vector operands. (#2826)
2c5ed16ba Fix end comments in header files (#2829)
git-subtree-dir: third_party/SPIRV-Tools
git-subtree-split: c3f22f7cba60e55d178b8184851d17697a996143
diff --git a/test/opt/module_test.cpp b/test/opt/module_test.cpp
index 569cf9b..406da09 100644
--- a/test/opt/module_test.cpp
+++ b/test/opt/module_test.cpp
@@ -21,6 +21,7 @@
#include "gtest/gtest.h"
#include "source/opt/build_module.h"
#include "source/opt/module.h"
+#include "source/opt/pass.h"
#include "spirv-tools/libspirv.hpp"
#include "test/opt/module_utils.h"
@@ -228,6 +229,72 @@
EXPECT_EQ(next_id_bound, 0);
EXPECT_EQ(current_bound, context->module()->id_bound());
}
+
+// Tests that "text" does not change when it is assembled, converted into a
+// module, converted back to a binary, and then disassembled.
+void AssembleAndDisassemble(const std::string& text) {
+ std::unique_ptr<IRContext> context = BuildModule(text);
+ std::vector<uint32_t> binary;
+
+ context->module()->ToBinary(&binary, false);
+
+ SpirvTools tools(SPV_ENV_UNIVERSAL_1_1);
+ std::string s;
+ tools.Disassemble(binary, &s);
+ EXPECT_EQ(s, text);
+}
+
+TEST(ModuleTest, TrailingOpLine) {
+ const std::string text = R"(OpCapability Shader
+OpCapability Linkage
+OpMemoryModel Logical GLSL450
+%5 = OpString "file.ext"
+%void = OpTypeVoid
+%2 = OpTypeFunction %void
+%3 = OpFunction %void None %2
+%4 = OpLabel
+OpReturn
+OpFunctionEnd
+OpLine %5 1 0
+)";
+
+ AssembleAndDisassemble(text);
+}
+
+TEST(ModuleTest, TrailingOpNoLine) {
+ const std::string text = R"(OpCapability Shader
+OpCapability Linkage
+OpMemoryModel Logical GLSL450
+%void = OpTypeVoid
+%2 = OpTypeFunction %void
+%3 = OpFunction %void None %2
+%4 = OpLabel
+OpReturn
+OpFunctionEnd
+OpNoLine
+)";
+
+ AssembleAndDisassemble(text);
+}
+
+TEST(ModuleTest, MulitpleTrailingOpLine) {
+ const std::string text = R"(OpCapability Shader
+OpCapability Linkage
+OpMemoryModel Logical GLSL450
+%5 = OpString "file.ext"
+%void = OpTypeVoid
+%2 = OpTypeFunction %void
+%3 = OpFunction %void None %2
+%4 = OpLabel
+OpReturn
+OpFunctionEnd
+OpLine %5 1 0
+OpNoLine
+OpLine %5 1 1
+)";
+
+ AssembleAndDisassemble(text);
+}
} // namespace
} // namespace opt
} // namespace spvtools