Stabilize the output of spirv-diff (#4698)
* Reimplement LCS used by spirv-diff Two improvements are made to the LCS algorithm: - The LCS algorithm is reimplemented to use a std::stack instead of being recursive. This prevents stack overflow in the LCSTest.Large test. - The LCS algorithm uses an NxM table. Previously, entries of this table were {size_t, bool, bool}, which is now packed in 32 bits. The first entry can assume a maximum value of min(N, M), which realistically for SPIR-V diff will not be larger than 1 billion instructions. This reduces memory usage of LCS by 75%. This partially reverts845f3efb8a
and enables LCS tests. * Stabilize the output of spirv-diff std::map is used instead of std::unordered_map to ensure the output of spirv-diff is identical everywhere. This partially reverts845f3efb8a
and enables spirv-diff tests.
This commit is contained in:
Родитель
845f3efb8a
Коммит
9beb54513c
|
@ -36,7 +36,7 @@ using InstructionToInstructionMap =
|
|||
// A flat list of instructions in a function for easier iteration.
|
||||
using InstructionList = std::vector<const opt::Instruction*>;
|
||||
// A map from a function to its list of instructions.
|
||||
using FunctionInstMap = std::unordered_map<uint32_t, InstructionList>;
|
||||
using FunctionInstMap = std::map<uint32_t, InstructionList>;
|
||||
// A list of ids with some similar property, for example functions with the same
|
||||
// name.
|
||||
using IdGroup = std::vector<uint32_t>;
|
||||
|
@ -1486,7 +1486,7 @@ float Differ::MatchFunctionBodies(const InstructionList& src_body,
|
|||
LongestCommonSubsequence<std::vector<const opt::Instruction*>> lcs(src_body,
|
||||
dst_body);
|
||||
|
||||
size_t best_match_length = lcs.Get<const opt::Instruction*>(
|
||||
uint32_t best_match_length = lcs.Get<const opt::Instruction*>(
|
||||
[this](const opt::Instruction* src_inst,
|
||||
const opt::Instruction* dst_inst) {
|
||||
return DoInstructionsMatchFuzzy(src_inst, dst_inst);
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <stack>
|
||||
#include <vector>
|
||||
|
||||
namespace spvtools {
|
||||
|
@ -43,44 +45,64 @@ class LongestCommonSubsequence {
|
|||
//
|
||||
// Returns the length of the longest common subsequence.
|
||||
template <typename T>
|
||||
size_t Get(std::function<bool(T src_elem, T dst_elem)> match,
|
||||
DiffMatch* src_match_result, DiffMatch* dst_match_result);
|
||||
uint32_t Get(std::function<bool(T src_elem, T dst_elem)> match,
|
||||
DiffMatch* src_match_result, DiffMatch* dst_match_result);
|
||||
|
||||
private:
|
||||
struct DiffMatchIndex {
|
||||
uint32_t src_offset;
|
||||
uint32_t dst_offset;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
size_t CalculateLCS(size_t src_start, size_t dst_start,
|
||||
std::function<bool(T src_elem, T dst_elem)> match);
|
||||
void CalculateLCS(std::function<bool(T src_elem, T dst_elem)> match);
|
||||
void RetrieveMatch(DiffMatch* src_match_result, DiffMatch* dst_match_result);
|
||||
bool IsInBound(size_t src_index, size_t dst_index) {
|
||||
return src_index < src_.size() && dst_index < dst_.size();
|
||||
bool IsInBound(DiffMatchIndex index) {
|
||||
return index.src_offset < src_.size() && index.dst_offset < dst_.size();
|
||||
}
|
||||
bool IsCalculated(size_t src_index, size_t dst_index) {
|
||||
assert(IsInBound(src_index, dst_index));
|
||||
return table_[src_index][dst_index].valid;
|
||||
bool IsCalculated(DiffMatchIndex index) {
|
||||
assert(IsInBound(index));
|
||||
return table_[index.src_offset][index.dst_offset].valid;
|
||||
}
|
||||
size_t GetMemoizedLength(size_t src_index, size_t dst_index) {
|
||||
if (!IsInBound(src_index, dst_index)) {
|
||||
bool IsCalculatedOrOutOfBound(DiffMatchIndex index) {
|
||||
return !IsInBound(index) || IsCalculated(index);
|
||||
}
|
||||
uint32_t GetMemoizedLength(DiffMatchIndex index) {
|
||||
if (!IsInBound(index)) {
|
||||
return 0;
|
||||
}
|
||||
assert(IsCalculated(src_index, dst_index));
|
||||
return table_[src_index][dst_index].best_match_length;
|
||||
assert(IsCalculated(index));
|
||||
return table_[index.src_offset][index.dst_offset].best_match_length;
|
||||
}
|
||||
bool IsMatched(size_t src_index, size_t dst_index) {
|
||||
assert(IsCalculated(src_index, dst_index));
|
||||
return table_[src_index][dst_index].matched;
|
||||
bool IsMatched(DiffMatchIndex index) {
|
||||
assert(IsCalculated(index));
|
||||
return table_[index.src_offset][index.dst_offset].matched;
|
||||
}
|
||||
void MarkMatched(DiffMatchIndex index, uint32_t best_match_length,
|
||||
bool matched) {
|
||||
assert(IsInBound(index));
|
||||
DiffMatchEntry& entry = table_[index.src_offset][index.dst_offset];
|
||||
assert(!entry.valid);
|
||||
|
||||
entry.best_match_length = best_match_length & 0x3FFFFFFF;
|
||||
assert(entry.best_match_length == best_match_length);
|
||||
entry.matched = matched;
|
||||
entry.valid = true;
|
||||
}
|
||||
|
||||
const Sequence& src_;
|
||||
const Sequence& dst_;
|
||||
|
||||
struct DiffMatchEntry {
|
||||
size_t best_match_length = 0;
|
||||
DiffMatchEntry() : best_match_length(0), matched(false), valid(false) {}
|
||||
|
||||
uint32_t best_match_length : 30;
|
||||
// Whether src[i] and dst[j] matched. This is an optimization to avoid
|
||||
// calling the `match` function again when walking the LCS table.
|
||||
bool matched = false;
|
||||
uint32_t matched : 1;
|
||||
// Use for the recursive algorithm to know if the contents of this entry are
|
||||
// valid.
|
||||
bool valid = false;
|
||||
uint32_t valid : 1;
|
||||
};
|
||||
|
||||
std::vector<std::vector<DiffMatchEntry>> table_;
|
||||
|
@ -88,18 +110,17 @@ class LongestCommonSubsequence {
|
|||
|
||||
template <typename Sequence>
|
||||
template <typename T>
|
||||
size_t LongestCommonSubsequence<Sequence>::Get(
|
||||
uint32_t LongestCommonSubsequence<Sequence>::Get(
|
||||
std::function<bool(T src_elem, T dst_elem)> match,
|
||||
DiffMatch* src_match_result, DiffMatch* dst_match_result) {
|
||||
size_t best_match_length = CalculateLCS(0, 0, match);
|
||||
CalculateLCS(match);
|
||||
RetrieveMatch(src_match_result, dst_match_result);
|
||||
return best_match_length;
|
||||
return GetMemoizedLength({0, 0});
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
template <typename T>
|
||||
size_t LongestCommonSubsequence<Sequence>::CalculateLCS(
|
||||
size_t src_start, size_t dst_start,
|
||||
void LongestCommonSubsequence<Sequence>::CalculateLCS(
|
||||
std::function<bool(T src_elem, T dst_elem)> match) {
|
||||
// The LCS algorithm is simple. Given sequences s and d, with a:b depicting a
|
||||
// range in python syntax:
|
||||
|
@ -113,53 +134,62 @@ size_t LongestCommonSubsequence<Sequence>::CalculateLCS(
|
|||
//
|
||||
// This is a recursive function with memoization, which avoids filling table
|
||||
// entries where unnecessary. This makes the best case O(N) instead of
|
||||
// O(N^2).
|
||||
// O(N^2). The implemention uses a std::stack to avoid stack overflow on long
|
||||
// sequences.
|
||||
|
||||
// To avoid unnecessary recursion on long sequences, process a whole strip of
|
||||
// matching elements in one go.
|
||||
size_t src_cur = src_start;
|
||||
size_t dst_cur = dst_start;
|
||||
while (IsInBound(src_cur, dst_cur) && !IsCalculated(src_cur, dst_cur) &&
|
||||
match(src_[src_cur], dst_[dst_cur])) {
|
||||
++src_cur;
|
||||
++dst_cur;
|
||||
if (src_.empty() || dst_.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We've reached a pair of elements that don't match. Recursively determine
|
||||
// which one should be left unmatched.
|
||||
size_t best_match_length = 0;
|
||||
if (IsInBound(src_cur, dst_cur)) {
|
||||
if (IsCalculated(src_cur, dst_cur)) {
|
||||
best_match_length = GetMemoizedLength(src_cur, dst_cur);
|
||||
} else {
|
||||
best_match_length = std::max(CalculateLCS(src_cur + 1, dst_cur, match),
|
||||
CalculateLCS(src_cur, dst_cur + 1, match));
|
||||
std::stack<DiffMatchIndex> to_calculate;
|
||||
to_calculate.push({0, 0});
|
||||
|
||||
// Fill the table with this information
|
||||
DiffMatchEntry& entry = table_[src_cur][dst_cur];
|
||||
assert(!entry.valid);
|
||||
entry.best_match_length = best_match_length;
|
||||
entry.valid = true;
|
||||
while (!to_calculate.empty()) {
|
||||
DiffMatchIndex current = to_calculate.top();
|
||||
to_calculate.pop();
|
||||
assert(IsInBound(current));
|
||||
|
||||
// If already calculated through another path, ignore it.
|
||||
if (IsCalculated(current)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (match(src_[current.src_offset], dst_[current.dst_offset])) {
|
||||
// If the current elements match, advance both indices and calculate the
|
||||
// LCS if not already. Visit `current` again afterwards, so its
|
||||
// corresponding entry will be updated.
|
||||
DiffMatchIndex next = {current.src_offset + 1, current.dst_offset + 1};
|
||||
if (IsCalculatedOrOutOfBound(next)) {
|
||||
MarkMatched(current, GetMemoizedLength(next) + 1, true);
|
||||
} else {
|
||||
to_calculate.push(current);
|
||||
to_calculate.push(next);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// We've reached a pair of elements that don't match. Calculate the LCS for
|
||||
// both cases of either being left unmatched and take the max. Visit
|
||||
// `current` again afterwards, so its corresponding entry will be updated.
|
||||
DiffMatchIndex next_src = {current.src_offset + 1, current.dst_offset};
|
||||
DiffMatchIndex next_dst = {current.src_offset, current.dst_offset + 1};
|
||||
|
||||
if (IsCalculatedOrOutOfBound(next_src) &&
|
||||
IsCalculatedOrOutOfBound(next_dst)) {
|
||||
uint32_t best_match_length =
|
||||
std::max(GetMemoizedLength(next_src), GetMemoizedLength(next_dst));
|
||||
MarkMatched(current, best_match_length, false);
|
||||
continue;
|
||||
}
|
||||
|
||||
to_calculate.push(current);
|
||||
if (!IsCalculatedOrOutOfBound(next_src)) {
|
||||
to_calculate.push(next_src);
|
||||
}
|
||||
if (!IsCalculatedOrOutOfBound(next_dst)) {
|
||||
to_calculate.push(next_dst);
|
||||
}
|
||||
}
|
||||
|
||||
// Go over the matched strip and update the table as well.
|
||||
assert(src_cur - src_start == dst_cur - dst_start);
|
||||
size_t contiguous_match_len = src_cur - src_start;
|
||||
|
||||
for (size_t i = 0; i < contiguous_match_len; ++i) {
|
||||
--src_cur;
|
||||
--dst_cur;
|
||||
assert(IsInBound(src_cur, dst_cur));
|
||||
|
||||
DiffMatchEntry& entry = table_[src_cur][dst_cur];
|
||||
assert(!entry.valid);
|
||||
entry.best_match_length = ++best_match_length;
|
||||
entry.matched = true;
|
||||
entry.valid = true;
|
||||
}
|
||||
|
||||
return best_match_length;
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
|
@ -171,20 +201,19 @@ void LongestCommonSubsequence<Sequence>::RetrieveMatch(
|
|||
src_match_result->resize(src_.size(), false);
|
||||
dst_match_result->resize(dst_.size(), false);
|
||||
|
||||
size_t src_cur = 0;
|
||||
size_t dst_cur = 0;
|
||||
while (IsInBound(src_cur, dst_cur)) {
|
||||
if (IsMatched(src_cur, dst_cur)) {
|
||||
(*src_match_result)[src_cur++] = true;
|
||||
(*dst_match_result)[dst_cur++] = true;
|
||||
DiffMatchIndex current = {0, 0};
|
||||
while (IsInBound(current)) {
|
||||
if (IsMatched(current)) {
|
||||
(*src_match_result)[current.src_offset++] = true;
|
||||
(*dst_match_result)[current.dst_offset++] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (GetMemoizedLength(src_cur + 1, dst_cur) >=
|
||||
GetMemoizedLength(src_cur, dst_cur + 1)) {
|
||||
++src_cur;
|
||||
if (GetMemoizedLength({current.src_offset + 1, current.dst_offset}) >=
|
||||
GetMemoizedLength({current.src_offset, current.dst_offset + 1})) {
|
||||
++current.src_offset;
|
||||
} else {
|
||||
++dst_cur;
|
||||
++current.dst_offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,15 +12,15 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# include(diff_files/diff_test_files_autogen.cmake)
|
||||
#
|
||||
# add_spvtools_unittest(TARGET lcs
|
||||
# SRCS lcs_test.cpp
|
||||
# LIBS SPIRV-Tools-diff
|
||||
# )
|
||||
#
|
||||
# add_spvtools_unittest(TARGET diff
|
||||
# SRCS diff_test.cpp diff_test_utils.h diff_test_utils.cpp
|
||||
# ${DIFF_TEST_FILES} ${spirv-tools_SOURCE_DIR}/tools/util/cli_consumer.cpp
|
||||
# LIBS SPIRV-Tools-diff
|
||||
# )
|
||||
include(diff_files/diff_test_files_autogen.cmake)
|
||||
|
||||
add_spvtools_unittest(TARGET lcs
|
||||
SRCS lcs_test.cpp
|
||||
LIBS SPIRV-Tools-diff
|
||||
)
|
||||
|
||||
add_spvtools_unittest(TARGET diff
|
||||
SRCS diff_test.cpp diff_test_utils.h diff_test_utils.cpp
|
||||
${DIFF_TEST_FILES} ${spirv-tools_SOURCE_DIR}/tools/util/cli_consumer.cpp
|
||||
LIBS SPIRV-Tools-diff
|
||||
)
|
||||
|
|
|
@ -586,6 +586,36 @@ TEST(DiffTest, DifferentDecorationsFragment) {
|
|||
%29 = OpVariable %28 Uniform
|
||||
+%84 = OpConstant %23 0
|
||||
+%85 = OpConstant %1 0.5
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%63 = OpFunction %61 None %62
|
||||
%64 = OpLabel
|
||||
%65 = OpVariable %30 Function
|
||||
|
@ -608,36 +638,6 @@ TEST(DiffTest, DifferentDecorationsFragment) {
|
|||
OpStore %22 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
|
@ -1108,6 +1108,43 @@ OpFunctionEnd
|
|||
+%83 = OpVariable %28 Uniform
|
||||
+%90 = OpConstant %23 0
|
||||
+%91 = OpConstant %1 0.5
|
||||
%32 = OpFunction %2 None %31
|
||||
-%33 = OpFunctionParameter %30
|
||||
+%84 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
-%37 = OpLoad %2 %33
|
||||
+%37 = OpLoad %2 %84
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
-%41 = OpLoad %2 %33
|
||||
+%41 = OpLoad %2 %84
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
-%49 = OpFunctionParameter %30
|
||||
-%50 = OpFunctionParameter %30
|
||||
+%85 = OpFunctionParameter %30
|
||||
+%86 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
-%52 = OpLoad %2 %49
|
||||
+%52 = OpLoad %2 %85
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
-%54 = OpLoad %2 %50
|
||||
+%54 = OpLoad %2 %86
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%63 = OpFunction %61 None %62
|
||||
%64 = OpLabel
|
||||
%65 = OpVariable %30 Function
|
||||
|
@ -1134,43 +1171,6 @@ OpFunctionEnd
|
|||
OpStore %22 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
-%49 = OpFunctionParameter %30
|
||||
-%50 = OpFunctionParameter %30
|
||||
+%85 = OpFunctionParameter %30
|
||||
+%86 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
-%52 = OpLoad %2 %49
|
||||
+%52 = OpLoad %2 %85
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
-%54 = OpLoad %2 %50
|
||||
+%54 = OpLoad %2 %86
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %31
|
||||
-%33 = OpFunctionParameter %30
|
||||
+%84 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
-%37 = OpLoad %2 %33
|
||||
+%37 = OpLoad %2 %84
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
-%41 = OpLoad %2 %33
|
||||
+%41 = OpLoad %2 %84
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
|
@ -1340,6 +1340,36 @@ TEST(DiffTest, DifferentDecorationsFragmentIgnoreLocation) {
|
|||
%29 = OpVariable %28 Uniform
|
||||
+%84 = OpConstant %23 0
|
||||
+%85 = OpConstant %1 0.5
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%63 = OpFunction %61 None %62
|
||||
%64 = OpLabel
|
||||
%65 = OpVariable %30 Function
|
||||
|
@ -1362,36 +1392,6 @@ TEST(DiffTest, DifferentDecorationsFragmentIgnoreLocation) {
|
|||
OpStore %22 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
options.ignore_location = true;
|
||||
|
@ -1562,6 +1562,36 @@ TEST(DiffTest, DifferentDecorationsFragmentIgnoreSetBindingLocation) {
|
|||
%29 = OpVariable %28 Uniform
|
||||
+%84 = OpConstant %23 0
|
||||
+%85 = OpConstant %1 0.5
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%63 = OpFunction %61 None %62
|
||||
%64 = OpLabel
|
||||
%65 = OpVariable %30 Function
|
||||
|
@ -1584,36 +1614,6 @@ TEST(DiffTest, DifferentDecorationsFragmentIgnoreSetBindingLocation) {
|
|||
OpStore %22 %81
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%48 = OpFunction %2 None %47
|
||||
%49 = OpFunctionParameter %30
|
||||
%50 = OpFunctionParameter %30
|
||||
%51 = OpLabel
|
||||
%52 = OpLoad %2 %49
|
||||
%53 = OpVectorShuffle %35 %52 %52 0 1
|
||||
%54 = OpLoad %2 %50
|
||||
%55 = OpVectorShuffle %35 %54 %54 2 3
|
||||
%56 = OpCompositeExtract %1 %53 0
|
||||
%57 = OpCompositeExtract %1 %53 1
|
||||
%58 = OpCompositeExtract %1 %55 0
|
||||
%59 = OpCompositeExtract %1 %55 1
|
||||
%60 = OpCompositeConstruct %2 %56 %57 %58 %59
|
||||
OpReturnValue %60
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %31
|
||||
%33 = OpFunctionParameter %30
|
||||
%34 = OpLabel
|
||||
%36 = OpLoad %6 %8
|
||||
%37 = OpLoad %2 %33
|
||||
%38 = OpVectorShuffle %35 %37 %37 0 1
|
||||
%39 = OpImageSampleImplicitLod %2 %36 %38
|
||||
%41 = OpLoad %2 %33
|
||||
%42 = OpVectorShuffle %35 %41 %41 2 3
|
||||
%43 = OpConvertFToS %40 %42
|
||||
%44 = OpLoad %9 %11
|
||||
%45 = OpImageRead %2 %44 %43
|
||||
%46 = OpFAdd %2 %39 %45
|
||||
OpReturnValue %46
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
options.ignore_set_binding = true;
|
||||
|
|
|
@ -475,6 +475,20 @@ TEST(DiffTest, DifferentDecorationsVertex) {
|
|||
%25 = OpVariable %24 Output
|
||||
+%61 = OpConstant %13 0
|
||||
+%62 = OpConstant %1 0.5
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%40 = OpFunction %38 None %39
|
||||
%41 = OpLabel
|
||||
%42 = OpVariable %26 Function
|
||||
|
@ -509,20 +523,6 @@ TEST(DiffTest, DifferentDecorationsVertex) {
|
|||
+OpStore %63 %69
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
|
@ -869,6 +869,25 @@ OpFunctionEnd
|
|||
%25 = OpVariable %24 Output
|
||||
+%67 = OpConstant %13 0
|
||||
+%68 = OpConstant %1 0.5
|
||||
%28 = OpFunction %2 None %27
|
||||
-%29 = OpFunctionParameter %26
|
||||
+%59 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
-%31 = OpLoad %2 %29
|
||||
+%31 = OpLoad %2 %59
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
-%33 = OpFunctionParameter %26
|
||||
+%60 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
-%35 = OpLoad %2 %33
|
||||
+%35 = OpLoad %2 %60
|
||||
-%36 = OpLoad %2 %33
|
||||
+%36 = OpLoad %2 %60
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%40 = OpFunction %38 None %39
|
||||
%41 = OpLabel
|
||||
%42 = OpVariable %26 Function
|
||||
|
@ -912,25 +931,6 @@ OpFunctionEnd
|
|||
+OpStore %69 %75
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
-%33 = OpFunctionParameter %26
|
||||
+%60 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
-%35 = OpLoad %2 %33
|
||||
+%35 = OpLoad %2 %60
|
||||
-%36 = OpLoad %2 %33
|
||||
+%36 = OpLoad %2 %60
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%28 = OpFunction %2 None %27
|
||||
-%29 = OpFunctionParameter %26
|
||||
+%59 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
-%31 = OpLoad %2 %29
|
||||
+%31 = OpLoad %2 %59
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
|
@ -1072,6 +1072,20 @@ TEST(DiffTest, DifferentDecorationsVertexIgnoreSetBinding) {
|
|||
%25 = OpVariable %24 Output
|
||||
+%61 = OpConstant %13 0
|
||||
+%62 = OpConstant %1 0.5
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%40 = OpFunction %38 None %39
|
||||
%41 = OpLabel
|
||||
%42 = OpVariable %26 Function
|
||||
|
@ -1106,20 +1120,6 @@ TEST(DiffTest, DifferentDecorationsVertexIgnoreSetBinding) {
|
|||
+OpStore %63 %69
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
options.ignore_set_binding = true;
|
||||
|
@ -1262,6 +1262,20 @@ TEST(DiffTest, DifferentDecorationsVertexIgnoreSetBindingLocation) {
|
|||
%25 = OpVariable %24 Output
|
||||
+%61 = OpConstant %13 0
|
||||
+%62 = OpConstant %1 0.5
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%40 = OpFunction %38 None %39
|
||||
%41 = OpLabel
|
||||
%42 = OpVariable %26 Function
|
||||
|
@ -1296,20 +1310,6 @@ TEST(DiffTest, DifferentDecorationsVertexIgnoreSetBindingLocation) {
|
|||
+OpStore %63 %69
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%32 = OpFunction %2 None %27
|
||||
%33 = OpFunctionParameter %26
|
||||
%34 = OpLabel
|
||||
%35 = OpLoad %2 %33
|
||||
%36 = OpLoad %2 %33
|
||||
%37 = OpFAdd %2 %35 %36
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
%28 = OpFunction %2 None %27
|
||||
%29 = OpFunctionParameter %26
|
||||
%30 = OpLabel
|
||||
%31 = OpLoad %2 %29
|
||||
OpReturnValue %31
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
options.ignore_set_binding = true;
|
||||
|
|
|
@ -390,34 +390,13 @@ TEST(DiffTest, ExtraIfBlock) {
|
|||
%63 = OpVariable %62 Output
|
||||
%67 = OpTypePointer Input %6
|
||||
%68 = OpVariable %67 Input
|
||||
%10 = OpFunction %6 None %7
|
||||
%11 = OpLabel
|
||||
%45 = OpVariable %12 Function
|
||||
%46 = OpAccessChain %21 %18 %20
|
||||
%47 = OpLoad %15 %46
|
||||
%48 = OpConvertUToF %6 %47
|
||||
%50 = OpFDiv %6 %48 %49
|
||||
OpStore %45 %50
|
||||
%51 = OpLoad %6 %45
|
||||
%54 = OpExtInst %6 %1 FClamp %51 %52 %53
|
||||
%55 = OpLoad %6 %45
|
||||
%56 = OpFMul %6 %55 %54
|
||||
OpStore %45 %56
|
||||
+%71 = OpAccessChain %21 %18 %32
|
||||
+%72 = OpLoad %15 %71
|
||||
+%73 = OpINotEqual %25 %72 %24
|
||||
+OpSelectionMerge %75 None
|
||||
+OpBranchConditional %73 %74 %75
|
||||
+%74 = OpLabel
|
||||
%57 = OpLoad %6 %45
|
||||
+%77 = OpFSub %6 %57 %76
|
||||
+OpStore %45 %77
|
||||
+OpBranch %75
|
||||
+%75 = OpLabel
|
||||
+%78 = OpLoad %6 %45
|
||||
-%58 = OpExtInst %6 %1 Exp %57
|
||||
+%58 = OpExtInst %6 %1 Exp %78
|
||||
OpReturnValue %58
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%64 = OpFunctionCall %6 %8
|
||||
%65 = OpFunctionCall %6 %10
|
||||
%66 = OpCompositeConstruct %61 %64 %65 %14 %29
|
||||
OpStore %63 %66
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %6 None %7
|
||||
%9 = OpLabel
|
||||
|
@ -447,13 +426,34 @@ TEST(DiffTest, ExtraIfBlock) {
|
|||
%42 = OpFSub %6 %39 %41
|
||||
OpReturnValue %42
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%64 = OpFunctionCall %6 %8
|
||||
%65 = OpFunctionCall %6 %10
|
||||
%66 = OpCompositeConstruct %61 %64 %65 %14 %29
|
||||
OpStore %63 %66
|
||||
OpReturn
|
||||
%10 = OpFunction %6 None %7
|
||||
%11 = OpLabel
|
||||
%45 = OpVariable %12 Function
|
||||
%46 = OpAccessChain %21 %18 %20
|
||||
%47 = OpLoad %15 %46
|
||||
%48 = OpConvertUToF %6 %47
|
||||
%50 = OpFDiv %6 %48 %49
|
||||
OpStore %45 %50
|
||||
%51 = OpLoad %6 %45
|
||||
%54 = OpExtInst %6 %1 FClamp %51 %52 %53
|
||||
%55 = OpLoad %6 %45
|
||||
%56 = OpFMul %6 %55 %54
|
||||
OpStore %45 %56
|
||||
+%71 = OpAccessChain %21 %18 %32
|
||||
+%72 = OpLoad %15 %71
|
||||
+%73 = OpINotEqual %25 %72 %24
|
||||
+OpSelectionMerge %75 None
|
||||
+OpBranchConditional %73 %74 %75
|
||||
+%74 = OpLabel
|
||||
%57 = OpLoad %6 %45
|
||||
+%77 = OpFSub %6 %57 %76
|
||||
+OpStore %45 %77
|
||||
+OpBranch %75
|
||||
+%75 = OpLabel
|
||||
+%78 = OpLoad %6 %45
|
||||
-%58 = OpExtInst %6 %1 Exp %57
|
||||
+%58 = OpExtInst %6 %1 Exp %78
|
||||
OpReturnValue %58
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
|
@ -792,34 +792,13 @@ TEST(DiffTest, ExtraIfBlockNoDebug) {
|
|||
%63 = OpVariable %62 Output
|
||||
%67 = OpTypePointer Input %6
|
||||
%68 = OpVariable %67 Input
|
||||
%10 = OpFunction %6 None %7
|
||||
%11 = OpLabel
|
||||
%45 = OpVariable %12 Function
|
||||
%46 = OpAccessChain %21 %18 %20
|
||||
%47 = OpLoad %15 %46
|
||||
%48 = OpConvertUToF %6 %47
|
||||
%50 = OpFDiv %6 %48 %49
|
||||
OpStore %45 %50
|
||||
%51 = OpLoad %6 %45
|
||||
%54 = OpExtInst %6 %1 FClamp %51 %52 %53
|
||||
%55 = OpLoad %6 %45
|
||||
%56 = OpFMul %6 %55 %54
|
||||
OpStore %45 %56
|
||||
+%71 = OpAccessChain %21 %18 %32
|
||||
+%72 = OpLoad %15 %71
|
||||
+%73 = OpINotEqual %25 %72 %24
|
||||
+OpSelectionMerge %75 None
|
||||
+OpBranchConditional %73 %74 %75
|
||||
+%74 = OpLabel
|
||||
%57 = OpLoad %6 %45
|
||||
+%77 = OpFSub %6 %57 %76
|
||||
+OpStore %45 %77
|
||||
+OpBranch %75
|
||||
+%75 = OpLabel
|
||||
+%78 = OpLoad %6 %45
|
||||
-%58 = OpExtInst %6 %1 Exp %57
|
||||
+%58 = OpExtInst %6 %1 Exp %78
|
||||
OpReturnValue %58
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%64 = OpFunctionCall %6 %8
|
||||
%65 = OpFunctionCall %6 %10
|
||||
%66 = OpCompositeConstruct %61 %64 %65 %14 %29
|
||||
OpStore %63 %66
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %6 None %7
|
||||
%9 = OpLabel
|
||||
|
@ -849,13 +828,34 @@ TEST(DiffTest, ExtraIfBlockNoDebug) {
|
|||
%42 = OpFSub %6 %39 %41
|
||||
OpReturnValue %42
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%64 = OpFunctionCall %6 %8
|
||||
%65 = OpFunctionCall %6 %10
|
||||
%66 = OpCompositeConstruct %61 %64 %65 %14 %29
|
||||
OpStore %63 %66
|
||||
OpReturn
|
||||
%10 = OpFunction %6 None %7
|
||||
%11 = OpLabel
|
||||
%45 = OpVariable %12 Function
|
||||
%46 = OpAccessChain %21 %18 %20
|
||||
%47 = OpLoad %15 %46
|
||||
%48 = OpConvertUToF %6 %47
|
||||
%50 = OpFDiv %6 %48 %49
|
||||
OpStore %45 %50
|
||||
%51 = OpLoad %6 %45
|
||||
%54 = OpExtInst %6 %1 FClamp %51 %52 %53
|
||||
%55 = OpLoad %6 %45
|
||||
%56 = OpFMul %6 %55 %54
|
||||
OpStore %45 %56
|
||||
+%71 = OpAccessChain %21 %18 %32
|
||||
+%72 = OpLoad %15 %71
|
||||
+%73 = OpINotEqual %25 %72 %24
|
||||
+OpSelectionMerge %75 None
|
||||
+OpBranchConditional %73 %74 %75
|
||||
+%74 = OpLabel
|
||||
%57 = OpLoad %6 %45
|
||||
+%77 = OpFSub %6 %57 %76
|
||||
+OpStore %45 %77
|
||||
+OpBranch %75
|
||||
+%75 = OpLabel
|
||||
+%78 = OpLoad %6 %45
|
||||
-%58 = OpExtInst %6 %1 Exp %57
|
||||
+%58 = OpExtInst %6 %1 Exp %78
|
||||
OpReturnValue %58
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
|
|
|
@ -574,89 +574,11 @@ TEST(DiffTest, LargeFunctionsLargeDiffs) {
|
|||
%113 = OpTypePointer Uniform %78
|
||||
%128 = OpVariable %26 UniformConstant
|
||||
%130 = OpConstantComposite %32 %45 %45
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
-%92 = OpAccessChain %91 %90 %73
|
||||
-%93 = OpLoad %87 %92
|
||||
-%95 = OpAccessChain %94 %82 %45
|
||||
-%96 = OpLoad %77 %95
|
||||
-%97 = OpConvertUToF %86 %96
|
||||
-%98 = OpMatrixTimesVector %86 %93 %97
|
||||
-%99 = OpConvertFToU %77 %98
|
||||
-%100 = OpAccessChain %94 %82 %45
|
||||
-OpStore %100 %99
|
||||
+OpStore %101 %45
|
||||
-OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
-OpLoopMerge %104 %105 None
|
||||
+OpLoopMerge %171 %172 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
-OpBranchConditional %109 %103 %104
|
||||
+OpBranchConditional %109 %103 %171
|
||||
%103 = OpLabel
|
||||
-%111 = OpAccessChain %110 %82 %73
|
||||
-%112 = OpLoad %79 %111
|
||||
-%114 = OpAccessChain %113 %90 %53
|
||||
-%115 = OpLoad %78 %114
|
||||
-%116 = OpVectorTimesScalar %79 %112 %115
|
||||
-%117 = OpConvertFToU %13 %116
|
||||
-%118 = OpCompositeExtract %10 %117 0
|
||||
-%119 = OpCompositeExtract %10 %117 1
|
||||
-%120 = OpCompositeExtract %10 %117 2
|
||||
-%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
-%122 = OpAccessChain %94 %82 %45
|
||||
-%123 = OpLoad %77 %122
|
||||
-%124 = OpIAdd %77 %123 %121
|
||||
-%125 = OpAccessChain %94 %82 %45
|
||||
-OpStore %125 %124
|
||||
-OpBranch %105
|
||||
-%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
-%127 = OpIAdd %24 %126 %73
|
||||
+%173 = OpIEqual %54 %126 %45
|
||||
+OpSelectionMerge %174 None
|
||||
+OpBranchConditional %173 %104 %176
|
||||
+%176 = OpLabel
|
||||
+%177 = OpLoad %13 %15
|
||||
+%178 = OpConvertUToF %79 %177
|
||||
+%180 = OpCompositeExtract %78 %178 0
|
||||
+%181 = OpCompositeExtract %78 %178 1
|
||||
+%182 = OpCompositeConstruct %179 %180 %181
|
||||
+%183 = OpAccessChain %113 %82 %73 %21
|
||||
+%184 = OpCompositeExtract %78 %182 0
|
||||
-OpStore %101 %127
|
||||
+OpStore %183 %184
|
||||
+%185 = OpAccessChain %113 %82 %73 %40
|
||||
+%186 = OpCompositeExtract %78 %182 1
|
||||
+OpStore %185 %186
|
||||
-OpBranch %102
|
||||
+OpBranch %174
|
||||
%104 = OpLabel
|
||||
-OpMemoryBarrier %40 %41
|
||||
-OpControlBarrier %40 %40 %42
|
||||
%129 = OpLoad %25 %128
|
||||
%131 = OpImageRead %38 %129 %130
|
||||
%132 = OpCompositeExtract %24 %131 0
|
||||
%133 = OpConvertSToF %78 %132
|
||||
-%134 = OpCompositeConstruct %79 %133 %133 %133
|
||||
-%135 = OpAccessChain %110 %82 %73
|
||||
+%175 = OpAccessChain %113 %82 %73 %16
|
||||
-OpStore %135 %134
|
||||
+OpStore %175 %133
|
||||
+OpBranch %174
|
||||
+%174 = OpLabel
|
||||
+OpBranch %172
|
||||
+%172 = OpLabel
|
||||
+%187 = OpLoad %24 %101
|
||||
+%188 = OpIAdd %24 %187 %73
|
||||
+OpStore %101 %188
|
||||
+OpBranch %102
|
||||
+%171 = OpLabel
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
-%136 = OpFunctionCall %2 %6
|
||||
%137 = OpFunctionCall %2 %8
|
||||
+%189 = OpFunctionCall %2 %6
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
|
@ -777,11 +699,89 @@ TEST(DiffTest, LargeFunctionsLargeDiffs) {
|
|||
+OpImageWrite %163 %168 %170
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
-%136 = OpFunctionCall %2 %6
|
||||
%137 = OpFunctionCall %2 %8
|
||||
+%189 = OpFunctionCall %2 %6
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
-%92 = OpAccessChain %91 %90 %73
|
||||
-%93 = OpLoad %87 %92
|
||||
-%95 = OpAccessChain %94 %82 %45
|
||||
-%96 = OpLoad %77 %95
|
||||
-%97 = OpConvertUToF %86 %96
|
||||
-%98 = OpMatrixTimesVector %86 %93 %97
|
||||
-%99 = OpConvertFToU %77 %98
|
||||
-%100 = OpAccessChain %94 %82 %45
|
||||
-OpStore %100 %99
|
||||
+OpStore %101 %45
|
||||
-OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
-OpLoopMerge %104 %105 None
|
||||
+OpLoopMerge %171 %172 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
-OpBranchConditional %109 %103 %104
|
||||
+OpBranchConditional %109 %103 %171
|
||||
%103 = OpLabel
|
||||
-%111 = OpAccessChain %110 %82 %73
|
||||
-%112 = OpLoad %79 %111
|
||||
-%114 = OpAccessChain %113 %90 %53
|
||||
-%115 = OpLoad %78 %114
|
||||
-%116 = OpVectorTimesScalar %79 %112 %115
|
||||
-%117 = OpConvertFToU %13 %116
|
||||
-%118 = OpCompositeExtract %10 %117 0
|
||||
-%119 = OpCompositeExtract %10 %117 1
|
||||
-%120 = OpCompositeExtract %10 %117 2
|
||||
-%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
-%122 = OpAccessChain %94 %82 %45
|
||||
-%123 = OpLoad %77 %122
|
||||
-%124 = OpIAdd %77 %123 %121
|
||||
-%125 = OpAccessChain %94 %82 %45
|
||||
-OpStore %125 %124
|
||||
-OpBranch %105
|
||||
-%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
-%127 = OpIAdd %24 %126 %73
|
||||
+%173 = OpIEqual %54 %126 %45
|
||||
+OpSelectionMerge %174 None
|
||||
+OpBranchConditional %173 %104 %176
|
||||
+%176 = OpLabel
|
||||
+%177 = OpLoad %13 %15
|
||||
+%178 = OpConvertUToF %79 %177
|
||||
+%180 = OpCompositeExtract %78 %178 0
|
||||
+%181 = OpCompositeExtract %78 %178 1
|
||||
+%182 = OpCompositeConstruct %179 %180 %181
|
||||
+%183 = OpAccessChain %113 %82 %73 %21
|
||||
+%184 = OpCompositeExtract %78 %182 0
|
||||
-OpStore %101 %127
|
||||
+OpStore %183 %184
|
||||
+%185 = OpAccessChain %113 %82 %73 %40
|
||||
+%186 = OpCompositeExtract %78 %182 1
|
||||
+OpStore %185 %186
|
||||
-OpBranch %102
|
||||
+OpBranch %174
|
||||
%104 = OpLabel
|
||||
-OpMemoryBarrier %40 %41
|
||||
-OpControlBarrier %40 %40 %42
|
||||
%129 = OpLoad %25 %128
|
||||
%131 = OpImageRead %38 %129 %130
|
||||
%132 = OpCompositeExtract %24 %131 0
|
||||
%133 = OpConvertSToF %78 %132
|
||||
-%134 = OpCompositeConstruct %79 %133 %133 %133
|
||||
-%135 = OpAccessChain %110 %82 %73
|
||||
+%175 = OpAccessChain %113 %82 %73 %16
|
||||
-OpStore %135 %134
|
||||
+OpStore %175 %133
|
||||
+OpBranch %174
|
||||
+%174 = OpLabel
|
||||
+OpBranch %172
|
||||
+%172 = OpLabel
|
||||
+%187 = OpLoad %24 %101
|
||||
+%188 = OpIAdd %24 %187 %73
|
||||
+OpStore %101 %188
|
||||
+OpBranch %102
|
||||
+%171 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
@ -1271,61 +1271,14 @@ TEST(DiffTest, LargeFunctionsLargeDiffsNoDebug) {
|
|||
%113 = OpTypePointer Uniform %78
|
||||
%128 = OpVariable %26 UniformConstant
|
||||
%130 = OpConstantComposite %32 %45 %45
|
||||
-%8 = OpFunction %2 None %3
|
||||
-%9 = OpLabel
|
||||
-%101 = OpVariable %43 Function
|
||||
-%92 = OpAccessChain %91 %90 %73
|
||||
-%93 = OpLoad %87 %92
|
||||
-%95 = OpAccessChain %94 %82 %45
|
||||
-%96 = OpLoad %77 %95
|
||||
-%97 = OpConvertUToF %86 %96
|
||||
-%98 = OpMatrixTimesVector %86 %93 %97
|
||||
-%99 = OpConvertFToU %77 %98
|
||||
-%100 = OpAccessChain %94 %82 %45
|
||||
-OpStore %100 %99
|
||||
-OpStore %101 %45
|
||||
-OpBranch %102
|
||||
-%102 = OpLabel
|
||||
-OpLoopMerge %104 %105 None
|
||||
-OpBranch %106
|
||||
-%106 = OpLabel
|
||||
-%107 = OpLoad %24 %101
|
||||
-%109 = OpSLessThan %54 %107 %108
|
||||
-OpBranchConditional %109 %103 %104
|
||||
-%103 = OpLabel
|
||||
-%111 = OpAccessChain %110 %82 %73
|
||||
-%112 = OpLoad %79 %111
|
||||
-%114 = OpAccessChain %113 %90 %53
|
||||
-%115 = OpLoad %78 %114
|
||||
-%116 = OpVectorTimesScalar %79 %112 %115
|
||||
-%117 = OpConvertFToU %13 %116
|
||||
-%118 = OpCompositeExtract %10 %117 0
|
||||
-%119 = OpCompositeExtract %10 %117 1
|
||||
-%120 = OpCompositeExtract %10 %117 2
|
||||
-%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
-%122 = OpAccessChain %94 %82 %45
|
||||
-%123 = OpLoad %77 %122
|
||||
-%124 = OpIAdd %77 %123 %121
|
||||
-%125 = OpAccessChain %94 %82 %45
|
||||
-OpStore %125 %124
|
||||
-OpBranch %105
|
||||
-%105 = OpLabel
|
||||
-%126 = OpLoad %24 %101
|
||||
-%127 = OpIAdd %24 %126 %73
|
||||
-OpStore %101 %127
|
||||
-OpBranch %102
|
||||
-%104 = OpLabel
|
||||
-OpMemoryBarrier %40 %41
|
||||
-OpControlBarrier %40 %40 %42
|
||||
-%129 = OpLoad %25 %128
|
||||
-%131 = OpImageRead %38 %129 %130
|
||||
-%132 = OpCompositeExtract %24 %131 0
|
||||
-%133 = OpConvertSToF %78 %132
|
||||
-%134 = OpCompositeConstruct %79 %133 %133 %133
|
||||
-%135 = OpAccessChain %110 %82 %73
|
||||
-OpStore %135 %134
|
||||
-OpReturn
|
||||
-OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
-%136 = OpFunctionCall %2 %6
|
||||
+%136 = OpFunctionCall %2 %140
|
||||
-%137 = OpFunctionCall %2 %8
|
||||
+%137 = OpFunctionCall %2 %138
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
-%6 = OpFunction %2 None %3
|
||||
-%7 = OpLabel
|
||||
-%12 = OpVariable %11 Function
|
||||
|
@ -1402,62 +1355,61 @@ TEST(DiffTest, LargeFunctionsLargeDiffsNoDebug) {
|
|||
-OpStore %85 %83
|
||||
-OpReturn
|
||||
-OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
-%136 = OpFunctionCall %2 %6
|
||||
+%136 = OpFunctionCall %2 %140
|
||||
-%137 = OpFunctionCall %2 %8
|
||||
+%137 = OpFunctionCall %2 %138
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
+%140 = OpFunction %2 None %3
|
||||
+%141 = OpLabel
|
||||
+%190 = OpVariable %43 Function
|
||||
+OpStore %190 %45
|
||||
+OpBranch %191
|
||||
+%191 = OpLabel
|
||||
+OpLoopMerge %193 %194 None
|
||||
+OpBranch %195
|
||||
+%195 = OpLabel
|
||||
+%196 = OpLoad %24 %190
|
||||
+%197 = OpSLessThan %54 %196 %108
|
||||
+OpBranchConditional %197 %192 %193
|
||||
+%192 = OpLabel
|
||||
+%198 = OpLoad %24 %190
|
||||
+%199 = OpIEqual %54 %198 %45
|
||||
+OpSelectionMerge %201 None
|
||||
+OpBranchConditional %199 %200 %207
|
||||
+%207 = OpLabel
|
||||
+%208 = OpLoad %13 %15
|
||||
+%209 = OpConvertUToF %79 %208
|
||||
+%211 = OpCompositeExtract %78 %209 0
|
||||
+%212 = OpCompositeExtract %78 %209 1
|
||||
+%213 = OpCompositeConstruct %210 %211 %212
|
||||
+%214 = OpAccessChain %113 %82 %73 %21
|
||||
+%215 = OpCompositeExtract %78 %213 0
|
||||
+OpStore %214 %215
|
||||
+%216 = OpAccessChain %113 %82 %73 %40
|
||||
+%217 = OpCompositeExtract %78 %213 1
|
||||
+OpStore %216 %217
|
||||
+OpBranch %201
|
||||
+%200 = OpLabel
|
||||
+%202 = OpLoad %25 %128
|
||||
+%203 = OpImageRead %38 %202 %130
|
||||
+%204 = OpCompositeExtract %24 %203 0
|
||||
+%205 = OpConvertSToF %78 %204
|
||||
+%206 = OpAccessChain %113 %82 %73 %16
|
||||
+OpStore %206 %205
|
||||
+OpBranch %201
|
||||
+%201 = OpLabel
|
||||
+OpBranch %194
|
||||
+%194 = OpLabel
|
||||
+%218 = OpLoad %24 %190
|
||||
+%219 = OpIAdd %24 %218 %73
|
||||
+OpStore %190 %219
|
||||
+OpBranch %191
|
||||
+%193 = OpLabel
|
||||
+OpReturn
|
||||
+OpFunctionEnd
|
||||
-%8 = OpFunction %2 None %3
|
||||
-%9 = OpLabel
|
||||
-%101 = OpVariable %43 Function
|
||||
-%92 = OpAccessChain %91 %90 %73
|
||||
-%93 = OpLoad %87 %92
|
||||
-%95 = OpAccessChain %94 %82 %45
|
||||
-%96 = OpLoad %77 %95
|
||||
-%97 = OpConvertUToF %86 %96
|
||||
-%98 = OpMatrixTimesVector %86 %93 %97
|
||||
-%99 = OpConvertFToU %77 %98
|
||||
-%100 = OpAccessChain %94 %82 %45
|
||||
-OpStore %100 %99
|
||||
-OpStore %101 %45
|
||||
-OpBranch %102
|
||||
-%102 = OpLabel
|
||||
-OpLoopMerge %104 %105 None
|
||||
-OpBranch %106
|
||||
-%106 = OpLabel
|
||||
-%107 = OpLoad %24 %101
|
||||
-%109 = OpSLessThan %54 %107 %108
|
||||
-OpBranchConditional %109 %103 %104
|
||||
-%103 = OpLabel
|
||||
-%111 = OpAccessChain %110 %82 %73
|
||||
-%112 = OpLoad %79 %111
|
||||
-%114 = OpAccessChain %113 %90 %53
|
||||
-%115 = OpLoad %78 %114
|
||||
-%116 = OpVectorTimesScalar %79 %112 %115
|
||||
-%117 = OpConvertFToU %13 %116
|
||||
-%118 = OpCompositeExtract %10 %117 0
|
||||
-%119 = OpCompositeExtract %10 %117 1
|
||||
-%120 = OpCompositeExtract %10 %117 2
|
||||
-%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
-%122 = OpAccessChain %94 %82 %45
|
||||
-%123 = OpLoad %77 %122
|
||||
-%124 = OpIAdd %77 %123 %121
|
||||
-%125 = OpAccessChain %94 %82 %45
|
||||
-OpStore %125 %124
|
||||
-OpBranch %105
|
||||
-%105 = OpLabel
|
||||
-%126 = OpLoad %24 %101
|
||||
-%127 = OpIAdd %24 %126 %73
|
||||
-OpStore %101 %127
|
||||
-OpBranch %102
|
||||
-%104 = OpLabel
|
||||
-OpMemoryBarrier %40 %41
|
||||
-OpControlBarrier %40 %40 %42
|
||||
-%129 = OpLoad %25 %128
|
||||
-%131 = OpImageRead %38 %129 %130
|
||||
-%132 = OpCompositeExtract %24 %131 0
|
||||
-%133 = OpConvertSToF %78 %132
|
||||
-%134 = OpCompositeConstruct %79 %133 %133 %133
|
||||
-%135 = OpAccessChain %110 %82 %73
|
||||
-OpStore %135 %134
|
||||
-OpReturn
|
||||
-OpFunctionEnd
|
||||
+%138 = OpFunction %2 None %3
|
||||
+%139 = OpLabel
|
||||
+%142 = OpVariable %11 Function
|
||||
|
@ -1524,6 +1476,54 @@ TEST(DiffTest, LargeFunctionsLargeDiffsNoDebug) {
|
|||
+OpImageWrite %181 %186 %189
|
||||
+OpReturn
|
||||
+OpFunctionEnd
|
||||
+%140 = OpFunction %2 None %3
|
||||
+%141 = OpLabel
|
||||
+%190 = OpVariable %43 Function
|
||||
+OpStore %190 %45
|
||||
+OpBranch %191
|
||||
+%191 = OpLabel
|
||||
+OpLoopMerge %193 %194 None
|
||||
+OpBranch %195
|
||||
+%195 = OpLabel
|
||||
+%196 = OpLoad %24 %190
|
||||
+%197 = OpSLessThan %54 %196 %108
|
||||
+OpBranchConditional %197 %192 %193
|
||||
+%192 = OpLabel
|
||||
+%198 = OpLoad %24 %190
|
||||
+%199 = OpIEqual %54 %198 %45
|
||||
+OpSelectionMerge %201 None
|
||||
+OpBranchConditional %199 %200 %207
|
||||
+%207 = OpLabel
|
||||
+%208 = OpLoad %13 %15
|
||||
+%209 = OpConvertUToF %79 %208
|
||||
+%211 = OpCompositeExtract %78 %209 0
|
||||
+%212 = OpCompositeExtract %78 %209 1
|
||||
+%213 = OpCompositeConstruct %210 %211 %212
|
||||
+%214 = OpAccessChain %113 %82 %73 %21
|
||||
+%215 = OpCompositeExtract %78 %213 0
|
||||
+OpStore %214 %215
|
||||
+%216 = OpAccessChain %113 %82 %73 %40
|
||||
+%217 = OpCompositeExtract %78 %213 1
|
||||
+OpStore %216 %217
|
||||
+OpBranch %201
|
||||
+%200 = OpLabel
|
||||
+%202 = OpLoad %25 %128
|
||||
+%203 = OpImageRead %38 %202 %130
|
||||
+%204 = OpCompositeExtract %24 %203 0
|
||||
+%205 = OpConvertSToF %78 %204
|
||||
+%206 = OpAccessChain %113 %82 %73 %16
|
||||
+OpStore %206 %205
|
||||
+OpBranch %201
|
||||
+%201 = OpLabel
|
||||
+OpBranch %194
|
||||
+%194 = OpLabel
|
||||
+%218 = OpLoad %24 %190
|
||||
+%219 = OpIAdd %24 %218 %73
|
||||
+OpStore %190 %219
|
||||
+OpBranch %191
|
||||
+%193 = OpLabel
|
||||
+OpReturn
|
||||
+OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
|
|
|
@ -578,61 +578,10 @@ TEST(DiffTest, LargeFunctionsSmallDiffs) {
|
|||
%113 = OpTypePointer Uniform %78
|
||||
+%138 = OpVariable %26 UniformConstant
|
||||
%129 = OpConstantComposite %32 %45 %45
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
%92 = OpAccessChain %91 %90 %73
|
||||
%93 = OpLoad %87 %92
|
||||
%95 = OpAccessChain %94 %82 %45
|
||||
%96 = OpLoad %77 %95
|
||||
%97 = OpConvertUToF %86 %96
|
||||
%98 = OpMatrixTimesVector %86 %93 %97
|
||||
%99 = OpConvertFToU %77 %98
|
||||
%100 = OpAccessChain %94 %82 %45
|
||||
OpStore %100 %99
|
||||
OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
OpLoopMerge %104 %105 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
OpBranchConditional %109 %103 %104
|
||||
%103 = OpLabel
|
||||
%111 = OpAccessChain %110 %82 %73
|
||||
%112 = OpLoad %79 %111
|
||||
%114 = OpAccessChain %113 %90 %53
|
||||
%115 = OpLoad %78 %114
|
||||
%116 = OpVectorTimesScalar %79 %112 %115
|
||||
%117 = OpConvertFToU %13 %116
|
||||
%118 = OpCompositeExtract %10 %117 0
|
||||
%119 = OpCompositeExtract %10 %117 1
|
||||
%120 = OpCompositeExtract %10 %117 2
|
||||
%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
%122 = OpAccessChain %94 %82 %45
|
||||
%123 = OpLoad %77 %122
|
||||
%124 = OpIAdd %77 %123 %121
|
||||
%125 = OpAccessChain %94 %82 %45
|
||||
OpStore %125 %124
|
||||
OpBranch %105
|
||||
%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
%127 = OpIAdd %24 %126 %73
|
||||
OpStore %101 %127
|
||||
OpBranch %102
|
||||
%104 = OpLabel
|
||||
OpMemoryBarrier %40 %41
|
||||
OpControlBarrier %40 %40 %42
|
||||
-%128 = OpLoad %25 %27
|
||||
+%139 = OpLoad %25 %138
|
||||
-%130 = OpImageRead %38 %128 %129
|
||||
+%130 = OpImageRead %38 %139 %129
|
||||
%131 = OpCompositeExtract %24 %130 0
|
||||
%132 = OpConvertSToF %78 %131
|
||||
%133 = OpCompositeConstruct %79 %132 %132 %132
|
||||
%134 = OpAccessChain %110 %82 %73
|
||||
OpStore %134 %133
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%135 = OpFunctionCall %2 %6
|
||||
%136 = OpFunctionCall %2 %8
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
|
@ -713,10 +662,61 @@ TEST(DiffTest, LargeFunctionsSmallDiffs) {
|
|||
OpStore %85 %83
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%135 = OpFunctionCall %2 %6
|
||||
%136 = OpFunctionCall %2 %8
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
%92 = OpAccessChain %91 %90 %73
|
||||
%93 = OpLoad %87 %92
|
||||
%95 = OpAccessChain %94 %82 %45
|
||||
%96 = OpLoad %77 %95
|
||||
%97 = OpConvertUToF %86 %96
|
||||
%98 = OpMatrixTimesVector %86 %93 %97
|
||||
%99 = OpConvertFToU %77 %98
|
||||
%100 = OpAccessChain %94 %82 %45
|
||||
OpStore %100 %99
|
||||
OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
OpLoopMerge %104 %105 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
OpBranchConditional %109 %103 %104
|
||||
%103 = OpLabel
|
||||
%111 = OpAccessChain %110 %82 %73
|
||||
%112 = OpLoad %79 %111
|
||||
%114 = OpAccessChain %113 %90 %53
|
||||
%115 = OpLoad %78 %114
|
||||
%116 = OpVectorTimesScalar %79 %112 %115
|
||||
%117 = OpConvertFToU %13 %116
|
||||
%118 = OpCompositeExtract %10 %117 0
|
||||
%119 = OpCompositeExtract %10 %117 1
|
||||
%120 = OpCompositeExtract %10 %117 2
|
||||
%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
%122 = OpAccessChain %94 %82 %45
|
||||
%123 = OpLoad %77 %122
|
||||
%124 = OpIAdd %77 %123 %121
|
||||
%125 = OpAccessChain %94 %82 %45
|
||||
OpStore %125 %124
|
||||
OpBranch %105
|
||||
%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
%127 = OpIAdd %24 %126 %73
|
||||
OpStore %101 %127
|
||||
OpBranch %102
|
||||
%104 = OpLabel
|
||||
OpMemoryBarrier %40 %41
|
||||
OpControlBarrier %40 %40 %42
|
||||
-%128 = OpLoad %25 %27
|
||||
+%139 = OpLoad %25 %138
|
||||
-%130 = OpImageRead %38 %128 %129
|
||||
+%130 = OpImageRead %38 %139 %129
|
||||
%131 = OpCompositeExtract %24 %130 0
|
||||
%132 = OpConvertSToF %78 %131
|
||||
%133 = OpCompositeConstruct %79 %132 %132 %132
|
||||
%134 = OpAccessChain %110 %82 %73
|
||||
OpStore %134 %133
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
@ -1213,61 +1213,10 @@ TEST(DiffTest, LargeFunctionsSmallDiffsNoDebug) {
|
|||
%113 = OpTypePointer Uniform %78
|
||||
+%138 = OpVariable %26 UniformConstant
|
||||
%129 = OpConstantComposite %32 %45 %45
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
%92 = OpAccessChain %91 %90 %73
|
||||
%93 = OpLoad %87 %92
|
||||
%95 = OpAccessChain %94 %82 %45
|
||||
%96 = OpLoad %77 %95
|
||||
%97 = OpConvertUToF %86 %96
|
||||
%98 = OpMatrixTimesVector %86 %93 %97
|
||||
%99 = OpConvertFToU %77 %98
|
||||
%100 = OpAccessChain %94 %82 %45
|
||||
OpStore %100 %99
|
||||
OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
OpLoopMerge %104 %105 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
OpBranchConditional %109 %103 %104
|
||||
%103 = OpLabel
|
||||
%111 = OpAccessChain %110 %82 %73
|
||||
%112 = OpLoad %79 %111
|
||||
%114 = OpAccessChain %113 %90 %53
|
||||
%115 = OpLoad %78 %114
|
||||
%116 = OpVectorTimesScalar %79 %112 %115
|
||||
%117 = OpConvertFToU %13 %116
|
||||
%118 = OpCompositeExtract %10 %117 0
|
||||
%119 = OpCompositeExtract %10 %117 1
|
||||
%120 = OpCompositeExtract %10 %117 2
|
||||
%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
%122 = OpAccessChain %94 %82 %45
|
||||
%123 = OpLoad %77 %122
|
||||
%124 = OpIAdd %77 %123 %121
|
||||
%125 = OpAccessChain %94 %82 %45
|
||||
OpStore %125 %124
|
||||
OpBranch %105
|
||||
%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
%127 = OpIAdd %24 %126 %73
|
||||
OpStore %101 %127
|
||||
OpBranch %102
|
||||
%104 = OpLabel
|
||||
OpMemoryBarrier %40 %41
|
||||
OpControlBarrier %40 %40 %42
|
||||
-%128 = OpLoad %25 %27
|
||||
+%139 = OpLoad %25 %138
|
||||
-%130 = OpImageRead %38 %128 %129
|
||||
+%130 = OpImageRead %38 %139 %129
|
||||
%131 = OpCompositeExtract %24 %130 0
|
||||
%132 = OpConvertSToF %78 %131
|
||||
%133 = OpCompositeConstruct %79 %132 %132 %132
|
||||
%134 = OpAccessChain %110 %82 %73
|
||||
OpStore %134 %133
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%135 = OpFunctionCall %2 %6
|
||||
%136 = OpFunctionCall %2 %8
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
|
@ -1348,10 +1297,61 @@ TEST(DiffTest, LargeFunctionsSmallDiffsNoDebug) {
|
|||
OpStore %85 %83
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%135 = OpFunctionCall %2 %6
|
||||
%136 = OpFunctionCall %2 %8
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%101 = OpVariable %43 Function
|
||||
%92 = OpAccessChain %91 %90 %73
|
||||
%93 = OpLoad %87 %92
|
||||
%95 = OpAccessChain %94 %82 %45
|
||||
%96 = OpLoad %77 %95
|
||||
%97 = OpConvertUToF %86 %96
|
||||
%98 = OpMatrixTimesVector %86 %93 %97
|
||||
%99 = OpConvertFToU %77 %98
|
||||
%100 = OpAccessChain %94 %82 %45
|
||||
OpStore %100 %99
|
||||
OpStore %101 %45
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
OpLoopMerge %104 %105 None
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%107 = OpLoad %24 %101
|
||||
%109 = OpSLessThan %54 %107 %108
|
||||
OpBranchConditional %109 %103 %104
|
||||
%103 = OpLabel
|
||||
%111 = OpAccessChain %110 %82 %73
|
||||
%112 = OpLoad %79 %111
|
||||
%114 = OpAccessChain %113 %90 %53
|
||||
%115 = OpLoad %78 %114
|
||||
%116 = OpVectorTimesScalar %79 %112 %115
|
||||
%117 = OpConvertFToU %13 %116
|
||||
%118 = OpCompositeExtract %10 %117 0
|
||||
%119 = OpCompositeExtract %10 %117 1
|
||||
%120 = OpCompositeExtract %10 %117 2
|
||||
%121 = OpCompositeConstruct %77 %118 %119 %120 %16
|
||||
%122 = OpAccessChain %94 %82 %45
|
||||
%123 = OpLoad %77 %122
|
||||
%124 = OpIAdd %77 %123 %121
|
||||
%125 = OpAccessChain %94 %82 %45
|
||||
OpStore %125 %124
|
||||
OpBranch %105
|
||||
%105 = OpLabel
|
||||
%126 = OpLoad %24 %101
|
||||
%127 = OpIAdd %24 %126 %73
|
||||
OpStore %101 %127
|
||||
OpBranch %102
|
||||
%104 = OpLabel
|
||||
OpMemoryBarrier %40 %41
|
||||
OpControlBarrier %40 %40 %42
|
||||
-%128 = OpLoad %25 %27
|
||||
+%139 = OpLoad %25 %138
|
||||
-%130 = OpImageRead %38 %128 %129
|
||||
+%130 = OpImageRead %38 %139 %129
|
||||
%131 = OpCompositeExtract %24 %130 0
|
||||
%132 = OpConvertSToF %78 %131
|
||||
%133 = OpCompositeConstruct %79 %132 %132 %132
|
||||
%134 = OpAccessChain %110 %82 %73
|
||||
OpStore %134 %133
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
|
|
@ -167,6 +167,12 @@ TEST(DiffTest, MultipleDifferentEntryPoints) {
|
|||
%10 = OpVariable %17 Input
|
||||
%19 = OpTypePointer Output %16
|
||||
%9 = OpVariable %19 Output
|
||||
%2 = OpFunction %14 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %15 %7
|
||||
OpStore %4 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %14 None %3
|
||||
%6 = OpLabel
|
||||
%12 = OpLoad %15 %10
|
||||
|
@ -174,12 +180,6 @@ TEST(DiffTest, MultipleDifferentEntryPoints) {
|
|||
OpStore %9 %13
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%2 = OpFunction %14 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %15 %7
|
||||
OpStore %4 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
|
@ -307,6 +307,12 @@ TEST(DiffTest, MultipleDifferentEntryPointsNoDebug) {
|
|||
%10 = OpVariable %17 Input
|
||||
%19 = OpTypePointer Output %16
|
||||
%9 = OpVariable %19 Output
|
||||
%2 = OpFunction %14 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %15 %7
|
||||
OpStore %4 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %14 None %3
|
||||
%6 = OpLabel
|
||||
%12 = OpLoad %15 %10
|
||||
|
@ -314,12 +320,6 @@ TEST(DiffTest, MultipleDifferentEntryPointsNoDebug) {
|
|||
OpStore %9 %13
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%2 = OpFunction %14 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %15 %7
|
||||
OpStore %4 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
|
|
|
@ -151,6 +151,12 @@ TEST(DiffTest, MultipleSameEntryPoints) {
|
|||
%13 = OpVariable %7 Output
|
||||
%14 = OpVariable %9 Input
|
||||
%15 = OpVariable %9 Input
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
%16 = OpLabel
|
||||
%17 = OpLoad %6 %14
|
||||
|
@ -159,12 +165,6 @@ TEST(DiffTest, MultipleSameEntryPoints) {
|
|||
OpStore %13 %19
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrc, kDst, kDiff, options);
|
||||
|
@ -276,6 +276,12 @@ TEST(DiffTest, MultipleSameEntryPointsNoDebug) {
|
|||
%13 = OpVariable %7 Output
|
||||
%14 = OpVariable %9 Input
|
||||
%15 = OpVariable %9 Input
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
%16 = OpLabel
|
||||
%17 = OpLoad %6 %14
|
||||
|
@ -284,12 +290,6 @@ TEST(DiffTest, MultipleSameEntryPointsNoDebug) {
|
|||
OpStore %13 %19
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
Options options;
|
||||
DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
|
||||
|
@ -330,6 +330,12 @@ TEST(DiffTest, MultipleSameEntryPointsDumpIds) {
|
|||
%13 = OpVariable %7 Output
|
||||
%14 = OpVariable %9 Input
|
||||
%15 = OpVariable %9 Input
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
%16 = OpLabel
|
||||
%17 = OpLoad %6 %14
|
||||
|
@ -338,12 +344,6 @@ TEST(DiffTest, MultipleSameEntryPointsDumpIds) {
|
|||
OpStore %13 %19
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%11 = OpLoad %6 %10
|
||||
OpStore %8 %11
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
Src -> Dst
|
||||
1 -> 1 [ExtInstImport]
|
||||
2 -> 2 [TypeVoid]
|
||||
|
|
|
@ -257,15 +257,41 @@ TEST(DiffTest, SmallFunctionsSmallDiffs) {
|
|||
%25 = OpTypePointer Uniform %16
|
||||
%31 = OpConstant %20 1
|
||||
%36 = OpConstant %16 2
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%53 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %53
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
%46 = OpFunctionCall %2 %8
|
||||
%47 = OpFunctionCall %2 %10
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
-%32 = OpIAdd %16 %30 %31
|
||||
+%50 = OpISub %16 %30 %31
|
||||
-OpStore %29 %32
|
||||
+OpStore %29 %50
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
-%35 = OpISub %16 %34 %31
|
||||
+%51 = OpIAdd %16 %34 %31
|
||||
-OpStore %33 %35
|
||||
+OpStore %33 %51
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
|
@ -279,41 +305,15 @@ TEST(DiffTest, SmallFunctionsSmallDiffs) {
|
|||
+OpStore %40 %52
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
-%35 = OpISub %16 %34 %31
|
||||
+%51 = OpIAdd %16 %34 %31
|
||||
-OpStore %33 %35
|
||||
+OpStore %33 %51
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
-%32 = OpIAdd %16 %30 %31
|
||||
+%50 = OpISub %16 %30 %31
|
||||
-OpStore %29 %32
|
||||
+OpStore %29 %50
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
%46 = OpFunctionCall %2 %8
|
||||
%47 = OpFunctionCall %2 %10
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%53 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %53
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
@ -518,15 +518,39 @@ TEST(DiffTest, SmallFunctionsSmallDiffsNoDebug) {
|
|||
%25 = OpTypePointer Uniform %16
|
||||
%31 = OpConstant %20 1
|
||||
%36 = OpConstant %16 2
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%51 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %51
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
-%46 = OpFunctionCall %2 %8
|
||||
+%46 = OpFunctionCall %2 %10
|
||||
-%47 = OpFunctionCall %2 %10
|
||||
+%47 = OpFunctionCall %2 %8
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
%32 = OpIAdd %16 %30 %31
|
||||
OpStore %29 %32
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
%35 = OpISub %16 %34 %31
|
||||
OpStore %33 %35
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
|
@ -540,39 +564,15 @@ TEST(DiffTest, SmallFunctionsSmallDiffsNoDebug) {
|
|||
+OpStore %40 %50
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
%35 = OpISub %16 %34 %31
|
||||
OpStore %33 %35
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
%32 = OpIAdd %16 %30 %31
|
||||
OpStore %29 %32
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
-%46 = OpFunctionCall %2 %8
|
||||
+%46 = OpFunctionCall %2 %10
|
||||
-%47 = OpFunctionCall %2 %10
|
||||
+%47 = OpFunctionCall %2 %8
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%51 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %51
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
)";
|
||||
|
@ -627,15 +627,41 @@ TEST(DiffTest, SmallFunctionsSmallDiffsDumpIds) {
|
|||
%25 = OpTypePointer Uniform %16
|
||||
%31 = OpConstant %20 1
|
||||
%36 = OpConstant %16 2
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%53 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %53
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
%46 = OpFunctionCall %2 %8
|
||||
%47 = OpFunctionCall %2 %10
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
-%32 = OpIAdd %16 %30 %31
|
||||
+%50 = OpISub %16 %30 %31
|
||||
-OpStore %29 %32
|
||||
+OpStore %29 %50
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
-%35 = OpISub %16 %34 %31
|
||||
+%51 = OpIAdd %16 %34 %31
|
||||
-OpStore %33 %35
|
||||
+OpStore %33 %51
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%12 = OpFunction %2 None %3
|
||||
|
@ -649,41 +675,15 @@ TEST(DiffTest, SmallFunctionsSmallDiffsDumpIds) {
|
|||
+OpStore %40 %52
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%10 = OpFunction %2 None %3
|
||||
%11 = OpLabel
|
||||
%33 = OpAccessChain %25 %19 %21
|
||||
%34 = OpLoad %16 %33
|
||||
-%35 = OpISub %16 %34 %31
|
||||
+%51 = OpIAdd %16 %34 %31
|
||||
-OpStore %33 %35
|
||||
+OpStore %33 %51
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%8 = OpFunction %2 None %3
|
||||
%9 = OpLabel
|
||||
%29 = OpAccessChain %25 %19 %21
|
||||
%30 = OpLoad %16 %29
|
||||
-%32 = OpIAdd %16 %30 %31
|
||||
+%50 = OpISub %16 %30 %31
|
||||
-OpStore %29 %32
|
||||
+OpStore %29 %50
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%6 = OpFunction %2 None %3
|
||||
%7 = OpLabel
|
||||
%26 = OpAccessChain %25 %24 %21
|
||||
%27 = OpLoad %16 %26
|
||||
%28 = OpAccessChain %25 %19 %21
|
||||
OpStore %28 %27
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%4 = OpFunction %2 None %3
|
||||
%5 = OpLabel
|
||||
%45 = OpFunctionCall %2 %6
|
||||
%46 = OpFunctionCall %2 %8
|
||||
%47 = OpFunctionCall %2 %10
|
||||
%48 = OpFunctionCall %2 %12
|
||||
%49 = OpFunctionCall %2 %14
|
||||
%14 = OpFunction %2 None %3
|
||||
%15 = OpLabel
|
||||
%41 = OpAccessChain %25 %19 %21
|
||||
%42 = OpLoad %16 %41
|
||||
-%43 = OpUDiv %16 %42 %36
|
||||
+%53 = OpIAdd %16 %42 %36
|
||||
%44 = OpAccessChain %25 %19 %21
|
||||
-OpStore %44 %43
|
||||
+OpStore %44 %53
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
Src -> Dst
|
||||
|
|
|
@ -220,104 +220,104 @@ TEST(LCSTest, WithDuplicates) {
|
|||
VerifyMatch(src, dst, 6);
|
||||
}
|
||||
|
||||
const std::string large_lcs_src_str =
|
||||
"GUJwrJSlkKJXxCVIAxlVgnUyOrdyRyFtlZwWMmFhYGfkFTNnhiBmClgHyrcXMVwfrRxNUfQk"
|
||||
"qaoGvCbPZHAzXsaZpXHPfJxOMCUtRDmIQpfiXKbHQbhTfPqhxBDWvmTQAqwsWTLajZYtMUnf"
|
||||
"hNNCfkuAXkZsaebwEbIZOxTDZsqSMUfCMoGeKJGVSNFgLTiBMbdvchHGfFRkHKcYCDjBfIcj"
|
||||
"todPnvDjzQYWBcvIfVvyBzHikrwpDORaGEZLhmyztIFCLJOqeLhOzERYmVqzlsoUzruTXTXq"
|
||||
"DLTxQRakOCMRrgRzCDTXfwwfDcKMBVnxRZemjcwcEsOVxwtwdBCWJycsDcZKlvrCvZaenKlv"
|
||||
"vyByDQeLdxAyBnPkIMQlMQwqjUfRLybeoaOanlbFkpTPPZdHelQrIvucTHzMpWWQTbuANwvN"
|
||||
"OVhCGGoIcGNDpfIsaBexlMMdHsxMGerTngmjpdPeQQJHfvKZkdYqAzrtDohqtDsaFMxQViVQ"
|
||||
"YszDVgyoSHZdOXAvXkJidojLvGZOzhRajVPhWDwKuGqdaympELxHsrXAJYufdCPwJdGJfWqq"
|
||||
"yvTWpcrFHOIuCEmNLnSCDsxQGRVDwyCykBJazhApfCnrOadnafvqfVuFqEXMSrYbHTfTnzbz"
|
||||
"MhISyOtMUITaurCXvanCbuOXBhHyCjOhVbxnMvhlPmZBMQgEHCghtAJVMXGPNRtszVZlPxVl"
|
||||
"QIPTBnPUPejlyZGPqeICyNngdQGkvKbIoWlTLBtVhMdBeUMozNlKQTIPYBeImVcMdLafuxUf"
|
||||
"TIXysmcTrUTcspOSKBxhdhLwiRnREGFWJTfUKsgGOAQeYojXdrqsGjMJfiKalyoiqrgLnlij"
|
||||
"CtOapoxDGVOOBalNYGzCtBlxbvaAzxipGnJpOEbmXcpeoIsAdxspKBzBDgoPVxnuRBUwmTSr"
|
||||
"CRpWhxikgUYQVCwalLUIeBPRyhhsECGCXJmGDZSCIUaBwROkigzdeVPOXhgCGBEprWtNdYfL"
|
||||
"tOUYJHQXxiIJgSGmWntezJFpNQoTPbRRYAGhtYvAechvBcYWocLkYFxsDAuszvQNLXdhmAHw"
|
||||
"DErcjbtCdQllnKcDADVNWVezljjLrAuyGHetINMgAvJZwOEYakihYVUbZGCsHEufluLNyNHy"
|
||||
"gqtSTSFFjBHiIqQejTPWybLdpWNwZrWvIWnlzUcGNQPEYHVPCbteWknjAnWrdTBeCbHUDBoK"
|
||||
"aHvDStmpNRGIjvlumiZTbdZNAzUeSFnFChCsSExwXeEfDJfjyOoSBofHzJqJErvHLNyUJTjX"
|
||||
"qmtgKPpMKohUPBMhtCteQFcNEpWrUVGbibMOpvBwdiWYXNissArpSasVJFgDzrqTyGkerTMX"
|
||||
"gcrzFUGFZRhNdekaJeKYPogsofJaRsUQmIRyYdkrxKeMgLPpwOfSKJOqzXDoeHljTzhOwEVy"
|
||||
"krOEnACFrWhufajsMitjOWdLOHHchQDddGPzxknEgdwmZepKDvRZGCuPqzeQkjOPqUBKpKLJ"
|
||||
"eKieSsRXkaqxSPGajfvPKmwFWdLByEcLgvrmteazgFjmMGrLYqRRxzUOfOCokenqHVYstBHf"
|
||||
"AwsWsqPTvqsRJUfGGTaYiylZMGbQqTzINhFHvdlRQvvYKBcuAHdBeKlHSxVrSsEKbcAvnIcf"
|
||||
"xzdVDdwQPHMCHeZZRpGHWvKzgTGzSTbYTeOPyKvvYWmQToTpsjAtKUJUjcEHWhmdBLDTBMHJ"
|
||||
"ivBXcLGtCsumNNVFyGbVviGmqHTdyBlkneibXBesKJGOUzOtIwXCPJggqBekSzNQYkALlItk"
|
||||
"cbEhbdXAIKVHYpInLwxXalKZrkrpxtfuagqMGmRJnJbFQaEoYMoqPsxZpocddPXXPyvxVkaF"
|
||||
"qdKISejWDhBImnEEOPDcyWTubbfVfwUztciaFJcsPLhgYVfhqlOfoNjKbmTFptFttYuyBrUI"
|
||||
"zzmZypOqrjQHTGFwlHStpIwxPtMvtsEDpsmWIgwzYgwmdpbMOnfElZMYpVIcvzSWejeJcdUB"
|
||||
"QUoBRUmGQVVWvEDseuozrDjgdXFScPwwsgaUPwSzScfBNrkpmEFDSZLKfNjMqvOmUtocUkbo"
|
||||
"VGFEKgGLbNruwLgXHTloWDrnqymPVAtzjWPutonIsMDPeeCmTjYWAFXcyTAlBeiJTIRkZxiM"
|
||||
"kLjMnAflSNJzmZkatXkYiPEMYSmzHbLKEizHbEjQOxBDzpRHiFjhedqiyMiUMvThjaRFmwll"
|
||||
"aMGgwKBIKepwyoEdnuhtzJzboiNEAFKiqiWxxmkRFRoTiFWXLPAWLuzSCrajgkQhDxAQDqyM"
|
||||
"VwZlhZicQLEDYYisEalesDWZAYzcvENuHUwRutIsGgsdoYwOZiURhcgdbTGWBNqhrFjvTQCj"
|
||||
"VlTPNlRdRLaaqzUBBwbdtyXFkCBUYYMbmRrkFxfxbCqkgZNGyHPKLkOPnezfVTRmRQgCgHbx"
|
||||
"wcZlInVOwmFePnSIbThMJosimzkhfuiqYEpwHQiemqsSDNNdbNhBLzbsPZBJZujSHJGtYKGb"
|
||||
"HaAYGJZxBumsKUrATwPuqXFLfwNyImLQbchBKiJAYRZhkcrKCHXBEGYyBhBGvSqvabcRUrfq"
|
||||
"AbPiMzjHAehGYjDEmxAnYLyoSFdeWVrfJUCuYZPluhXEBuyUpKaRXDKXeiCvGidpvATwMbcz"
|
||||
"DZpzxrhTZYyrFORFQWTbPLCBjMKMhlRMFEiarDgGPttjmkrQVlujztMSkxXffXFNqLWOLThI"
|
||||
"KBoyMHoFTEPCdUAZjLTifAdjjUehyDLEGKlRTFoLpjalziRSUjZfRYbNzhiHgTHowMMkKTwE"
|
||||
"ZgnqiirMtnNpaBJqhcIVrWXPpcPWZfRpsPstHleFJDZYAsxYhOREVbFtebXTZRAIjGgWeoiN"
|
||||
"qPLCCAVadqmUrjOcqIbdCTpcDRWuDVbHrZOQRPhqbyvOWwxAWJphjLiDgoAybcjzgfVktPlj"
|
||||
"kNBCjelpuQfnYsiTgPpCNKYtOrxGaLEEtAuLdGdDsONHNhSn";
|
||||
const std::string large_lcs_dst_str =
|
||||
"KzitfifORCbGhfNEbnbObUdFLLaAsLOpMkOeKupjCoatzqfHBkNJfSgqSMYouswfNMnoQngK"
|
||||
"jWwyPKmEnoZWyPBUdQRmKUNudUclueKXKQefUdXWUyyqtumzsFKznrLVLwfvPZpLChNYrrHK"
|
||||
"AtpfOuVHiUKyeRCrktJAhkyFKmPWrASEMvBLNOzuGlvinZjvZUUXazNEkyMPiOLdqXvCIroC"
|
||||
"MeWsvjHShlLhDwLZrVlpYBnDJmILcsNFDSoaLWOKNNkNGBgNBvVjPCJXAuKfsrKZhYcdEpxK"
|
||||
"UihiRkYvMiLyOUvaqBMklLDwEhvQBfCXHSRoqsLsSCzLZQhIYMhBapvHaPbDoRrHoJXZsNXc"
|
||||
"rxZYCrOMIzYcVPwDCFiHBFnPNTTeAeKEMGeVUeCaAeuWZmngyPWlQBcgWumSUIfbhjVYdnpV"
|
||||
"hRSJXrIoFZubBXfNOMhilAkVPixrhILZKgDoFTvytPFPfBLMnbhSOBmLWCbJsLQxrCrMAlOw"
|
||||
"RmfSQyGhrjhzYVqFSBHeoQBagFwyxIjcHFZngntpVHbSwqhwHeMnWSsISPljTxSNXfCxLebW"
|
||||
"GhMdlphtJbdvhEcjNpwPCFqhdquxCyOxkjsDUPNgjpDcpIMhMwMclNhfESTrroJaoyeGQclV"
|
||||
"gonnhuQRmXcBwcsWeLqjNngZOlyMyfeQBwnwMVJEvGqknDyzSApniRTPgJpFoDkJJhXQFuFB"
|
||||
"VqhuEPMRGCeTDOSEFmXeIHOnDxaJacvnmORwVpmrRhGjDpUCkuODNPdZMdupYExDEDnDLdNF"
|
||||
"iObKBaVWpGVMKdgNLgsNxcpypBPPKKoaajeSGPZQJWSOKrkLjiFexYVmUGxJnbTNsCXXLfZp"
|
||||
"jfxQAEVYvqKehBzMsVHVGWmTshWFAoCNDkNppzzjHBZWckrzSTANICioCJSpLwPwQvtXVxst"
|
||||
"nTRBAboPFREEUFazibpFesCsjzUOnECwoPCOFiwGORlIZVLpUkJyhYXCENmzTBLVigOFuCWO"
|
||||
"IiXBYmiMtsxnUdoqSTTGyEFFrQsNAjcDdOKDtHwlANWoUVwiJCMCQFILdGqzEePuSXFbOEOz"
|
||||
"dLlEnTJbKRSTfAFToOZNtDXTfFgvQiefAKbSUWUXFcpCjRYCBNXCCcLMjjuUDXErpiNsRuIx"
|
||||
"mgHsrObTEXcnmjdqxTGhTjTeYizNnkrJRhNQIqDXmZMwArBccnixpcuiGOOexjgkpcEyGAnz"
|
||||
"UbgiBfflTUyJfZeFFLrZVueFkSRosebnnwAnakIrywTGByhQKWvmNQJsWQezqLhHQzXnEpeD"
|
||||
"rFRTSQSpVxPzSeEzfWYzfpcenxsUyzOMLxhNEhfcuprDtqubsXehuqKqZlLQeSclvoGjuKJK"
|
||||
"XoWrazsgjXXnkWHdqFESZdMGDYldyYdbpSZcgBPgEKLWZHfBirNPLUadmajYkiEzmGuWGELB"
|
||||
"WLiSrMdaGSbptKmgYVqMGcQaaATStiZYteGAPxSEBHuAzzjlRHYsrdDkaGNXmzRGoalJMiCC"
|
||||
"GMtWSDMhgvRSEgKnywbRgnqWXFlwrhXbbvcgLGtWSuKQBiqIlWkfPMozOTWgVoLHavDJGRYI"
|
||||
"YerrmZnTMtuuxmZALWakfzUbksTwoetqkOiRPGqGZepcVXHoZyOaaaijjZWQLlIhYwiQNbfc"
|
||||
"KCwhhFaMQBoaCnOecJEdKzdsMPFEYQuJNPYiiNtsYxaWBRuWjlLqGokHMNtyTQfSJKbgGdol"
|
||||
"fWlOZdupouQMfUWXIYHzyJHefMDnqxxasDxtgArvDqtwjDBaVEMACPkLFpiDOoKCHqkWVizh"
|
||||
"lKqbOHpsPKkhjRQRNGYRYEfxtBjYvlCvHBNUwVuIwDJYMqHxEFtwdLqYWvjdOfQmNiviDfUq"
|
||||
"pbucbNwjNQfMYgwUuPnQWIPOlqHcbjtuDXvTzLtkdBQanJbrmLSyFqSapZCSPMDOrxWVYzyO"
|
||||
"lwDTTJFmKxoyfPunadkHcrcSQaQsAbrQtbhqwSTXGTPURYTCbNozjAVwbmcyVxIbZudBZWYm"
|
||||
"rnSDyelGCRRWYtrUxvOVWlTLHHdYuAmVMGnGbHscbjmjmAzmYLaCxNNwhmMYdExKvySxuYpE"
|
||||
"rVGwfqMngBCHnZodotNaNJZiNRFWubuPDfiywXPiyVWoQMeOlSuWmpilLTIFOvfpjmJTgrWa"
|
||||
"dgoxYeyPyOaglOvZVGdFOBSeqEcGXBwjoeUAXqkpvOxEpSXhmklKZydTvRVYVvfQdRNNDkCT"
|
||||
"dLNfcZCFQbZORdcDOhwotoyccrSbWvlqYMoiAYeEpDzZTvkamapzZMmCpEutZFCcHBWGIIkr"
|
||||
"urwDNHrobaErPpclyEegLJDtkfUWSNWZosWSbBGAHIvJsFNUlJXbnkSVycLkOVQVcNcUtiBy"
|
||||
"djLDIFsycbPBEWaMvCbntNtJlOeCttvXypGnHAQFnFSiXFWWqonWuVIKmVPpKXuJtFguXCWC"
|
||||
"rNExYYvxLGEmuZJLJDjHgjlQyOzeieCpizJxkrdqKCgomyEkvsyVYSsLeyLvOZQrrgEJgRFK"
|
||||
"CjYtoOfluNrLdRMTRkQXmAiMRFwloYECpXCReAMxOkNiwCtutsrqWoMHsrogRqPoUCueonvW"
|
||||
"MTwmkAkajfGJkhnQidwpwIMEttQkzIMOPvvyWZHpqkMHWlNTeSKibfRfwDyxveKENZhtlPwP"
|
||||
"dfAjwegjRcavtFnkkTNVYdCdCrgdUvzsIcqmUjwGmVvuuQvjVrWWIDBmAzQtiZPYvCOEWjce"
|
||||
"rWzeqVKeiYTJBOedmQCVidOgUIEjfRnbGvUbctYxfRybJkdmeAkLZQMRMGPOnsPbFswXAoCK"
|
||||
"IxWGwohoPpEJxslbqHFKSwknxTmrDCITRZWEDkGQeucPxHBdYkduwbYhKnoxCKhgjBFiFawC"
|
||||
"QtgTDldTQmlOsBiGLquMjuecAbrUJJvNtXbFNGjWxaZPimSRXUJWgRbydpsczOqSFIeEtuKA"
|
||||
"ZpRhmLtPdVNKdSDQZeeImUFmUwXApRTUNHItyvFyJtNtn";
|
||||
|
||||
TEST(LCSTest, Large) {
|
||||
const std::string src_str =
|
||||
"GUJwrJSlkKJXxCVIAxlVgnUyOrdyRyFtlZwWMmFhYGfkFTNnhiBmClgHyrcXMVwfrRxNUfQk"
|
||||
"qaoGvCbPZHAzXsaZpXHPfJxOMCUtRDmIQpfiXKbHQbhTfPqhxBDWvmTQAqwsWTLajZYtMUnf"
|
||||
"hNNCfkuAXkZsaebwEbIZOxTDZsqSMUfCMoGeKJGVSNFgLTiBMbdvchHGfFRkHKcYCDjBfIcj"
|
||||
"todPnvDjzQYWBcvIfVvyBzHikrwpDORaGEZLhmyztIFCLJOqeLhOzERYmVqzlsoUzruTXTXq"
|
||||
"DLTxQRakOCMRrgRzCDTXfwwfDcKMBVnxRZemjcwcEsOVxwtwdBCWJycsDcZKlvrCvZaenKlv"
|
||||
"vyByDQeLdxAyBnPkIMQlMQwqjUfRLybeoaOanlbFkpTPPZdHelQrIvucTHzMpWWQTbuANwvN"
|
||||
"OVhCGGoIcGNDpfIsaBexlMMdHsxMGerTngmjpdPeQQJHfvKZkdYqAzrtDohqtDsaFMxQViVQ"
|
||||
"YszDVgyoSHZdOXAvXkJidojLvGZOzhRajVPhWDwKuGqdaympELxHsrXAJYufdCPwJdGJfWqq"
|
||||
"yvTWpcrFHOIuCEmNLnSCDsxQGRVDwyCykBJazhApfCnrOadnafvqfVuFqEXMSrYbHTfTnzbz"
|
||||
"MhISyOtMUITaurCXvanCbuOXBhHyCjOhVbxnMvhlPmZBMQgEHCghtAJVMXGPNRtszVZlPxVl"
|
||||
"QIPTBnPUPejlyZGPqeICyNngdQGkvKbIoWlTLBtVhMdBeUMozNlKQTIPYBeImVcMdLafuxUf"
|
||||
"TIXysmcTrUTcspOSKBxhdhLwiRnREGFWJTfUKsgGOAQeYojXdrqsGjMJfiKalyoiqrgLnlij"
|
||||
"CtOapoxDGVOOBalNYGzCtBlxbvaAzxipGnJpOEbmXcpeoIsAdxspKBzBDgoPVxnuRBUwmTSr"
|
||||
"CRpWhxikgUYQVCwalLUIeBPRyhhsECGCXJmGDZSCIUaBwROkigzdeVPOXhgCGBEprWtNdYfL"
|
||||
"tOUYJHQXxiIJgSGmWntezJFpNQoTPbRRYAGhtYvAechvBcYWocLkYFxsDAuszvQNLXdhmAHw"
|
||||
"DErcjbtCdQllnKcDADVNWVezljjLrAuyGHetINMgAvJZwOEYakihYVUbZGCsHEufluLNyNHy"
|
||||
"gqtSTSFFjBHiIqQejTPWybLdpWNwZrWvIWnlzUcGNQPEYHVPCbteWknjAnWrdTBeCbHUDBoK"
|
||||
"aHvDStmpNRGIjvlumiZTbdZNAzUeSFnFChCsSExwXeEfDJfjyOoSBofHzJqJErvHLNyUJTjX"
|
||||
"qmtgKPpMKohUPBMhtCteQFcNEpWrUVGbibMOpvBwdiWYXNissArpSasVJFgDzrqTyGkerTMX"
|
||||
"gcrzFUGFZRhNdekaJeKYPogsofJaRsUQmIRyYdkrxKeMgLPpwOfSKJOqzXDoeHljTzhOwEVy"
|
||||
"krOEnACFrWhufajsMitjOWdLOHHchQDddGPzxknEgdwmZepKDvRZGCuPqzeQkjOPqUBKpKLJ"
|
||||
"eKieSsRXkaqxSPGajfvPKmwFWdLByEcLgvrmteazgFjmMGrLYqRRxzUOfOCokenqHVYstBHf"
|
||||
"AwsWsqPTvqsRJUfGGTaYiylZMGbQqTzINhFHvdlRQvvYKBcuAHdBeKlHSxVrSsEKbcAvnIcf"
|
||||
"xzdVDdwQPHMCHeZZRpGHWvKzgTGzSTbYTeOPyKvvYWmQToTpsjAtKUJUjcEHWhmdBLDTBMHJ"
|
||||
"ivBXcLGtCsumNNVFyGbVviGmqHTdyBlkneibXBesKJGOUzOtIwXCPJggqBekSzNQYkALlItk"
|
||||
"cbEhbdXAIKVHYpInLwxXalKZrkrpxtfuagqMGmRJnJbFQaEoYMoqPsxZpocddPXXPyvxVkaF"
|
||||
"qdKISejWDhBImnEEOPDcyWTubbfVfwUztciaFJcsPLhgYVfhqlOfoNjKbmTFptFttYuyBrUI"
|
||||
"zzmZypOqrjQHTGFwlHStpIwxPtMvtsEDpsmWIgwzYgwmdpbMOnfElZMYpVIcvzSWejeJcdUB"
|
||||
"QUoBRUmGQVVWvEDseuozrDjgdXFScPwwsgaUPwSzScfBNrkpmEFDSZLKfNjMqvOmUtocUkbo"
|
||||
"VGFEKgGLbNruwLgXHTloWDrnqymPVAtzjWPutonIsMDPeeCmTjYWAFXcyTAlBeiJTIRkZxiM"
|
||||
"kLjMnAflSNJzmZkatXkYiPEMYSmzHbLKEizHbEjQOxBDzpRHiFjhedqiyMiUMvThjaRFmwll"
|
||||
"aMGgwKBIKepwyoEdnuhtzJzboiNEAFKiqiWxxmkRFRoTiFWXLPAWLuzSCrajgkQhDxAQDqyM"
|
||||
"VwZlhZicQLEDYYisEalesDWZAYzcvENuHUwRutIsGgsdoYwOZiURhcgdbTGWBNqhrFjvTQCj"
|
||||
"VlTPNlRdRLaaqzUBBwbdtyXFkCBUYYMbmRrkFxfxbCqkgZNGyHPKLkOPnezfVTRmRQgCgHbx"
|
||||
"wcZlInVOwmFePnSIbThMJosimzkhfuiqYEpwHQiemqsSDNNdbNhBLzbsPZBJZujSHJGtYKGb"
|
||||
"HaAYGJZxBumsKUrATwPuqXFLfwNyImLQbchBKiJAYRZhkcrKCHXBEGYyBhBGvSqvabcRUrfq"
|
||||
"AbPiMzjHAehGYjDEmxAnYLyoSFdeWVrfJUCuYZPluhXEBuyUpKaRXDKXeiCvGidpvATwMbcz"
|
||||
"DZpzxrhTZYyrFORFQWTbPLCBjMKMhlRMFEiarDgGPttjmkrQVlujztMSkxXffXFNqLWOLThI"
|
||||
"KBoyMHoFTEPCdUAZjLTifAdjjUehyDLEGKlRTFoLpjalziRSUjZfRYbNzhiHgTHowMMkKTwE"
|
||||
"ZgnqiirMtnNpaBJqhcIVrWXPpcPWZfRpsPstHleFJDZYAsxYhOREVbFtebXTZRAIjGgWeoiN"
|
||||
"qPLCCAVadqmUrjOcqIbdCTpcDRWuDVbHrZOQRPhqbyvOWwxAWJphjLiDgoAybcjzgfVktPlj"
|
||||
"kNBCjelpuQfnYsiTgPpCNKYtOrxGaLEEtAuLdGdDsONHNhSn";
|
||||
const std::string dst_str =
|
||||
"KzitfifORCbGhfNEbnbObUdFLLaAsLOpMkOeKupjCoatzqfHBkNJfSgqSMYouswfNMnoQngK"
|
||||
"jWwyPKmEnoZWyPBUdQRmKUNudUclueKXKQefUdXWUyyqtumzsFKznrLVLwfvPZpLChNYrrHK"
|
||||
"AtpfOuVHiUKyeRCrktJAhkyFKmPWrASEMvBLNOzuGlvinZjvZUUXazNEkyMPiOLdqXvCIroC"
|
||||
"MeWsvjHShlLhDwLZrVlpYBnDJmILcsNFDSoaLWOKNNkNGBgNBvVjPCJXAuKfsrKZhYcdEpxK"
|
||||
"UihiRkYvMiLyOUvaqBMklLDwEhvQBfCXHSRoqsLsSCzLZQhIYMhBapvHaPbDoRrHoJXZsNXc"
|
||||
"rxZYCrOMIzYcVPwDCFiHBFnPNTTeAeKEMGeVUeCaAeuWZmngyPWlQBcgWumSUIfbhjVYdnpV"
|
||||
"hRSJXrIoFZubBXfNOMhilAkVPixrhILZKgDoFTvytPFPfBLMnbhSOBmLWCbJsLQxrCrMAlOw"
|
||||
"RmfSQyGhrjhzYVqFSBHeoQBagFwyxIjcHFZngntpVHbSwqhwHeMnWSsISPljTxSNXfCxLebW"
|
||||
"GhMdlphtJbdvhEcjNpwPCFqhdquxCyOxkjsDUPNgjpDcpIMhMwMclNhfESTrroJaoyeGQclV"
|
||||
"gonnhuQRmXcBwcsWeLqjNngZOlyMyfeQBwnwMVJEvGqknDyzSApniRTPgJpFoDkJJhXQFuFB"
|
||||
"VqhuEPMRGCeTDOSEFmXeIHOnDxaJacvnmORwVpmrRhGjDpUCkuODNPdZMdupYExDEDnDLdNF"
|
||||
"iObKBaVWpGVMKdgNLgsNxcpypBPPKKoaajeSGPZQJWSOKrkLjiFexYVmUGxJnbTNsCXXLfZp"
|
||||
"jfxQAEVYvqKehBzMsVHVGWmTshWFAoCNDkNppzzjHBZWckrzSTANICioCJSpLwPwQvtXVxst"
|
||||
"nTRBAboPFREEUFazibpFesCsjzUOnECwoPCOFiwGORlIZVLpUkJyhYXCENmzTBLVigOFuCWO"
|
||||
"IiXBYmiMtsxnUdoqSTTGyEFFrQsNAjcDdOKDtHwlANWoUVwiJCMCQFILdGqzEePuSXFbOEOz"
|
||||
"dLlEnTJbKRSTfAFToOZNtDXTfFgvQiefAKbSUWUXFcpCjRYCBNXCCcLMjjuUDXErpiNsRuIx"
|
||||
"mgHsrObTEXcnmjdqxTGhTjTeYizNnkrJRhNQIqDXmZMwArBccnixpcuiGOOexjgkpcEyGAnz"
|
||||
"UbgiBfflTUyJfZeFFLrZVueFkSRosebnnwAnakIrywTGByhQKWvmNQJsWQezqLhHQzXnEpeD"
|
||||
"rFRTSQSpVxPzSeEzfWYzfpcenxsUyzOMLxhNEhfcuprDtqubsXehuqKqZlLQeSclvoGjuKJK"
|
||||
"XoWrazsgjXXnkWHdqFESZdMGDYldyYdbpSZcgBPgEKLWZHfBirNPLUadmajYkiEzmGuWGELB"
|
||||
"WLiSrMdaGSbptKmgYVqMGcQaaATStiZYteGAPxSEBHuAzzjlRHYsrdDkaGNXmzRGoalJMiCC"
|
||||
"GMtWSDMhgvRSEgKnywbRgnqWXFlwrhXbbvcgLGtWSuKQBiqIlWkfPMozOTWgVoLHavDJGRYI"
|
||||
"YerrmZnTMtuuxmZALWakfzUbksTwoetqkOiRPGqGZepcVXHoZyOaaaijjZWQLlIhYwiQNbfc"
|
||||
"KCwhhFaMQBoaCnOecJEdKzdsMPFEYQuJNPYiiNtsYxaWBRuWjlLqGokHMNtyTQfSJKbgGdol"
|
||||
"fWlOZdupouQMfUWXIYHzyJHefMDnqxxasDxtgArvDqtwjDBaVEMACPkLFpiDOoKCHqkWVizh"
|
||||
"lKqbOHpsPKkhjRQRNGYRYEfxtBjYvlCvHBNUwVuIwDJYMqHxEFtwdLqYWvjdOfQmNiviDfUq"
|
||||
"pbucbNwjNQfMYgwUuPnQWIPOlqHcbjtuDXvTzLtkdBQanJbrmLSyFqSapZCSPMDOrxWVYzyO"
|
||||
"lwDTTJFmKxoyfPunadkHcrcSQaQsAbrQtbhqwSTXGTPURYTCbNozjAVwbmcyVxIbZudBZWYm"
|
||||
"rnSDyelGCRRWYtrUxvOVWlTLHHdYuAmVMGnGbHscbjmjmAzmYLaCxNNwhmMYdExKvySxuYpE"
|
||||
"rVGwfqMngBCHnZodotNaNJZiNRFWubuPDfiywXPiyVWoQMeOlSuWmpilLTIFOvfpjmJTgrWa"
|
||||
"dgoxYeyPyOaglOvZVGdFOBSeqEcGXBwjoeUAXqkpvOxEpSXhmklKZydTvRVYVvfQdRNNDkCT"
|
||||
"dLNfcZCFQbZORdcDOhwotoyccrSbWvlqYMoiAYeEpDzZTvkamapzZMmCpEutZFCcHBWGIIkr"
|
||||
"urwDNHrobaErPpclyEegLJDtkfUWSNWZosWSbBGAHIvJsFNUlJXbnkSVycLkOVQVcNcUtiBy"
|
||||
"djLDIFsycbPBEWaMvCbntNtJlOeCttvXypGnHAQFnFSiXFWWqonWuVIKmVPpKXuJtFguXCWC"
|
||||
"rNExYYvxLGEmuZJLJDjHgjlQyOzeieCpizJxkrdqKCgomyEkvsyVYSsLeyLvOZQrrgEJgRFK"
|
||||
"CjYtoOfluNrLdRMTRkQXmAiMRFwloYECpXCReAMxOkNiwCtutsrqWoMHsrogRqPoUCueonvW"
|
||||
"MTwmkAkajfGJkhnQidwpwIMEttQkzIMOPvvyWZHpqkMHWlNTeSKibfRfwDyxveKENZhtlPwP"
|
||||
"dfAjwegjRcavtFnkkTNVYdCdCrgdUvzsIcqmUjwGmVvuuQvjVrWWIDBmAzQtiZPYvCOEWjce"
|
||||
"rWzeqVKeiYTJBOedmQCVidOgUIEjfRnbGvUbctYxfRybJkdmeAkLZQMRMGPOnsPbFswXAoCK"
|
||||
"IxWGwohoPpEJxslbqHFKSwknxTmrDCITRZWEDkGQeucPxHBdYkduwbYhKnoxCKhgjBFiFawC"
|
||||
"QtgTDldTQmlOsBiGLquMjuecAbrUJJvNtXbFNGjWxaZPimSRXUJWgRbydpsczOqSFIeEtuKA"
|
||||
"ZpRhmLtPdVNKdSDQZeeImUFmUwXApRTUNHItyvFyJtNtn";
|
||||
|
||||
Sequence src;
|
||||
Sequence dst;
|
||||
|
||||
src.reserve(large_lcs_src_str.length());
|
||||
dst.reserve(large_lcs_dst_str.length());
|
||||
src.reserve(src_str.length());
|
||||
dst.reserve(dst_str.length());
|
||||
|
||||
for (char c : large_lcs_src_str) {
|
||||
for (char c : src_str) {
|
||||
src.push_back(c);
|
||||
}
|
||||
for (char c : large_lcs_dst_str) {
|
||||
for (char c : dst_str) {
|
||||
dst.push_back(c);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче