From 2bf78a94e007d3ca578a8cd47df9e7eb91666d49 Mon Sep 17 00:00:00 2001 From: nmzik Date: Thu, 17 Sep 2026 19:50:03 +0400 Subject: [PATCH] remove string wrappers --- src/common/file.cpp | 18 +- src/common/platform/sysWindowsFileIO.cpp | 4 +- src/common/stringUtils.h | 156 +- src/kernel/fileSystem.cpp | 6 +- src/libs/libAppContent.cpp | 10 +- src/libs/libSaveData.cpp | 2 +- src/loader/runtimeLinker.cpp | 15 +- src/loader/symbolDatabase.cpp | 6 +- src/main.cpp | 2 +- tests/shaderCfgTests.cpp | 2274 ++++++++++------------ 10 files changed, 1099 insertions(+), 1394 deletions(-) diff --git a/src/common/file.cpp b/src/common/file.cpp index 9b8be2998..c335190e7 100644 --- a/src/common/file.cpp +++ b/src/common/file.cpp @@ -251,8 +251,8 @@ void File::Printf(const char* format, ...) { bool File::IsDirectoryExisting(const std::filesystem::path& path) { auto path_str = PathToGenericString(path); - return SysFileIsDirectoryExisting( - Common::EndsWith(path_str, "/") ? Common::RemoveLast(path_str, 1) : path_str); + return SysFileIsDirectoryExisting(path_str.ends_with("/") ? Common::RemoveLast(path_str, 1) + : path_str); } bool File::IsFileExisting(const std::filesystem::path& name) { @@ -263,14 +263,14 @@ bool File::CreateDirectory( const std::filesystem::path& path) // @suppress("Member declaration not found") { auto path_str = PathToGenericString(path); - return SysFileCreateDirectory(Common::EndsWith(path_str, "/") ? Common::RemoveLast(path_str, 1) - : path_str); + return SysFileCreateDirectory(path_str.ends_with("/") ? Common::RemoveLast(path_str, 1) + : path_str); } bool File::DeleteDirectory(const std::filesystem::path& path) { auto path_str = PathToGenericString(path); - return SysFileDeleteDirectory(Common::EndsWith(path_str, "/") ? Common::RemoveLast(path_str, 1) - : path_str); + return SysFileDeleteDirectory(path_str.ends_with("/") ? Common::RemoveLast(path_str, 1) + : path_str); } bool File::CreateDirectories(const std::filesystem::path& path) { @@ -283,7 +283,7 @@ bool File::CreateDirectories(const std::filesystem::path& path) { for (uint32_t si = 0; si < list.size(); si++) { const std::string& s = list[si]; - if (si != 0 || Common::StartsWith(real_path, "/")) { + if (si != 0 || real_path.starts_with("/")) { p += "/"; } @@ -313,7 +313,7 @@ bool File::DeleteDirectories(const std::filesystem::path& path) { for (uint32_t si = 0; si < list.size(); si++) { const std::string& s = list[si]; - if (si != 0 || Common::StartsWith(real_path, "/")) { + if (si != 0 || real_path.starts_with("/")) { p += "/"; } @@ -478,7 +478,7 @@ std::vector File::FindFiles(const std::filesystem::path& path) { auto path_str = PathToGenericString(path); uint32_t len = static_cast(path_str.size()); - if (!Common::EndsWith(path_str, "/") && !Common::EndsWith(path_str, "\\")) { + if (!path_str.ends_with("/") && !path_str.ends_with("\\")) { len++; } diff --git a/src/common/platform/sysWindowsFileIO.cpp b/src/common/platform/sysWindowsFileIO.cpp index a7cbb81e2..6bd239260 100644 --- a/src/common/platform/sysWindowsFileIO.cpp +++ b/src/common/platform/sysWindowsFileIO.cpp @@ -481,7 +481,7 @@ bool SysFileSetLastAccessAndWriteTimeUtc(const std::filesystem::path& name, void SysFileFindFiles(const std::filesystem::path& path, std::vector& out) { std::string real_path = Common::ReplaceChar(Common::PathToGenericString(path), '\\', '/'); - if (!Common::EndsWith(real_path, "/")) { + if (!real_path.ends_with("/")) { real_path += "/"; } @@ -528,7 +528,7 @@ void SysFileFindFiles(const std::filesystem::path& path, std::vector& out) { std::string real_path = Common::ReplaceChar(Common::PathToGenericString(path), '\\', '/'); - if (!Common::EndsWith(real_path, "/")) { + if (!real_path.ends_with("/")) { real_path += "/"; } diff --git a/src/common/stringUtils.h b/src/common/stringUtils.h index 80fc63217..5f6deaf97 100644 --- a/src/common/stringUtils.h +++ b/src/common/stringUtils.h @@ -18,8 +18,6 @@ namespace Common { -constexpr uint32_t FIND_INVALID_INDEX = static_cast(-1); - inline std::string PathToString(const std::filesystem::path& path) { #if defined(__cpp_char8_t) auto u8 = path.u8string(); @@ -38,10 +36,6 @@ inline std::string PathToGenericString(const std::filesystem::path& path) { #endif } -inline bool IsSpace(char c) { - return std::isspace(static_cast(c)) != 0; -} - inline bool EqualNoCase(std::string_view lhs, std::string_view rhs) { if (lhs.size() != rhs.size()) { return false; @@ -63,65 +57,6 @@ inline std::string ToLower(std::string_view text) { return ret; } -inline bool ContainsStr(std::string_view text, std::string_view needle) { - return text.find(needle) != std::string_view::npos; -} - -inline bool StartsWith(std::string_view text, std::string_view prefix) { - return text.starts_with(prefix); -} - -inline bool StartsWith(std::string_view text, char prefix) { - return !text.empty() && text.front() == prefix; -} - -inline bool EndsWith(std::string_view text, std::string_view suffix) { - return text.ends_with(suffix); -} - -inline bool EndsWith(std::string_view text, char suffix) { - return !text.empty() && text.back() == suffix; -} - -inline bool ContainsChar(std::string_view text, char needle) { - return text.find(needle) != std::string_view::npos; -} - -inline bool IndexValid(std::string_view text, uint32_t index) { - return index < text.size(); -} - -inline uint32_t FindIndex(std::string_view text, std::string_view needle, size_t from = 0) { - const auto pos = text.find(needle, from); - return pos == std::string_view::npos ? FIND_INVALID_INDEX : static_cast(pos); -} - -inline uint32_t FindIndex(std::string_view text, char needle, size_t from = 0) { - const auto pos = text.find(needle, from); - return pos == std::string_view::npos ? FIND_INVALID_INDEX : static_cast(pos); -} - -inline uint32_t FindLastIndex(std::string_view text, std::string_view needle, - size_t from = FIND_INVALID_INDEX) { - if (needle.empty()) { - return 0; - } - if (from == FIND_INVALID_INDEX || from > text.size()) { - from = text.size(); - } - const auto pos = text.rfind(needle, from); - return pos == std::string_view::npos ? FIND_INVALID_INDEX : static_cast(pos); -} - -inline uint32_t FindLastIndex(std::string_view text, char needle, - size_t from = FIND_INVALID_INDEX) { - if (from == FIND_INVALID_INDEX || from > text.size()) { - from = text.size(); - } - const auto pos = text.rfind(needle, from); - return pos == std::string_view::npos ? FIND_INVALID_INDEX : static_cast(pos); -} - inline std::string Mid(std::string_view text, size_t first, size_t count = std::string_view::npos) { if (first >= text.size()) { return {}; @@ -129,49 +64,18 @@ inline std::string Mid(std::string_view text, size_t first, size_t count = std:: return std::string(text.substr(first, count)); } -inline std::string Left(std::string_view text, size_t count) { - return Mid(text, 0, count); -} - -inline std::string Right(std::string_view text, size_t count) { - if (count >= text.size()) { - return std::string(text); - } - return Mid(text, text.size() - count, count); -} - inline std::string RemoveLast(std::string_view text, size_t count) { if (count >= text.size()) { return {}; } - return Left(text, text.size() - count); + return std::string(text.substr(0, text.size() - count)); } inline std::string RemoveFirst(std::string_view text, size_t count) { if (count >= text.size()) { return {}; } - return Right(text, text.size() - count); -} - -inline std::string TrimRight(std::string_view text) { - size_t end = text.size(); - while (end > 0 && IsSpace(text[end - 1])) { - end--; - } - return std::string(text.substr(0, end)); -} - -inline std::string TrimLeft(std::string_view text) { - size_t first = 0; - while (first < text.size() && IsSpace(text[first])) { - first++; - } - return std::string(text.substr(first)); -} - -inline std::string Trim(std::string_view text) { - return TrimRight(TrimLeft(text)); + return std::string(text.substr(count)); } inline std::string ReplaceChar(std::string_view text, char old_char, char new_char) { @@ -204,16 +108,6 @@ inline std::string FilenameWithoutDirectory(std::string_view text) { return pos == std::string_view::npos ? std::string(text) : std::string(text.substr(pos + 1)); } -inline std::string FilenameWithoutExtension(std::string_view text) { - const auto pos = text.find_last_of('.'); - return pos == std::string_view::npos ? std::string(text) : std::string(text.substr(0, pos)); -} - -inline std::string ExtensionWithoutFilename(std::string_view text) { - const auto pos = text.find_last_of('.'); - return pos == std::string_view::npos ? std::string() : std::string(text.substr(pos)); -} - inline std::string FixFilenameSlash(std::string_view text) { return ReplaceChar(text, '\\', '/'); } @@ -272,50 +166,12 @@ inline std::string Concat(const std::vector& list, char sep) { return Concat(list, std::string_view(&sep, 1)); } -inline uint32_t ToUint32(std::string_view text, int base = 10) { - uint32_t value = 0; - std::from_chars(text.data(), text.data() + text.size(), value, base); - return value; -} - -inline uint64_t ToUint64(std::string_view text, int base = 10) { - uint64_t value = 0; - std::from_chars(text.data(), text.data() + text.size(), value, base); - return value; -} - inline int32_t ToInt32(std::string_view text, int base = 10) { int32_t value = 0; std::from_chars(text.data(), text.data() + text.size(), value, base); return value; } -inline int64_t ToInt64(std::string_view text, int base = 10) { - int64_t value = 0; - std::from_chars(text.data(), text.data() + text.size(), value, base); - return value; -} - -inline double ToDouble(std::string_view text) { - return std::stod(std::string(text)); -} - -inline float ToFloat(std::string_view text) { - return std::stof(std::string(text)); -} - -inline std::string SafeCsv(std::string_view text) { - const bool add_space = - !text.empty() && (text.front() == '+' || text.front() == '=' || text.front() == '-'); - if (text.find('"') != std::string_view::npos || text.find(';') != std::string_view::npos || - text.find('+') != std::string_view::npos || text.find('=') != std::string_view::npos || - text.find('-') != std::string_view::npos) { - return "\"" + std::string(add_space ? " " : "") + - ReplaceStr(std::string(text), "\"", "\"\"") + "\""; - } - return std::string(text); -} - inline std::string Utf16ToUtf8(std::u16string_view utf16) { if (utf16.empty()) { return {}; @@ -324,14 +180,6 @@ inline std::string Utf16ToUtf8(std::u16string_view utf16) { return convert.to_bytes(utf16.data(), utf16.data() + utf16.size()); } -inline ByteBuffer HexToBin(std::string_view text) { - ByteBuffer ret; - for (size_t i = 0; i + 1 < text.size(); i += 2) { - ret.Add(static_cast((ToUint32(text.substr(i, 2), 16) & 0xffu))); - } - return ret; -} - inline std::string HexFromBin(const ByteBuffer& bin) { std::string ret; ret.reserve(bin.Size() * 2); diff --git a/src/kernel/fileSystem.cpp b/src/kernel/fileSystem.cpp index 659f47cf9..9f2d5aab5 100644 --- a/src/kernel/fileSystem.cpp +++ b/src/kernel/fileSystem.cpp @@ -334,13 +334,13 @@ std::filesystem::path MountPoints::ResolvePath(const std::string& mounted_name) // Match the entire guest path so a mount root works with or without a trailing slash. const auto mounted_path = Common::FixDirectorySlash(mounted_name); - const auto it = std::find_if( + const auto it = std::find_if( m_mount_pairs.begin(), m_mount_pairs.end(), - [&mounted_path](const MountPair& p) { return Common::StartsWith(mounted_path, p.point); }); + [&mounted_path](const MountPair& p) { return mounted_path.starts_with(p.point); }); if (it != m_mount_pairs.end()) { const auto& p = *it; auto rel_path = Common::RemoveFirst(Common::FixFilenameSlash(mounted_name), p.point.size()); - while (Common::StartsWith(rel_path, '/')) { + while (rel_path.starts_with('/')) { rel_path = Common::RemoveFirst(rel_path, 1); } #if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS diff --git a/src/libs/libAppContent.cpp b/src/libs/libAppContent.cpp index 6c36a4ea9..d76c0c7f7 100644 --- a/src/libs/libAppContent.cpp +++ b/src/libs/libAppContent.cpp @@ -51,17 +51,17 @@ static bool TryGetTitleIdFromContentId(std::string* title_id) { return false; } - const uint32_t dash = Common::FindIndex(content_id, '-'); - if (!Common::IndexValid(content_id, dash)) { + const auto dash = content_id.find('-'); + if (dash == std::string::npos) { return false; } - const uint32_t underscore = Common::FindIndex(content_id, '_', dash + 1); - if (!Common::IndexValid(content_id, underscore) || underscore <= dash + 1) { + const auto underscore = content_id.find('_', dash + 1); + if (underscore == std::string::npos || underscore <= dash + 1) { return false; } - *title_id = Common::Mid(content_id, dash + 1, underscore - dash - 1); + *title_id = content_id.substr(dash + 1, underscore - dash - 1); return !title_id->empty(); } diff --git a/src/libs/libSaveData.cpp b/src/libs/libSaveData.cpp index 573374df0..56c7a65ac 100644 --- a/src/libs/libSaveData.cpp +++ b/src/libs/libSaveData.cpp @@ -376,7 +376,7 @@ int KYTY_SYSV_ABI SaveDataDirNameSearch(const SaveDataDirNameSearchCond* cond, if (Common::File::IsDirectoryExisting(root)) { for (const auto& entry: Common::File::GetDirEntries(root)) { if (!entry.is_file && entry.name != "." && entry.name != ".." && - !Common::StartsWith(entry.name, "sce_")) { + !entry.name.starts_with("sce_")) { if (cond->dir_name == nullptr || cond->dir_name->data[0] == '\0' || dir_name_match(Common::ToLower(entry.name).c_str(), Common::ToLower(std::string(cond->dir_name->data)).c_str())) { diff --git a/src/loader/runtimeLinker.cpp b/src/loader/runtimeLinker.cpp index 1aadc5c5c..2a3470ac5 100644 --- a/src/loader/runtimeLinker.cpp +++ b/src/loader/runtimeLinker.cpp @@ -301,9 +301,9 @@ static KYTY_SYSV_ABI uint64_t ResolveImportStubWithId(uint64_t record_id) { if (record_id < g_stubbed_imports.size()) { auto& record = g_stubbed_imports[record_id]; auto nid = record.name; - auto pos = Common::FindIndex(nid, "["); - if (Common::IndexValid(nid, pos)) { - nid = Common::Left(nid, pos); + auto pos = nid.find('['); + if (pos != std::string::npos) { + nid.resize(pos); } SymbolRecord resolved {}; @@ -1088,7 +1088,7 @@ static void RelocateRecord(uint32_t index, Elf64_Rela* r, Program* program, bool } if (program->dbg_print_reloc) { - if (/* !dbg_str.ContainsStr("libc_") && */ patched && !ri.bind_self && + if (patched && !ri.bind_self && (ri.bind == BindType::Global || ri.bind == BindType::Weak || ri.type == SymbolType::TlsModule)) { auto dbg_str = fmt::format("[{:016x}] <- {:016x}, {}, {}, {}, {}", ri.vaddr, ri.value, @@ -1390,9 +1390,8 @@ Program* RuntimeLinker::LoadProgram(const std::filesystem::path& elf_name) { Libs::LibKernel::SetProgName(elf_name.filename().string()); } - if (Common::EndsWith(Common::ToLower(Common::DirectoryWithoutFilename( - Common::PathToGenericString(elf_name))), - "_module/")) { + if (Common::ToLower(Common::DirectoryWithoutFilename(Common::PathToGenericString(elf_name))) + .ends_with("_module/")) { program->fail_if_global_not_resolved = false; } @@ -1818,7 +1817,7 @@ void RuntimeLinker::StopAllModules() { static bool IsAdjacentModuleFile(const std::string& name) { auto lower = Common::ToLower(name); - return Common::EndsWith(lower, ".prx") || Common::EndsWith(lower, ".sprx"); + return lower.ends_with(".prx") || lower.ends_with(".sprx"); } static bool SkipAdjacentModuleFile(const std::string& name) { diff --git a/src/loader/symbolDatabase.cpp b/src/loader/symbolDatabase.cpp index 5108eb7e8..1e778091f 100644 --- a/src/loader/symbolDatabase.cpp +++ b/src/loader/symbolDatabase.cpp @@ -10,7 +10,7 @@ namespace Loader { constexpr char LIB_PREFIX[] = "libSce"; static std::string UpdateName(const std::string& str) { - return Common::StartsWith(str, LIB_PREFIX) ? Common::RemoveFirst(str, 6) : str; + return str.starts_with(LIB_PREFIX) ? Common::RemoveFirst(str, 6) : str; } std::string SymbolDatabase::GenerateName(const SymbolResolve& s) { @@ -70,7 +70,7 @@ const SymbolRecord* SymbolDatabase::FindByNid(const std::string& nid, SymbolType auto suffix = fmt::format("[{}]", magic_enum::enum_name(type)); for (const auto& symbol: m_symbols) { - if (Common::StartsWith(symbol.name, prefix) && Common::EndsWith(symbol.name, suffix)) { + if (symbol.name.starts_with(prefix) && symbol.name.ends_with(suffix)) { return &symbol; } } @@ -83,7 +83,7 @@ const SymbolRecord* SymbolDatabase::FindByName(const std::string& name, SymbolTy auto suffix = fmt::format("[{}]", magic_enum::enum_name(type)); for (const auto& symbol: m_symbols) { - if (Common::StartsWith(symbol.name, prefix) && Common::EndsWith(symbol.name, suffix)) { + if (symbol.name.starts_with(prefix) && symbol.name.ends_with(suffix)) { return &symbol; } } diff --git a/src/main.cpp b/src/main.cpp index fb08da456..4868bb8d7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -191,7 +191,7 @@ static bool ParseArgs(int argc, char* argv[], RunOptions& options, bool& show_he } #endif - if (!Common::StartsWith(arg, "--")) { + if (!arg.starts_with("--")) { ::printf("game input must be provided with --game\n"); return false; } diff --git a/tests/shaderCfgTests.cpp b/tests/shaderCfgTests.cpp index 2495669f5..1182859b9 100644 --- a/tests/shaderCfgTests.cpp +++ b/tests/shaderCfgTests.cpp @@ -231,14 +231,14 @@ std::string DisassembleSpirvBinary(const std::vector &binary) { uint32_t CountSourceOccurrences(const std::string &source, const char *needle) { uint32_t count = 0; - uint32_t from = 0; + size_t from = 0; for (;;) { - const auto found = Common::FindIndex(source, std::string(needle), from); - if (found == Common::FIND_INVALID_INDEX) { + const auto found = source.find(needle, from); + if (found == std::string::npos) { return count; } count++; - from = found + static_cast(std::strlen(needle)); + from = found + std::strlen(needle); } } @@ -247,7 +247,7 @@ bool SpirvSourceHasInstructionUsing(const std::string &source, std::istringstream stream(source); std::string line; while (std::getline(stream, line)) { - if (Common::ContainsStr(line, opcode) && Common::ContainsStr(line, name)) { + if ((line.find(opcode) != std::string::npos) && (line.find(name) != std::string::npos)) { return true; } } @@ -1656,18 +1656,18 @@ void TestNewShaderRecompilerSMovB32() { Check(!result.spirv.empty(), "new shader recompiler produced no SPIR-V"); Check(result.spirv.front() == 0x07230203u, "new shader recompiler did not emit SPIR-V binary"); - Check(Common::ContainsStr(result.decoded_dump, "S_MOV_B32 s0, 1"), + Check((result.decoded_dump.find("S_MOV_B32 s0, 1") != std::string::npos), "new decoder did not decode inline S_MOV_B32 operand"); - Check(Common::ContainsStr(result.decoded_dump, "S_MOV_B32 s1, 0x12345678"), + Check((result.decoded_dump.find("S_MOV_B32 s1, 0x12345678") != std::string::npos), "new decoder did not decode literal S_MOV_B32 operand"); - Check(Common::ContainsStr(result.decoded_dump, "S_MOV_B32 s2, s1"), + Check((result.decoded_dump.find("S_MOV_B32 s2, s1") != std::string::npos), "new decoder did not decode register S_MOV_B32 operand"); - Check(Common::ContainsStr(result.ir_dump, "StoreBufferU32") && - Common::ContainsStr(result.ir_dump, "0x00000001") && - Common::ContainsStr(result.ir_dump, "0x12345678"), + Check((result.ir_dump.find("StoreBufferU32") != std::string::npos) && + (result.ir_dump.find("0x00000001") != std::string::npos) && + (result.ir_dump.find("0x12345678") != std::string::npos), "typed SSA did not preserve live S_MOV_B32 values"); - Check(!Common::ContainsStr(result.ir_dump, "SetScalarRegister") && - !Common::ContainsStr(result.ir_dump, "GetScalarRegister"), + Check((result.ir_dump.find("SetScalarRegister") == std::string::npos) && + (result.ir_dump.find("GetScalarRegister") == std::string::npos), "typed SSA retained register-state pseudo operations"); Check(std::find(result.spirv.begin(), result.spirv.end(), 0x12345678u) != result.spirv.end(), @@ -1694,29 +1694,29 @@ void TestNewShaderRecompilerSoppMarkers() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_nop 0x00000003"), + Check((result.decoded_dump.find("s_nop 0x00000003") != std::string::npos), "new decoder did not decode SOPP s_nop"); - Check(Common::ContainsStr(result.decoded_dump, "s_waitcnt 0x00000000"), + Check((result.decoded_dump.find("s_waitcnt 0x00000000") != std::string::npos), "new decoder did not decode SOPP s_waitcnt"); - Check(Common::ContainsStr(result.decoded_dump, "s_sendmsg 0x0000000f"), + Check((result.decoded_dump.find("s_sendmsg 0x0000000f") != std::string::npos), "new decoder did not decode SOPP s_sendmsg"); - Check(Common::ContainsStr(result.decoded_dump, "s_ttracedata 0x0000002a"), + Check((result.decoded_dump.find("s_ttracedata 0x0000002a") != std::string::npos), "new decoder did not decode SOPP s_ttracedata"); - Check(Common::ContainsStr(result.decoded_dump, "s_inst_prefetch 0x00000001"), + Check((result.decoded_dump.find("s_inst_prefetch 0x00000001") != std::string::npos), "new decoder did not decode SOPP s_inst_prefetch"); - Check(Common::ContainsStr(result.decoded_dump, "s_barrier"), + Check((result.decoded_dump.find("s_barrier") != std::string::npos), "new decoder did not decode SOPP s_barrier"); - Check(Common::ContainsStr(result.ir_dump, "ControlNop null, 0x00000003"), + Check((result.ir_dump.find("ControlNop null, 0x00000003") != std::string::npos), "SOPP s_nop did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "Waitcnt null, 0x00000000"), + Check((result.ir_dump.find("Waitcnt null, 0x00000000") != std::string::npos), "SOPP s_waitcnt did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "Sendmsg null, 0x0000000f"), + Check((result.ir_dump.find("Sendmsg null, 0x0000000f") != std::string::npos), "SOPP s_sendmsg did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "TtraceData null, 0x0000002a"), + Check((result.ir_dump.find("TtraceData null, 0x0000002a") != std::string::npos), "SOPP s_ttracedata did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "InstPrefetch null, 0x00000001"), + Check((result.ir_dump.find("InstPrefetch null, 0x00000001") != std::string::npos), "SOPP s_inst_prefetch did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "Barrier null"), + Check((result.ir_dump.find("Barrier null") != std::string::npos), "SOPP s_barrier did not lower to an IR marker"); Check(SpirvContainsOpcode(result.spirv, 224), "SPIR-V binary does not contain OpControlBarrier"); @@ -1740,13 +1740,13 @@ void TestNewShaderRecompilerSopkWaitcntMarkers() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_waitcnt 0"), + Check((result.decoded_dump.find("s_waitcnt 0") != std::string::npos), "new decoder did not decode SOPK waitcnt marker"); - Check(Common::ContainsStr(result.decoded_dump, "s_waitcnt 65535"), + Check((result.decoded_dump.find("s_waitcnt 65535") != std::string::npos), "SOPK waitcnt marker immediate was not kept unsigned"); - Check(Common::ContainsStr(result.ir_dump, "Waitcnt null, 0x00000000"), + Check((result.ir_dump.find("Waitcnt null, 0x00000000") != std::string::npos), "SOPK waitcnt did not lower to an IR marker"); - Check(Common::ContainsStr(result.ir_dump, "Waitcnt null, 0x0000ffff"), + Check((result.ir_dump.find("Waitcnt null, 0x0000ffff") != std::string::npos), "SOPK waitcnt marker immediate was not translated as 16-bit unsigned"); CheckSpirvBinaryValidates(result.spirv); } @@ -1822,8 +1822,8 @@ void TestDisabledSystemDebugBranch() { auto options = MakeCompileOptions(ShaderType::Compute); options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "S_CBRANCH_CDBGSYS 0x00000440") && - Common::ContainsStr(result.ir_dump, "StoreBufferU32"), + Check((result.decoded_dump.find("S_CBRANCH_CDBGSYS 0x00000440") != std::string::npos) && + (result.ir_dump.find("StoreBufferU32") != std::string::npos), "disabled system debug branch lost its identity or fallthrough write"); CheckSpirvBinaryValidates(result.spirv); } @@ -1846,34 +1846,28 @@ void TestNewShaderRecompilerRdna2ScalarOpcodes() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_bitset1_b32 vcc_lo, 0"), + Check((result.decoded_dump.find("s_bitset1_b32 vcc_lo, 0") != std::string::npos), "new decoder did not decode RDNA2 S_BITSET1_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "s_setreg_b32 vcc_lo, 0x00001019"), + Check((result.decoded_dump.find("s_setreg_b32 vcc_lo, 0x00001019") != std::string::npos), "new decoder did not decode S_SETREG_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "s_add_i32 vcc_lo, s2, pops_exiting_wave_id"), + Check((result.decoded_dump.find("s_add_i32 vcc_lo, s2, pops_exiting_wave_id") != std::string::npos), "new decoder did not decode pops_exiting_wave_id as RHS scalar source"); - Check(Common::ContainsStr(result.decoded_dump, - "s_add_i32 vcc_lo, pops_exiting_wave_id, s2"), + Check((result.decoded_dump.find("s_add_i32 vcc_lo, pops_exiting_wave_id, s2") != std::string::npos), "new decoder did not decode pops_exiting_wave_id as LHS scalar source"); - Check(Common::ContainsStr(result.decoded_dump, "s_sleep 0x00000000"), + Check((result.decoded_dump.find("s_sleep 0x00000000") != std::string::npos), "new decoder did not decode S_SLEEP"); - Check(Common::ContainsStr(result.ir_dump, - "BitSetU32 vcc_lo, vcc_lo, 0x00000000"), + Check((result.ir_dump.find("BitSetU32 vcc_lo, vcc_lo, 0x00000000") != std::string::npos), "S_BITSET1_B32 did not lower to bit-set IR using the destination as " "input"); Check( - Common::ContainsStr(result.ir_dump, - "ScalarSignedAddOverflowI32 vcc_lo, s2, 0x00000000"), + (result.ir_dump.find("ScalarSignedAddOverflowI32 vcc_lo, s2, 0x00000000") != std::string::npos), "pops_exiting_wave_id RHS did not lower to a deterministic zero value"); Check( - Common::ContainsStr(result.ir_dump, - "ScalarSignedAddOverflowI32 vcc_lo, 0x00000000, s2"), + (result.ir_dump.find("ScalarSignedAddOverflowI32 vcc_lo, 0x00000000, s2") != std::string::npos), "pops_exiting_wave_id LHS did not lower to a deterministic zero value"); - Check(Common::ContainsStr(result.ir_dump, "ControlNop null, vcc_lo"), + Check((result.ir_dump.find("ControlNop null, vcc_lo") != std::string::npos), "S_SETREG_B32 did not lower to an explicit control marker"); - Check(Common::ContainsStr(result.ir_dump, "ControlNop null, 0x00000000"), + Check((result.ir_dump.find("ControlNop null, 0x00000000") != std::string::npos), "S_SLEEP did not lower to an explicit control marker"); Check(SpirvContainsOpcode(result.spirv, 196), "SPIR-V binary does not contain OpShiftLeftLogical for S_BITSET1_B32"); @@ -1917,77 +1911,69 @@ void TestNewShaderRecompilerScalarVectorAlu() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_add_u32 s2, s0, s1"), + Check((result.decoded_dump.find("s_add_u32 s2, s0, s1") != std::string::npos), "new decoder did not decode SOP2 add"); - Check(Common::ContainsStr(result.decoded_dump, "s_addc_u32 s14, s13, 1"), + Check((result.decoded_dump.find("s_addc_u32 s14, s13, 1") != std::string::npos), "new decoder did not decode old-backed S_ADD_C_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_cmp_gt_u32 s8, s1"), + Check((result.decoded_dump.find("s_cmp_gt_u32 s8, s1") != std::string::npos), "new decoder did not decode SOPC compare"); - Check(Common::ContainsStr(result.decoded_dump, "s_lshl1_add_u32 s9, s2, s1"), + Check((result.decoded_dump.find("s_lshl1_add_u32 s9, s2, s1") != std::string::npos), "new decoder did not decode old-backed S_LSHL1_ADD_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_lshl2_add_u32 s10, s9, s1"), + Check((result.decoded_dump.find("s_lshl2_add_u32 s10, s9, s1") != std::string::npos), "new decoder did not decode old-backed S_LSHL2_ADD_U32"); Check( - Common::ContainsStr(result.decoded_dump, "s_lshl3_add_u32 s11, s10, s1"), + (result.decoded_dump.find("s_lshl3_add_u32 s11, s10, s1") != std::string::npos), "new decoder did not decode old-backed S_LSHL3_ADD_U32"); Check( - Common::ContainsStr(result.decoded_dump, "s_lshl4_add_u32 s12, s11, s1"), + (result.decoded_dump.find("s_lshl4_add_u32 s12, s11, s1") != std::string::npos), "new decoder did not decode old-backed S_LSHL4_ADD_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_mul_hi_u32 s13, s12, s1"), + Check((result.decoded_dump.find("s_mul_hi_u32 s13, s12, s1") != std::string::npos), "new decoder did not decode old-backed S_MUL_HI_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_mul_hi_i32 s15, s12, s1"), + Check((result.decoded_dump.find("s_mul_hi_i32 s15, s12, s1") != std::string::npos), "new decoder did not decode old-backed S_MUL_HI_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_f32 v1"), + Check((result.decoded_dump.find("v_add_f32 v1") != std::string::npos), "new decoder did not decode VOP2 float add"); - Check(Common::ContainsStr(result.decoded_dump, "v_cndmask_b32 v5"), + Check((result.decoded_dump.find("v_cndmask_b32 v5") != std::string::npos), "new decoder did not decode VOP2 conditional mask select"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_u32_u24 v6"), + Check((result.decoded_dump.find("v_mul_u32_u24 v6") != std::string::npos), "new decoder did not decode VOP2 24-bit multiply"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_i32_i24 v8"), + Check((result.decoded_dump.find("v_mul_i32_i24 v8") != std::string::npos), "new decoder did not decode VOP2 signed 24-bit multiply"); - Check(Common::ContainsStr(result.decoded_dump, "v_bcnt_u32_b32 v7"), + Check((result.decoded_dump.find("v_bcnt_u32_b32 v7") != std::string::npos), "new decoder did not decode old-backed V_BCNT_U32_B32"); - Check(Common::ContainsStr(result.ir_dump, - "ScalarAddCarryU32 s2, s0, s1, 0x00000000"), + Check((result.ir_dump.find("ScalarAddCarryU32 s2, s0, s1, 0x00000000") != std::string::npos), "SOP2 add did not lower to scalar carry-writing IR"); - Check(Common::ContainsStr(result.ir_dump, - "ScalarAddCarryU32 s14, s13, 0x00000001, scc"), + Check((result.ir_dump.find("ScalarAddCarryU32 s14, s13, 0x00000001, scc") != std::string::npos), "S_ADD_C_U32 did not lower to scalar carry IR"); Check( - Common::ContainsStr(result.ir_dump, - "ScalarShiftLeftAddCarryU32 s9, s2, 0x00000001, s1"), + (result.ir_dump.find("ScalarShiftLeftAddCarryU32 s9, s2, 0x00000001, s1") != std::string::npos), "S_LSHL1_ADD_U32 did not lower through carry-writing shift-left-add IR"); Check( - Common::ContainsStr(result.ir_dump, - "ScalarShiftLeftAddCarryU32 s10, s9, 0x00000002, s1"), + (result.ir_dump.find("ScalarShiftLeftAddCarryU32 s10, s9, 0x00000002, s1") != std::string::npos), "S_LSHL2_ADD_U32 did not lower through carry-writing shift-left-add IR"); Check( - Common::ContainsStr( - result.ir_dump, - "ScalarShiftLeftAddCarryU32 s11, s10, 0x00000003, s1"), + (result.ir_dump.find("ScalarShiftLeftAddCarryU32 s11, s10, 0x00000003, s1") != std::string::npos), "S_LSHL3_ADD_U32 did not lower through carry-writing shift-left-add IR"); Check( - Common::ContainsStr( - result.ir_dump, - "ScalarShiftLeftAddCarryU32 s12, s11, 0x00000004, s1"), + (result.ir_dump.find("ScalarShiftLeftAddCarryU32 s12, s11, 0x00000004, s1") != std::string::npos), "S_LSHL4_ADD_U32 did not lower through carry-writing shift-left-add IR"); - Check(Common::ContainsStr(result.ir_dump, "UMulHighU32 s13, s12, s1"), + Check((result.ir_dump.find("UMulHighU32 s13, s12, s1") != std::string::npos), "S_MUL_HI_U32 did not lower to unsigned high-multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "SMulHighI32 s15, s12, s1"), + Check((result.ir_dump.find("SMulHighI32 s15, s12, s1") != std::string::npos), "S_MUL_HI_I32 did not lower to signed high-multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareGtU32"), + Check((result.ir_dump.find("CompareGtU32") != std::string::npos), "SOPC compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FAddF32 v1"), + Check((result.ir_dump.find("FAddF32 v1") != std::string::npos), "VOP2 float add did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseAndU32 v4"), + Check((result.ir_dump.find("BitwiseAndU32 v4") != std::string::npos), "VOP2 bitwise op did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "SelectMaskU32 v5, vcc_lo, v2, v1"), + Check((result.ir_dump.find("SelectMaskU32 v5, vcc_lo, v2, v1") != std::string::npos), "VOP2 conditional mask did not lower through lane-mask select IR"); - Check(Common::ContainsStr(result.ir_dump, "UMulU24U32 v6"), + Check((result.ir_dump.find("UMulU24U32 v6") != std::string::npos), "VOP2 24-bit multiply did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMulI24U32 v8"), + Check((result.ir_dump.find("IMulI24U32 v8") != std::string::npos), "VOP2 signed 24-bit multiply did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitCountAddU32 v7, v4, v6"), + Check((result.ir_dump.find("BitCountAddU32 v7, v4, v6") != std::string::npos), "V_BCNT_U32_B32 did not lower to bit-count-add IR"); Check(SpirvContainsOpcode(result.spirv, 128), "SPIR-V binary does not contain OpIAdd"); @@ -2023,9 +2009,9 @@ void TestNewShaderRecompilerVop3LaneReadDestinationEncoding() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "v_readfirstlane_b32 s25, v5"), + Check((result.decoded_dump.find("v_readfirstlane_b32 s25, v5") != std::string::npos), "VOP3 V_READFIRSTLANE_B32 destination was not decoded from VDST"); - Check(Common::ContainsStr(result.decoded_dump, "v_readlane_b32 s26, v5, 2"), + Check((result.decoded_dump.find("v_readlane_b32 s26, v5, 2") != std::string::npos), "VOP3 V_READLANE_B32 destination was not decoded from VDST"); CheckSpirvBinaryValidates(result.spirv); } @@ -2298,722 +2284,667 @@ void TestNewShaderRecompilerMoreAluFamilies() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_movk_i32 s9"), + Check((result.decoded_dump.find("s_movk_i32 s9") != std::string::npos), "new decoder did not decode SOPK mov"); - Check(Common::ContainsStr(result.decoded_dump, "s_cmp_gt_u32"), + Check((result.decoded_dump.find("s_cmp_gt_u32") != std::string::npos), "new decoder did not decode SOPK compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_nop"), + Check((result.decoded_dump.find("v_nop") != std::string::npos), "new decoder did not decode old-backed VOP1 no-op"); - Check(Common::ContainsStr(result.decoded_dump, "v_mov_b32 v5"), + Check((result.decoded_dump.find("v_mov_b32 v5") != std::string::npos), "new decoder did not decode VOP1 mov"); - Check(Common::ContainsStr(result.decoded_dump, "v_movrels_b32 v55, v12"), + Check((result.decoded_dump.find("v_movrels_b32 v55, v12") != std::string::npos), "new decoder did not decode VOP1 V_MOVRELS_B32"); Check( - Common::ContainsStr(result.decoded_dump, "v_mov_b32 v103, v5.sdwa(sel=4"), + (result.decoded_dump.find("v_mov_b32 v103, v5.sdwa(sel=4") != std::string::npos), "new decoder did not decode VOP1 SDWA source selector"); Check( - Common::ContainsStr(result.decoded_dump, "v_cvt_f16_f32 v105.sdwa(sel=5"), + (result.decoded_dump.find("v_cvt_f16_f32 v105.sdwa(sel=5") != std::string::npos), "new decoder did not decode VOP1 SDWA destination selector"); - Check(Common::ContainsStr(result.decoded_dump, "v_mov_b32 v106, v5.dpp"), + Check((result.decoded_dump.find("v_mov_b32 v106, v5.dpp") != std::string::npos), "new decoder did not decode VOP1 DPP source metadata"); - Check(!Common::ContainsStr(result.decoded_dump, - "VOP1 SDWA/DPP modifiers are not implemented"), + Check((result.decoded_dump.find("VOP1 SDWA/DPP modifiers are not implemented") == std::string::npos), "new decoder still reports blanket VOP1 SDWA/DPP unsupported reason"); - Check(Common::ContainsStr(result.decoded_dump, - "v_add_nc_u32 v123, v5.sdwa(sel=4"), + Check((result.decoded_dump.find("v_add_nc_u32 v123, v5.sdwa(sel=4") != std::string::npos), "new decoder did not decode VOP2 SDWA source selector"); Check( - Common::ContainsStr(result.decoded_dump, "v_and_b32 v124, v5.sdwa(sel=4"), + (result.decoded_dump.find("v_and_b32 v124, v5.sdwa(sel=4") != std::string::npos), "new decoder did not decode VOP2 SDWA first source selector"); - Check(Common::ContainsStr(result.decoded_dump, "v6.sdwa(sel=5"), + Check((result.decoded_dump.find("v6.sdwa(sel=5") != std::string::npos), "new decoder did not decode VOP2 SDWA second source selector"); - Check(Common::ContainsStr(result.decoded_dump, "v_cndmask_b32 v47, v53,") && - Common::ContainsStr(result.decoded_dump, "v53.neg"), + Check((result.decoded_dump.find("v_cndmask_b32 v47, v53,") != std::string::npos) && + (result.decoded_dump.find("v53.neg") != std::string::npos), "new decoder did not decode V_CNDMASK_B32 SDWA source modifier"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cndmask_b32 v7, v0.sdwa(sel=4") && - Common::ContainsStr(result.decoded_dump, "v1"), + Check((result.decoded_dump.find("v_cndmask_b32 v7, v0.sdwa(sel=4") != std::string::npos) && + (result.decoded_dump.find("v1") != std::string::npos), "new decoder did not decode full-destination V_CNDMASK_B32 with SDWA " "source"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_f32 v125, v5.dpp"), + Check((result.decoded_dump.find("v_add_f32 v125, v5.dpp") != std::string::npos), "new decoder did not decode VOP2 DPP source metadata"); - Check(!Common::ContainsStr(result.decoded_dump, - "VOP2 SDWA/DPP modifiers are not implemented"), + Check((result.decoded_dump.find("VOP2 SDWA/DPP modifiers are not implemented") == std::string::npos), "new decoder still reports blanket VOP2 SDWA/DPP unsupported reason"); - Check(Common::ContainsStr(result.decoded_dump, "v_readfirstlane_b32 s24, v5"), + Check((result.decoded_dump.find("v_readfirstlane_b32 s24, v5") != std::string::npos), "new decoder did not decode old-backed V_READFIRSTLANE_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_u32 v6"), + Check((result.decoded_dump.find("v_cvt_f32_u32 v6") != std::string::npos), "new decoder did not decode VOP1 conversion"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_i32 v9"), + Check((result.decoded_dump.find("v_cvt_f32_i32 v9") != std::string::npos), "new decoder did not decode VOP1 signed int-to-float conversion"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_i32_f32 v10"), + Check((result.decoded_dump.find("v_cvt_i32_f32 v10") != std::string::npos), "new decoder did not decode VOP1 float-to-signed-int conversion"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f16_f32 v99"), + Check((result.decoded_dump.find("v_cvt_f16_f32 v99") != std::string::npos), "new decoder did not decode old-backed V_CVT_F16_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_f16 v100"), + Check((result.decoded_dump.find("v_cvt_f32_f16 v100") != std::string::npos), "new decoder did not decode old-backed native V_CVT_F32_F16"); Check( - Common::ContainsStr(result.decoded_dump, - "v_cvt_f32_f16 v8, v2.sdwa(sel=5") && - Common::ContainsStr(result.decoded_dump, "v2.sdwa(sel=5,sext=0).abs"), + (result.decoded_dump.find("v_cvt_f32_f16 v8, v2.sdwa(sel=5") != std::string::npos) && + (result.decoded_dump.find("v2.sdwa(sel=5,sext=0).abs") != std::string::npos), "new decoder did not decode V_CVT_F32_F16 SDWA source selector modifier"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_flr_i32_f32 v64"), + Check((result.decoded_dump.find("v_cvt_flr_i32_f32 v64") != std::string::npos), "new decoder did not decode old-backed V_CVT_FLR_I32_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_off_f32_i4 v81"), + Check((result.decoded_dump.find("v_cvt_off_f32_i4 v81") != std::string::npos), "new decoder did not decode old-backed V_CVT_OFF_F32_I4"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_ubyte0 v65"), + Check((result.decoded_dump.find("v_cvt_f32_ubyte0 v65") != std::string::npos), "new decoder did not decode old-backed V_CVT_F32_UBYTE0"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_ubyte1 v66"), + Check((result.decoded_dump.find("v_cvt_f32_ubyte1 v66") != std::string::npos), "new decoder did not decode old-backed V_CVT_F32_UBYTE1"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_ubyte2 v67"), + Check((result.decoded_dump.find("v_cvt_f32_ubyte2 v67") != std::string::npos), "new decoder did not decode old-backed V_CVT_F32_UBYTE2"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_ubyte3 v68"), + Check((result.decoded_dump.find("v_cvt_f32_ubyte3 v68") != std::string::npos), "new decoder did not decode old-backed V_CVT_F32_UBYTE3"); - Check(Common::ContainsStr(result.decoded_dump, "v_rcp_f32 v11"), + Check((result.decoded_dump.find("v_rcp_f32 v11") != std::string::npos), "new decoder did not decode VOP1 reciprocal"); - Check(Common::ContainsStr(result.decoded_dump, "v_fract_f32 v12"), + Check((result.decoded_dump.find("v_fract_f32 v12") != std::string::npos), "new decoder did not decode VOP1 fract"); - Check(Common::ContainsStr(result.decoded_dump, "v_cos_f32 v22"), + Check((result.decoded_dump.find("v_cos_f32 v22") != std::string::npos), "new decoder did not decode VOP1 cosine"); - Check(Common::ContainsStr(result.decoded_dump, "v_not_b32 v27"), + Check((result.decoded_dump.find("v_not_b32 v27") != std::string::npos), "new decoder did not decode VOP1 not"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfrev_b32 v28"), + Check((result.decoded_dump.find("v_bfrev_b32 v28") != std::string::npos), "new decoder did not decode VOP1 bit reverse"); - Check(Common::ContainsStr(result.decoded_dump, "v_ffbh_u32 v31"), + Check((result.decoded_dump.find("v_ffbh_u32 v31") != std::string::npos), "new decoder did not decode VOP1 find-first-bit-high"); - Check(Common::ContainsStr(result.decoded_dump, "v_ffbl_b32 v32"), + Check((result.decoded_dump.find("v_ffbl_b32 v32") != std::string::npos), "new decoder did not decode VOP1 find-first-bit-low"); - Check(Common::ContainsStr(result.decoded_dump, "v_xnor_b32 v83, v5, v6"), + Check((result.decoded_dump.find("v_xnor_b32 v83, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_XNOR_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_mbcnt_lo_u32_b32 v84, v5, v6"), + Check((result.decoded_dump.find("v_mbcnt_lo_u32_b32 v84, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_MBCNT_LO_U32_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_mbcnt_hi_u32_b32 v85, v5, v6"), + Check((result.decoded_dump.find("v_mbcnt_hi_u32_b32 v85, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_MBCNT_HI_U32_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mac_f32 v89, v6, v6"), + Check((result.decoded_dump.find("v_mac_f32 v89, v6, v6") != std::string::npos), "new decoder did not decode old-backed V_MAC_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_madmk_f32 v90, v6, 0x3f800000, v5"), + Check((result.decoded_dump.find("v_madmk_f32 v90, v6, 0x3f800000, v5") != std::string::npos), "new decoder did not decode old-backed V_MADMK_F32 literal form"); - Check(Common::ContainsStr(result.decoded_dump, - "v_madak_f32 v91, v6, v5, 0x40000000"), + Check((result.decoded_dump.find("v_madak_f32 v91, v6, v5, 0x40000000") != std::string::npos), "new decoder did not decode old-backed V_MADAK_F32 literal form"); - Check(Common::ContainsStr(result.decoded_dump, "v_mac_f32 v92, v6, v6"), + Check((result.decoded_dump.find("v_mac_f32 v92, v6, v6") != std::string::npos), "new decoder did not decode old-backed alternate V_MAC_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_madmk_f32 v93, v6, 0x3f000000, v5"), + Check((result.decoded_dump.find("v_madmk_f32 v93, v6, 0x3f000000, v5") != std::string::npos), "new decoder did not decode old-backed alternate V_MADMK_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_madak_f32 v94, v6, v5, 0x40400000"), + Check((result.decoded_dump.find("v_madak_f32 v94, v6, v5, 0x40400000") != std::string::npos), "new decoder did not decode old-backed alternate V_MADAK_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cvt_pkrtz_f16_f32 v95, v6, v6"), + Check((result.decoded_dump.find("v_cvt_pkrtz_f16_f32 v95, v6, v6") != std::string::npos), "new decoder did not decode old-backed native V_CVT_PKRTZ_F16_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_dot2c_f32_f16 v102, v95, v95"), + Check((result.decoded_dump.find("v_dot2c_f32_f16 v102, v95, v95") != std::string::npos), "new decoder did not decode old-backed V_DOT2C_F32_F16"); - Check(Common::ContainsStr(result.decoded_dump, - "v_addc_u32 v97, vcc_lo, v5, v6, vcc_lo"), + Check((result.decoded_dump.find("v_addc_u32 v97, vcc_lo, v5, v6, vcc_lo") != std::string::npos), "new decoder did not decode old-backed V_ADD_CO_U32 carry form"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_f32 v35"), + Check((result.decoded_dump.find("v_add_f32 v35") != std::string::npos), "new decoder did not decode VOP3-encoded VOP2 float add"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_u32_u24 v36"), + Check((result.decoded_dump.find("v_mul_u32_u24 v36") != std::string::npos), "new decoder did not decode VOP3-encoded VOP2 24-bit multiply"); - Check(Common::ContainsStr(result.decoded_dump, "v_xnor_b32 v86, v5, v6"), + Check((result.decoded_dump.find("v_xnor_b32 v86, v5, v6") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_XNOR_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mac_f32 v96, v6, v6"), + Check((result.decoded_dump.find("v_mac_f32 v96, v6, v6") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_MAC_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_addc_u32 v98, s30, v5, v6, vcc_lo"), + Check((result.decoded_dump.find("v_addc_u32 v98, s30, v5, v6, vcc_lo") != std::string::npos), "new decoder did not decode old-backed VOP3 V_ADD_CO_U32 carry form"); Check( - Common::ContainsStr(result.decoded_dump, - "v_mbcnt_lo_u32_b32 v87, v5, v6"), + (result.decoded_dump.find("v_mbcnt_lo_u32_b32 v87, v5, v6") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_MBCNT_LO_U32_B32"); Check( - Common::ContainsStr(result.decoded_dump, - "v_mbcnt_hi_u32_b32 v88, v5, v6"), + (result.decoded_dump.find("v_mbcnt_hi_u32_b32 v88, v5, v6") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_MBCNT_HI_U32_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mov_b32 v23"), + Check((result.decoded_dump.find("v_mov_b32 v23") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 move"); Check( - Common::ContainsStr(result.decoded_dump, "v_readfirstlane_b32 s25, v5"), + (result.decoded_dump.find("v_readfirstlane_b32 s25, v5") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_READFIRSTLANE_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f32_i32 v24"), + Check((result.decoded_dump.find("v_cvt_f32_i32 v24") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 signed conversion"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f16_f32 v101"), + Check((result.decoded_dump.find("v_cvt_f16_f32 v101") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_CVT_F16_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_flr_i32_f32 v74"), + Check((result.decoded_dump.find("v_cvt_flr_i32_f32 v74") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_CVT_FLR_I32_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_off_f32_i4 v82"), + Check((result.decoded_dump.find("v_cvt_off_f32_i4 v82") != std::string::npos), "new decoder did not decode old-backed VOP3-encoded V_CVT_OFF_F32_I4"); - Check(Common::ContainsStr(result.decoded_dump, "v_fract_f32 v25"), + Check((result.decoded_dump.find("v_fract_f32 v25") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 fract"); - Check(Common::ContainsStr(result.decoded_dump, "v_rcp_f32 v26"), + Check((result.decoded_dump.find("v_rcp_f32 v26") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 reciprocal"); - Check(Common::ContainsStr(result.decoded_dump, "v_not_b32 v29"), + Check((result.decoded_dump.find("v_not_b32 v29") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 not"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfrev_b32 v30"), + Check((result.decoded_dump.find("v_bfrev_b32 v30") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 bit reverse"); - Check(Common::ContainsStr(result.decoded_dump, "v_ffbh_u32 v33"), + Check((result.decoded_dump.find("v_ffbh_u32 v33") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 find-first-bit-high"); - Check(Common::ContainsStr(result.decoded_dump, "v_ffbl_b32 v34"), + Check((result.decoded_dump.find("v_ffbl_b32 v34") != std::string::npos), "new decoder did not decode VOP3-encoded VOP1 find-first-bit-low"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_gt_f32"), + Check((result.decoded_dump.find("v_cmp_gt_f32") != std::string::npos), "new decoder did not decode VOPC float compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_gt_f32"), + Check((result.decoded_dump.find("v_cmpx_gt_f32") != std::string::npos), "new decoder did not decode VOPC float compare-and-mask"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_gt_u32"), + Check((result.decoded_dump.find("v_cmpx_gt_u32") != std::string::npos), "new decoder did not decode VOPC uint compare-and-mask"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_f_f32"), + Check((result.decoded_dump.find("v_cmp_f_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_F_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_tru_f32"), + Check((result.decoded_dump.find("v_cmp_tru_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_TRU_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_o_f32"), + Check((result.decoded_dump.find("v_cmp_o_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_O_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_u_f32"), + Check((result.decoded_dump.find("v_cmp_u_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_U_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_nge_f32"), + Check((result.decoded_dump.find("v_cmp_nge_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NGE_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_nlg_f32"), + Check((result.decoded_dump.find("v_cmp_nlg_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NLG_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_ngt_f32"), + Check((result.decoded_dump.find("v_cmp_ngt_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NGT_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_nle_f32"), + Check((result.decoded_dump.find("v_cmp_nle_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NLE_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_neq_f32"), + Check((result.decoded_dump.find("v_cmp_neq_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NEQ_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cmp_neq_f32 s0, 0.500000, v1"), + Check((result.decoded_dump.find("v_cmp_neq_f32 s0, 0.500000, v1") != std::string::npos), "new decoder did not decode old-backed V_CMP_NEQ_F32 SDWA scalar " "destination"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cmpx_lt_u32 exec_lo, v5.sdwa(sel=4") && - Common::ContainsStr(result.ir_dump, "CompareMaskLtU32 exec_lo"), + Check((result.decoded_dump.find("v_cmpx_lt_u32 exec_lo, v5.sdwa(sel=4") != std::string::npos) && + (result.ir_dump.find("CompareMaskLtU32 exec_lo") != std::string::npos), "new decoder did not route V_CMPX SDWA destination to exec"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_nlt_f32"), + Check((result.decoded_dump.find("v_cmp_nlt_f32") != std::string::npos), "new decoder did not decode old-backed V_CMP_NLT_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_nge_f32"), + Check((result.decoded_dump.find("v_cmpx_nge_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NGE_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_nlg_f32"), + Check((result.decoded_dump.find("v_cmpx_nlg_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NLG_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_ngt_f32"), + Check((result.decoded_dump.find("v_cmpx_ngt_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NGT_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_nle_f32"), + Check((result.decoded_dump.find("v_cmpx_nle_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NLE_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_neq_f32"), + Check((result.decoded_dump.find("v_cmpx_neq_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NEQ_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_nlt_f32"), + Check((result.decoded_dump.find("v_cmpx_nlt_f32") != std::string::npos), "new decoder did not decode old-backed V_CMPX_NLT_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_f_i32"), + Check((result.decoded_dump.find("v_cmp_f_i32") != std::string::npos), "new decoder did not decode old-backed V_CMP_F_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_t_i32"), + Check((result.decoded_dump.find("v_cmp_t_i32") != std::string::npos), "new decoder did not decode old-backed V_CMP_T_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_f_u32"), + Check((result.decoded_dump.find("v_cmp_f_u32") != std::string::npos), "new decoder did not decode old-backed V_CMP_F_U32"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_t_u32"), + Check((result.decoded_dump.find("v_cmp_t_u32") != std::string::npos), "new decoder did not decode old-backed V_CMP_T_U32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cmp_ne_u64 vcc_lo, exec_lo, vcc_lo"), + Check((result.decoded_dump.find("v_cmp_ne_u64 vcc_lo, exec_lo, vcc_lo") != std::string::npos), "new decoder did not decode VOP3-encoded V_CMP_NE_U64"); - Check(Common::ContainsStr(result.ir_dump, - "CompareNeU64 vcc_lo, exec_lo, vcc_lo"), + Check((result.ir_dump.find("CompareNeU64 vcc_lo, exec_lo, vcc_lo") != std::string::npos), "V_CMP_NE_U64 did not lower to 64-bit compare IR"); - Check(Common::ContainsStr(result.decoded_dump, "v_mad_f32 v8"), + Check((result.decoded_dump.find("v_mad_f32 v8") != std::string::npos), "new decoder did not decode VOP3 mad"); Check( - Common::ContainsStr(result.decoded_dump, "v_mad_f32 v4, v1.neg, v9, s4"), + (result.decoded_dump.find("v_mad_f32 v4, v1.neg, v9, s4") != std::string::npos), "new decoder did not decode VOP3 mad source modifiers"); Check( - Common::ContainsStr(result.decoded_dump, "v_cubeid_f32 v110, v5, v6, v7"), + (result.decoded_dump.find("v_cubeid_f32 v110, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_CUBEID_F32"); Check( - Common::ContainsStr(result.decoded_dump, "v_cubesc_f32 v111, v5, v6, v7"), + (result.decoded_dump.find("v_cubesc_f32 v111, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_CUBESC_F32"); Check( - Common::ContainsStr(result.decoded_dump, "v_cubetc_f32 v112, v5, v6, v7"), + (result.decoded_dump.find("v_cubetc_f32 v112, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_CUBETC_F32"); Check( - Common::ContainsStr(result.decoded_dump, "v_cubema_f32 v113, v5, v6, v7"), + (result.decoded_dump.find("v_cubema_f32 v113, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_CUBEMA_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cubema_f32 v5, v2, v0, v6.neg"), + Check((result.decoded_dump.find("v_cubema_f32 v5, v2, v0, v6.neg") != std::string::npos), "new decoder did not decode V_CUBEMA_F32 source modifier"); - Check(Common::ContainsStr(result.decoded_dump, "v_fma_f32 v37"), + Check((result.decoded_dump.find("v_fma_f32 v37") != std::string::npos), "new decoder did not decode VOP3 fma"); - Check(Common::ContainsStr(result.decoded_dump, "v_min3_f32 v38"), + Check((result.decoded_dump.find("v_min3_f32 v38") != std::string::npos), "new decoder did not decode VOP3 min3"); - Check(Common::ContainsStr(result.decoded_dump, "v_max3_f32 v39"), + Check((result.decoded_dump.find("v_max3_f32 v39") != std::string::npos), "new decoder did not decode VOP3 max3"); - Check(Common::ContainsStr(result.decoded_dump, "v_med3_f32 v40"), + Check((result.decoded_dump.find("v_med3_f32 v40") != std::string::npos), "new decoder did not decode VOP3 med3"); - Check(Common::ContainsStr(result.decoded_dump, "v_min3_i32 v41"), + Check((result.decoded_dump.find("v_min3_i32 v41") != std::string::npos), "new decoder did not decode VOP3 signed min3"); - Check(Common::ContainsStr(result.decoded_dump, "v_min3_u32 v42"), + Check((result.decoded_dump.find("v_min3_u32 v42") != std::string::npos), "new decoder did not decode VOP3 unsigned min3"); - Check(Common::ContainsStr(result.decoded_dump, "v_max3_i32 v43"), + Check((result.decoded_dump.find("v_max3_i32 v43") != std::string::npos), "new decoder did not decode VOP3 signed max3"); - Check(Common::ContainsStr(result.decoded_dump, "v_max3_u32 v44"), + Check((result.decoded_dump.find("v_max3_u32 v44") != std::string::npos), "new decoder did not decode VOP3 unsigned max3"); - Check(Common::ContainsStr(result.decoded_dump, "v_med3_i32 v45"), + Check((result.decoded_dump.find("v_med3_i32 v45") != std::string::npos), "new decoder did not decode VOP3 signed med3"); - Check(Common::ContainsStr(result.decoded_dump, "v_med3_u32 v46"), + Check((result.decoded_dump.find("v_med3_u32 v46") != std::string::npos), "new decoder did not decode VOP3 unsigned med3"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfe_u32 v47"), + Check((result.decoded_dump.find("v_bfe_u32 v47") != std::string::npos), "new decoder did not decode VOP3 unsigned bitfield extract"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfe_i32 v48"), + Check((result.decoded_dump.find("v_bfe_i32 v48") != std::string::npos), "new decoder did not decode VOP3 signed bitfield extract"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfi_b32 v49"), + Check((result.decoded_dump.find("v_bfi_b32 v49") != std::string::npos), "new decoder did not decode VOP3 bitfield insert-select"); - Check(Common::ContainsStr(result.decoded_dump, "v_alignbit_b32 v50"), + Check((result.decoded_dump.find("v_alignbit_b32 v50") != std::string::npos), "new decoder did not decode VOP3 alignbit"); - Check(Common::ContainsStr(result.decoded_dump, "v_alignbyte_b32 v115"), + Check((result.decoded_dump.find("v_alignbyte_b32 v115") != std::string::npos), "new decoder did not decode VOP3 alignbyte"); - Check(Common::ContainsStr(result.decoded_dump, "v_add3_u32 v51"), + Check((result.decoded_dump.find("v_add3_u32 v51") != std::string::npos), "new decoder did not decode VOP3 add3"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_lo_u32 v52, v5, v6"), + Check((result.decoded_dump.find("v_mul_lo_u32 v52, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_MUL_LO_U32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_hi_u32 v53, v5, v6"), + Check((result.decoded_dump.find("v_mul_hi_u32 v53, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_MUL_HI_U32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_hi_i32 v114, v5, v6"), + Check((result.decoded_dump.find("v_mul_hi_i32 v114, v5, v6") != std::string::npos), "new decoder did not decode RDNA2 V_MUL_HI_I32"); Check( - Common::ContainsStr(result.decoded_dump, "v_and_or_b32 v54, v5, v6, v7"), + (result.decoded_dump.find("v_and_or_b32 v54, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_AND_OR_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_or3_b32 v55, v5, v6, v7"), + Check((result.decoded_dump.find("v_or3_b32 v55, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_OR3_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_xor3_b32 v56, v5, v6, v7"), + Check((result.decoded_dump.find("v_xor3_b32 v56, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_XOR3_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_lshl_add_u32 v57, v5, v6, v7"), + Check((result.decoded_dump.find("v_lshl_add_u32 v57, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_LSHL_ADD_U32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_add_lshl_u32 v58, v5, v6, v7"), + Check((result.decoded_dump.find("v_add_lshl_u32 v58, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_ADD_LSHL_U32"); - Check(Common::ContainsStr(result.decoded_dump, "v_xad_u32 v59, v5, v6, v7"), + Check((result.decoded_dump.find("v_xad_u32 v59, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_XAD_U32"); Check( - Common::ContainsStr(result.decoded_dump, "v_lshl_or_b32 v60, v5, v6, v7"), + (result.decoded_dump.find("v_lshl_or_b32 v60, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_LSHL_OR_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_sad_u32 v61, v5, v6, v7"), + Check((result.decoded_dump.find("v_sad_u32 v61, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_SAD_U32"); Check( - Common::ContainsStr(result.decoded_dump, "v_mad_i32_i24 v62, v5, v6, v7"), + (result.decoded_dump.find("v_mad_i32_i24 v62, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_MAD_I32_I24"); Check( - Common::ContainsStr(result.decoded_dump, "v_mad_u32_u24 v63, v5, v6, v7"), + (result.decoded_dump.find("v_mad_u32_u24 v63, v5, v6, v7") != std::string::npos), "new decoder did not decode old-backed V_MAD_U32_U24"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_lo_i32 v69, v5, v6"), + Check((result.decoded_dump.find("v_mul_lo_i32 v69, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_MUL_LO_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_i32 v70, s0, v5, v6"), + Check((result.decoded_dump.find("v_add_i32 v70, s0, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_ADD_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_sub_i32 v71, s0, v5, v6"), + Check((result.decoded_dump.find("v_sub_i32 v71, s0, v5, v6") != std::string::npos), "new decoder did not decode RDNA2 V_SUB_CO_U32"); Check( - Common::ContainsStr(result.decoded_dump, "v_subrev_i32 v72, s0, v5, v6"), + (result.decoded_dump.find("v_subrev_i32 v72, s0, v5, v6") != std::string::npos), "new decoder did not decode old-backed V_SUBREV_I32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_max_i16 v7.sdwa(sel=4,sext=0), 0x0000ffff, " - "v5.opsel(lo=1,hi=0,neghi=0)"), + Check((result.decoded_dump.find("v_max_i16 v7.sdwa(sel=4,sext=0), 0x0000ffff, " + "v5.opsel(lo=1,hi=0,neghi=0)") != std::string::npos), "new decoder did not decode RDNA2 V_MAX_I16 literal/op_sel form"); - Check(Common::ContainsStr( - result.decoded_dump, - "v_min_i16 v7.sdwa(sel=5,sext=0), 2, v4.opsel(lo=1,hi=0,neghi=0)"), + Check((result.decoded_dump.find("v_min_i16 v7.sdwa(sel=5,sext=0), 2, v4.opsel(lo=1,hi=0,neghi=0)") != std::string::npos), "new decoder did not decode RDNA2 V_MIN_I16 op_sel form"); - Check(Common::ContainsStr(result.decoded_dump, "v_bfm_b32 v73, 1, 4"), + Check((result.decoded_dump.find("v_bfm_b32 v73, 1, 4") != std::string::npos), "new decoder did not decode old-backed V_BFM_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_readlane_b32 s26, v5, 2"), + Check((result.decoded_dump.find("v_readlane_b32 s26, v5, 2") != std::string::npos), "new decoder did not decode old-backed V_READLANE_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_writelane_b32 v107, v5, 2"), + Check((result.decoded_dump.find("v_writelane_b32 v107, v5, 2") != std::string::npos), "new decoder did not decode old-backed V_WRITELANE_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_permlane16_b32 v108, v5, 0, 0"), + Check((result.decoded_dump.find("v_permlane16_b32 v108, v5, 0, 0") != std::string::npos), "new decoder did not decode old-backed V_PERMLANE16_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_permlanex16_b32 v109, v5, 0, 0"), + Check((result.decoded_dump.find("v_permlanex16_b32 v109, v5, 0, 0") != std::string::npos), "new decoder did not decode old-backed V_PERMLANEX16_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cvt_pkrtz_f16_f32 v75, v6, v6"), + Check((result.decoded_dump.find("v_cvt_pkrtz_f16_f32 v75, v6, v6") != std::string::npos), "new decoder did not decode old-backed V_CVT_PKRTZ_F16_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cvt_pkrtz_f16_f32 v0, v0.neg, v1.neg"), + Check((result.decoded_dump.find("v_cvt_pkrtz_f16_f32 v0, v0.neg, v1.neg") != std::string::npos), "new decoder did not decode V_CVT_PKRTZ_F16_F32 source modifiers"); - Check(Common::ContainsStr(result.decoded_dump, "v_ldexp_f32 v76, v6, 1"), + Check((result.decoded_dump.find("v_ldexp_f32 v76, v6, 1") != std::string::npos), "new decoder did not decode old-backed V_LDEXP_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_ldexp_f32 v7, v9.abs, -2"), + Check((result.decoded_dump.find("v_ldexp_f32 v7, v9.abs, -2") != std::string::npos), "new decoder did not decode V_LDEXP_F32 source modifier"); Check( - Common::ContainsStr(result.decoded_dump, "v_ldexp_f32 v13.clamp, v6, -4"), + (result.decoded_dump.find("v_ldexp_f32 v13.clamp, v6, -4") != std::string::npos), "new decoder did not decode V_LDEXP_F32 clamp modifier"); - Check(Common::ContainsStr(result.decoded_dump, "v_bcnt_u32_b32 v77, v5, v6"), + Check((result.decoded_dump.find("v_bcnt_u32_b32 v77, v5, v6") != std::string::npos), "new decoder did not decode old-backed VOP3 V_BCNT_U32_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cvt_pknorm_i16_f32 v78, v6, v6"), + Check((result.decoded_dump.find("v_cvt_pknorm_i16_f32 v78, v6, v6") != std::string::npos), "new decoder did not decode old-backed V_CVT_PKNORM_I16_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_cvt_pknorm_u16_f32 v79, v6, v6"), + Check((result.decoded_dump.find("v_cvt_pknorm_u16_f32 v79, v6, v6") != std::string::npos), "new decoder did not decode old-backed V_CVT_PKNORM_U16_F32"); Check( - Common::ContainsStr(result.decoded_dump, "v_cvt_pk_u16_u32 v80, v5, v7"), + (result.decoded_dump.find("v_cvt_pk_u16_u32 v80, v5, v7") != std::string::npos), "new decoder did not decode old-backed V_CVT_PK_U16_U32"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_f32 v2, s0, s72"), + Check((result.decoded_dump.find("v_mul_f32 v2, s0, s72") != std::string::npos), "new decoder did not decode old-backed V_MUL_F32 SDWA full-width form"); - Check(Common::ContainsStr(result.decoded_dump, "v_mul_f16 v9.sdwa(sel=4") && - Common::ContainsStr(result.decoded_dump, "v0.sdwa(sel=4") && - Common::ContainsStr(result.decoded_dump, "v1.sdwa(sel=4"), + Check((result.decoded_dump.find("v_mul_f16 v9.sdwa(sel=4") != std::string::npos) && + (result.decoded_dump.find("v0.sdwa(sel=4") != std::string::npos) && + (result.decoded_dump.find("v1.sdwa(sel=4") != std::string::npos), "new decoder did not decode V_MUL_F16 SDWA low-half form"); - Check(Common::ContainsStr(result.decoded_dump, "v_sub_f16 v0.sdwa(sel=4") && - Common::ContainsStr(result.decoded_dump, "v0.sdwa(sel=4"), + Check((result.decoded_dump.find("v_sub_f16 v0.sdwa(sel=4") != std::string::npos) && + (result.decoded_dump.find("v0.sdwa(sel=4") != std::string::npos), "new decoder did not decode V_SUB_F16 SDWA low-half form"); - Check(Common::ContainsStr(result.ir_dump, "ConvertU32ToF32 v6"), + Check((result.ir_dump.find("ConvertU32ToF32 v6") != std::string::npos), "VOP1 uint-to-float conversion did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "MoveU32 v103, v5.sdwa(sel=4"), + Check((result.ir_dump.find("MoveU32 v103, v5.sdwa(sel=4") != std::string::npos), "VOP1 SDWA source selector did not lower to IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF32ToF16 v105.sdwa(sel=5"), + Check((result.ir_dump.find("ConvertF32ToF16 v105.sdwa(sel=5") != std::string::npos), "VOP1 SDWA destination selector did not lower to IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "MoveU32 v106.dpp") && - Common::ContainsStr(result.ir_dump, "v5.dpp"), + Check((result.ir_dump.find("MoveU32 v106.dpp") != std::string::npos) && + (result.ir_dump.find("v5.dpp") != std::string::npos), "VOP1 DPP source/destination did not lower to IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "MoveRelSourceU32 v55, v12, m0"), + Check((result.ir_dump.find("MoveRelSourceU32 v55, v12, m0") != std::string::npos), "V_MOVRELS_B32 did not lower to indexed VGPR-source IR"); - Check(Common::ContainsStr(result.ir_dump, "IAddU32 v123, v5.sdwa(sel=4"), + Check((result.ir_dump.find("IAddU32 v123, v5.sdwa(sel=4") != std::string::npos), "VOP2 SDWA did not lower first source metadata to IR"); Check( - Common::ContainsStr(result.ir_dump, "BitwiseAndU32 v124, v5.sdwa(sel=4"), + (result.ir_dump.find("BitwiseAndU32 v124, v5.sdwa(sel=4") != std::string::npos), "VOP2 SDWA bitwise op did not lower first source metadata to IR"); - Check(Common::ContainsStr(result.ir_dump, "v6.sdwa(sel=5"), + Check((result.ir_dump.find("v6.sdwa(sel=5") != std::string::npos), "VOP2 SDWA bitwise op did not lower second source metadata to IR"); - Check(Common::ContainsStr(result.ir_dump, - "SelectMaskF32Bits v47, vcc_lo, v53.neg, v53") && - Common::ContainsStr(result.ir_dump, "v53.neg"), + Check((result.ir_dump.find("SelectMaskF32Bits v47, vcc_lo, v53.neg, v53") != std::string::npos) && + (result.ir_dump.find("v53.neg") != std::string::npos), "V_CNDMASK_B32 SDWA source modifier did not lower to float-bit select " "IR"); - Check(Common::ContainsStr(result.ir_dump, - "SelectMaskU32 v7, vcc_lo, v1, v0.sdwa(sel=4"), + Check((result.ir_dump.find("SelectMaskU32 v7, vcc_lo, v1, v0.sdwa(sel=4") != std::string::npos), "full-destination V_CNDMASK_B32 with SDWA source did not lower to " "integer select IR"); - Check(Common::ContainsStr(result.ir_dump, "FAddF32 v125.dpp") && - Common::ContainsStr(result.ir_dump, "v5.dpp"), + Check((result.ir_dump.find("FAddF32 v125.dpp") != std::string::npos) && + (result.ir_dump.find("v5.dpp") != std::string::npos), "VOP2 DPP source/destination did not lower to IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "FMulF32 v2, s0, s72"), + Check((result.ir_dump.find("FMulF32 v2, s0, s72") != std::string::npos), "V_MUL_F32 SDWA full-width form did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "MulF16 v9.sdwa(sel=4") && - Common::ContainsStr(result.ir_dump, "v0.sdwa(sel=4") && - Common::ContainsStr(result.ir_dump, "v1.sdwa(sel=4"), + Check((result.ir_dump.find("MulF16 v9.sdwa(sel=4") != std::string::npos) && + (result.ir_dump.find("v0.sdwa(sel=4") != std::string::npos) && + (result.ir_dump.find("v1.sdwa(sel=4") != std::string::npos), "V_MUL_F16 SDWA low-half form did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "SubF16 v0.sdwa(sel=4") && - Common::ContainsStr(result.ir_dump, "v0.sdwa(sel=4"), + Check((result.ir_dump.find("SubF16 v0.sdwa(sel=4") != std::string::npos) && + (result.ir_dump.find("v0.sdwa(sel=4") != std::string::npos), "V_SUB_F16 SDWA low-half form did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF32ToU32 v7"), + Check((result.ir_dump.find("ConvertF32ToU32 v7") != std::string::npos), "VOP1 float-to-uint conversion did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertI32ToF32 v9"), + Check((result.ir_dump.find("ConvertI32ToF32 v9") != std::string::npos), "VOP1 signed int-to-float conversion did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF32ToI32 v10"), + Check((result.ir_dump.find("ConvertF32ToI32 v10") != std::string::npos), "VOP1 float-to-signed-int conversion did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF32ToF16 v99, v6"), + Check((result.ir_dump.find("ConvertF32ToF16 v99, v6") != std::string::npos), "V_CVT_F16_F32 did not lower to shared half-pack IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF16ToF32 v100, v99"), + Check((result.ir_dump.find("ConvertF16ToF32 v100, v99") != std::string::npos), "V_CVT_F32_F16 did not lower to shared half-unpack IR"); - Check(Common::ContainsStr(result.ir_dump, - "ConvertF16ToF32 v8, v2.sdwa(sel=5") && - Common::ContainsStr(result.ir_dump, "v2.sdwa(sel=5,sext=0).abs"), + Check((result.ir_dump.find("ConvertF16ToF32 v8, v2.sdwa(sel=5") != std::string::npos) && + (result.ir_dump.find("v2.sdwa(sel=5,sext=0).abs") != std::string::npos), "V_CVT_F32_F16 SDWA source selector modifier did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ReadFirstLaneU32 s24, v5"), + Check((result.ir_dump.find("ReadFirstLaneU32 s24, v5") != std::string::npos), "V_READFIRSTLANE_B32 did not lower to subgroup IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertFloorF32ToI32 v64, v6"), + Check((result.ir_dump.find("ConvertFloorF32ToI32 v64, v6") != std::string::npos), "V_CVT_FLR_I32_F32 did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertI4ToOffsetF32 v81, v5"), + Check((result.ir_dump.find("ConvertI4ToOffsetF32 v81, v5") != std::string::npos), "V_CVT_OFF_F32_I4 did not lower to shared offset-convert IR"); - Check(Common::ContainsStr(result.ir_dump, - "ConvertByteU32ToF32 v65, v5, 0x00000000"), + Check((result.ir_dump.find("ConvertByteU32ToF32 v65, v5, 0x00000000") != std::string::npos), "V_CVT_F32_UBYTE0 did not lower to shared byte-convert IR"); - Check(Common::ContainsStr(result.ir_dump, - "ConvertByteU32ToF32 v66, v5, 0x00000001"), + Check((result.ir_dump.find("ConvertByteU32ToF32 v66, v5, 0x00000001") != std::string::npos), "V_CVT_F32_UBYTE1 did not lower to shared byte-convert IR"); - Check(Common::ContainsStr(result.ir_dump, - "ConvertByteU32ToF32 v67, v5, 0x00000002"), + Check((result.ir_dump.find("ConvertByteU32ToF32 v67, v5, 0x00000002") != std::string::npos), "V_CVT_F32_UBYTE2 did not lower to shared byte-convert IR"); - Check(Common::ContainsStr(result.ir_dump, - "ConvertByteU32ToF32 v68, v5, 0x00000003"), + Check((result.ir_dump.find("ConvertByteU32ToF32 v68, v5, 0x00000003") != std::string::npos), "V_CVT_F32_UBYTE3 did not lower to shared byte-convert IR"); - Check(Common::ContainsStr(result.ir_dump, "RcpF32 v11"), + Check((result.ir_dump.find("RcpF32 v11") != std::string::npos), "VOP1 reciprocal did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FractF32 v12"), + Check((result.ir_dump.find("FractF32 v12") != std::string::npos), "VOP1 fract did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "TruncF32 v13"), + Check((result.ir_dump.find("TruncF32 v13") != std::string::npos), "VOP1 trunc did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CeilF32 v14"), + Check((result.ir_dump.find("CeilF32 v14") != std::string::npos), "VOP1 ceil did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "RoundEvenF32 v15"), + Check((result.ir_dump.find("RoundEvenF32 v15") != std::string::npos), "VOP1 round-even did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FloorF32 v16"), + Check((result.ir_dump.find("FloorF32 v16") != std::string::npos), "VOP1 floor did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "Exp2F32 v17"), + Check((result.ir_dump.find("Exp2F32 v17") != std::string::npos), "VOP1 exp2 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "Log2F32 v18"), + Check((result.ir_dump.find("Log2F32 v18") != std::string::npos), "VOP1 log2 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "InverseSqrtF32 v19"), + Check((result.ir_dump.find("InverseSqrtF32 v19") != std::string::npos), "VOP1 inverse-sqrt did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "SqrtF32 v20"), + Check((result.ir_dump.find("SqrtF32 v20") != std::string::npos), "VOP1 sqrt did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "SinF32 v21"), + Check((result.ir_dump.find("SinF32 v21") != std::string::npos), "VOP1 sin did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CosF32 v22"), + Check((result.ir_dump.find("CosF32 v22") != std::string::npos), "VOP1 cos did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNotU32 v27"), + Check((result.ir_dump.find("BitwiseNotU32 v27") != std::string::npos), "VOP1 not did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitReverseU32 v28"), + Check((result.ir_dump.find("BitReverseU32 v28") != std::string::npos), "VOP1 bit reverse did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FindMsbFromHighU32 v31"), + Check((result.ir_dump.find("FindMsbFromHighU32 v31") != std::string::npos), "VOP1 find-first-bit-high did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FindLsbU32 v32"), + Check((result.ir_dump.find("FindLsbU32 v32") != std::string::npos), "VOP1 find-first-bit-low did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXnorU32 v83, v5, v6"), + Check((result.ir_dump.find("BitwiseXnorU32 v83, v5, v6") != std::string::npos), "V_XNOR_B32 did not lower to shared xnor IR"); - Check(Common::ContainsStr(result.ir_dump, "MaskedBitCountLowU32 v84, v5, v6"), + Check((result.ir_dump.find("MaskedBitCountLowU32 v84, v5, v6") != std::string::npos), "V_MBCNT_LO_U32_B32 did not lower to shared masked bit-count IR"); Check( - Common::ContainsStr(result.ir_dump, "MaskedBitCountHighU32 v85, v5, v6"), + (result.ir_dump.find("MaskedBitCountHighU32 v85, v5, v6") != std::string::npos), "V_MBCNT_HI_U32_B32 did not lower to shared masked bit-count IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v89, v6, v6, v89"), + Check((result.ir_dump.find("FMadF32 v89, v6, v6, v89") != std::string::npos), "V_MAC_F32 did not lower with the destination register as addend"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v90, v6, 0x3f800000, v5"), + Check((result.ir_dump.find("FMadF32 v90, v6, 0x3f800000, v5") != std::string::npos), "V_MADMK_F32 did not lower with the literal in source 1"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v91, v6, v5, 0x40000000"), + Check((result.ir_dump.find("FMadF32 v91, v6, v5, 0x40000000") != std::string::npos), "V_MADAK_F32 did not lower with the literal in source 2"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v92, v6, v6, v92"), + Check((result.ir_dump.find("FMadF32 v92, v6, v6, v92") != std::string::npos), "alternate V_MAC_F32 did not lower with the destination register as " "addend"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v93, v6, 0x3f000000, v5"), + Check((result.ir_dump.find("FMadF32 v93, v6, 0x3f000000, v5") != std::string::npos), "alternate V_MADMK_F32 did not lower with the literal in source 1"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v94, v6, v5, 0x40400000"), + Check((result.ir_dump.find("FMadF32 v94, v6, v5, 0x40400000") != std::string::npos), "alternate V_MADAK_F32 did not lower with the literal in source 2"); - Check(Common::ContainsStr(result.ir_dump, "PackF32ToF16Rtz v95, v6, v6"), + Check((result.ir_dump.find("PackF32ToF16Rtz v95, v6, v6") != std::string::npos), "native V_CVT_PKRTZ_F16_F32 did not lower to shared pack IR"); Check( - Common::ContainsStr(result.ir_dump, "Dot2AccF32F16 v102, v95, v95, v102"), + (result.ir_dump.find("Dot2AccF32F16 v102, v95, v95, v102") != std::string::npos), "V_DOT2C_F32_F16 did not lower to explicit dot-accumulate IR"); - Check(Common::ContainsStr(result.ir_dump, - "IAddCarryU32 v97, vcc_lo, v5, v6, vcc_lo"), + Check((result.ir_dump.find("IAddCarryU32 v97, vcc_lo, v5, v6, vcc_lo") != std::string::npos), "V_ADD_CO_U32 did not lower to carry-add IR"); - Check(Common::ContainsStr(result.ir_dump, "FAddF32 v35"), + Check((result.ir_dump.find("FAddF32 v35") != std::string::npos), "VOP3-encoded VOP2 float add did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "UMulU24U32 v36"), + Check((result.ir_dump.find("UMulU24U32 v36") != std::string::npos), "VOP3-encoded VOP2 24-bit multiply did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXnorU32 v86, v5, v6"), + Check((result.ir_dump.find("BitwiseXnorU32 v86, v5, v6") != std::string::npos), "VOP3-encoded V_XNOR_B32 did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v96, v6, v6, v96"), + Check((result.ir_dump.find("FMadF32 v96, v6, v6, v96") != std::string::npos), "VOP3-encoded V_MAC_F32 did not lower with the destination register as " "addend"); - Check(Common::ContainsStr(result.ir_dump, - "IAddCarryU32 v98, s30, v5, v6, vcc_lo"), + Check((result.ir_dump.find("IAddCarryU32 v98, s30, v5, v6, vcc_lo") != std::string::npos), "VOP3-encoded V_ADD_CO_U32 did not lower to carry-add IR"); - Check(Common::ContainsStr(result.ir_dump, "MaskedBitCountLowU32 v87, v5, v6"), + Check((result.ir_dump.find("MaskedBitCountLowU32 v87, v5, v6") != std::string::npos), "VOP3-encoded V_MBCNT_LO_U32_B32 did not lower through shared IR"); Check( - Common::ContainsStr(result.ir_dump, "MaskedBitCountHighU32 v88, v5, v6"), + (result.ir_dump.find("MaskedBitCountHighU32 v88, v5, v6") != std::string::npos), "VOP3-encoded V_MBCNT_HI_U32_B32 did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "MoveU32 v23"), + Check((result.ir_dump.find("MoveU32 v23") != std::string::npos), "VOP3-encoded VOP1 move did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "ReadFirstLaneU32 s25, v5"), + Check((result.ir_dump.find("ReadFirstLaneU32 s25, v5") != std::string::npos), "VOP3-encoded V_READFIRSTLANE_B32 did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "ReadLaneU32 s26, v5, 0x00000002"), + Check((result.ir_dump.find("ReadLaneU32 s26, v5, 0x00000002") != std::string::npos), "V_READLANE_B32 did not lower to subgroup lane IR"); Check( - Common::ContainsStr(result.ir_dump, "WriteLaneU32 v107, v5, 0x00000002"), + (result.ir_dump.find("WriteLaneU32 v107, v5, 0x00000002") != std::string::npos), "V_WRITELANE_B32 did not lower to subgroup lane IR"); - Check(Common::ContainsStr(result.ir_dump, - "Permlane16B32 v108, v5, 0x00000000, 0x00000000"), + Check((result.ir_dump.find("Permlane16B32 v108, v5, 0x00000000, 0x00000000") != std::string::npos), "V_PERMLANE16_B32 did not lower to subgroup perm-lane IR"); - Check(Common::ContainsStr(result.ir_dump, - "Permlanex16B32 v109, v5, 0x00000000, 0x00000000"), + Check((result.ir_dump.find("Permlanex16B32 v109, v5, 0x00000000, 0x00000000") != std::string::npos), "V_PERMLANEX16_B32 did not lower to subgroup perm-lane IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertI32ToF32 v24"), + Check((result.ir_dump.find("ConvertI32ToF32 v24") != std::string::npos), "VOP3-encoded VOP1 signed conversion did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertFloorF32ToI32 v74, v6"), + Check((result.ir_dump.find("ConvertFloorF32ToI32 v74, v6") != std::string::npos), "VOP3-encoded V_CVT_FLR_I32_F32 did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertI4ToOffsetF32 v82, v5"), + Check((result.ir_dump.find("ConvertI4ToOffsetF32 v82, v5") != std::string::npos), "VOP3-encoded V_CVT_OFF_F32_I4 did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "FractF32 v25"), + Check((result.ir_dump.find("FractF32 v25") != std::string::npos), "VOP3-encoded VOP1 fract did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "RcpF32 v26"), + Check((result.ir_dump.find("RcpF32 v26") != std::string::npos), "VOP3-encoded VOP1 reciprocal did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNotU32 v29"), + Check((result.ir_dump.find("BitwiseNotU32 v29") != std::string::npos), "VOP3-encoded VOP1 not did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "BitReverseU32 v30"), + Check((result.ir_dump.find("BitReverseU32 v30") != std::string::npos), "VOP3-encoded VOP1 bit reverse did not lower through shared IR"); Check( - Common::ContainsStr(result.ir_dump, "FindMsbFromHighU32 v33"), + (result.ir_dump.find("FindMsbFromHighU32 v33") != std::string::npos), "VOP3-encoded VOP1 find-first-bit-high did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "FindLsbU32 v34"), + Check((result.ir_dump.find("FindLsbU32 v34") != std::string::npos), "VOP3-encoded VOP1 find-first-bit-low did not lower through shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareGtF32"), + Check((result.ir_dump.find("CompareGtF32") != std::string::npos), "VOPC float compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareMaskGtF32 exec_lo"), + Check((result.ir_dump.find("CompareMaskGtF32 exec_lo") != std::string::npos), "VOPC float compare-and-mask did not lower to exec mask IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareMaskGtU32 exec_lo"), + Check((result.ir_dump.find("CompareMaskGtU32 exec_lo") != std::string::npos), "VOPC uint compare-and-mask did not lower to exec mask IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareFalse vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareFalse vcc_lo, v6, v6") != std::string::npos), "VOPC false compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareTrue vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareTrue vcc_lo, v6, v6") != std::string::npos), "VOPC true compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareOrderedF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareOrderedF32 vcc_lo, v6, v6") != std::string::npos), "VOPC ordered compare did not lower to shared IR"); Check( - Common::ContainsStr(result.ir_dump, "CompareUnorderedF32 vcc_lo, v6, v6"), + (result.ir_dump.find("CompareUnorderedF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordLtF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordLtF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-less compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordEqF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordEqF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-equal compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordLeF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordLeF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-less-equal compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordGtF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordGtF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-greater compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordNeF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordNeF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-not-equal compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareUnordNeF32 s0, 0x3f000000, v1"), + Check((result.ir_dump.find("CompareUnordNeF32 s0, 0x3f000000, v1") != std::string::npos), "VOPC SDWA unordered-not-equal compare did not lower to " "scalar-destination IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareUnordGeF32 vcc_lo, v6, v6"), + Check((result.ir_dump.find("CompareUnordGeF32 vcc_lo, v6, v6") != std::string::npos), "VOPC unordered-greater-equal compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareMaskUnordLtF32 exec_lo, v6, v6"), + Check((result.ir_dump.find("CompareMaskUnordLtF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-less compare-and-mask did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareMaskUnordEqF32 exec_lo, v6, v6"), + Check((result.ir_dump.find("CompareMaskUnordEqF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-equal compare-and-mask did not lower to shared IR"); Check( - Common::ContainsStr(result.ir_dump, - "CompareMaskUnordLeF32 exec_lo, v6, v6"), + (result.ir_dump.find("CompareMaskUnordLeF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-less-equal compare-and-mask did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareMaskUnordGtF32 exec_lo, v6, v6"), + Check((result.ir_dump.find("CompareMaskUnordGtF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-greater compare-and-mask did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareMaskUnordNeF32 exec_lo, v6, v6"), + Check((result.ir_dump.find("CompareMaskUnordNeF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-not-equal compare-and-mask did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, - "CompareMaskUnordGeF32 exec_lo, v6, v6"), + Check((result.ir_dump.find("CompareMaskUnordGeF32 exec_lo, v6, v6") != std::string::npos), "VOPC unordered-greater-equal compare-and-mask did not lower to shared " "IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareFalse vcc_lo, v5, v5"), + Check((result.ir_dump.find("CompareFalse vcc_lo, v5, v5") != std::string::npos), "VOPC integer false compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareTrue vcc_lo, v5, v5"), + Check((result.ir_dump.find("CompareTrue vcc_lo, v5, v5") != std::string::npos), "VOPC integer true compare did not lower to shared IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v8"), + Check((result.ir_dump.find("FMadF32 v8") != std::string::npos), "VOP3 mad did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v4, v1.neg, v9, s4"), + Check((result.ir_dump.find("FMadF32 v4, v1.neg, v9, s4") != std::string::npos), "VOP3 mad source modifiers did not lower to IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "CubeIdF32 v110, v5, v6, v7"), + Check((result.ir_dump.find("CubeIdF32 v110, v5, v6, v7") != std::string::npos), "V_CUBEID_F32 did not lower to cube IR"); - Check(Common::ContainsStr(result.ir_dump, "CubeScF32 v111, v5, v6, v7"), + Check((result.ir_dump.find("CubeScF32 v111, v5, v6, v7") != std::string::npos), "V_CUBESC_F32 did not lower to cube IR"); - Check(Common::ContainsStr(result.ir_dump, "CubeTcF32 v112, v5, v6, v7"), + Check((result.ir_dump.find("CubeTcF32 v112, v5, v6, v7") != std::string::npos), "V_CUBETC_F32 did not lower to cube IR"); - Check(Common::ContainsStr(result.ir_dump, "CubeMaF32 v113, v5, v6, v7"), + Check((result.ir_dump.find("CubeMaF32 v113, v5, v6, v7") != std::string::npos), "V_CUBEMA_F32 did not lower to cube IR"); - Check(Common::ContainsStr(result.ir_dump, "CubeMaF32 v5, v2, v0, v6.neg"), + Check((result.ir_dump.find("CubeMaF32 v5, v2, v0, v6.neg") != std::string::npos), "V_CUBEMA_F32 source modifier did not lower to cube IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v37"), + Check((result.ir_dump.find("FMadF32 v37") != std::string::npos), "VOP3 fma did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FMin3F32 v38"), + Check((result.ir_dump.find("FMin3F32 v38") != std::string::npos), "VOP3 min3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FMax3F32 v39"), + Check((result.ir_dump.find("FMax3F32 v39") != std::string::npos), "VOP3 max3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FMed3F32 v40"), + Check((result.ir_dump.find("FMed3F32 v40") != std::string::npos), "VOP3 med3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMin3I32 v41"), + Check((result.ir_dump.find("IMin3I32 v41") != std::string::npos), "VOP3 signed min3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMin3U32 v42"), + Check((result.ir_dump.find("UMin3U32 v42") != std::string::npos), "VOP3 unsigned min3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMax3I32 v43"), + Check((result.ir_dump.find("IMax3I32 v43") != std::string::npos), "VOP3 signed max3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMax3U32 v44"), + Check((result.ir_dump.find("UMax3U32 v44") != std::string::npos), "VOP3 unsigned max3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMed3I32 v45"), + Check((result.ir_dump.find("IMed3I32 v45") != std::string::npos), "VOP3 signed med3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMed3U32 v46"), + Check((result.ir_dump.find("UMed3U32 v46") != std::string::npos), "VOP3 unsigned med3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldExtract3U32 v47"), + Check((result.ir_dump.find("BitFieldExtract3U32 v47") != std::string::npos), "VOP3 unsigned bitfield extract did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldExtract3I32 v48"), + Check((result.ir_dump.find("BitFieldExtract3I32 v48") != std::string::npos), "VOP3 signed bitfield extract did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldInsertSelectU32 v49"), + Check((result.ir_dump.find("BitFieldInsertSelectU32 v49") != std::string::npos), "VOP3 bitfield insert-select did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AlignBitU32 v50"), + Check((result.ir_dump.find("AlignBitU32 v50") != std::string::npos), "VOP3 alignbit did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AlignByteU32 v115"), + Check((result.ir_dump.find("AlignByteU32 v115") != std::string::npos), "VOP3 alignbyte did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IAdd3U32 v51"), + Check((result.ir_dump.find("IAdd3U32 v51") != std::string::npos), "VOP3 add3 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMulU32 v52, v5, v6"), + Check((result.ir_dump.find("IMulU32 v52, v5, v6") != std::string::npos), "V_MUL_LO_U32 did not lower to multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "UMulHighU32 v53, v5, v6"), + Check((result.ir_dump.find("UMulHighU32 v53, v5, v6") != std::string::npos), "V_MUL_HI_U32 did not lower to high-multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "SMulHighI32 v114, v5, v6"), + Check((result.ir_dump.find("SMulHighI32 v114, v5, v6") != std::string::npos), "V_MUL_HI_I32 did not lower to signed high-multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseAndOrU32 v54, v5, v6, v7"), + Check((result.ir_dump.find("BitwiseAndOrU32 v54, v5, v6, v7") != std::string::npos), "V_AND_OR_B32 did not lower to ternary bitwise IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseOr3U32 v55, v5, v6, v7"), + Check((result.ir_dump.find("BitwiseOr3U32 v55, v5, v6, v7") != std::string::npos), "V_OR3_B32 did not lower to ternary bitwise IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXor3U32 v56, v5, v6, v7"), + Check((result.ir_dump.find("BitwiseXor3U32 v56, v5, v6, v7") != std::string::npos), "V_XOR3_B32 did not lower to ternary bitwise IR"); - Check(Common::ContainsStr(result.ir_dump, "ShiftLeftAddU32 v57, v5, v6, v7"), + Check((result.ir_dump.find("ShiftLeftAddU32 v57, v5, v6, v7") != std::string::npos), "V_LSHL_ADD_U32 did not lower to shared shift-left-add IR"); - Check(Common::ContainsStr(result.ir_dump, "AddShiftLeftU32 v58, v5, v6, v7"), + Check((result.ir_dump.find("AddShiftLeftU32 v58, v5, v6, v7") != std::string::npos), "V_ADD_LSHL_U32 did not lower to add-shift-left IR"); - Check(Common::ContainsStr(result.ir_dump, "XorAddU32 v59, v5, v6, v7"), + Check((result.ir_dump.find("XorAddU32 v59, v5, v6, v7") != std::string::npos), "V_XAD_U32 did not lower to xor-add IR"); - Check(Common::ContainsStr(result.ir_dump, "ShiftLeftOrU32 v60, v5, v6, v7"), + Check((result.ir_dump.find("ShiftLeftOrU32 v60, v5, v6, v7") != std::string::npos), "V_LSHL_OR_B32 did not lower to shift-left-or IR"); - Check(Common::ContainsStr(result.ir_dump, "SadU32 v61, v5, v6, v7"), + Check((result.ir_dump.find("SadU32 v61, v5, v6, v7") != std::string::npos), "V_SAD_U32 did not lower to sad IR"); - Check(Common::ContainsStr(result.ir_dump, "IMadI24U32 v62, v5, v6, v7"), + Check((result.ir_dump.find("IMadI24U32 v62, v5, v6, v7") != std::string::npos), "V_MAD_I32_I24 did not lower to signed 24-bit mad IR"); - Check(Common::ContainsStr(result.ir_dump, "UMadU24U32 v63, v5, v6, v7"), + Check((result.ir_dump.find("UMadU24U32 v63, v5, v6, v7") != std::string::npos), "V_MAD_U32_U24 did not lower to unsigned 24-bit mad IR"); - Check(Common::ContainsStr(result.ir_dump, "IMulU32 v69, v5, v6"), + Check((result.ir_dump.find("IMulU32 v69, v5, v6") != std::string::npos), "V_MUL_LO_I32 did not lower to multiply IR"); - Check(Common::ContainsStr(result.ir_dump, - "IAddCarryU32 v70, s0, v5, v6, 0x00000000"), + Check((result.ir_dump.find("IAddCarryU32 v70, s0, v5, v6, 0x00000000") != std::string::npos), "V_ADD_I32 did not lower to carry-out add IR"); - Check(Common::ContainsStr(result.ir_dump, "ISubBorrowU32 v71, s0, v5, v6"), + Check((result.ir_dump.find("ISubBorrowU32 v71, s0, v5, v6") != std::string::npos), "V_SUB_I32 did not lower to borrow-out subtract IR"); - Check(Common::ContainsStr(result.ir_dump, "ISubBorrowU32 v72, s0, v6, v5"), + Check((result.ir_dump.find("ISubBorrowU32 v72, s0, v6, v5") != std::string::npos), "V_SUBREV_I32 did not reverse source order in borrow-out IR"); - Check(Common::ContainsStr(result.ir_dump, - "IMaxI16 v7.sdwa(sel=4,sext=0), 0x0000ffff, " - "v5.opsel(lo=1,hi=0,neghi=0)"), + Check((result.ir_dump.find("IMaxI16 v7.sdwa(sel=4,sext=0), 0x0000ffff, " + "v5.opsel(lo=1,hi=0,neghi=0)") != std::string::npos), "V_MAX_I16 did not lower to signed halfword max IR"); - Check(Common::ContainsStr(result.ir_dump, - "IMinI16 v7.sdwa(sel=5,sext=0), 0x00000002, " - "v4.opsel(lo=1,hi=0,neghi=0)"), + Check((result.ir_dump.find("IMinI16 v7.sdwa(sel=5,sext=0), 0x00000002, " + "v4.opsel(lo=1,hi=0,neghi=0)") != std::string::npos), "V_MIN_I16 did not lower to signed halfword min IR"); - Check(Common::ContainsStr(result.ir_dump, - "BitFieldMaskU32 v73, 0x00000001, 0x00000004"), + Check((result.ir_dump.find("BitFieldMaskU32 v73, 0x00000001, 0x00000004") != std::string::npos), "V_BFM_B32 did not lower to shared bitfield-mask IR"); - Check(Common::ContainsStr(result.ir_dump, "PackF32ToF16Rtz v75, v6, v6"), + Check((result.ir_dump.find("PackF32ToF16Rtz v75, v6, v6") != std::string::npos), "V_CVT_PKRTZ_F16_F32 did not lower to shared pack IR"); Check( - Common::ContainsStr(result.ir_dump, "PackF32ToF16Rtz v0, v0.neg, v1.neg"), + (result.ir_dump.find("PackF32ToF16Rtz v0, v0.neg, v1.neg") != std::string::npos), "V_CVT_PKRTZ_F16_F32 source modifiers did not lower to shared pack IR"); - Check(Common::ContainsStr(result.ir_dump, "LdexpF32 v76, v6, 0x00000001"), + Check((result.ir_dump.find("LdexpF32 v76, v6, 0x00000001") != std::string::npos), "V_LDEXP_F32 did not lower to ldexp IR"); - Check(Common::ContainsStr(result.ir_dump, "LdexpF32 v7, v9.abs, 0xfffffffe"), + Check((result.ir_dump.find("LdexpF32 v7, v9.abs, 0xfffffffe") != std::string::npos), "V_LDEXP_F32 source modifier did not lower to IR"); Check( - Common::ContainsStr(result.ir_dump, "LdexpF32 v13.clamp, v6, 0xfffffffc"), + (result.ir_dump.find("LdexpF32 v13.clamp, v6, 0xfffffffc") != std::string::npos), "V_LDEXP_F32 clamp modifier did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitCountAddU32 v77, v5, v6"), + Check((result.ir_dump.find("BitCountAddU32 v77, v5, v6") != std::string::npos), "VOP3 V_BCNT_U32_B32 did not lower to bit-count-add IR"); - Check(Common::ContainsStr(result.ir_dump, "PackSnorm2x16F32 v78, v6, v6"), + Check((result.ir_dump.find("PackSnorm2x16F32 v78, v6, v6") != std::string::npos), "V_CVT_PKNORM_I16_F32 did not lower to shared pack IR"); - Check(Common::ContainsStr(result.ir_dump, "PackUnorm2x16F32 v79, v6, v6"), + Check((result.ir_dump.find("PackUnorm2x16F32 v79, v6, v6") != std::string::npos), "V_CVT_PKNORM_U16_F32 did not lower to shared pack IR"); - Check(Common::ContainsStr(result.ir_dump, "PackU16U32 v80, v5, v7"), + Check((result.ir_dump.find("PackU16U32 v80, v5, v7") != std::string::npos), "V_CVT_PK_U16_U32 did not lower to shared pack IR"); Check(SpirvContainsOpcode(result.spirv, 112), "SPIR-V binary does not contain OpConvertUToF"); @@ -3143,34 +3074,33 @@ void TestNewShaderRecompilerExpandedAluBatch() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_min_u32"), + Check((result.decoded_dump.find("s_min_u32") != std::string::npos), "new decoder did not decode S_MIN_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_mulk_i32"), + Check((result.decoded_dump.find("s_mulk_i32") != std::string::npos), "new decoder did not decode S_MULK_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_subrev_f32"), + Check((result.decoded_dump.find("v_subrev_f32") != std::string::npos), "new decoder did not decode V_SUBREV_F32"); - Check(Common::ContainsStr(result.decoded_dump, "v_lshlrev_b32"), + Check((result.decoded_dump.find("v_lshlrev_b32") != std::string::npos), "new decoder did not decode V_LSHLREV_B32"); - Check(Common::ContainsStr(result.ir_dump, "IMulU32 s9, s9, 0x00000003"), + Check((result.ir_dump.find("IMulU32 s9, s9, 0x00000003") != std::string::npos), "SOPK multiply did not lower to self-multiply IR"); - Check(Common::ContainsStr(result.ir_dump, "UMinU32 s10"), + Check((result.ir_dump.find("UMinU32 s10") != std::string::npos), "S_MIN_U32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMaxU32 s11"), + Check((result.ir_dump.find("UMaxU32 s11") != std::string::npos), "S_MAX_U32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FSubF32 v1, v0, 0x3f800000"), + Check((result.ir_dump.find("FSubF32 v1, v0, 0x3f800000") != std::string::npos), "V_SUBREV_F32 did not reverse source order in IR"); - Check(Common::ContainsStr(result.ir_dump, "FMinF32 v2"), + Check((result.ir_dump.find("FMinF32 v2") != std::string::npos), "V_MIN_F32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "FMaxF32 v3"), + Check((result.ir_dump.find("FMaxF32 v3") != std::string::npos), "V_MAX_F32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ISubU32 v4, v3, 0x00000002"), + Check((result.ir_dump.find("ISubU32 v4, v3, 0x00000002") != std::string::npos), "V_SUBREV_NC_U32 did not reverse source order in IR"); - Check(Common::ContainsStr(result.ir_dump, - "ShiftLeftLogicalU32 v6, v5, 0x00000001"), + Check((result.ir_dump.find("ShiftLeftLogicalU32 v6, v5, 0x00000001") != std::string::npos), "V_LSHLREV_B32 did not reverse source order in IR"); - Check(Common::ContainsStr(result.ir_dump, "UMinU32 v7"), + Check((result.ir_dump.find("UMinU32 v7") != std::string::npos), "V_MIN_U32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMaxU32 v8"), + Check((result.ir_dump.find("UMaxU32 v8") != std::string::npos), "V_MAX_U32 did not lower to IR"); Check(SpirvContainsOpcode(result.spirv, 132), "SPIR-V binary does not contain OpIMul"); @@ -3225,77 +3155,74 @@ void TestNewShaderRecompilerVop3pPackedF16() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_add_f16 v114"), + Check((result.decoded_dump.find("v_pk_add_f16 v114") != std::string::npos), "new decoder did not decode old-backed V_PK_ADD_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_mul_f16 v115"), + Check((result.decoded_dump.find("v_pk_mul_f16 v115") != std::string::npos), "new decoder did not decode old-backed V_PK_MUL_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_min_f16 v116"), + Check((result.decoded_dump.find("v_pk_min_f16 v116") != std::string::npos), "new decoder did not decode old-backed V_PK_MIN_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_max_f16 v117"), + Check((result.decoded_dump.find("v_pk_max_f16 v117") != std::string::npos), "new decoder did not decode old-backed V_PK_MAX_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_fma_f16 v118"), + Check((result.decoded_dump.find("v_pk_fma_f16 v118") != std::string::npos), "new decoder did not decode old-backed V_PK_FMA_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_fma_f32 v119"), + Check((result.decoded_dump.find("v_fma_f32 v119") != std::string::npos), "new decoder did not decode old-backed VOP3P V_FMA_F32"); - Check(Common::ContainsStr(result.decoded_dump, - "v_fma_f32 v68, v16.opsel(lo=0,hi=1,neghi=0)"), + Check((result.decoded_dump.find("v_fma_f32 v68, v16.opsel(lo=0,hi=1,neghi=0)") != std::string::npos), "new decoder did not decode VOP3P V_FMA_MIX_F32 source selectors"); - Check(Common::ContainsStr(result.decoded_dump, "v_mad_mixlo_f16 v120"), + Check((result.decoded_dump.find("v_mad_mixlo_f16 v120") != std::string::npos), "new decoder did not decode old-backed V_MAD_MIXLO_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_mad_mixhi_f16 v121"), + Check((result.decoded_dump.find("v_mad_mixhi_f16 v121") != std::string::npos), "new decoder did not decode old-backed V_MAD_MIXHI_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_fma_f16 v122"), + Check((result.decoded_dump.find("v_fma_f16 v122") != std::string::npos), "new decoder did not decode native VOP3 V_FMA_F16"); - Check(Common::ContainsStr(result.decoded_dump, - "v_mad_mixhi_f16 v126.sdwa(sel=5"), + Check((result.decoded_dump.find("v_mad_mixhi_f16 v126.sdwa(sel=5") != std::string::npos), "new decoder did not decode clamped V_MAD_MIXHI_F16 high-half " "destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_fma_f16 v127.sdwa(sel=5"), + Check((result.decoded_dump.find("v_fma_f16 v127.sdwa(sel=5") != std::string::npos), "new decoder did not decode clamped native high-half V_FMA_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pack_b32_f16 v26"), + Check((result.decoded_dump.find("v_pack_b32_f16 v26") != std::string::npos), "new decoder did not decode native V_PACK_B32_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pack_b32_f16 v43") && - Common::ContainsStr(result.decoded_dump, "v10.opsel(lo=1"), + Check((result.decoded_dump.find("v_pack_b32_f16 v43") != std::string::npos) && + (result.decoded_dump.find("v10.opsel(lo=1") != std::string::npos), "new decoder did not decode V_PACK_B32_F16 source lane selectors"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_fmac_f16 v59"), + Check((result.decoded_dump.find("v_pk_fmac_f16 v59") != std::string::npos), "new decoder did not decode VOP2 V_PK_FMAC_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v6.opsel(lo=0,hi=1,neghi=1)"), + Check((result.decoded_dump.find("v6.opsel(lo=0,hi=1,neghi=1)") != std::string::npos), "VOP3P high-lane source modifier was not dumped"); - Check(Common::ContainsStr(result.decoded_dump, "v120.sdwa(sel=4"), + Check((result.decoded_dump.find("v120.sdwa(sel=4") != std::string::npos), "V_MAD_MIXLO_F16 did not expose low-half destination merge"); - Check(Common::ContainsStr(result.decoded_dump, "v121.sdwa(sel=5"), + Check((result.decoded_dump.find("v121.sdwa(sel=5") != std::string::npos), "V_MAD_MIXHI_F16 did not expose high-half destination merge"); - Check(Common::ContainsStr(result.ir_dump, "PackedAddF16 v114"), + Check((result.ir_dump.find("PackedAddF16 v114") != std::string::npos), "V_PK_ADD_F16 did not lower to packed f16 IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedMulF16 v115"), + Check((result.ir_dump.find("PackedMulF16 v115") != std::string::npos), "V_PK_MUL_F16 did not lower to packed f16 IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedMinF16 v116"), + Check((result.ir_dump.find("PackedMinF16 v116") != std::string::npos), "V_PK_MIN_F16 did not lower to packed f16 IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedMaxF16 v117"), + Check((result.ir_dump.find("PackedMaxF16 v117") != std::string::npos), "V_PK_MAX_F16 did not lower to packed f16 IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedFmaF16 v118"), + Check((result.ir_dump.find("PackedFmaF16 v118") != std::string::npos), "V_PK_FMA_F16 did not lower to packed f16 IR"); - Check(Common::ContainsStr(result.ir_dump, "FMadF32 v119"), + Check((result.ir_dump.find("FMadF32 v119") != std::string::npos), "VOP3P V_FMA_F32 did not lower through shared fma IR"); - Check(Common::ContainsStr(result.ir_dump, - "FMadF32 v68, v16.opsel(lo=0,hi=1,neghi=0)"), + Check((result.ir_dump.find("FMadF32 v68, v16.opsel(lo=0,hi=1,neghi=0)") != std::string::npos), "VOP3P V_FMA_MIX_F32 source selectors did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "MadMixF16 v120.sdwa(sel=4"), + Check((result.ir_dump.find("MadMixF16 v120.sdwa(sel=4") != std::string::npos), "V_MAD_MIXLO_F16 did not lower to shared mad-mix IR"); - Check(Common::ContainsStr(result.ir_dump, "MadMixF16 v121.sdwa(sel=5"), + Check((result.ir_dump.find("MadMixF16 v121.sdwa(sel=5") != std::string::npos), "V_MAD_MIXHI_F16 did not lower to shared mad-mix IR"); - Check(Common::ContainsStr(result.ir_dump, "FmaF16 v122"), + Check((result.ir_dump.find("FmaF16 v122") != std::string::npos), "native VOP3 V_FMA_F16 did not lower to native f16 fma IR"); - Check(Common::ContainsStr(result.ir_dump, "MadMixF16 v126.sdwa(sel=5"), + Check((result.ir_dump.find("MadMixF16 v126.sdwa(sel=5") != std::string::npos), "clamped V_MAD_MIXHI_F16 did not lower to shared mad-mix IR"); - Check(Common::ContainsStr(result.ir_dump, "FmaF16 v127.sdwa(sel=5"), + Check((result.ir_dump.find("FmaF16 v127.sdwa(sel=5") != std::string::npos), "clamped native V_FMA_F16 did not lower to native f16 fma IR"); - Check(Common::ContainsStr(result.ir_dump, "PackB32F16 v26"), + Check((result.ir_dump.find("PackB32F16 v26") != std::string::npos), "V_PACK_B32_F16 did not lower to packed-bit IR"); - Check(Common::ContainsStr(result.ir_dump, "PackB32F16 v43") && - Common::ContainsStr(result.ir_dump, "v10.opsel(lo=1"), + Check((result.ir_dump.find("PackB32F16 v43") != std::string::npos) && + (result.ir_dump.find("v10.opsel(lo=1") != std::string::npos), "V_PACK_B32_F16 source selectors did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedFmaF16 v59, v20, v43, v59"), + Check((result.ir_dump.find("PackedFmaF16 v59, v20, v43, v59") != std::string::npos), "V_PK_FMAC_F16 did not lower using destination as packed FMA " "accumulator"); Check(SpirvContainsExtInst(result.spirv, 62), @@ -3349,39 +3276,30 @@ void TestNewShaderRecompilerStagedShaderOps() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_subb_u32 s2, s0, s1"), + Check((result.decoded_dump.find("s_subb_u32 s2, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_SUBB_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_bitset0_b32 s3, s1"), + Check((result.decoded_dump.find("s_bitset0_b32 s3, s1") != std::string::npos), "new decoder did not decode RDNA2 S_BITSET0_B32"); - Check(Common::ContainsStr(result.decoded_dump, "v_fmac_f16 v70, v5, v6"), + Check((result.decoded_dump.find("v_fmac_f16 v70, v5, v6") != std::string::npos), "new decoder did not decode RDNA2 V_FMAC_F16"); Check( - Common::ContainsStr( - result.decoded_dump, - "v_fmamk_f16 v71, v7, 0x3c003c00, v8"), + (result.decoded_dump.find("v_fmamk_f16 v71, v7, 0x3c003c00, v8") != std::string::npos), "new decoder did not consume V_FMAMK_F16 literal as the multiply source"); - Check(Common::ContainsStr( - result.decoded_dump, - "v_fmaak_f16 v72, v9, v10, 0x40004000"), + Check((result.decoded_dump.find("v_fmaak_f16 v72, v9, v10, 0x40004000") != std::string::npos), "new decoder did not consume V_FMAAK_F16 literal as the add source"); - Check(Common::ContainsStr(result.ir_dump, - "ScalarSubBorrowCarryU32 s2, s0, s1, scc"), + Check((result.ir_dump.find("ScalarSubBorrowCarryU32 s2, s0, s1, scc") != std::string::npos), "S_SUBB_U32 did not lower to scalar subtract-with-borrow IR"); - Check(Common::ContainsStr(result.ir_dump, "BitClearU32 s3, s3, s1"), + Check((result.ir_dump.find("BitClearU32 s3, s3, s1") != std::string::npos), "S_BITSET0_B32 did not lower to bit-clear IR using the destination as " "input"); Check( - Common::ContainsStr( - result.ir_dump, - "FmaF16 v70, v5, v6, v70"), + (result.ir_dump.find("FmaF16 v70, v5, v6, v70") != std::string::npos), "V_FMAC_F16 did not lower using the destination as the FMA accumulator"); Check( - Common::ContainsStr(result.ir_dump, - "FmaF16 v71, v7, 0x3c003c00, v8"), + (result.ir_dump.find("FmaF16 v71, v7, 0x3c003c00, v8") != std::string::npos), "V_FMAMK_F16 did not lower with the literal in source 1"); Check( - Common::ContainsStr(result.ir_dump, - "FmaF16 v72, v9, v10, 0x40004000"), + (result.ir_dump.find("FmaF16 v72, v9, v10, 0x40004000") != std::string::npos), "V_FMAAK_F16 did not lower with the literal in source 2"); Check(SpirvContainsOpcode(result.spirv, 130), "SPIR-V binary does not contain OpISub for S_SUBB_U32"); @@ -3428,44 +3346,42 @@ void TestNewShaderRecompilerBootF16UnaryOpcodes() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "v_sqrt_f16 v4.sdwa(sel=5"), + Check((result.decoded_dump.find("v_sqrt_f16 v4.sdwa(sel=5") != std::string::npos), "new decoder did not decode V_SQRT_F16 SDWA high-half destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_rndne_f16 v3"), + Check((result.decoded_dump.find("v_rndne_f16 v3") != std::string::npos), "new decoder did not decode V_RNDNE_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_floor_f16 v5"), + Check((result.decoded_dump.find("v_floor_f16 v5") != std::string::npos), "new decoder did not decode V_FLOOR_F16"); Check( - Common::ContainsStr(result.decoded_dump, "v_ceil_f16 v9.sdwa(sel=5"), + (result.decoded_dump.find("v_ceil_f16 v9.sdwa(sel=5") != std::string::npos), "new decoder did not decode boot V_CEIL_F16 SDWA high-half destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_ceil_f16 v9"), + Check((result.decoded_dump.find("v_ceil_f16 v9") != std::string::npos), "new decoder did not decode boot V_CEIL_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_trunc_f16 v6"), + Check((result.decoded_dump.find("v_trunc_f16 v6") != std::string::npos), "new decoder did not decode V_TRUNC_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_mov_b32 v7, -1") && - Common::ContainsStr(result.decoded_dump, "v_mov_b32 v8, -1"), + Check((result.decoded_dump.find("v_mov_b32 v7, -1") != std::string::npos) && + (result.decoded_dump.find("v_mov_b32 v8, -1") != std::string::npos), "new decoder did not accept full-width V_MOV_B32 SDWA with " "DST_U=PRESERVE"); - Check(!Common::ContainsStr(result.decoded_dump, - "VOP1 SDWA destination selector is not supported"), + Check((result.decoded_dump.find("VOP1 SDWA destination selector is not supported") == std::string::npos), "full-width V_MOV_B32 SDWA with DST_U=PRESERVE was rejected"); - Check(!Common::ContainsStr(result.decoded_dump, - "unsupported family=VOP2 opcode=0x00"), + Check((result.decoded_dump.find("unsupported family=VOP2 opcode=0x00") == std::string::npos), "VOP1 SDWA extension word was decoded as a phantom VOP2 instruction"); - Check(Common::ContainsStr(result.ir_dump, "SqrtF16 v4.sdwa(sel=5"), + Check((result.ir_dump.find("SqrtF16 v4.sdwa(sel=5") != std::string::npos), "V_SQRT_F16 did not lower to f16 sqrt IR"); - Check(Common::ContainsStr(result.ir_dump, "FloorF16 v5"), + Check((result.ir_dump.find("FloorF16 v5") != std::string::npos), "V_FLOOR_F16 did not lower to f16 floor IR"); - Check(Common::ContainsStr(result.ir_dump, "CeilF16 v9.sdwa(sel=5"), + Check((result.ir_dump.find("CeilF16 v9.sdwa(sel=5") != std::string::npos), "boot V_CEIL_F16 SDWA did not lower to f16 ceil IR"); - Check(Common::ContainsStr(result.ir_dump, "CeilF16 v9"), + Check((result.ir_dump.find("CeilF16 v9") != std::string::npos), "V_CEIL_F16 did not lower to f16 ceil IR"); - Check(Common::ContainsStr(result.ir_dump, "TruncF16 v6"), + Check((result.ir_dump.find("TruncF16 v6") != std::string::npos), "V_TRUNC_F16 did not lower to f16 trunc IR"); Check( - Common::ContainsStr(result.ir_dump, "MoveU32 v7, 0xffffffff") && - Common::ContainsStr(result.ir_dump, "MoveU32 v8, 0xffffffff"), + (result.ir_dump.find("MoveU32 v7, 0xffffffff") != std::string::npos) && + (result.ir_dump.find("MoveU32 v8, 0xffffffff") != std::string::npos), "full-width V_MOV_B32 SDWA with DST_U=PRESERVE did not lower to move IR"); - Check(Common::ContainsStr(result.ir_dump, "RoundEvenF16 v3"), + Check((result.ir_dump.find("RoundEvenF16 v3") != std::string::npos), "V_RNDNE_F16 did not lower to f16 round-even IR"); Check(SpirvContainsExtInst(result.spirv, 31), "SPIR-V binary does not contain GLSL.std.450 Sqrt for V_SQRT_F16"); @@ -3497,8 +3413,7 @@ void TestNewShaderRecompilerCapturedVop1SdwaByteConvert() { options.input_info.pixel = &ps_info; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_CVT_F32_UBYTE0 v4, v9.sdwa(sel=4,sext=0)"), + Check((result.decoded_dump.find("V_CVT_F32_UBYTE0 v4, v9.sdwa(sel=4,sext=0)") != std::string::npos), "captured V_CVT_F32_UBYTE0 SDWA instruction was not decoded"); size_t extracts = 0; @@ -3571,96 +3486,92 @@ void TestNewShaderRecompilerBootB16PackedAndSdwaOpcodes() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "v_lshrrev_b16 v1.sdwa(sel=4"), + Check((result.decoded_dump.find("v_lshrrev_b16 v1.sdwa(sel=4") != std::string::npos), "new decoder did not decode low-half V_LSHRREV_B16"); - Check(Common::ContainsStr(result.decoded_dump, "v_lshlrev_b16 v5.sdwa(sel=5"), + Check((result.decoded_dump.find("v_lshlrev_b16 v5.sdwa(sel=5") != std::string::npos), "new decoder did not decode high-half V_LSHLREV_B16"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_nc_u16 v1.sdwa(sel=5"), + Check((result.decoded_dump.find("v_add_nc_u16 v1.sdwa(sel=5") != std::string::npos), "new decoder did not decode V_ADD_NC_U16 op_sel destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_sub_nc_i16 v17.sdwa(sel=5"), + Check((result.decoded_dump.find("v_sub_nc_i16 v17.sdwa(sel=5") != std::string::npos), "new decoder did not decode V_SUB_NC_I16 op_sel destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_sub_i16 v14"), + Check((result.decoded_dump.find("v_pk_sub_i16 v14") != std::string::npos), "new decoder did not decode V_PK_SUB_I16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_add_u16 v4"), + Check((result.decoded_dump.find("v_pk_add_u16 v4") != std::string::npos), "new decoder did not decode V_PK_ADD_U16"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_add_u16 v4, 0x00007fff"), + Check((result.decoded_dump.find("v_pk_add_u16 v4, 0x00007fff") != std::string::npos), "V_PK_ADD_U16 literal was not consumed as a source operand"); - Check(Common::ContainsStr(result.decoded_dump, "v_and_b32 v7.sdwa(sel=4"), + Check((result.decoded_dump.find("v_and_b32 v7.sdwa(sel=4") != std::string::npos), "new decoder did not decode partial-destination V_AND_B32 SDWA"); - Check(Common::ContainsStr(result.decoded_dump, "v_or_b32 v9.sdwa(sel=5"), + Check((result.decoded_dump.find("v_or_b32 v9.sdwa(sel=5") != std::string::npos), "new decoder did not decode partial-destination V_OR_B32 SDWA"); - Check(Common::ContainsStr(result.decoded_dump, "v_pk_mul_f16 v12"), + Check((result.decoded_dump.find("v_pk_mul_f16 v12") != std::string::npos), "new decoder did not decode clamped V_PK_MUL_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f16_u16 v4.sdwa(sel=5"), + Check((result.decoded_dump.find("v_cvt_f16_u16 v4.sdwa(sel=5") != std::string::npos), "new decoder did not decode/consume SDWA V_CVT_F16_U16"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f16_u16 v16"), + Check((result.decoded_dump.find("v_cvt_f16_u16 v16") != std::string::npos), "new decoder did not decode plain V_CVT_F16_U16"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_f16_i16 v14"), + Check((result.decoded_dump.find("v_cvt_f16_i16 v14") != std::string::npos), "new decoder did not decode plain V_CVT_F16_I16"); Check( - Common::ContainsStr(result.decoded_dump, "v_cvt_f16_i16 v14.sdwa(sel=5"), + (result.decoded_dump.find("v_cvt_f16_i16 v14.sdwa(sel=5") != std::string::npos), "new decoder did not decode V_CVT_F16_I16 SDWA high-half destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_i16_f16 v4"), + Check((result.decoded_dump.find("v_cvt_i16_f16 v4") != std::string::npos), "new decoder did not decode plain V_CVT_I16_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_cvt_u16_f16 v15"), + Check((result.decoded_dump.find("v_cvt_u16_f16 v15") != std::string::npos), "new decoder still rejects plain V_CVT_U16_F16"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_nc_u32 v5") && - Common::ContainsStr(result.decoded_dump, "v4.sdwa(sel=4,sext=1"), + Check((result.decoded_dump.find("v_add_nc_u32 v5") != std::string::npos) && + (result.decoded_dump.find("v4.sdwa(sel=4,sext=1") != std::string::npos), "new decoder did not decode V_ADD_NC_U32 SDWA sign-extended low word"); - Check(Common::ContainsStr(result.decoded_dump, "v_add_nc_u32 v6") && - Common::ContainsStr(result.decoded_dump, "v6.sdwa(sel=5,sext=1"), + Check((result.decoded_dump.find("v_add_nc_u32 v6") != std::string::npos) && + (result.decoded_dump.find("v6.sdwa(sel=5,sext=1") != std::string::npos), "new decoder did not decode V_ADD_NC_U32 SDWA sign-extended high word"); Check( - Common::ContainsStr(result.decoded_dump, - "v_add_nc_u32 v4.sdwa(sel=5,sext=0), vcc_lo, v97"), + (result.decoded_dump.find("v_add_nc_u32 v4.sdwa(sel=5,sext=0), vcc_lo, v97") != std::string::npos), "new decoder did not decode captured V_ADD_NC_U32 high-word destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_sub_nc_u32 v11.sdwa(sel=2"), + Check((result.decoded_dump.find("v_sub_nc_u32 v11.sdwa(sel=2") != std::string::npos), "new decoder did not decode V_SUB_NC_U32 SDWA byte-2 destination"); - Check(Common::ContainsStr(result.decoded_dump, "v_min_u32 v10.sdwa(sel=4"), + Check((result.decoded_dump.find("v_min_u32 v10.sdwa(sel=4") != std::string::npos), "new decoder did not decode V_MIN_U32 SDWA low-word destination"); Check( - !Common::ContainsStr(result.decoded_dump, - "unsupported family=VOP2 opcode=0x00"), + (result.decoded_dump.find("unsupported family=VOP2 opcode=0x00") == std::string::npos), "literal/SDWA extension words were decoded as phantom VOP2 instructions"); - Check(!Common::ContainsStr(result.decoded_dump, - "VOP2 SDWA destination selector is not supported"), + Check((result.decoded_dump.find("VOP2 SDWA destination selector is not supported") == std::string::npos), "partial bitwise SDWA destination is still rejected"); - Check(Common::ContainsStr(result.ir_dump, "ShiftRightLogicalU16"), + Check((result.ir_dump.find("ShiftRightLogicalU16") != std::string::npos), "V_LSHRREV_B16 did not lower to 16-bit logical right shift IR"); - Check(Common::ContainsStr(result.ir_dump, "ShiftLeftLogicalU16"), + Check((result.ir_dump.find("ShiftLeftLogicalU16") != std::string::npos), "V_LSHLREV_B16 did not lower to 16-bit logical left shift IR"); - Check(Common::ContainsStr(result.ir_dump, "IAddU16 v1.sdwa(sel=5"), + Check((result.ir_dump.find("IAddU16 v1.sdwa(sel=5") != std::string::npos), "V_ADD_NC_U16 did not lower to 16-bit add IR"); - Check(Common::ContainsStr(result.ir_dump, "ISubI16 v17.sdwa(sel=5"), + Check((result.ir_dump.find("ISubI16 v17.sdwa(sel=5") != std::string::npos), "V_SUB_NC_I16 did not lower to 16-bit subtract IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedSubI16 v14"), + Check((result.ir_dump.find("PackedSubI16 v14") != std::string::npos), "V_PK_SUB_I16 did not lower to packed I16 subtract IR"); - Check(Common::ContainsStr(result.ir_dump, "PackedAddU16 v4"), + Check((result.ir_dump.find("PackedAddU16 v4") != std::string::npos), "V_PK_ADD_U16 did not lower to packed U16 add IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertI16ToF16 v14"), + Check((result.ir_dump.find("ConvertI16ToF16 v14") != std::string::npos), "V_CVT_F16_I16 did not lower to signed I16-to-F16 conversion IR"); Check( - Common::ContainsStr(result.ir_dump, "ConvertU16ToF16 v4.sdwa(sel=5"), + (result.ir_dump.find("ConvertU16ToF16 v4.sdwa(sel=5") != std::string::npos), "V_CVT_F16_U16 SDWA did not lower to unsigned U16-to-F16 conversion IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertU16ToF16 v16"), + Check((result.ir_dump.find("ConvertU16ToF16 v16") != std::string::npos), "V_CVT_F16_U16 plain form did not lower to unsigned U16-to-F16 " "conversion IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF16ToI16 v4"), + Check((result.ir_dump.find("ConvertF16ToI16 v4") != std::string::npos), "V_CVT_I16_F16 did not lower to signed F16-to-I16 conversion IR"); - Check(Common::ContainsStr(result.ir_dump, "ConvertF16ToU16 v15"), + Check((result.ir_dump.find("ConvertF16ToU16 v15") != std::string::npos), "V_CVT_U16_F16 did not lower to unsigned F16-to-U16 conversion IR"); - Check(Common::ContainsStr(result.ir_dump, "IAddU32 v5") && - Common::ContainsStr(result.ir_dump, "v4.sdwa(sel=4,sext=1"), + Check((result.ir_dump.find("IAddU32 v5") != std::string::npos) && + (result.ir_dump.find("v4.sdwa(sel=4,sext=1") != std::string::npos), "V_ADD_NC_U32 SDWA sign-extended low word did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IAddU32 v6") && - Common::ContainsStr(result.ir_dump, "v6.sdwa(sel=5,sext=1"), + Check((result.ir_dump.find("IAddU32 v6") != std::string::npos) && + (result.ir_dump.find("v6.sdwa(sel=5,sext=1") != std::string::npos), "V_ADD_NC_U32 SDWA sign-extended high word did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, - "IAddU32 v4.sdwa(sel=5,sext=0), vcc_lo, v97"), + Check((result.ir_dump.find("IAddU32 v4.sdwa(sel=5,sext=0), vcc_lo, v97") != std::string::npos), "captured V_ADD_NC_U32 high-word destination did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ISubU32 v11.sdwa(sel=2"), + Check((result.ir_dump.find("ISubU32 v11.sdwa(sel=2") != std::string::npos), "V_SUB_NC_U32 SDWA byte-2 destination did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "UMinU32 v10.sdwa(sel=4"), + Check((result.ir_dump.find("UMinU32 v10.sdwa(sel=4") != std::string::npos), "V_MIN_U32 SDWA low-word destination did not lower to IR"); Check(SpirvContainsOpcode(result.spirv, 128), "SPIR-V binary does not contain OpIAdd for U16 operations"); @@ -3728,113 +3639,110 @@ void TestNewShaderRecompilerScalarB64Alu() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_mov_b64 s2, s0"), + Check((result.decoded_dump.find("s_mov_b64 s2, s0") != std::string::npos), "new decoder did not decode old-backed S_MOV_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_not_b32 s41, s0"), + Check((result.decoded_dump.find("s_not_b32 s41, s0") != std::string::npos), "new decoder did not decode RDNA2 S_NOT_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_not_b64 s4, s2"), + Check((result.decoded_dump.find("s_not_b64 s4, s2") != std::string::npos), "new decoder did not decode old-backed S_NOT_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_and_b64 s6, s2, s4"), + Check((result.decoded_dump.find("s_and_b64 s6, s2, s4") != std::string::npos), "new decoder did not decode old-backed S_AND_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_or_b64 s8, s6, s2"), + Check((result.decoded_dump.find("s_or_b64 s8, s6, s2") != std::string::npos), "new decoder did not decode old-backed S_OR_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_xor_b64 s10, s8, s4"), + Check((result.decoded_dump.find("s_xor_b64 s10, s8, s4") != std::string::npos), "new decoder did not decode old-backed S_XOR_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_andn2_b32 s36, s0, s1"), + Check((result.decoded_dump.find("s_andn2_b32 s36, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_ANDN2_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_orn2_b32 s37, s0, s1"), + Check((result.decoded_dump.find("s_orn2_b32 s37, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_ORN2_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_nand_b32 s38, s0, s1"), + Check((result.decoded_dump.find("s_nand_b32 s38, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_NAND_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_nor_b32 s39, s0, s1"), + Check((result.decoded_dump.find("s_nor_b32 s39, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_NOR_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_xnor_b32 s40, s0, s1"), + Check((result.decoded_dump.find("s_xnor_b32 s40, s0, s1") != std::string::npos), "new decoder did not decode RDNA2 S_XNOR_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_cselect_b64 s12, s10, s2"), + Check((result.decoded_dump.find("s_cselect_b64 s12, s10, s2") != std::string::npos), "new decoder did not decode old-backed S_CSELECT_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_andn2_b64 s14, s10, s4"), + Check((result.decoded_dump.find("s_andn2_b64 s14, s10, s4") != std::string::npos), "new decoder did not decode old-backed S_ANDN2_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_orn2_b64 s16, s14, s6"), + Check((result.decoded_dump.find("s_orn2_b64 s16, s14, s6") != std::string::npos), "new decoder did not decode old-backed S_ORN2_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_nand_b64 s18, s16, s8"), + Check((result.decoded_dump.find("s_nand_b64 s18, s16, s8") != std::string::npos), "new decoder did not decode old-backed S_NAND_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_nor_b64 s20, s18, s10"), + Check((result.decoded_dump.find("s_nor_b64 s20, s18, s10") != std::string::npos), "new decoder did not decode old-backed S_NOR_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_xnor_b64 s22, s20, s12"), + Check((result.decoded_dump.find("s_xnor_b64 s22, s20, s12") != std::string::npos), "new decoder did not decode old-backed S_XNOR_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_lshl_b64 s24, s22, s1"), + Check((result.decoded_dump.find("s_lshl_b64 s24, s22, s1") != std::string::npos), "new decoder did not decode old-backed S_LSHL_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_lshr_b64 s26, s24, s0"), + Check((result.decoded_dump.find("s_lshr_b64 s26, s24, s0") != std::string::npos), "new decoder did not decode old-backed S_LSHR_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_bfm_b64 s28, 4, 2"), + Check((result.decoded_dump.find("s_bfm_b64 s28, 4, 2") != std::string::npos), "new decoder did not decode old-backed S_BFM_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_bcnt1_i32_b64 s30, s26"), + Check((result.decoded_dump.find("s_bcnt1_i32_b64 s30, s26") != std::string::npos), "new decoder did not decode old-backed S_BCNT1_I32_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_ff1_i32_b64 s31, s26"), + Check((result.decoded_dump.find("s_ff1_i32_b64 s31, s26") != std::string::npos), "new decoder did not decode RDNA2 S_FF1_I32_B64"); - Check(Common::ContainsStr(result.decoded_dump, "s_flbit_i32_b64 vcc_lo, s26"), + Check((result.decoded_dump.find("s_flbit_i32_b64 vcc_lo, s26") != std::string::npos), "new decoder did not decode RDNA2 S_FLBIT_I32_B64"); - Check(Common::ContainsStr(result.decoded_dump, - "s_bitreplicate_b64_b32 s32, s30"), + Check((result.decoded_dump.find("s_bitreplicate_b64_b32 s32, s30") != std::string::npos), "new decoder did not decode old-backed S_BITREPLICATE_B64_B32"); - Check(Common::ContainsStr(result.decoded_dump, - "s_bfe_u64 s34, s32, 0x00040002"), + Check((result.decoded_dump.find("s_bfe_u64 s34, s32, 0x00040002") != std::string::npos), "new decoder did not decode old-backed S_BFE_U64"); - Check(Common::ContainsStr(result.decoded_dump, "s_wqm_b64 exec_lo, exec_lo"), + Check((result.decoded_dump.find("s_wqm_b64 exec_lo, exec_lo") != std::string::npos), "new decoder did not decode old-backed S_WQM_B64"); - Check(Common::ContainsStr(result.ir_dump, "MoveU64 s2, s0"), + Check((result.ir_dump.find("MoveU64 s2, s0") != std::string::npos), "S_MOV_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNotU32 s41, s0"), + Check((result.ir_dump.find("BitwiseNotU32 s41, s0") != std::string::npos), "S_NOT_B32 did not lower to scalar bitwise-not IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNotU64 s4, s2"), + Check((result.ir_dump.find("BitwiseNotU64 s4, s2") != std::string::npos), "S_NOT_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseAndU64 s6, s2, s4"), + Check((result.ir_dump.find("BitwiseAndU64 s6, s2, s4") != std::string::npos), "S_AND_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseOrU64 s8, s6, s2"), + Check((result.ir_dump.find("BitwiseOrU64 s8, s6, s2") != std::string::npos), "S_OR_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXorU64 s10, s8, s4"), + Check((result.ir_dump.find("BitwiseXorU64 s10, s8, s4") != std::string::npos), "S_XOR_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseAndNotU32 s36, s0, s1"), + Check((result.ir_dump.find("BitwiseAndNotU32 s36, s0, s1") != std::string::npos), "S_ANDN2_B32 did not lower to scalar bitwise-and-not IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseOrNotU32 s37, s0, s1"), + Check((result.ir_dump.find("BitwiseOrNotU32 s37, s0, s1") != std::string::npos), "S_ORN2_B32 did not lower to scalar bitwise-or-not IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNandU32 s38, s0, s1"), + Check((result.ir_dump.find("BitwiseNandU32 s38, s0, s1") != std::string::npos), "S_NAND_B32 did not lower to scalar bitwise-nand IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNorU32 s39, s0, s1"), + Check((result.ir_dump.find("BitwiseNorU32 s39, s0, s1") != std::string::npos), "S_NOR_B32 did not lower to scalar bitwise-nor IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXnorU32 s40, s0, s1"), + Check((result.ir_dump.find("BitwiseXnorU32 s40, s0, s1") != std::string::npos), "S_XNOR_B32 did not lower to scalar bitwise-xnor IR"); - Check(Common::ContainsStr(result.ir_dump, "SelectU64 s12"), + Check((result.ir_dump.find("SelectU64 s12") != std::string::npos), "S_CSELECT_B64 did not lower to paired-dword select IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseAndNotU64 s14, s10, s4"), + Check((result.ir_dump.find("BitwiseAndNotU64 s14, s10, s4") != std::string::npos), "S_ANDN2_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseOrNotU64 s16, s14, s6"), + Check((result.ir_dump.find("BitwiseOrNotU64 s16, s14, s6") != std::string::npos), "S_ORN2_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNandU64 s18, s16, s8"), + Check((result.ir_dump.find("BitwiseNandU64 s18, s16, s8") != std::string::npos), "S_NAND_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseNorU64 s20, s18, s10"), + Check((result.ir_dump.find("BitwiseNorU64 s20, s18, s10") != std::string::npos), "S_NOR_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitwiseXnorU64 s22, s20, s12"), + Check((result.ir_dump.find("BitwiseXnorU64 s22, s20, s12") != std::string::npos), "S_XNOR_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "ShiftLeftLogicalU64 s24, s22, s1"), + Check((result.ir_dump.find("ShiftLeftLogicalU64 s24, s22, s1") != std::string::npos), "S_LSHL_B64 did not lower to paired-dword IR"); Check( - Common::ContainsStr(result.ir_dump, "ShiftRightLogicalU64 s26, s24, s0"), + (result.ir_dump.find("ShiftRightLogicalU64 s26, s24, s0") != std::string::npos), "S_LSHR_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldMaskU64 s28"), + Check((result.ir_dump.find("BitFieldMaskU64 s28") != std::string::npos), "S_BFM_B64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "BitCountU64 s30, s26"), + Check((result.ir_dump.find("BitCountU64 s30, s26") != std::string::npos), "S_BCNT1_I32_B64 did not lower to paired-source bit count IR"); - Check(Common::ContainsStr(result.ir_dump, "FindLsbU64 s31, s26"), + Check((result.ir_dump.find("FindLsbU64 s31, s26") != std::string::npos), "S_FF1_I32_B64 did not lower to paired-source bit search IR"); - Check(Common::ContainsStr(result.ir_dump, "FindMsbFromHighU64 vcc_lo, s26"), + Check((result.ir_dump.find("FindMsbFromHighU64 vcc_lo, s26") != std::string::npos), "S_FLBIT_I32_B64 did not lower to paired-source leading-zero IR"); - Check(Common::ContainsStr(result.ir_dump, "BitReplicateB64B32 s32, s30"), + Check((result.ir_dump.find("BitReplicateB64B32 s32, s30") != std::string::npos), "S_BITREPLICATE_B64_B32 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, - "BitFieldExtractU64 s34, s32, 0x00040002"), + Check((result.ir_dump.find("BitFieldExtractU64 s34, s32, 0x00040002") != std::string::npos), "S_BFE_U64 did not lower to paired-dword IR"); - Check(Common::ContainsStr(result.ir_dump, "WqmB64 exec_lo, exec_lo"), + Check((result.ir_dump.find("WqmB64 exec_lo, exec_lo") != std::string::npos), "S_WQM_B64 did not lower to whole-quad-mask IR"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad for scalar B64 ops"); @@ -3942,34 +3850,34 @@ void TestNewShaderRecompilerSignedCompareAlu() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_cmp_gt_i32"), + Check((result.decoded_dump.find("s_cmp_gt_i32") != std::string::npos), "new decoder did not decode SOPC signed compare"); - Check(Common::ContainsStr(result.decoded_dump, "s_cmp_lt_i32"), + Check((result.decoded_dump.find("s_cmp_lt_i32") != std::string::npos), "new decoder did not decode SOPK signed compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_gt_i32"), + Check((result.decoded_dump.find("v_cmp_gt_i32") != std::string::npos), "new decoder did not decode VOPC signed greater-than compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_lt_i32"), + Check((result.decoded_dump.find("v_cmp_lt_i32") != std::string::npos), "new decoder did not decode VOPC signed less-than compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_lt_i16"), + Check((result.decoded_dump.find("v_cmp_lt_i16") != std::string::npos), "new decoder did not decode VOPC signed halfword less-than compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_ge_i16"), + Check((result.decoded_dump.find("v_cmp_ge_i16") != std::string::npos), "new decoder did not decode VOPC signed halfword greater-or-equal " "compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmp_lt_u16"), + Check((result.decoded_dump.find("v_cmp_lt_u16") != std::string::npos), "new decoder did not decode VOPC unsigned halfword less-than compare"); - Check(Common::ContainsStr(result.decoded_dump, "v_cmpx_gt_i32"), + Check((result.decoded_dump.find("v_cmpx_gt_i32") != std::string::npos), "new decoder did not decode VOPC signed compare-and-mask"); - Check(Common::ContainsStr(result.ir_dump, "CompareGtI32"), + Check((result.ir_dump.find("CompareGtI32") != std::string::npos), "signed greater-than compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareLtI32"), + Check((result.ir_dump.find("CompareLtI32") != std::string::npos), "signed less-than compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareLtI16"), + Check((result.ir_dump.find("CompareLtI16") != std::string::npos), "signed halfword less-than compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareGeI16"), + Check((result.ir_dump.find("CompareGeI16") != std::string::npos), "signed halfword greater-or-equal compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareLtU16"), + Check((result.ir_dump.find("CompareLtU16") != std::string::npos), "unsigned halfword less-than compare did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareMaskGtI32 exec_lo"), + Check((result.ir_dump.find("CompareMaskGtI32 exec_lo") != std::string::npos), "signed compare-and-mask did not lower to exec mask IR"); Check(SpirvContainsOpcode(result.spirv, 173), "SPIR-V binary does not contain OpSGreaterThan"); @@ -3998,26 +3906,25 @@ void TestNewShaderRecompilerSignedMinShiftAlu() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_min_i32"), + Check((result.decoded_dump.find("s_min_i32") != std::string::npos), "new decoder did not decode S_MIN_I32"); - Check(Common::ContainsStr(result.decoded_dump, "s_ashr_i32"), + Check((result.decoded_dump.find("s_ashr_i32") != std::string::npos), "new decoder did not decode S_ASHR_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_min_i32"), + Check((result.decoded_dump.find("v_min_i32") != std::string::npos), "new decoder did not decode V_MIN_I32"); - Check(Common::ContainsStr(result.decoded_dump, "v_ashrrev_i32"), + Check((result.decoded_dump.find("v_ashrrev_i32") != std::string::npos), "new decoder did not decode V_ASHRREV_I32"); - Check(Common::ContainsStr(result.ir_dump, "IMinI32 s2"), + Check((result.ir_dump.find("IMinI32 s2") != std::string::npos), "S_MIN_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMaxI32 s3"), + Check((result.ir_dump.find("IMaxI32 s3") != std::string::npos), "S_MAX_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ShiftRightArithmeticI32 s4"), + Check((result.ir_dump.find("ShiftRightArithmeticI32 s4") != std::string::npos), "S_ASHR_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMinI32 v1"), + Check((result.ir_dump.find("IMinI32 v1") != std::string::npos), "V_MIN_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "IMaxI32 v2"), + Check((result.ir_dump.find("IMaxI32 v2") != std::string::npos), "V_MAX_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, - "ShiftRightArithmeticI32 v4, v3, 0x00000001"), + Check((result.ir_dump.find("ShiftRightArithmeticI32 v4, v3, 0x00000001") != std::string::npos), "V_ASHRREV_I32 did not reverse source order in IR"); Check(SpirvContainsOpcode(result.spirv, 173), "SPIR-V binary does not contain OpSGreaterThan"); @@ -4052,45 +3959,45 @@ void TestNewShaderRecompilerScalarBitfieldAlu() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_cselect_b32"), + Check((result.decoded_dump.find("s_cselect_b32") != std::string::npos), "new decoder did not decode S_CSELECT_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_abs_i32"), + Check((result.decoded_dump.find("s_abs_i32") != std::string::npos), "new decoder did not decode S_ABS_I32"); - Check(Common::ContainsStr(result.decoded_dump, "s_brev_b32"), + Check((result.decoded_dump.find("s_brev_b32") != std::string::npos), "new decoder did not decode S_BREV_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_bfm_b32"), + Check((result.decoded_dump.find("s_bfm_b32") != std::string::npos), "new decoder did not decode S_BFM_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_bfe_u32"), + Check((result.decoded_dump.find("s_bfe_u32") != std::string::npos), "new decoder did not decode S_BFE_U32"); - Check(Common::ContainsStr(result.decoded_dump, "s_pack_hh_b32_b16"), + Check((result.decoded_dump.find("s_pack_hh_b32_b16") != std::string::npos), "new decoder did not decode S_PACK_HH_B32_B16"); - Check(Common::ContainsStr(result.decoded_dump, "s_bitcmp0_b32"), + Check((result.decoded_dump.find("s_bitcmp0_b32") != std::string::npos), "new decoder did not decode S_BITCMP0_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_bitcmp1_b32"), + Check((result.decoded_dump.find("s_bitcmp1_b32") != std::string::npos), "new decoder did not decode S_BITCMP1_B32"); - Check(Common::ContainsStr(result.decoded_dump, "s_cmp_lg_u64"), + Check((result.decoded_dump.find("s_cmp_lg_u64") != std::string::npos), "new decoder did not decode S_CMP_LG_U64"); - Check(Common::ContainsStr(result.ir_dump, "SelectU32 s2"), + Check((result.ir_dump.find("SelectU32 s2") != std::string::npos), "S_CSELECT_B32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AbsI32 s3"), + Check((result.ir_dump.find("AbsI32 s3") != std::string::npos), "S_ABS_I32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitReverseU32 s4"), + Check((result.ir_dump.find("BitReverseU32 s4") != std::string::npos), "S_BREV_B32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldMaskU32 s5"), + Check((result.ir_dump.find("BitFieldMaskU32 s5") != std::string::npos), "S_BFM_B32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitFieldExtractU32 s6"), + Check((result.ir_dump.find("BitFieldExtractU32 s6") != std::string::npos), "S_BFE_U32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "PackLowLowU16 s7"), + Check((result.ir_dump.find("PackLowLowU16 s7") != std::string::npos), "S_PACK_LL_B32_B16 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "PackLowHighU16 s8"), + Check((result.ir_dump.find("PackLowHighU16 s8") != std::string::npos), "S_PACK_LH_B32_B16 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "PackHighHighU16 s9"), + Check((result.ir_dump.find("PackHighHighU16 s9") != std::string::npos), "S_PACK_HH_B32_B16 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitCompare0B32"), + Check((result.ir_dump.find("BitCompare0B32") != std::string::npos), "S_BITCMP0_B32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BitCompare1B32"), + Check((result.ir_dump.find("BitCompare1B32") != std::string::npos), "S_BITCMP1_B32 did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "CompareNeU64"), + Check((result.ir_dump.find("CompareNeU64") != std::string::npos), "S_CMP_LG_U64 did not lower to IR"); Check(SpirvContainsOpcode(result.spirv, 126), "SPIR-V binary does not contain OpSNegate"); @@ -4117,9 +4024,9 @@ void CheckNewDecoderUnsupported(const uint32_t *shader, uint32_t words, Check(program.instructions.size() >= 2, "decoder did not return instruction plus endpgm"); const auto text = ShaderRecompiler::Decoder::ProgramToString(program); - Check(Common::ContainsStr(text, family), + Check((text.find(family) != std::string::npos), "decoder unsupported text did not include opcode family"); - Check(Common::ContainsStr(text, opcode_name), + Check((text.find(opcode_name) != std::string::npos), "decoder unsupported text did not include opcode name"); #if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS @@ -4175,8 +4082,7 @@ void TestScalarAshrI64Decoder() { program.instructions[4].pc == 28u && program.instructions[4].opcode == Opcode::S_ENDPGM, "S_ASHR_I64 decoder mishandled source, count, or shared literals"); - Check(Common::ContainsStr(ProgramToString(program), - "S_ASHR_I64 s6, s4, s2"), + Check((ProgramToString(program).find("S_ASHR_I64 s6, s4, s2") != std::string::npos), "S_ASHR_I64 is missing from the decoded dump"); } @@ -4257,10 +4163,8 @@ void TestNewShaderDecoderArchitecture() { const auto completed_options = MakeCompileOptions(ShaderType::Compute); const auto completed_result = RecompileForTest(completed_pr_opcodes, completed_options); - Check(Common::ContainsStr(completed_result.decoded_dump, - "S_FLBIT_I32_B32 s0, s1") && - Common::ContainsStr(completed_result.decoded_dump, - "V_CMP_LT_U64 vcc_lo, 0, v0"), + Check((completed_result.decoded_dump.find("S_FLBIT_I32_B32 s0, s1") != std::string::npos) && + (completed_result.decoded_dump.find("V_CMP_LT_U64 vcc_lo, 0, v0") != std::string::npos), "completed PR #427 opcodes were absent from the decoded shader"); const uint32_t ffbh_i32_code[] = {0x7e1c770eu}; @@ -4507,8 +4411,7 @@ void TestNewShaderRecompilerRejectsDppOn64BitCompares() { const auto &compare = program.instructions.front(); Check(compare.opcode == ShaderRecompiler::Decoder::Opcode::UNSUPPORTED, "64-bit VOPC illegally accepted a DPP modifier"); - Check(Common::ContainsStr(compare.unsupported_reason, - "VOPC DPP modifier is not supported for opcode"), + Check((compare.unsupported_reason.find("VOPC DPP modifier is not supported for opcode") != std::string::npos), "64-bit VOPC DPP rejection reason was not explicit"); } } @@ -4564,8 +4467,7 @@ void TestNewShaderRecompilerCapturedVopcSdwaCmpxClass() { auto options = MakeCompileOptions(ShaderType::Pixel); auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_CMPX_CLASS_F32 exec_lo, v13, vcc_lo"), + Check((result.decoded_dump.find("V_CMPX_CLASS_F32 exec_lo, v13, vcc_lo") != std::string::npos), "captured SDWA V_CMPX_CLASS_F32 was not present in the decoded dump"); CheckSpirvBinaryValidates(result.spirv); } @@ -4599,8 +4501,7 @@ void TestNewShaderRecompilerCapturedVopcSdwaCmpxLtU16() { Check(!CFG::BuildGraph(program).unsupported, "captured SDWA V_CMPX_LT_U16 still fails CFG construction"); auto result = RecompileForTest(shader, MakeCompileOptions(ShaderType::Pixel)); - Check(Common::ContainsStr(result.decoded_dump, - "V_CMPX_LT_U16 exec_lo, v0, vcc_lo"), + Check((result.decoded_dump.find("V_CMPX_LT_U16 exec_lo, v0, vcc_lo") != std::string::npos), "captured SDWA V_CMPX_LT_U16 is missing from decoded dump"); CheckSpirvBinaryValidates(result.spirv); @@ -4621,8 +4522,7 @@ void TestNewShaderRecompilerCapturedVopcSdwaCmpxLtU16() { const uint32_t dpp[] = {EncodeVopc(0xb9u, 250u, 1u), EncodeVop2Dpp(0u)}; Decoder::DecodeInstruction(dpp, 0u, decoded); Check(decoded.opcode == Decoder::Opcode::UNSUPPORTED && - Common::ContainsStr(decoded.unsupported_reason, - "VOPC DPP modifier is not supported for opcode"), + (decoded.unsupported_reason.find("VOPC DPP modifier is not supported for opcode") != std::string::npos), "V_CMPX_LT_U16 accepted an unsupported DPP encoding"); } @@ -4753,44 +4653,44 @@ void TestNewShaderRecompilerMemoryFamilyTranslation() { options.user_data = user_data; auto result = RecompileForTest(shader, options, ReadZeroTestMemory); - Check(Common::ContainsStr(result.decoded_dump, "s_load_dword"), + Check((result.decoded_dump.find("s_load_dword") != std::string::npos), "new decoder did not decode SMEM dword load"); - Check(Common::ContainsStr(result.decoded_dump, "s_buffer_load_dword"), + Check((result.decoded_dump.find("s_buffer_load_dword") != std::string::npos), "new decoder did not decode SMEM scalar-buffer dword load"); - Check(Common::ContainsStr(result.decoded_dump, "s_buffer_load_dword s1, s8"), + Check((result.decoded_dump.find("s_buffer_load_dword s1, s8") != std::string::npos), "SMEM scalar-buffer SBASE was not decoded as an SGPR-pair index"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_load_dword"), + Check((result.decoded_dump.find("buffer_load_dword") != std::string::npos), "new decoder did not decode MUBUF dword load"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_store_dword"), + Check((result.decoded_dump.find("buffer_store_dword") != std::string::npos), "new decoder did not decode MUBUF dword store"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_b32"), + Check((result.decoded_dump.find("ds_read_b32") != std::string::npos), "new decoder did not decode DS dword read"); - Check(Common::ContainsStr(result.decoded_dump, "image_get_resinfo"), + Check((result.decoded_dump.find("image_get_resinfo") != std::string::npos), "new decoder did not decode MIMG resinfo query"); - Check(Common::ContainsStr(result.decoded_dump, "image_load"), + Check((result.decoded_dump.find("image_load") != std::string::npos), "new decoder did not decode MIMG load"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample"), + Check((result.decoded_dump.find("image_sample") != std::string::npos), "new decoder did not decode MIMG sample"); Check( - !Common::ContainsStr(result.decoded_dump, "translation is not implemented"), + (result.decoded_dump.find("translation is not implemented") == std::string::npos), "implemented memory decode still reports unsupported translation"); - Check(Common::ContainsStr(result.ir_dump, "SLoadDword s0"), + Check((result.ir_dump.find("SLoadDword s0") != std::string::npos), "SMEM load did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "SBufferLoadDword s1"), + Check((result.ir_dump.find("SBufferLoadDword s1") != std::string::npos), "SMEM scalar-buffer load did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BufferLoadDword v0"), + Check((result.ir_dump.find("BufferLoadDword v0") != std::string::npos), "MUBUF load did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "BufferStoreDword null, v0"), + Check((result.ir_dump.find("BufferStoreDword null, v0") != std::string::npos), "MUBUF store did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "DsWriteB32 null, v0"), + Check((result.ir_dump.find("DsWriteB32 null, v0") != std::string::npos), "DS write did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadB32 v2"), + Check((result.ir_dump.find("DsReadB32 v2") != std::string::npos), "DS read did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ImageGetResinfo v5"), + Check((result.ir_dump.find("ImageGetResinfo v5") != std::string::npos), "MIMG resinfo query did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ImageLoad v4"), + Check((result.ir_dump.find("ImageLoad v4") != std::string::npos), "MIMG load did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "ImageSample v3"), + Check((result.ir_dump.find("ImageSample v3") != std::string::npos), "MIMG sample did not lower to IR"); Check(SpirvContainsOpcode(result.spirv, 65), "SPIR-V binary does not contain OpAccessChain"); @@ -4928,15 +4828,15 @@ void TestNewShaderRecompilerImageQueryTranslation() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_get_lod"), + Check((result.decoded_dump.find("image_get_lod") != std::string::npos), "new decoder did not decode MIMG image get-lod query"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0x3"), + Check((result.decoded_dump.find("dmask=0x3") != std::string::npos), "image_get_lod decode did not preserve dmask metadata"); - Check(Common::ContainsStr(result.ir_dump, "ImageGetLod v6"), + Check((result.ir_dump.find("ImageGetLod v6") != std::string::npos), "image_get_lod did not lower to explicit query IR"); - Check(Common::ContainsStr(result.ir_dump, "data_dwords=2"), + Check((result.ir_dump.find("data_dwords=2") != std::string::npos), "image_get_lod did not preserve two-component result metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=2"), + Check((result.ir_dump.find("image_addr=2") != std::string::npos), "image_get_lod did not preserve address component metadata"); Check(SpirvContainsOpcode(result.spirv, 105), "SPIR-V binary does not contain OpImageQueryLod"); @@ -5076,64 +4976,59 @@ void TestNewShaderRecompilerImageSampleVariants() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_l"), + Check((result.decoded_dump.find("image_sample_l") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_L through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_b"), + Check((result.decoded_dump.find("image_sample_b") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_B through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_lz"), + Check((result.decoded_dump.find("image_sample_lz") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_LZ through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_c"), + Check((result.decoded_dump.find("image_sample_c") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_C through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_o"), + Check((result.decoded_dump.find("image_sample_o") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_O through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_d"), + Check((result.decoded_dump.find("image_sample_d") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_D through shared MIMG path"); Check( - Common::ContainsStr(result.decoded_dump, "image_sample_c_lz"), + (result.decoded_dump.find("image_sample_c_lz") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_C_LZ through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_c_o"), + Check((result.decoded_dump.find("image_sample_c_o") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_C_O through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_c_d"), + Check((result.decoded_dump.find("image_sample_c_d") != std::string::npos), "new decoder did not decode IMAGE_SAMPLE_C_D through shared MIMG path"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=a16"), + Check((result.decoded_dump.find("sample_flags=a16") != std::string::npos), "IMAGE_SAMPLE with MIMG A16 bit did not expose A16 sample flag"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=lod"), + Check((result.decoded_dump.find("sample_flags=lod") != std::string::npos), "IMAGE_SAMPLE_L did not expose lod sample flag"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=bias"), + Check((result.decoded_dump.find("sample_flags=bias") != std::string::npos), "IMAGE_SAMPLE_B did not expose bias sample flag"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=level_zero"), + Check((result.decoded_dump.find("sample_flags=level_zero") != std::string::npos), "IMAGE_SAMPLE_LZ did not expose level-zero sample flag"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=compare"), + Check((result.decoded_dump.find("sample_flags=compare") != std::string::npos), "IMAGE_SAMPLE_C did not expose compare sample flag"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=offset addr_components=3"), + Check((result.decoded_dump.find("sample_flags=offset addr_components=3") != std::string::npos), "IMAGE_SAMPLE_O did not expose offset sample flag/address width"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=derivative addr_components=6"), + Check((result.decoded_dump.find("sample_flags=derivative addr_components=6") != std::string::npos), "IMAGE_SAMPLE_D did not expose derivative sample flag/address width"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=compare|level_zero"), + Check((result.decoded_dump.find("sample_flags=compare|level_zero") != std::string::npos), "IMAGE_SAMPLE_C_LZ did not expose compare+level-zero flags"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=compare|offset addr_components=4"), + Check((result.decoded_dump.find("sample_flags=compare|offset addr_components=4") != std::string::npos), "IMAGE_SAMPLE_C_O did not expose compare+offset flags/address width"); Check( - Common::ContainsStr(result.decoded_dump, - "sample_flags=derivative|compare addr_components=7"), + (result.decoded_dump.find("sample_flags=derivative|compare addr_components=7") != std::string::npos), "IMAGE_SAMPLE_C_D did not expose compare+derivative address width"); - Check(Common::ContainsStr(result.ir_dump, "ImageSample v8"), + Check((result.ir_dump.find("ImageSample v8") != std::string::npos), "IMAGE_SAMPLE_L did not lower to shared IR ImageSample"); - Check(Common::ContainsStr(result.ir_dump, "ImageSample v28"), + Check((result.ir_dump.find("ImageSample v28") != std::string::npos), "IMAGE_SAMPLE_D did not lower to shared IR ImageSample"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x4"), + Check((result.ir_dump.find("image_flags=0x4") != std::string::npos), "derivative sample flag did not survive into IR memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=6"), + Check((result.ir_dump.find("image_addr=6") != std::string::npos), "derivative sample address width did not survive into IR memory " "metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=7"), + Check((result.ir_dump.find("image_addr=7") != std::string::npos), "compare+derivative sample address width did not survive into IR " "memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x80"), + Check((result.ir_dump.find("image_flags=0x80") != std::string::npos), "MIMG A16 bit did not survive into IR memory metadata"); Check(SpirvContainsOpcode(result.spirv, 88), "SPIR-V binary does not contain shared OpImageSampleExplicitLod " @@ -5164,18 +5059,17 @@ void TestNewShaderRecompilerImageSampleA16SamplerCoords() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "image_dim=3d sample_flags=a16 addr_components=3"), + Check((result.decoded_dump.find("image_dim=3d sample_flags=a16 addr_components=3") != std::string::npos), "3D IMAGE_SAMPLE with MIMG A16 bit did not decode as three A16 sampler " "coords"); - Check(Common::ContainsStr(result.ir_dump, "ImageSample v8"), + Check((result.ir_dump.find("ImageSample v8") != std::string::npos), "3D A16 IMAGE_SAMPLE did not lower to sample IR"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x80"), + Check((result.ir_dump.find("image_flags=0x80") != std::string::npos), "3D A16 IMAGE_SAMPLE did not preserve A16 memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=3d"), + Check((result.ir_dump.find("image_dim=3d") != std::string::npos), "3D A16 IMAGE_SAMPLE did not preserve image dimension metadata"); Check( - Common::ContainsStr(result.ir_dump, "image_addr=3"), + (result.ir_dump.find("image_addr=3") != std::string::npos), "3D A16 IMAGE_SAMPLE did not preserve three logical address components"); Check(SpirvExtInstCount(result.spirv, 62) == 3, "sampler A16 xyz coordinates should be converted from three packed f16 " @@ -5206,21 +5100,20 @@ void TestNewShaderRecompilerImageSampleOpcodeAliases() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_a"), + Check((result.decoded_dump.find("image_sample_a") != std::string::npos), "MIMG opcode 0xa0 should decode as image_sample_a alias"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_b_a"), + Check((result.decoded_dump.find("image_sample_b_a") != std::string::npos), "MIMG opcode 0xa5 should decode as image_sample_b_a alias"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_c_a"), + Check((result.decoded_dump.find("image_sample_c_a") != std::string::npos), "MIMG opcode 0xa8 should decode as image_sample_c_a alias"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_c_b_a"), + Check((result.decoded_dump.find("image_sample_c_b_a") != std::string::npos), "MIMG opcode 0xad should decode as image_sample_c_b_a alias"); - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=adjust"), + Check((result.decoded_dump.find("sample_flags=adjust") != std::string::npos), "opcode 0xa0 alias should expose SampleAdjust with normal 32-bit " "coordinates"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=bias|compare|adjust"), + Check((result.decoded_dump.find("sample_flags=bias|compare|adjust") != std::string::npos), "compare+bias opcode alias did not expose expected sample flags"); - Check(!Common::ContainsStr(result.decoded_dump, "a16"), + Check((result.decoded_dump.find("a16") == std::string::npos), "A16 must come from MIMG bit 62, not from the opcode alias"); Check(!SpirvContainsExtInst(result.spirv, 62), "opcode aliases without bit 62 must not unpack sampled f16 address " @@ -5248,10 +5141,9 @@ void TestNewShaderRecompilerImageSampleA16ExceptionComponents() { { const auto result = compile(0x28, 0x1, 12); // image_sample_c with A16 bit - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=compare|a16 addr_components=3"), + Check((result.decoded_dump.find("sample_flags=compare|a16 addr_components=3") != std::string::npos), "A16 IMAGE_SAMPLE_C did not preserve compare+A16 metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x88"), + Check((result.ir_dump.find("image_flags=0x88") != std::string::npos), "A16 IMAGE_SAMPLE_C did not preserve compare+A16 IR flags"); Check(SpirvInstructionOpcodeCount(result.spirv, 90) == 1, "A16 IMAGE_SAMPLE_C should emit one dref sample"); @@ -5262,10 +5154,9 @@ void TestNewShaderRecompilerImageSampleA16ExceptionComponents() { { const auto result = compile(0x30, 0xf, 16); // image_sample_o with A16 bit - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=offset|a16 addr_components=3"), + Check((result.decoded_dump.find("sample_flags=offset|a16 addr_components=3") != std::string::npos), "A16 IMAGE_SAMPLE_O did not preserve offset+A16 metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x90"), + Check((result.ir_dump.find("image_flags=0x90") != std::string::npos), "A16 IMAGE_SAMPLE_O did not preserve offset+A16 IR flags"); Check(SpirvContainsOpcode(result.spirv, 202), "texel offset should still be decoded from its packed 6-bit fields"); @@ -5288,13 +5179,13 @@ void TestNewShaderRecompilerImageLoadA16UintCoords() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_load"), + Check((result.decoded_dump.find("image_load") != std::string::npos), "A16 IMAGE_LOAD did not decode"); - Check(Common::ContainsStr(result.ir_dump, "ImageLoad v20"), + Check((result.ir_dump.find("ImageLoad v20") != std::string::npos), "A16 IMAGE_LOAD did not lower to image-load IR"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x80"), + Check((result.ir_dump.find("image_flags=0x80") != std::string::npos), "A16 IMAGE_LOAD did not preserve A16 memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=2"), + Check((result.ir_dump.find("image_addr=2") != std::string::npos), "A16 IMAGE_LOAD did not preserve logical address component count"); Check(!SpirvContainsExtInst(result.spirv, 62), "image ops without sampler use u16 A16 addresses and must not unpack " @@ -5345,7 +5236,7 @@ void TestNewShaderRecompilerPixelImageSampleLodSelection() { metrics.image_1d_capabilities == 0u && metrics.image_query_capabilities == 0u, "plain 2D sample emitted unrelated image declarations"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample"), + Check((result.decoded_dump.find("image_sample") != std::string::npos), "plain pixel IMAGE_SAMPLE did not decode"); Check(SpirvInstructionOpcodeCount(result.spirv, OpImageSampleImplicitLod) == 1, @@ -5358,7 +5249,7 @@ void TestNewShaderRecompilerPixelImageSampleLodSelection() { } { const auto result = compile(0x25, 0xf); // image_sample_b - Check(Common::ContainsStr(result.decoded_dump, "sample_flags=bias"), + Check((result.decoded_dump.find("sample_flags=bias") != std::string::npos), "pixel IMAGE_SAMPLE_B did not preserve bias metadata"); Check(SpirvInstructionOpcodeCount(result.spirv, OpImageSampleImplicitLod) == 1, @@ -5443,35 +5334,28 @@ void TestNewShaderRecompilerImageViewDimensions() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_dim=2d_array"), + Check((result.decoded_dump.find("image_dim=2d_array") != std::string::npos), "MIMG DIM did not decode 2D-array image view"); - Check(Common::ContainsStr(result.decoded_dump, "image_dim=3d"), + Check((result.decoded_dump.find("image_dim=3d") != std::string::npos), "MIMG DIM did not decode 3D image view"); - Check(Common::ContainsStr(result.decoded_dump, - "image_dim=1d sample_flags=none addr_components=1"), + Check((result.decoded_dump.find("image_dim=1d sample_flags=none addr_components=1") != std::string::npos), "1D sample did not preserve its scalar coordinate"); - Check(Common::ContainsStr( - result.decoded_dump, - "image_dim=1d_array sample_flags=none addr_components=2"), + Check((result.decoded_dump.find("image_dim=1d_array sample_flags=none addr_components=2") != std::string::npos), "1D-array sample did not preserve coordinate plus layer"); - Check(Common::ContainsStr( - result.decoded_dump, - "image_dim=1d sample_flags=derivative addr_components=3"), + Check((result.decoded_dump.find("image_dim=1d sample_flags=derivative addr_components=3") != std::string::npos), "1D derivative sample did not preserve scalar gradients"); - Check(Common::ContainsStr(result.decoded_dump, "image_sample_l"), + Check((result.decoded_dump.find("image_sample_l") != std::string::npos), "2D-array LOD sample did not decode"); Check( - Common::ContainsStr( - result.decoded_dump, - "image_dim=2d_array sample_flags=lod addr_components=4"), + (result.decoded_dump.find("image_dim=2d_array sample_flags=lod addr_components=4") != std::string::npos), "2D-array LOD sample did not include slice plus LOD address components"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=2d_array"), + Check((result.ir_dump.find("image_dim=2d_array") != std::string::npos), "2D-array image view did not survive into IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=3d"), + Check((result.ir_dump.find("image_dim=3d") != std::string::npos), "3D image view did not survive into IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=1d"), + Check((result.ir_dump.find("image_dim=1d") != std::string::npos), "1D image view did not survive into IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=1d_array"), + Check((result.ir_dump.find("image_dim=1d_array") != std::string::npos), "1D-array image view did not survive into IR metadata"); Check(SpirvContainsTypeImage(result.spirv, SpirvDim1D, 0, 1), "SPIR-V binary does not contain sampled 1D image type"); @@ -5489,9 +5373,9 @@ void TestNewShaderRecompilerImageViewDimensions() { "SPIR-V binary does not contain array image fetch"); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(source, " Grad "), + Check((source.find(" Grad ") != std::string::npos), "1D derivative sample did not emit scalar SPIR-V gradients"); - Check(Common::ContainsStr(source, "OpImageQuerySizeLod"), + Check((source.find("OpImageQuerySizeLod") != std::string::npos), "1D resource query did not emit a scalar size query"); Check(SpirvSourceHasInstructionUsing(source, "OpAccessChain", "image_8 "), "integer 1D load did not access the uint 1D descriptor binding"); @@ -5519,9 +5403,9 @@ void TestNewShaderRecompilerStorageImage1DDescriptorVariants() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "image_dim=1d"), + Check((result.ir_dump.find("image_dim=1d") != std::string::npos), "1D storage dimension did not survive into IR metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_dim=1d_array"), + Check((result.ir_dump.find("image_dim=1d_array") != std::string::npos), "1D-array storage dimension did not survive into IR metadata"); Check(SpirvContainsTypeImage(result.spirv, SpirvDim1D, 0, 2), "SPIR-V binary does not contain storage 1D image type"); @@ -5580,61 +5464,55 @@ void TestNewShaderRecompilerImageGatherVariants() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_lz"), + Check((result.decoded_dump.find("image_gather4_lz") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_LZ"); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_lz_o"), + Check((result.decoded_dump.find("image_gather4_lz_o") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_LZ_O"); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_c"), + Check((result.decoded_dump.find("image_gather4_c") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_C"); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_c_lz"), + Check((result.decoded_dump.find("image_gather4_c_lz") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_C_LZ"); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_c_o"), + Check((result.decoded_dump.find("image_gather4_c_o") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_C_O"); - Check(Common::ContainsStr(result.decoded_dump, "image_gather4_c_lz_o"), + Check((result.decoded_dump.find("image_gather4_c_lz_o") != std::string::npos), "new decoder did not decode IMAGE_GATHER4_C_LZ_O"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0x4"), + Check((result.decoded_dump.find("dmask=0x4") != std::string::npos), "IMAGE_GATHER4_LZ_O did not preserve gather component dmask"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=offset|level_zero addr_components=3"), + Check((result.decoded_dump.find("sample_flags=offset|level_zero addr_components=3") != std::string::npos), "IMAGE_GATHER4_LZ_O did not expose shared offset sample metadata"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=compare addr_components=3"), + Check((result.decoded_dump.find("sample_flags=compare addr_components=3") != std::string::npos), "IMAGE_GATHER4_C did not expose compare sample metadata"); Check( - Common::ContainsStr(result.decoded_dump, - "sample_flags=compare|level_zero addr_components=3"), + (result.decoded_dump.find("sample_flags=compare|level_zero addr_components=3") != std::string::npos), "IMAGE_GATHER4_C_LZ did not expose compare+level-zero sample metadata"); - Check(Common::ContainsStr(result.decoded_dump, - "sample_flags=compare|offset addr_components=4"), + Check((result.decoded_dump.find("sample_flags=compare|offset addr_components=4") != std::string::npos), "IMAGE_GATHER4_C_O did not expose compare+offset sample metadata"); - Check(Common::ContainsStr( - result.decoded_dump, - "sample_flags=compare|offset|level_zero addr_components=4"), + Check((result.decoded_dump.find("sample_flags=compare|offset|level_zero addr_components=4") != std::string::npos), "IMAGE_GATHER4_C_LZ_O did not expose compare+offset+level-zero sample " "metadata"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v60"), + Check((result.ir_dump.find("ImageGather4 v60") != std::string::npos), "IMAGE_GATHER4_LZ did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v64"), + Check((result.ir_dump.find("ImageGather4 v64") != std::string::npos), "IMAGE_GATHER4_C did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v68"), + Check((result.ir_dump.find("ImageGather4 v68") != std::string::npos), "IMAGE_GATHER4_C_LZ did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v72"), + Check((result.ir_dump.find("ImageGather4 v72") != std::string::npos), "IMAGE_GATHER4_LZ_O did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v76"), + Check((result.ir_dump.find("ImageGather4 v76") != std::string::npos), "IMAGE_GATHER4_C_O did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "ImageGather4 v80"), + Check((result.ir_dump.find("ImageGather4 v80") != std::string::npos), "IMAGE_GATHER4_C_LZ_O did not lower to shared IR ImageGather4"); - Check(Common::ContainsStr(result.ir_dump, "data_dwords=4"), + Check((result.ir_dump.find("data_dwords=4") != std::string::npos), "IMAGE_GATHER4 did not preserve four-component result metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x30"), + Check((result.ir_dump.find("image_flags=0x30") != std::string::npos), "IMAGE_GATHER4_LZ_O flags did not survive into IR memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x8"), + Check((result.ir_dump.find("image_flags=0x8") != std::string::npos), "IMAGE_GATHER4_C flags did not survive into IR memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x28"), + Check((result.ir_dump.find("image_flags=0x28") != std::string::npos), "IMAGE_GATHER4_C_LZ flags did not survive into IR memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x18"), + Check((result.ir_dump.find("image_flags=0x18") != std::string::npos), "IMAGE_GATHER4_C_O flags did not survive into IR memory metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_flags=0x38"), + Check((result.ir_dump.find("image_flags=0x38") != std::string::npos), "IMAGE_GATHER4_C_LZ_O flags did not survive into IR memory metadata"); Check(SpirvContainsCapability(result.spirv, 25), "SPIR-V binary does not request ImageGatherExtended"); @@ -5666,24 +5544,24 @@ void TestNewShaderRecompilerImageLoadVariants() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_load"), + Check((result.decoded_dump.find("image_load") != std::string::npos), "new decoder did not decode MIMG image load"); - Check(Common::ContainsStr(result.decoded_dump, "image_load_mip"), + Check((result.decoded_dump.find("image_load_mip") != std::string::npos), "new decoder did not decode MIMG image load mip"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0x3"), + Check((result.decoded_dump.find("dmask=0x3") != std::string::npos), "image_load decode did not preserve partial dmask"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0xf"), + Check((result.decoded_dump.find("dmask=0xf") != std::string::npos), "image_load_mip decode did not preserve full dmask"); - Check(Common::ContainsStr(result.ir_dump, "ImageLoad v8"), + Check((result.ir_dump.find("ImageLoad v8") != std::string::npos), "image_load did not lower through shared image-load IR"); - Check(Common::ContainsStr(result.ir_dump, "ImageLoad v12"), + Check((result.ir_dump.find("ImageLoad v12") != std::string::npos), "image_load_mip did not lower through shared image-load IR"); - Check(Common::ContainsStr(result.ir_dump, "data_dwords=2"), + Check((result.ir_dump.find("data_dwords=2") != std::string::npos), "image_load dmask xy did not preserve two-component result metadata"); - Check(Common::ContainsStr(result.ir_dump, "data_dwords=4"), + Check((result.ir_dump.find("data_dwords=4") != std::string::npos), "image_load_mip dmask xyzw did not preserve four-component result " "metadata"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=3 image_mip=1"), + Check((result.ir_dump.find("image_addr=3 image_mip=1") != std::string::npos), "image_load_mip did not preserve mip address component metadata"); Check(SpirvContainsOpcode(result.spirv, 95), "SPIR-V binary does not contain OpImageFetch"); @@ -5712,9 +5590,9 @@ void TestNewShaderRecompilerImageLoad2DMsaa() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_dim=2d_msaa") && - Common::ContainsStr(result.ir_dump, "image_dim=2d_msaa") && - Common::ContainsStr(result.ir_dump, "image_addr=3 image_mip=0"), + Check((result.decoded_dump.find("image_dim=2d_msaa") != std::string::npos) && + (result.ir_dump.find("image_dim=2d_msaa") != std::string::npos) && + (result.ir_dump.find("image_addr=3 image_mip=0") != std::string::npos), "RDNA2 2D-MSAA load did not preserve x, y, and fragment ID"); Check(result.program.info.images.size() == 1 && result.program.info.images[0].dimension == @@ -5753,23 +5631,23 @@ void TestNewShaderRecompilerImageStoreTranslation() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_store"), + Check((result.decoded_dump.find("image_store") != std::string::npos), "new decoder did not decode MIMG image store"); - Check(Common::ContainsStr(result.decoded_dump, "image_store_mip"), + Check((result.decoded_dump.find("image_store_mip") != std::string::npos), "new decoder did not decode MIMG image store mip"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0xf"), + Check((result.decoded_dump.find("dmask=0xf") != std::string::npos), "image store decode did not preserve full dmask"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0x3"), + Check((result.decoded_dump.find("dmask=0x3") != std::string::npos), "image store mip decode did not preserve partial dmask"); - Check(Common::ContainsStr(result.ir_dump, "ImageStore null, v20, v4"), + Check((result.ir_dump.find("ImageStore null, v20, v4") != std::string::npos), "image_store did not lower to shared image-store IR"); - Check(Common::ContainsStr(result.ir_dump, "ImageStore null, v24, v8"), + Check((result.ir_dump.find("ImageStore null, v24, v8") != std::string::npos), "image_store_mip did not lower to shared image-store IR"); - Check(Common::ContainsStr(result.ir_dump, "storage_image"), + Check((result.ir_dump.find("storage_image") != std::string::npos), "image store IR did not use storage-image resource metadata"); - Check(Common::ContainsStr(result.ir_dump, "data_dwords=4"), + Check((result.ir_dump.find("data_dwords=4") != std::string::npos), "full-dmask image store did not preserve data component count"); - Check(Common::ContainsStr(result.ir_dump, "image_addr=3 image_mip=1"), + Check((result.ir_dump.find("image_addr=3 image_mip=1") != std::string::npos), "mip image store did not preserve mip address component count"); Check(SpirvContainsOpcode(result.spirv, 99), "SPIR-V binary does not contain OpImageWrite"); @@ -5804,7 +5682,7 @@ void TestNewShaderRecompilerStorageImage3DDescriptorVariant() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_dim=3d"), + Check((result.decoded_dump.find("image_dim=3d") != std::string::npos), "MIMG store did not decode the RDNA2 3D instruction dimension"); const auto has_3d_store = std::ranges::any_of( result.program.blocks, [&](const auto *block) { @@ -5858,7 +5736,7 @@ void TestNewShaderRecompilerStorageImage2DDescriptorOverridesMimg3D() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_dim=3d"), + Check((result.decoded_dump.find("image_dim=3d") != std::string::npos), "test MIMG store should decode as a 3D instruction"); Check(SpirvContainsTypeImage(result.spirv, SpirvDim2D, 0, 2), "SPIR-V binary does not contain storage 2D image type"); @@ -5899,33 +5777,33 @@ void TestNewShaderRecompilerImageAtomicTranslation() { options.user_data = user_data; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_add"), + Check((result.decoded_dump.find("image_atomic_add") != std::string::npos), "new decoder did not decode MIMG image atomic add"); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_umin"), + Check((result.decoded_dump.find("image_atomic_umin") != std::string::npos), "new decoder did not decode MIMG image atomic umin"); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_umax"), + Check((result.decoded_dump.find("image_atomic_umax") != std::string::npos), "new decoder did not decode MIMG image atomic umax"); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_and"), + Check((result.decoded_dump.find("image_atomic_and") != std::string::npos), "new decoder did not decode MIMG image atomic and"); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_or"), + Check((result.decoded_dump.find("image_atomic_or") != std::string::npos), "new decoder did not decode MIMG image atomic or"); - Check(Common::ContainsStr(result.decoded_dump, "image_atomic_xor"), + Check((result.decoded_dump.find("image_atomic_xor") != std::string::npos), "new decoder did not decode MIMG image atomic xor"); - Check(Common::ContainsStr(result.decoded_dump, "dmask=0x1"), + Check((result.decoded_dump.find("dmask=0x1") != std::string::npos), "image atomic decode did not preserve dmask metadata"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAddU32 v52, v52, v1"), + Check((result.ir_dump.find("AtomicAddU32 v52, v52, v1") != std::string::npos), "image_atomic_add did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMinU32 v53, v53, v1"), + Check((result.ir_dump.find("AtomicUMinU32 v53, v53, v1") != std::string::npos), "image_atomic_umin did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMaxU32 v57, v57, v1"), + Check((result.ir_dump.find("AtomicUMaxU32 v57, v57, v1") != std::string::npos), "image_atomic_umax did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAndU32 v54, v54, v1"), + Check((result.ir_dump.find("AtomicAndU32 v54, v54, v1") != std::string::npos), "image_atomic_and did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicOrU32 v55, v55, v1"), + Check((result.ir_dump.find("AtomicOrU32 v55, v55, v1") != std::string::npos), "image_atomic_or did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicXorU32 v56, v56, v1"), + Check((result.ir_dump.find("AtomicXorU32 v56, v56, v1") != std::string::npos), "image_atomic_xor did not lower through shared atomic IR"); - Check(Common::ContainsStr(result.ir_dump, "storage_image_uint"), + Check((result.ir_dump.find("storage_image_uint") != std::string::npos), "image atomic IR did not use uint storage-image metadata"); Check(SpirvContainsOpcode(result.spirv, 60), "SPIR-V binary does not contain OpImageTexelPointer"); @@ -5963,21 +5841,21 @@ void TestNewShaderRecompilerVintrpTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "v_interp_p1_f32"), + Check((result.decoded_dump.find("v_interp_p1_f32") != std::string::npos), "new decoder did not decode VINTRP P1"); - Check(Common::ContainsStr(result.decoded_dump, "v_interp_p2_f32"), + Check((result.decoded_dump.find("v_interp_p2_f32") != std::string::npos), "new decoder did not decode VINTRP P2"); - Check(Common::ContainsStr(result.decoded_dump, "v_interp_mov_f32"), + Check((result.decoded_dump.find("v_interp_mov_f32") != std::string::npos), "new decoder did not decode VINTRP MOV"); - Check(Common::ContainsStr(result.ir_dump, "ControlNop"), + Check((result.ir_dump.find("ControlNop") != std::string::npos), "VINTRP P1 did not lower to an explicit no-op marker"); - Check(Common::ContainsStr(result.ir_dump, "LoadInputF32 v11"), + Check((result.ir_dump.find("LoadInputF32 v11") != std::string::npos), "VINTRP P2 did not lower to input-load IR"); - Check(Common::ContainsStr(result.ir_dump, "input_attr=1 input_chan=2"), + Check((result.ir_dump.find("input_attr=1 input_chan=2") != std::string::npos), "VINTRP P2 did not preserve attr/channel metadata"); - Check(Common::ContainsStr(result.ir_dump, "LoadInputF32 v12"), + Check((result.ir_dump.find("LoadInputF32 v12") != std::string::npos), "VINTRP MOV did not lower to input-load IR"); - Check(Common::ContainsStr(result.ir_dump, "input_attr=0 input_chan=3"), + Check((result.ir_dump.find("input_attr=0 input_chan=3") != std::string::npos), "VINTRP MOV did not preserve attr/channel metadata"); Check(ProgramInputCount(result.program, ShaderRecompiler::IR::StageInputKind::Parameter) == 2, @@ -6003,7 +5881,7 @@ void TestNewShaderRecompilerVintrpTranslation() { auto remapped_result = RecompileForTest(remapped_shader, options); Check( - Common::ContainsStr(remapped_result.ir_dump, "input_attr=2 input_chan=0"), + (remapped_result.ir_dump.find("input_attr=2 input_chan=0") != std::string::npos), "remapped VINTRP did not preserve raw pixel attribute metadata"); Check( SpirvHasDecorationValue(remapped_result.spirv, 30u, 3u), @@ -6094,17 +5972,11 @@ void TestCustomVintrpMovTranslation() { options.dump_ir = true; auto custom_result = RecompileForTest(shader, options); - Check(Common::ContainsStr( - custom_result.ir_dump, - "GetInterpolationParameter 0x00000000, 0x00000003, 0x00000000"), + Check((custom_result.ir_dump.find("GetInterpolationParameter 0x00000000, 0x00000003, 0x00000000") != std::string::npos), "custom VINTRP did not preserve P10 mode"); - Check(Common::ContainsStr( - custom_result.ir_dump, - "GetInterpolationParameter 0x00000000, 0x00000003, 0x00000001"), + Check((custom_result.ir_dump.find("GetInterpolationParameter 0x00000000, 0x00000003, 0x00000001") != std::string::npos), "custom VINTRP did not preserve P20 mode"); - Check(Common::ContainsStr( - custom_result.ir_dump, - "GetInterpolationParameter 0x00000000, 0x00000003, 0x00000002"), + Check((custom_result.ir_dump.find("GetInterpolationParameter 0x00000000, 0x00000003, 0x00000002") != std::string::npos), "custom VINTRP did not preserve P0 mode"); Check(SpirvContainsCapability(custom_result.spirv, 5284u), "custom VINTRP did not enable FragmentBarycentricKHR"); @@ -6126,7 +5998,7 @@ void TestCustomVintrpMovTranslation() { Check(SpirvSourceHasInstructionUsing(source, "OpAccessChain", "in_param_0 %uint_2 %uint_3"), "custom VINTRP P20 did not select vertex 2"); - Check(!Common::ContainsStr(source, "OpFSub"), + Check((source.find("OpFSub") == std::string::npos), "custom VINTRP incorrectly applied hardware delta subtraction"); Check(SpirvSourceHasInstructionUsing(source, "OpAccessChain", "gl_BaryCoordKHR %uint_1") && @@ -6219,7 +6091,7 @@ void TestPerspectiveCentroidInputs() { const auto source = DisassembleSpirvBinary(result.spirv); Check(SpirvContainsCapability(result.spirv, 52u) && SpirvHasDecorationValue(result.spirv, 11u, 5286u) && - Common::ContainsStr(source, "InterpolateAtCentroid %gl_BaryCoordKHR") && + (source.find("InterpolateAtCentroid %gl_BaryCoordKHR") != std::string::npos) && SpirvSourceHasInstructionUsing(source, "OpCompositeExtract", " 1") && SpirvSourceHasInstructionUsing(source, "OpCompositeExtract", " 2"), "centroid I/J did not evaluate BaryCoordKHR Y/Z at the centroid"); @@ -6597,19 +6469,19 @@ void TestNewShaderRecompilerBufferSignedLoadTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "buffer_load_sbyte"), + Check((result.decoded_dump.find("buffer_load_sbyte") != std::string::npos), "new decoder did not decode buffer signed byte load"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_load_sshort"), + Check((result.decoded_dump.find("buffer_load_sshort") != std::string::npos), "new decoder did not decode buffer signed short load"); - Check(Common::ContainsStr(result.decoded_dump, "bits=8"), + Check((result.decoded_dump.find("bits=8") != std::string::npos), "signed byte buffer load did not preserve bit width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "bits=16"), + Check((result.decoded_dump.find("bits=16") != std::string::npos), "signed short buffer load did not preserve bit width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "signed=1"), + Check((result.decoded_dump.find("signed=1") != std::string::npos), "signed buffer loads did not preserve signed metadata"); - Check(Common::ContainsStr(result.ir_dump, "BufferLoadSbyte v46"), + Check((result.ir_dump.find("BufferLoadSbyte v46") != std::string::npos), "buffer_load_sbyte did not lower to signed byte IR load"); - Check(Common::ContainsStr(result.ir_dump, "BufferLoadSshort v47"), + Check((result.ir_dump.find("BufferLoadSshort v47") != std::string::npos), "buffer_load_sshort did not lower to signed short IR load"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad"); @@ -6634,17 +6506,17 @@ void TestNewShaderRecompilerBufferSubDwordStoreTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "buffer_store_byte"), + Check((result.decoded_dump.find("buffer_store_byte") != std::string::npos), "new decoder did not decode buffer byte store"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_store_short"), + Check((result.decoded_dump.find("buffer_store_short") != std::string::npos), "new decoder did not decode buffer short store"); - Check(Common::ContainsStr(result.decoded_dump, "bits=8"), + Check((result.decoded_dump.find("bits=8") != std::string::npos), "buffer byte store did not preserve bit width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "bits=16"), + Check((result.decoded_dump.find("bits=16") != std::string::npos), "buffer short store did not preserve bit width metadata"); - Check(Common::ContainsStr(result.ir_dump, "BufferStoreByte null, v48"), + Check((result.ir_dump.find("BufferStoreByte null, v48") != std::string::npos), "buffer_store_byte did not lower to byte store IR"); - Check(Common::ContainsStr(result.ir_dump, "BufferStoreShort null, v49"), + Check((result.ir_dump.find("BufferStoreShort null, v49") != std::string::npos), "buffer_store_short did not lower to short store IR"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad for sub-dword store RMW"); @@ -6686,17 +6558,17 @@ void TestNewShaderRecompilerMubufFormatTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "BUFFER_LOAD_FORMAT_X"), + Check((result.decoded_dump.find("BUFFER_LOAD_FORMAT_X") != std::string::npos), "new decoder did not decode MUBUF format-x load"); - Check(Common::ContainsStr(result.decoded_dump, "BUFFER_LOAD_FORMAT_XYZW"), + Check((result.decoded_dump.find("BUFFER_LOAD_FORMAT_XYZW") != std::string::npos), "new decoder did not decode MUBUF format-xyzw load"); - Check(Common::ContainsStr(result.decoded_dump, "BUFFER_STORE_FORMAT_X"), + Check((result.decoded_dump.find("BUFFER_STORE_FORMAT_X") != std::string::npos), "new decoder did not decode MUBUF format-x store"); - Check(Common::ContainsStr(result.decoded_dump, "BUFFER_STORE_FORMAT_XYZW"), + Check((result.decoded_dump.find("BUFFER_STORE_FORMAT_XYZW") != std::string::npos), "new decoder did not decode MUBUF format-xyzw store"); - Check(Common::ContainsStr(result.decoded_dump, "typed=0 formatted=1"), + Check((result.decoded_dump.find("typed=0 formatted=1") != std::string::npos), "MUBUF format decode did not preserve formatted non-typed metadata"); - Check(!Common::ContainsStr(result.ir_dump, "BufferLoadDword v99"), + Check((result.ir_dump.find("BufferLoadDword v99") == std::string::npos), "MUBUF formatted load retained a scalar tail sibling"); Check(CountSourceOccurrences(result.ir_dump, "StoreBufferU32 ") == 1u && CountSourceOccurrences(result.ir_dump, "StoreBufferU32x2 ") == 1u && @@ -6730,14 +6602,14 @@ void TestNewShaderRecompilerFormattedStoreUsesRuntimeArrayLengthOnly() { Check(result.resources.buffers.size() == 1 && result.resources.buffers[0].dwords[2] == 5u, "formatted store test did not preserve descriptor NumRecords"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_store_format_x"), + Check((result.decoded_dump.find("buffer_store_format_x") != std::string::npos), "formatted store regression did not decode buffer_store_format_x"); - Check(Common::ContainsStr(result.ir_dump, "typed=0 formatted=1"), + Check((result.ir_dump.find("typed=0 formatted=1") != std::string::npos), "formatted store regression did not preserve formatted metadata"); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(source, "OpArrayLength"), + Check((source.find("OpArrayLength") != std::string::npos), "formatted store SPIR-V lacks runtime storage-buffer bounds check"); Check( !SpirvSourceHasInstructionUsing(source, "OpULessThan", "%uint_5"), @@ -6767,27 +6639,27 @@ void TestNewShaderRecompilerTypedBufferTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_LOAD_FORMAT_X"), + Check((result.decoded_dump.find("TBUFFER_LOAD_FORMAT_X") != std::string::npos), "new decoder did not decode typed buffer format-x load"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_LOAD_FORMAT_XY"), + Check((result.decoded_dump.find("TBUFFER_LOAD_FORMAT_XY") != std::string::npos), "new decoder did not decode typed buffer format-xy load"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_LOAD_FORMAT_XYZ"), + Check((result.decoded_dump.find("TBUFFER_LOAD_FORMAT_XYZ") != std::string::npos), "new decoder did not decode typed buffer format-xyz load"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_LOAD_FORMAT_XYZW"), + Check((result.decoded_dump.find("TBUFFER_LOAD_FORMAT_XYZW") != std::string::npos), "new decoder did not decode typed buffer format-xyzw load"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_STORE_FORMAT_X"), + Check((result.decoded_dump.find("TBUFFER_STORE_FORMAT_X") != std::string::npos), "new decoder did not decode typed buffer format-x store"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_STORE_FORMAT_XY"), + Check((result.decoded_dump.find("TBUFFER_STORE_FORMAT_XY") != std::string::npos), "new decoder did not decode typed buffer format-xy store"); - Check(Common::ContainsStr(result.decoded_dump, "TBUFFER_STORE_FORMAT_XYZW"), + Check((result.decoded_dump.find("TBUFFER_STORE_FORMAT_XYZW") != std::string::npos), "new decoder did not decode typed buffer format-xyzw store"); - Check(Common::ContainsStr(result.decoded_dump, "dfmt=14 nfmt=7"), + Check((result.decoded_dump.find("dfmt=14 nfmt=7") != std::string::npos), "MTBUF decode did not expose dfmt/nfmt metadata"); - Check(Common::ContainsStr(result.decoded_dump, "typed=1"), + Check((result.decoded_dump.find("typed=1") != std::string::npos), "MTBUF decode did not preserve typed metadata"); - Check(Common::ContainsStr(result.decoded_dump, "offen=1"), + Check((result.decoded_dump.find("offen=1") != std::string::npos), "MTBUF decode did not preserve offen metadata"); - Check(!Common::ContainsStr(result.ir_dump, "BufferLoadDword v71"), + Check((result.ir_dump.find("BufferLoadDword v71") == std::string::npos), "typed buffer load retained a scalar tail sibling"); Check(CountSourceOccurrences(result.ir_dump, "StoreBufferU32 ") == 1u && CountSourceOccurrences(result.ir_dump, "StoreBufferU32x2 ") == 1u && @@ -6813,9 +6685,9 @@ void TestNewShaderRecompilerFlatOldBackedTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "flat_load_ubyte"), + Check((result.decoded_dump.find("flat_load_ubyte") != std::string::npos), "new decoder did not decode old-backed FLAT ubyte load"); - Check(Common::ContainsStr(result.ir_dump, "FlatLoadUbyte v9"), + Check((result.ir_dump.find("FlatLoadUbyte v9") != std::string::npos), "old-backed FLAT ubyte load did not lower to IR"); Check(SpirvContainsOpcode(result.spirv, 65), "SPIR-V binary does not contain OpAccessChain"); @@ -6870,23 +6742,23 @@ void TestNewShaderRecompilerFlatSignedLoadTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "flat_load_sbyte"), + Check((result.decoded_dump.find("flat_load_sbyte") != std::string::npos), "new decoder did not decode flat signed byte load"); - Check(Common::ContainsStr(result.decoded_dump, "flat_load_sshort"), + Check((result.decoded_dump.find("flat_load_sshort") != std::string::npos), "new decoder did not decode flat signed short load"); - Check(Common::ContainsStr(result.decoded_dump, "bits=8"), + Check((result.decoded_dump.find("bits=8") != std::string::npos), "signed byte flat load did not preserve bit width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "bits=16"), + Check((result.decoded_dump.find("bits=16") != std::string::npos), "signed short flat load did not preserve bit width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "signed=1"), + Check((result.decoded_dump.find("signed=1") != std::string::npos), "signed flat loads did not preserve signed metadata"); - Check(Common::ContainsStr(result.ir_dump, "FlatLoadSbyte v10"), + Check((result.ir_dump.find("FlatLoadSbyte v10") != std::string::npos), "flat_load_sbyte did not lower to signed byte IR load"); - Check(Common::ContainsStr(result.ir_dump, "FlatLoadSshort v11"), + Check((result.ir_dump.find("FlatLoadSshort v11") != std::string::npos), "flat_load_sshort did not lower to signed short IR load"); - Check(Common::ContainsStr(result.ir_dump, "scratch"), + Check((result.ir_dump.find("scratch") != std::string::npos), "signed scratch load did not preserve scratch metadata"); - Check(Common::ContainsStr(result.ir_dump, "global"), + Check((result.ir_dump.find("global") != std::string::npos), "signed global load did not preserve global metadata"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad"); @@ -6921,45 +6793,45 @@ void TestNewShaderRecompilerFlatStoreTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_byte"), + Check((result.decoded_dump.find("flat_store_byte") != std::string::npos), "new decoder did not decode flat byte store"); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_short"), + Check((result.decoded_dump.find("flat_store_short") != std::string::npos), "new decoder did not decode flat short store"); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_dword"), + Check((result.decoded_dump.find("flat_store_dword") != std::string::npos), "new decoder did not decode flat dword store"); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_dwordx2"), + Check((result.decoded_dump.find("flat_store_dwordx2") != std::string::npos), "new decoder did not decode flat dwordx2 store"); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_dwordx3"), + Check((result.decoded_dump.find("flat_store_dwordx3") != std::string::npos), "new decoder did not decode flat dwordx3 store"); - Check(Common::ContainsStr(result.decoded_dump, "flat_store_dwordx4"), + Check((result.decoded_dump.find("flat_store_dwordx4") != std::string::npos), "new decoder did not decode flat dwordx4 store"); - Check(Common::ContainsStr(result.decoded_dump, "segment=1"), + Check((result.decoded_dump.find("segment=1") != std::string::npos), "flat store decode did not preserve scratch segment metadata"); - Check(Common::ContainsStr(result.decoded_dump, "segment=2"), + Check((result.decoded_dump.find("segment=2") != std::string::npos), "flat store decode did not preserve global segment metadata"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=1 bits=8"), + Check((result.decoded_dump.find("dwords=1 bits=8") != std::string::npos), "flat byte store decode did not expose byte-width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=1 bits=16"), + Check((result.decoded_dump.find("dwords=1 bits=16") != std::string::npos), "flat short store decode did not expose short-width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=4 bits=32"), + Check((result.decoded_dump.find("dwords=4 bits=32") != std::string::npos), "flat store decode did not expose wide width metadata"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreByte null, v72"), + Check((result.ir_dump.find("FlatStoreByte null, v72") != std::string::npos), "flat_store_byte did not lower through shared flat store IR"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreShort null, v73"), + Check((result.ir_dump.find("FlatStoreShort null, v73") != std::string::npos), "flat_store_short did not lower through shared flat store IR"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreDword null, v60"), + Check((result.ir_dump.find("FlatStoreDword null, v60") != std::string::npos), "flat_store_dword did not lower through shared flat store IR"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreDword null, v62"), + Check((result.ir_dump.find("FlatStoreDword null, v62") != std::string::npos), "scratch_store_dwordx2 did not expand to the last dword store"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreDword null, v66"), + Check((result.ir_dump.find("FlatStoreDword null, v66") != std::string::npos), "global_store_dwordx3 did not expand to the last dword store"); - Check(Common::ContainsStr(result.ir_dump, "FlatStoreDword null, v71"), + Check((result.ir_dump.find("FlatStoreDword null, v71") != std::string::npos), "global_store_dwordx4 did not expand to the last dword store"); - Check(Common::ContainsStr(result.ir_dump, "flat"), + Check((result.ir_dump.find("flat") != std::string::npos), "flat store IR did not preserve flat resource metadata"); - Check(Common::ContainsStr(result.ir_dump, "scratch"), + Check((result.ir_dump.find("scratch") != std::string::npos), "flat store IR did not preserve scratch resource metadata"); - Check(Common::ContainsStr(result.ir_dump, "global"), + Check((result.ir_dump.find("global") != std::string::npos), "flat store IR did not preserve global resource metadata"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad for sub-dword flat store merge"); @@ -7040,89 +6912,89 @@ void TestNewShaderRecompilerAtomicTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_swap"), + Check((result.decoded_dump.find("buffer_atomic_swap") != std::string::npos), "new decoder did not decode buffer atomic swap"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_add"), + Check((result.decoded_dump.find("buffer_atomic_add") != std::string::npos), "new decoder did not decode buffer atomic add"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_sub"), + Check((result.decoded_dump.find("buffer_atomic_sub") != std::string::npos), "new decoder did not decode buffer atomic sub"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_smin"), + Check((result.decoded_dump.find("buffer_atomic_smin") != std::string::npos), "new decoder did not decode buffer atomic signed min"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_smax"), + Check((result.decoded_dump.find("buffer_atomic_smax") != std::string::npos), "new decoder did not decode buffer atomic signed max"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_xor"), + Check((result.decoded_dump.find("buffer_atomic_xor") != std::string::npos), "new decoder did not decode buffer atomic xor"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_fmin"), + Check((result.decoded_dump.find("buffer_atomic_fmin") != std::string::npos), "new decoder did not decode buffer atomic float min"); - Check(Common::ContainsStr(result.decoded_dump, "buffer_atomic_fmax"), + Check((result.decoded_dump.find("buffer_atomic_fmax") != std::string::npos), "new decoder did not decode buffer atomic float max"); - Check(Common::ContainsStr(result.decoded_dump, "ds_add_u32"), + Check((result.decoded_dump.find("ds_add_u32") != std::string::npos), "new decoder did not decode DS atomic add"); - Check(Common::ContainsStr(result.decoded_dump, "ds_sub_u32"), + Check((result.decoded_dump.find("ds_sub_u32") != std::string::npos), "new decoder did not decode DS atomic sub"); - Check(Common::ContainsStr(result.decoded_dump, "ds_min_i32"), + Check((result.decoded_dump.find("ds_min_i32") != std::string::npos), "new decoder did not decode DS signed min"); - Check(Common::ContainsStr(result.decoded_dump, "ds_xor_rtn_b32"), + Check((result.decoded_dump.find("ds_xor_rtn_b32") != std::string::npos), "new decoder did not decode DS xor-return"); - Check(Common::ContainsStr(result.decoded_dump, "ds_wrxchg_rtn_b32"), + Check((result.decoded_dump.find("ds_wrxchg_rtn_b32") != std::string::npos), "new decoder did not decode DS write-exchange-return"); - Check(Common::ContainsStr(result.decoded_dump, "ds_add_rtn_u32"), + Check((result.decoded_dump.find("ds_add_rtn_u32") != std::string::npos), "new decoder did not decode DS atomic add-return"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSwapU32 v0"), + Check((result.ir_dump.find("AtomicSwapU32 v0") != std::string::npos), "buffer atomic swap did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAddU32 v1"), + Check((result.ir_dump.find("AtomicAddU32 v1") != std::string::npos), "buffer atomic add did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSubU32 v7"), + Check((result.ir_dump.find("AtomicSubU32 v7") != std::string::npos), "buffer atomic sub did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMinI32 v8"), + Check((result.ir_dump.find("AtomicSMinI32 v8") != std::string::npos), "buffer atomic signed min did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMinU32 v2"), + Check((result.ir_dump.find("AtomicUMinU32 v2") != std::string::npos), "buffer atomic umin did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMaxI32 v9"), + Check((result.ir_dump.find("AtomicSMaxI32 v9") != std::string::npos), "buffer atomic signed max did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMaxU32 v3"), + Check((result.ir_dump.find("AtomicUMaxU32 v3") != std::string::npos), "buffer atomic umax did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAndU32 v4"), + Check((result.ir_dump.find("AtomicAndU32 v4") != std::string::npos), "buffer atomic and did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicOrU32 v5"), + Check((result.ir_dump.find("AtomicOrU32 v5") != std::string::npos), "buffer atomic or did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicXorU32 v6"), + Check((result.ir_dump.find("AtomicXorU32 v6") != std::string::npos), "buffer atomic xor did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicFMinF32 null, v0"), + Check((result.ir_dump.find("AtomicFMinF32 null, v0") != std::string::npos), "buffer atomic float min did not lower to IR without a GLC return"); - Check(Common::ContainsStr(result.ir_dump, "AtomicFMaxF32 null, v3"), + Check((result.ir_dump.find("AtomicFMaxF32 null, v3") != std::string::npos), "buffer atomic float max did not lower to IR without a GLC return"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAddU32 null, v2"), + Check((result.ir_dump.find("AtomicAddU32 null, v2") != std::string::npos), "DS no-return atomic add did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSubU32 null, v10"), + Check((result.ir_dump.find("AtomicSubU32 null, v10") != std::string::npos), "DS no-return atomic sub did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMinI32 null, v11"), + Check((result.ir_dump.find("AtomicSMinI32 null, v11") != std::string::npos), "DS no-return signed min did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMaxI32 null, v12"), + Check((result.ir_dump.find("AtomicSMaxI32 null, v12") != std::string::npos), "DS no-return signed max did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAndU32 null, v13"), + Check((result.ir_dump.find("AtomicAndU32 null, v13") != std::string::npos), "DS no-return and did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicXorU32 null, v14"), + Check((result.ir_dump.find("AtomicXorU32 null, v14") != std::string::npos), "DS no-return xor did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAddU32 v15"), + Check((result.ir_dump.find("AtomicAddU32 v15") != std::string::npos), "DS add-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSubU32 v16"), + Check((result.ir_dump.find("AtomicSubU32 v16") != std::string::npos), "DS sub-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMinI32 v17"), + Check((result.ir_dump.find("AtomicSMinI32 v17") != std::string::npos), "DS signed min-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSMaxI32 v18"), + Check((result.ir_dump.find("AtomicSMaxI32 v18") != std::string::npos), "DS signed max-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMinU32 v19"), + Check((result.ir_dump.find("AtomicUMinU32 v19") != std::string::npos), "DS unsigned min-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicUMaxU32 v20"), + Check((result.ir_dump.find("AtomicUMaxU32 v20") != std::string::npos), "DS unsigned max-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicAndU32 v21"), + Check((result.ir_dump.find("AtomicAndU32 v21") != std::string::npos), "DS and-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicOrU32 v22"), + Check((result.ir_dump.find("AtomicOrU32 v22") != std::string::npos), "DS or-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicXorU32 v23"), + Check((result.ir_dump.find("AtomicXorU32 v23") != std::string::npos), "DS xor-return did not lower to IR"); - Check(Common::ContainsStr(result.ir_dump, "AtomicSwapU32 v24"), + Check((result.ir_dump.find("AtomicSwapU32 v24") != std::string::npos), "DS write-exchange-return did not lower to shared atomic swap IR"); Check(SpirvContainsOpcode(result.spirv, 229), "SPIR-V binary does not contain OpAtomicExchange"); @@ -7196,33 +7068,33 @@ void TestNewShaderRecompilerDsReadWrite2Translation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "DS_WRITE2_B32"), + Check((result.decoded_dump.find("DS_WRITE2_B32") != std::string::npos), "new decoder did not decode old-backed DS write2"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ2_B32"), + Check((result.decoded_dump.find("DS_READ2_B32") != std::string::npos), "new decoder did not decode old-backed DS read2"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ2ST64_B32"), + Check((result.decoded_dump.find("DS_READ2ST64_B32") != std::string::npos), "new decoder did not preserve the DS read2st64 opcode identity"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ2_B64"), + Check((result.decoded_dump.find("DS_READ2_B64") != std::string::npos), "new decoder did not decode old-backed DS read2 b64"); - Check(Common::ContainsStr(result.decoded_dump, "offset=4"), + Check((result.decoded_dump.find("offset=4") != std::string::npos), "DS write2 decode did not scale offset0 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset2=12"), + Check((result.decoded_dump.find("offset2=12") != std::string::npos), "DS write2 decode did not scale offset1 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset=8"), + Check((result.decoded_dump.find("offset=8") != std::string::npos), "DS read2 decode did not scale offset0 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset2=16"), + Check((result.decoded_dump.find("offset2=16") != std::string::npos), "DS read2 decode did not scale offset1 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset=256"), + Check((result.decoded_dump.find("offset=256") != std::string::npos), "DS read2 st64 decode did not scale offset0 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset2=1280"), + Check((result.decoded_dump.find("offset2=1280") != std::string::npos), "DS read2 st64 decode did not scale offset1 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset=16"), + Check((result.decoded_dump.find("offset=16") != std::string::npos), "DS read2 b64 decode did not scale offset0 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "offset2=48"), + Check((result.decoded_dump.find("offset2=48") != std::string::npos), "DS read2 b64 decode did not scale offset1 to bytes"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=2 bits=32"), + Check((result.decoded_dump.find("dwords=2 bits=32") != std::string::npos), "DS read/write2 decode did not preserve two-dword metadata"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=4 bits=32"), + Check((result.decoded_dump.find("dwords=4 bits=32") != std::string::npos), "DS read2 b64 decode did not preserve four-dword metadata"); Check(SpirvContainsOpcode(result.spirv, 62), "SPIR-V binary does not contain OpStore"); @@ -7247,37 +7119,37 @@ void TestNewShaderRecompilerDsSubDwordTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "ds_write_b8"), + Check((result.decoded_dump.find("ds_write_b8") != std::string::npos), "new decoder did not decode DS byte write"); - Check(Common::ContainsStr(result.decoded_dump, "ds_write_b16"), + Check((result.decoded_dump.find("ds_write_b16") != std::string::npos), "new decoder did not decode DS short write"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_i8"), + Check((result.decoded_dump.find("ds_read_i8") != std::string::npos), "new decoder did not decode DS signed byte read"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_u8"), + Check((result.decoded_dump.find("ds_read_u8") != std::string::npos), "new decoder did not decode DS unsigned byte read"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_i16"), + Check((result.decoded_dump.find("ds_read_i16") != std::string::npos), "new decoder did not decode DS signed short read"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_u16"), + Check((result.decoded_dump.find("ds_read_u16") != std::string::npos), "new decoder did not decode DS unsigned short read"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ_U16_D16 v7.sdwa(sel=4"), + Check((result.decoded_dump.find("DS_READ_U16_D16 v7.sdwa(sel=4") != std::string::npos), "new decoder did not decode captured DS masked short read"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=1 bits=8"), + Check((result.decoded_dump.find("dwords=1 bits=8") != std::string::npos), "DS byte decode did not preserve byte-width metadata"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=1 bits=16"), + Check((result.decoded_dump.find("dwords=1 bits=16") != std::string::npos), "DS short decode did not preserve short-width metadata"); - Check(Common::ContainsStr(result.ir_dump, "DsWriteByte null, v40"), + Check((result.ir_dump.find("DsWriteByte null, v40") != std::string::npos), "DS byte write did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsWriteShort null, v41"), + Check((result.ir_dump.find("DsWriteShort null, v41") != std::string::npos), "DS short write did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadSbyte v42"), + Check((result.ir_dump.find("DsReadSbyte v42") != std::string::npos), "DS signed byte read did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadUbyte v43"), + Check((result.ir_dump.find("DsReadUbyte v43") != std::string::npos), "DS unsigned byte read did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadSshort v44"), + Check((result.ir_dump.find("DsReadSshort v44") != std::string::npos), "DS signed short read did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadUshort v45"), + Check((result.ir_dump.find("DsReadUshort v45") != std::string::npos), "DS unsigned short read did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadUshort v7.sdwa(sel=4"), + Check((result.ir_dump.find("DsReadUshort v7.sdwa(sel=4") != std::string::npos), "DS masked short read did not preserve its partial destination"); Check(SpirvContainsOpcode(result.spirv, 61), "SPIR-V binary does not contain OpLoad"); @@ -7351,25 +7223,25 @@ void TestNewShaderRecompilerDsWideAndAtomicTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "DS_WRITE_B64"), + Check((result.decoded_dump.find("DS_WRITE_B64") != std::string::npos), "new decoder did not decode DS b64 write"); - Check(Common::ContainsStr(result.decoded_dump, "DS_WRITE_B96"), + Check((result.decoded_dump.find("DS_WRITE_B96") != std::string::npos), "new decoder did not decode DS b96 write"); - Check(Common::ContainsStr(result.decoded_dump, "DS_WRITE_B128"), + Check((result.decoded_dump.find("DS_WRITE_B128") != std::string::npos), "new decoder did not decode DS b128 write"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ_B64"), + Check((result.decoded_dump.find("DS_READ_B64") != std::string::npos), "new decoder did not decode DS b64 read"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ_B96"), + Check((result.decoded_dump.find("DS_READ_B96") != std::string::npos), "new decoder did not decode DS b96 read"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ_B128"), + Check((result.decoded_dump.find("DS_READ_B128") != std::string::npos), "new decoder did not decode DS b128 read"); - Check(Common::ContainsStr(result.decoded_dump, "DS_MIN_U32"), + Check((result.decoded_dump.find("DS_MIN_U32") != std::string::npos), "new decoder did not decode DS min atomic"); - Check(Common::ContainsStr(result.decoded_dump, "DS_MAX_U32"), + Check((result.decoded_dump.find("DS_MAX_U32") != std::string::npos), "new decoder did not decode DS max atomic"); - Check(Common::ContainsStr(result.decoded_dump, "DS_OR_B32"), + Check((result.decoded_dump.find("DS_OR_B32") != std::string::npos), "new decoder did not decode DS or atomic"); - Check(Common::ContainsStr(result.decoded_dump, "dwords=4 bits=32"), + Check((result.decoded_dump.find("dwords=4 bits=32") != std::string::npos), "new decoder did not expose DS wide width metadata"); Check(SpirvContainsOpcode(result.spirv, 62), "SPIR-V binary does not contain OpStore"); @@ -7397,20 +7269,20 @@ void TestNewShaderRecompilerDsSwizzleTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "ds_swizzle_b32"), + Check((result.decoded_dump.find("ds_swizzle_b32") != std::string::npos), "new decoder did not decode DS swizzle"); - Check(Common::ContainsStr(result.decoded_dump, "offset=31"), + Check((result.decoded_dump.find("offset=31") != std::string::npos), "new decoder did not expose DS swizzle control"); - Check(Common::ContainsStr(result.decoded_dump, "offset=32795"), + Check((result.decoded_dump.find("offset=32795") != std::string::npos), "new decoder did not expose DS swizzle quad control"); - Check(Common::ContainsStr(result.decoded_dump, "offset=50304"), + Check((result.decoded_dump.find("offset=50304") != std::string::npos), "new decoder did not expose DS swizzle rotate control"); - Check(Common::ContainsStr(result.ir_dump, "DsSwizzleB32 v8, v5, 0x0000001f"), + Check((result.ir_dump.find("DsSwizzleB32 v8, v5, 0x0000001f") != std::string::npos), "DS swizzle did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsSwizzleB32 v9, v6, 0x0000801b"), + Check((result.ir_dump.find("DsSwizzleB32 v9, v6, 0x0000801b") != std::string::npos), "DS quad swizzle did not lower to explicit IR"); Check( - Common::ContainsStr(result.ir_dump, "DsSwizzleB32 v69, v69, 0x0000c480"), + (result.ir_dump.find("DsSwizzleB32 v69, v69, 0x0000c480") != std::string::npos), "DS rotate swizzle did not lower to explicit IR"); Check(SpirvContainsOpcode(result.spirv, 345), "SPIR-V binary does not contain OpGroupNonUniformShuffle"); @@ -7447,13 +7319,13 @@ void TestNewShaderRecompilerDsAddtidTranslation() { options.input_info.compute = &input_info; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "ds_write_addtid_b32"), + Check((result.decoded_dump.find("ds_write_addtid_b32") != std::string::npos), "new decoder did not decode DS write addtid"); - Check(Common::ContainsStr(result.decoded_dump, "ds_read_addtid_b32"), + Check((result.decoded_dump.find("ds_read_addtid_b32") != std::string::npos), "new decoder did not decode DS read addtid"); - Check(Common::ContainsStr(result.ir_dump, "DsWriteAddtidB32 null, v7, m0"), + Check((result.ir_dump.find("DsWriteAddtidB32 null, v7, m0") != std::string::npos), "DS write addtid did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsReadAddtidB32 v8, m0"), + Check((result.ir_dump.find("DsReadAddtidB32 v8, m0") != std::string::npos), "DS read addtid did not lower to explicit IR"); Check(ProgramHasInput( result.program, @@ -7485,17 +7357,17 @@ void TestNewShaderRecompilerDsFloatMinMaxTranslation() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "ds_min_f32"), + Check((result.decoded_dump.find("ds_min_f32") != std::string::npos), "new decoder did not decode DS float min"); - Check(Common::ContainsStr(result.decoded_dump, "ds_max_f32"), + Check((result.decoded_dump.find("ds_max_f32") != std::string::npos), "new decoder did not decode DS float max"); - Check(Common::ContainsStr(result.ir_dump, "DsMinF32 null, v7, v1"), + Check((result.ir_dump.find("DsMinF32 null, v7, v1") != std::string::npos), "DS float min did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "DsMaxF32 null, v8, v1"), + Check((result.ir_dump.find("DsMaxF32 null, v8, v1") != std::string::npos), "DS float max did not lower to explicit IR"); - Check(Common::ContainsStr(result.ir_dump, "v9"), + Check((result.ir_dump.find("v9") != std::string::npos), "DS float min did not retain DATA1 compare operand"); - Check(Common::ContainsStr(result.ir_dump, "v10"), + Check((result.ir_dump.find("v10") != std::string::npos), "DS float max did not retain DATA1 compare operand"); Check(SpirvContainsOpcode(result.spirv, 12), "SPIR-V binary does not contain OpExtInst"); @@ -7520,11 +7392,11 @@ void TestNewShaderRecompilerCfgStraightLine() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "CFG:"), + Check((result.ir_dump.find("CFG:") != std::string::npos), "CFG dump was not emitted"); - Check(Common::ContainsStr(result.ir_dump, "block_0"), + Check((result.ir_dump.find("block_0") != std::string::npos), "straight-line CFG block missing"); - Check(Common::ContainsStr(result.ir_dump, "successors=["), + Check((result.ir_dump.find("successors=[") != std::string::npos), "CFG successors were not dumped"); CheckSpirvBinaryValidates(result.spirv); } @@ -7543,7 +7415,7 @@ void TestNewShaderRecompilerCfgIfElse() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "condition=scc1"), + Check((result.ir_dump.find("condition=scc1") != std::string::npos), "if/else branch condition missing"); Check(SpirvContainsOpcode(result.spirv, 247), "if/else SPIR-V lacks OpSelectionMerge"); @@ -7631,10 +7503,9 @@ void TestNewShaderRecompilerCfgTerminalExitMergePS() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "terminal PS branch should stay on structured path"); - Check(!Common::ContainsStr(result.ir_dump, - "conditional block 0 has no structured merge"), + Check((result.ir_dump.find("conditional block 0 has no structured merge") == std::string::npos), "known terminal PS branch shape still reports missing merge"); Check(SpirvContainsOpcode(result.spirv, 247), "terminal PS branch SPIR-V lacks OpSelectionMerge"); @@ -7654,14 +7525,13 @@ void TestNewShaderRecompilerCfgPostEndTargetMergePS() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "0x0000000c: S_MOV_B32"), + Check((result.decoded_dump.find("0x0000000c: S_MOV_B32") != std::string::npos), "post-end branch target was not decoded"); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "post-end terminal branch should stay on structured path"); - Check(Common::ContainsStr(result.ir_dump, "pc=0x0000000c"), + Check((result.ir_dump.find("pc=0x0000000c") != std::string::npos), "post-end branch target did not reach IR blocks"); - Check(!Common::ContainsStr(result.ir_dump, - "conditional block 0 has no structured merge"), + Check((result.ir_dump.find("conditional block 0 has no structured merge") == std::string::npos), "known post-end PS branch shape still reports missing merge"); Check(SpirvContainsOpcode(result.spirv, 247), "post-end terminal branch SPIR-V lacks OpSelectionMerge"); @@ -7682,11 +7552,11 @@ void TestNewShaderRecompilerCfgLoopBreakContinue() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "backedge"), + Check((result.ir_dump.find("backedge") != std::string::npos), "loop backedge was not detected"); - Check(Common::ContainsStr(result.ir_dump, "loop_header=1"), + Check((result.ir_dump.find("loop_header=1") != std::string::npos), "loop header was not marked"); - Check(Common::ContainsStr(result.ir_dump, "continue="), + Check((result.ir_dump.find("continue=") != std::string::npos), "loop continue block was not identified"); Check(SpirvContainsOpcode(result.spirv, 246), "loop SPIR-V lacks OpLoopMerge"); @@ -7772,7 +7642,7 @@ void TestNewShaderRecompilerCfgLoopHeaderDsAppendConsumeStructured() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "DS append/consume loop did not stay structured"); Check(!result.program.dispatcher_fallback, "DS append/consume loop unexpectedly selected dispatcher fallback"); @@ -7797,13 +7667,13 @@ void TestNewShaderRecompilerCfgLoopHeaderDsReadStructured() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured") && + Check((result.ir_dump.find("mode=structured") != std::string::npos) && !result.program.dispatcher_fallback, "DS read loop header did not stay structured"); Check(!SpirvContainsOpcode(result.spirv, 251), "DS read structured SPIR-V unexpectedly contains OpSwitch"); const auto metrics = MeasureSpirv(result.spirv); - Check(Common::ContainsStr(result.ir_dump, "Phi") && metrics.phis != 0u && + Check((result.ir_dump.find("Phi") != std::string::npos) && metrics.phis != 0u && metrics.selection_merges != 0u, "guarded LDS loop did not exercise deferred Phi exit-label patching"); CheckSpirvPhiParents(result.spirv); @@ -7826,10 +7696,10 @@ void TestNewShaderRecompilerCfgLoopHeaderDsRead2B64Structured() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured") && + Check((result.ir_dump.find("mode=structured") != std::string::npos) && !result.program.dispatcher_fallback, "DS read2 b64 loop header did not stay structured"); - Check(Common::ContainsStr(result.decoded_dump, "DS_READ2_B64"), + Check((result.decoded_dump.find("DS_READ2_B64") != std::string::npos), "DS read2 b64 loop regression did not decode the captured opcode"); Check(!SpirvContainsOpcode(result.spirv, 251), "DS read2 b64 structured SPIR-V unexpectedly contains OpSwitch"); @@ -7853,10 +7723,10 @@ void TestNewShaderRecompilerCfgSharedOuterAndLoopMerge() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "shared outer/loop merge should stay on structured path"); Check( - !Common::ContainsStr(result.ir_dump, "duplicate structured merge block"), + (result.ir_dump.find("duplicate structured merge block") == std::string::npos), "shared outer/loop merge was not split before structurization"); Check(SpirvContainsOpcode(result.spirv, 246), "shared outer/loop merge SPIR-V lacks OpLoopMerge"); @@ -7882,7 +7752,7 @@ void TestNewShaderRecompilerCfgLoopEarlyBreakNoSelection() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "loop early-break CFG did not stay on structured path"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) != 0, "loop early-break SPIR-V lacks OpLoopMerge"); @@ -7913,7 +7783,7 @@ void TestNewShaderRecompilerCfgNestedLoopNonlocalExitDispatcher() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=dispatcher"), + Check((result.ir_dump.find("mode=dispatcher") != std::string::npos), "nested-loop nonlocal exit did not select dispatcher fallback"); Check(SpirvInstructionOpcodeCount(result.spirv, 251) != 0, "nested-loop nonlocal exit dispatcher SPIR-V lacks OpSwitch"); @@ -7937,7 +7807,7 @@ void TestNewShaderRecompilerCfgNestedLoopLocalExitNoSelection() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "nested local loop exit did not stay on structured path"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) >= 2, "nested local loop exit SPIR-V lacks both OpLoopMerge instructions"); @@ -8017,7 +7887,7 @@ void TestNewShaderRecompilerCfgMixedContinueNonmergeExitDispatcher() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=dispatcher"), + Check((result.ir_dump.find("mode=dispatcher") != std::string::npos), "mixed continue/nonmerge exit did not select dispatcher fallback"); Check(SpirvInstructionOpcodeCount(result.spirv, 251) != 0, "mixed continue/nonmerge exit dispatcher SPIR-V lacks OpSwitch"); @@ -8037,7 +7907,7 @@ void TestNewShaderRecompilerCfgConditionalLatchNoSelection() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "conditional latch did not stay on structured path"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) != 0, "conditional latch SPIR-V lacks OpLoopMerge"); @@ -8060,7 +7930,7 @@ void TestNewShaderRecompilerCfgDirectConditionalLatchNoSelection() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "direct conditional latch did not stay on structured path"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) != 0, "direct conditional latch SPIR-V lacks OpLoopMerge"); @@ -8092,7 +7962,7 @@ void TestNewShaderRecompilerCfgLoopEarlyContinuesNoSelection() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "loop early continues should stay on structured path"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) != 0, "loop early continues SPIR-V lacks OpLoopMerge"); @@ -8133,7 +8003,7 @@ void TestNewShaderRecompilerCfgLoopGatewaySelection() { auto options = MakeCompileOptions(ShaderType::Compute); options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured") && + Check((result.ir_dump.find("mode=structured") != std::string::npos) && !result.program.dispatcher_fallback, "loop-control gateway selection unexpectedly selected dispatcher"); Check(SpirvInstructionOpcodeCount(result.spirv, 246) == 1u, @@ -8254,10 +8124,10 @@ void TestNewShaderRecompilerCfgDuplicateMergeStructuredSplit() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=structured"), + Check((result.ir_dump.find("mode=structured") != std::string::npos), "duplicate merge CFG did not stay on structured path"); Check( - !Common::ContainsStr(result.ir_dump, "duplicate structured merge block"), + (result.ir_dump.find("duplicate structured merge block") == std::string::npos), "duplicate merge CFG was not split before structurization"); Check(SpirvContainsOpcode(result.spirv, 247), "duplicate merge SPIR-V lacks OpSelectionMerge"); @@ -8325,7 +8195,7 @@ void TestNewShaderRecompilerCfgNestedEarlyExitLoopForwarders() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured"), + (result.ir_dump.find("mode=structured") != std::string::npos), "nested early-exit loop unexpectedly selected dispatcher fallback"); Check(SpirvInstructionOpcodeCount(result.spirv, 247) == 3u && SpirvInstructionOpcodeCount(result.spirv, 246) == 1u && @@ -8374,14 +8244,13 @@ void TestNewShaderRecompilerCfgExecSccSharedArm() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured"), + (result.ir_dump.find("mode=structured") != std::string::npos), "EXEC/SCC shared-arm epilogue did not stay structured"); Check(SpirvInstructionOpcodeCount(result.spirv, 247) == 2u, "EXEC/SCC shared-arm SPIR-V has the wrong selection-merge count"); Check(SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "EXEC/SCC shared-arm SPIR-V unexpectedly used dispatcher OpSwitch"); - Check(Common::ContainsStr(DisassembleSpirvBinary(result.spirv), - "OpGroupNonUniformBallot"), + Check((DisassembleSpirvBinary(result.spirv).find("OpGroupNonUniformBallot") != std::string::npos), "scalar mask SCC did not reduce the complete wave mask"); CheckSpirvBinaryValidates(result.spirv); } @@ -8487,7 +8356,7 @@ void TestNewShaderRecompilerCfgNestedTailEarlyExit() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured") && + (result.ir_dump.find("mode=structured") != std::string::npos) && SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "nested-tail early exit selected dispatcher control flow"); CheckSpirvBinaryValidates(result.spirv); @@ -8537,7 +8406,7 @@ void TestNewShaderRecompilerCfgSharedReturnAfterNestedSelections() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured") && + (result.ir_dump.find("mode=structured") != std::string::npos) && SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "inner-first shared-exit routing did not stay structured"); CheckSpirvBinaryValidates(result.spirv); @@ -8630,7 +8499,7 @@ void TestNewShaderRecompilerCfgLoopSharedRegion() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured") && + (result.ir_dump.find("mode=structured") != std::string::npos) && SpirvInstructionOpcodeCount(result.spirv, 246) == 1u && SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "loop shared region unexpectedly selected dispatcher fallback"); @@ -8758,7 +8627,7 @@ void TestNewShaderRecompilerCfgOverlappingEarlyExitLadder() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured"), + (result.ir_dump.find("mode=structured") != std::string::npos), "overlapping early-exit ladder did not stay structured"); Check(SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "overlapping early-exit ladder unexpectedly used dispatcher OpSwitch"); @@ -8806,7 +8675,7 @@ void TestNewShaderRecompilerCfgNestedEarlyExitSharedTerminal() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured") && + (result.ir_dump.find("mode=structured") != std::string::npos) && SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "nested early exit to a shared terminal did not stay structured"); CheckSpirvBinaryValidates(result.spirv); @@ -8893,7 +8762,7 @@ void TestNewShaderRecompilerCfgSharedTerminalEarlyExit() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured"), + (result.ir_dump.find("mode=structured") != std::string::npos), "shared-terminal early exit selected dispatcher control flow"); Check(SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "shared-terminal early exit unexpectedly used dispatcher OpSwitch"); @@ -8928,7 +8797,7 @@ void TestNewShaderRecompilerCfgPrunesUnreachableSelectionEntry() { options.dump_ir = true; auto result = RecompileForTest(shader, options); Check(!result.program.dispatcher_fallback && - Common::ContainsStr(result.ir_dump, "mode=structured") && + (result.ir_dump.find("mode=structured") != std::string::npos) && SpirvInstructionOpcodeCount(result.spirv, 251) == 0u, "unreachable selection entry still forced dispatcher mode"); CheckSpirvBinaryValidates(result.spirv); @@ -8986,9 +8855,9 @@ void TestNewShaderRecompilerCfgIrreducibleDispatcher() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "irreducible CFG"), + Check((result.ir_dump.find("irreducible CFG") != std::string::npos), "irreducible CFG reason was not retained"); - Check(Common::ContainsStr(result.ir_dump, "mode=dispatcher"), + Check((result.ir_dump.find("mode=dispatcher") != std::string::npos), "irreducible CFG did not select dispatcher fallback"); Check(SpirvContainsOpcode(result.spirv, 246), "dispatcher SPIR-V lacks OpLoopMerge"); @@ -9112,8 +8981,7 @@ void TestNewShaderRecompilerU64PairTranslation() { decoded_lshrrev_b64.src1.kind == Decoder::OperandKind::VccLo, "decoder rejected captured VOP3 V_LSHRREV_B64 fields"); result = RecompileForTest(lshrrev_b64_shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_LSHRREV_B64 v1, v12, vcc_lo"), + Check((result.decoded_dump.find("V_LSHRREV_B64 v1, v12, vcc_lo") != std::string::npos), "captured VOP3 V_LSHRREV_B64 was not present in the decoded dump"); CheckSpirvBinaryValidates(result.spirv); @@ -9135,8 +9003,7 @@ void TestNewShaderRecompilerU64PairTranslation() { decoded_lshlrev_b64.src1.value == 1u, "decoder rejected captured VOP3 V_LSHLREV_B64 fields"); result = RecompileForTest(lshlrev_b64_shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_LSHLREV_B64 v33, v3, 1"), + Check((result.decoded_dump.find("V_LSHLREV_B64 v33, v3, 1") != std::string::npos), "captured VOP3 V_LSHLREV_B64 was not present in the decoded dump"); CheckSpirvBinaryValidates(result.spirv); @@ -9154,8 +9021,7 @@ void TestNewShaderRecompilerU64PairTranslation() { decoded_cmpx_i64.src1.reg == 7u, "decoder rejected captured VOP3 V_CMPX_NE_I64 fields"); result = RecompileForTest(cmpx_i64_shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_CMPX_NE_I64 exec_lo, 0, v7"), + Check((result.decoded_dump.find("V_CMPX_NE_I64 exec_lo, 0, v7") != std::string::npos), "captured VOP3 V_CMPX_NE_I64 was not present in the decoded dump"); CheckSpirvBinaryValidates(result.spirv); @@ -9188,8 +9054,7 @@ void TestNewShaderRecompilerU64PairTranslation() { decoded_cmpx_v2.src1.reg == 2u, "decoder rejected reported VOPC V_CMPX_NE_U64 fields"); result = RecompileForTest(cmpx_v2_shader, options); - Check(Common::ContainsStr(result.decoded_dump, - "V_CMPX_NE_U64 exec_lo, 0, v2"), + Check((result.decoded_dump.find("V_CMPX_NE_U64 exec_lo, 0, v2") != std::string::npos), "reported VOPC V_CMPX_NE_U64 was not present in the decoded dump"); CheckSpirvBinaryValidates(result.spirv); @@ -9223,8 +9088,8 @@ void TestNewShaderRecompilerU64PairTranslation() { auto spirv = ShaderRecompiler::Spirv::EmitProgram(program, options.input_info); CheckSpirvBinaryValidates(spirv); const auto source = DisassembleSpirvBinary(spirv); - Check(!Common::ContainsStr(source, "OpCapability Int64") && - !Common::ContainsStr(source, "OpTypeInt 64"), + Check((source.find("OpCapability Int64") == std::string::npos) && + (source.find("OpTypeInt 64") == std::string::npos), "portable pair-U64 translation introduced native shader Int64"); Check(SpirvInstructionOpcodeCount(spirv, 149u) == 1u, "pair-U64 addition did not use exactly one carry instruction"); @@ -9285,26 +9150,24 @@ void TestNewShaderRecompilerBufferLoadsGuardedByExec() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "BUFFER_LOAD_DWORD"), + Check((result.decoded_dump.find("BUFFER_LOAD_DWORD") != std::string::npos), "buffer load guard regression did not decode MUBUF load"); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); const auto exec_branch = - Common::FindIndex(source, std::string("OpBranchConditional"), 0); + source.find("OpBranchConditional", 0); const auto array_length = - Common::FindIndex(source, std::string("OpArrayLength"), 0); - const auto bounds_branch = Common::FindIndex( - source, std::string("OpBranchConditional"), array_length); - const auto element_access = Common::FindIndex( - source, std::string("OpAccessChain %_ptr_StorageBuffer_uint"), 0); - Check(exec_branch != Common::FIND_INVALID_INDEX, + source.find("OpArrayLength", 0); + const auto bounds_branch = source.find("OpBranchConditional", array_length); + const auto element_access = source.find("OpAccessChain %_ptr_StorageBuffer_uint", 0); + Check(exec_branch != std::string::npos, "buffer load SPIR-V lacks EXEC guard branch"); - Check(array_length != Common::FIND_INVALID_INDEX, + Check(array_length != std::string::npos, "buffer load SPIR-V lacks storage buffer array-length bounds check"); - Check(bounds_branch != Common::FIND_INVALID_INDEX, + Check(bounds_branch != std::string::npos, "buffer load SPIR-V lacks storage buffer bounds branch"); - Check(element_access != Common::FIND_INVALID_INDEX, + Check(element_access != std::string::npos, "buffer load SPIR-V lacks storage element access"); Check(exec_branch < array_length, "buffer load bounds check was emitted outside EXEC guard"); @@ -9332,24 +9195,23 @@ void TestNewShaderRecompilerBufferAtomicsGuardedByBounds() { for (const auto &test : cases) { const auto result = RecompileForTest(test.shader, options); - Check(Common::ContainsStr(result.decoded_dump, test.decoded), + Check((result.decoded_dump.find(test.decoded) != std::string::npos), "buffer atomic bounds regression did not decode MUBUF atomic"); - Check(Common::ContainsStr(result.ir_dump, test.ir), + Check((result.ir_dump.find(test.ir) != std::string::npos), "buffer atomic did not lower to its native IR opcode"); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); const auto array_length = - Common::FindIndex(source, std::string("OpArrayLength"), 0); - const auto bounds_branch = Common::FindIndex( - source, std::string("OpBranchConditional"), array_length); - const auto atomic = Common::FindIndex(source, std::string(test.spirv), 0); + source.find("OpArrayLength", 0); + const auto bounds_branch = source.find("OpBranchConditional", array_length); + const auto atomic = source.find(test.spirv, 0); const auto memory_barrier = - Common::FindIndex(source, std::string("OpMemoryBarrier"), atomic); - Check(array_length != Common::FIND_INVALID_INDEX && - bounds_branch != Common::FIND_INVALID_INDEX && - atomic != Common::FIND_INVALID_INDEX && - memory_barrier != Common::FIND_INVALID_INDEX, + source.find("OpMemoryBarrier", atomic); + Check(array_length != std::string::npos && + bounds_branch != std::string::npos && + atomic != std::string::npos && + memory_barrier != std::string::npos, "buffer atomic SPIR-V lacks its bounds guard, operation, or barrier"); Check(bounds_branch < atomic && atomic < memory_barrier, "buffer atomic bounds guard, operation, and barrier are misordered"); @@ -9378,36 +9240,35 @@ void TestCapturedBufferAtomicsX2() { for (const auto &test : cases) { const std::array shader = {test.words[0], test.words[1], EncodeSopp(0x01)}; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, test.decoded_name), + Check((result.decoded_dump.find(test.decoded_name) != std::string::npos), "captured 64-bit MUBUF atomic decoded incorrectly"); - Check(Common::ContainsStr(result.ir_dump, test.ir_name), + Check((result.ir_dump.find(test.ir_name) != std::string::npos), "64-bit MUBUF atomic did not lower to its native IR opcode"); - Check(!Common::ContainsStr(result.ir_dump, "SetVectorRegister"), + Check((result.ir_dump.find("SetVectorRegister") == std::string::npos), "GLC=0 64-bit MUBUF atomic unexpectedly returned the old value"); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(source, "OpCapability Int64Atomics"), + Check((source.find("OpCapability Int64Atomics") != std::string::npos), "64-bit buffer atomic SPIR-V lacks Int64Atomics capability"); - Check(Common::ContainsStr(source, "ArrayStride 8"), + Check((source.find("ArrayStride 8") != std::string::npos), "64-bit buffer atomic storage view does not use eight-byte elements"); Check(CountSourceOccurrences(source, "Aliased") == 2u, "both storage-buffer views must declare that they alias"); const auto array_length = - Common::FindIndex(source, std::string("OpArrayLength"), 0); - const auto bounds_branch = Common::FindIndex( - source, std::string("OpBranchConditional"), array_length); + source.find("OpArrayLength", 0); + const auto bounds_branch = source.find("OpBranchConditional", array_length); const auto atomic = - Common::FindIndex(source, std::string(test.spirv_name), 0); + source.find(test.spirv_name, 0); const auto memory_barrier = - Common::FindIndex(source, std::string("OpMemoryBarrier"), atomic); - Check(array_length != Common::FIND_INVALID_INDEX && - bounds_branch != Common::FIND_INVALID_INDEX && - atomic != Common::FIND_INVALID_INDEX && bounds_branch < atomic, + source.find("OpMemoryBarrier", atomic); + Check(array_length != std::string::npos && + bounds_branch != std::string::npos && + atomic != std::string::npos && bounds_branch < atomic, "64-bit buffer atomic was not guarded by storage-buffer bounds"); Check(SpirvInstructionOpcodeCount(result.spirv, test.spirv_opcode) == 1u, "64-bit buffer atomic did not lower to one native SPIR-V atomic"); - Check(memory_barrier != Common::FIND_INVALID_INDEX && atomic < memory_barrier, + Check(memory_barrier != std::string::npos && atomic < memory_barrier, "64-bit buffer atomic lacks a following device-memory barrier"); const std::array glc_shader = { @@ -9451,14 +9312,14 @@ void TestNewShaderRecompilerBranchConditionForms() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, c.condition), + Check((result.ir_dump.find(c.condition) != std::string::npos), "branch condition was not preserved"); Check(SpirvContainsOpcode(result.spirv, 250), "branch condition SPIR-V lacks OpBranchConditional"); CheckSpirvBinaryValidates(result.spirv); if (c.opcode == 0x04) { const auto source = DisassembleSpirvBinary(result.spirv); - Check(!Common::ContainsStr(source, "OpGroupNonUniformBallot"), + Check((source.find("OpGroupNonUniformBallot") == std::string::npos), "structured SCC branch retained a host-subgroup reduction"); } } @@ -9476,9 +9337,9 @@ void TestNewShaderRecompilerSetpcBranch() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "s_setpc_b64"), + Check((result.decoded_dump.find("s_setpc_b64") != std::string::npos), "S_SETPC_B64 was not decoded"); - Check(Common::ContainsStr(result.ir_dump, "successors=["), + Check((result.ir_dump.find("successors=[") != std::string::npos), "S_SETPC_B64 did not participate in CFG"); CheckSpirvBinaryValidates(result.spirv); } @@ -10058,7 +9919,7 @@ void TestNewShaderRecompilerSetpcJumpTable() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=dispatcher"), + Check((result.ir_dump.find("mode=dispatcher") != std::string::npos), "S_SETPC_B64 jump table did not select dispatcher fallback"); const auto jump = std::find_if( result.program.block_info.begin(), @@ -10071,7 +9932,7 @@ void TestNewShaderRecompilerSetpcJumpTable() { Check(jump->terminator.indirect_selector_values.size() == 2, "S_SETPC_B64 jump table did not retain selector mapping"); Check( - !Common::ContainsStr(result.ir_dump, "SLoadDword"), + (result.ir_dump.find("SLoadDword") == std::string::npos), "S_SETPC_B64 jump table load was reflected as a raw scalar buffer load"); Check(SpirvContainsOpcode(result.spirv, 251), "dispatcher SPIR-V lacks OpSwitch"); @@ -10162,7 +10023,7 @@ void TestNewShaderRecompilerSetpcDwordJumpTable() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.ir_dump, "mode=dispatcher"), + Check((result.ir_dump.find("mode=dispatcher") != std::string::npos), "subtractive S_SETPC_B64 table did not select dispatcher fallback"); const auto jump = std::find_if( result.program.block_info.begin(), @@ -10191,7 +10052,7 @@ void TestNewShaderRecompilerSetpcDwordJumpTable() { result.program.block_info, [](const auto &info) { return info.start_pc == 0x04u; }), "subtractive S_SETPC_B64 table targets or selector mapping changed"); - Check(!Common::ContainsStr(result.ir_dump, "SLoadDword"), + Check((result.ir_dump.find("SLoadDword") == std::string::npos), "subtractive S_SETPC_B64 table load reached normal IR"); Check(SpirvContainsOpcode(result.spirv, 251), "subtractive S_SETPC_B64 dispatcher lacks OpSwitch"); @@ -10210,17 +10071,17 @@ void TestNewShaderRecompilerExpVertexOutputs() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(Common::ContainsStr(result.decoded_dump, "target=0x0c"), + Check((result.decoded_dump.find("target=0x0c") != std::string::npos), "POS export was not decoded"); - Check(Common::ContainsStr(result.decoded_dump, "target=0x20"), + Check((result.decoded_dump.find("target=0x20") != std::string::npos), "PARAM export was not decoded"); - Check(Common::ContainsStr(result.decoded_dump, "target=0x14"), + Check((result.decoded_dump.find("target=0x14") != std::string::npos), "PRIM export was not decoded"); - Check(Common::ContainsStr(result.ir_dump, "position"), + Check((result.ir_dump.find("position") != std::string::npos), "POS export did not reach IR"); - Check(Common::ContainsStr(result.ir_dump, "parameter"), + Check((result.ir_dump.find("parameter") != std::string::npos), "PARAM export did not reach IR"); - Check(Common::ContainsStr(result.ir_dump, "primitive"), + Check((result.ir_dump.find("primitive") != std::string::npos), "PRIM export did not reach IR"); Check(SpirvContainsOpcode(result.spirv, 62), "vertex export SPIR-V lacks OpStore"); @@ -10322,7 +10183,7 @@ void TestNewShaderRecompilerAuxPositionExports() { "auxiliary vertex BuiltIns or capabilities are missing"); const auto all_source = DisassembleSpirvBinary(all.spirv); Check(all.spirv[1] == 0x00010500u && - !Common::ContainsStr(all_source, "SPV_EXT_shader_viewport_index_layer") && + (all_source.find("SPV_EXT_shader_viewport_index_layer") == std::string::npos) && SpirvBuiltInStoreUsesOperation(all.spirv, 9u, 199u, {0x7ffu}), "layer export module version or GFX10 layer mask is incorrect"); const auto positions = std::count_if( @@ -11435,13 +11296,13 @@ void TestNewShaderRecompilerZeroInitialRegisterState() { options.dump_ir = true; auto result = RecompileForTest(shader, options); - Check(!Common::ContainsStr(result.ir_dump, "UndefU32"), + Check((result.ir_dump.find("UndefU32") == std::string::npos), "SSA initial state left guest registers undefined"); const auto source = DisassembleSpirvBinary(result.spirv); - Check(!Common::ContainsStr(source, "OpUndef"), + Check((source.find("OpUndef") == std::string::npos), "zero-initialized guest registers became SPIR-V undef values"); - Check(!Common::ContainsStr(source, "%s100") && - !Common::ContainsStr(source, "%v0"), + Check((source.find("%s100") == std::string::npos) && + (source.find("%v0") == std::string::npos), "final SPIR-V retained a guest register mirror"); CheckSpirvBinaryValidates(result.spirv); @@ -11485,8 +11346,8 @@ void TestNewShaderRecompilerVertexSystemInputsWithoutMirrors() { "vertex SPIR-V does not load gl_VertexIndex"); Check(CountSourceOccurrences(source, "OpLoad %int %gl_InstanceIndex") == 1u, "vertex SPIR-V does not load gl_InstanceIndex"); - Check(!Common::ContainsStr(source, "%v5") && - !Common::ContainsStr(source, "%v8"), + Check((source.find("%v5") == std::string::npos) && + (source.find("%v8") == std::string::npos), "vertex system values were routed through guest VGPR mirrors"); } @@ -11504,9 +11365,9 @@ void TestNewShaderRecompilerVertexExportUsesInvocationExecMask() { auto result = RecompileForTest(shader, options); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(source, "OpLoad %uint %gl_SubgroupInvocationID"), + Check((source.find("OpLoad %uint %gl_SubgroupInvocationID") != std::string::npos), "raw EXEC=1 did not select guest lane zero"); - Check(Common::ContainsStr(source, "OpBranchConditional"), + Check((source.find("OpBranchConditional") != std::string::npos), "vertex export lost its per-invocation EXEC guard"); } @@ -11530,12 +11391,12 @@ void TestNewShaderRecompilerPerInvocationMasksWithoutMirrors() { CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); Check( - !Common::ContainsStr(source, "OpGroupNonUniformBallot"), + (source.find("OpGroupNonUniformBallot") == std::string::npos), "per-invocation VCC producer still materialized a shared subgroup mask"); - Check(Common::ContainsStr(source, "OpLoad %uint %gl_SubgroupInvocationID"), + Check((source.find("OpLoad %uint %gl_SubgroupInvocationID") != std::string::npos), "BFM EXEC prefix did not select the four requested guest lanes"); - Check(!Common::ContainsStr(source, "%vcc_lo") && - !Common::ContainsStr(source, "%vcc_hi"), + Check((source.find("%vcc_lo") == std::string::npos) && + (source.find("%vcc_hi") == std::string::npos), "per-invocation comparison retained VCC register mirrors"); const uint32_t wqm_shader[] = { @@ -11547,8 +11408,8 @@ void TestNewShaderRecompilerPerInvocationMasksWithoutMirrors() { result = RecompileForTest(wqm_shader, options); CheckSpirvBinaryValidates(result.spirv); const auto wqm_source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(wqm_source, "OpCapability GroupNonUniformBallot") && - Common::ContainsStr(wqm_source, "OpGroupNonUniformBallot"), + Check((wqm_source.find("OpCapability GroupNonUniformBallot") != std::string::npos) && + (wqm_source.find("OpGroupNonUniformBallot") != std::string::npos), "per-invocation scalar WQM omitted its subgroup ballot capability"); Check(SpirvInstructionOpcodeCount(result.spirv, 132u) == 1u, "wave64 WQM did not expand its scalar word pair together"); @@ -11570,8 +11431,7 @@ void TestNewShaderRecompilerPerInvocationMasksWithoutMirrors() { }; result = RecompileForTest(cross_lane_shader, options); CheckSpirvBinaryValidates(result.spirv); - Check(Common::ContainsStr(DisassembleSpirvBinary(result.spirv), - "OpGroupNonUniformBallot"), + Check((DisassembleSpirvBinary(result.spirv).find("OpGroupNonUniformBallot") != std::string::npos), "per-invocation cross-lane EXEC was not reconstructed as a subgroup " "ballot"); } @@ -11593,9 +11453,9 @@ void TestNewShaderRecompilerPerInvocationU64Complement() { auto result = RecompileForTest(shader, options); CheckSpirvBinaryValidates(result.spirv); const auto source = DisassembleSpirvBinary(result.spirv); - Check(Common::ContainsStr(source, "OpLogicalNot"), + Check((source.find("OpLogicalNot") != std::string::npos), "per-invocation s_not_b64 did not complement the lane predicate"); - Check(!Common::ContainsStr(source, "OpNot %uint"), + Check((source.find("OpNot %uint") == std::string::npos), "per-invocation s_not_b64 emitted raw complemented mask words"); } @@ -11629,13 +11489,12 @@ void TestNewShaderRecompilerExpPixelOutputs() { options.input_info.pixel = &uint16_info; auto uint16_result = RecompileForTest(shader, options); const auto uint16_source = DisassembleSpirvBinary(uint16_result.spirv); - Check(Common::ContainsStr(uint16_source, - "OpVariable %_ptr_Output_v4uint Output"), + Check((uint16_source.find("OpVariable %_ptr_Output_v4uint Output") != std::string::npos), "UINT16 MRT export did not use an unsigned integer output"); Check( CountSourceOccurrences(uint16_source, "OpBitFieldUExtract") == 4u && - Common::ContainsStr(uint16_source, "%uint_0 %uint_16") && - Common::ContainsStr(uint16_source, "%uint_16 %uint_16"), + (uint16_source.find("%uint_0 %uint_16") != std::string::npos) && + (uint16_source.find("%uint_16 %uint_16") != std::string::npos), "compressed UINT16 MRT export did not extract all low/high 16-bit lanes"); Check(!SpirvContainsExtInst(uint16_result.spirv, 62), "compressed UINT16 MRT export was incorrectly decoded as FP16"); @@ -11923,7 +11782,7 @@ void TestNewShaderRecompilerEarlyZDisabledWhenPixelKillEnabled() { const auto ordinary_source = DisassembleSpirvBinary(ordinary_result.spirv); Check(SpirvInstructionOpcodeCount(ordinary_result.spirv, 252) == 0, "ordinary pixel shader unexpectedly contains OpKill"); - Check(!Common::ContainsStr(ordinary_source, "pixel_valid_mask_active"), + Check((ordinary_source.find("pixel_valid_mask_active") == std::string::npos), "ordinary pixel shader allocated pixel-valid state"); Check(SpirvContainsExecutionMode(ordinary_result.spirv, ExecutionModeEarlyFragmentTests), @@ -13129,7 +12988,7 @@ void TestNewShaderRecompilerFlatAddressDomainsUseDma() { auto result = RecompileForTest(segmented_shader, options); Check(result.program.info.uses_dma, "GLOBAL null-SADDR did not enable DMA"); - Check(Common::ContainsStr(result.ir_dump, "GetScratchResource") && + Check((result.ir_dump.find("GetScratchResource") != std::string::npos) && result.program.scratch_dwords == 1, "SCRATCH incorrectly entered guest address tracking"); } @@ -13228,8 +13087,7 @@ void TestSpirvEmissionOwnsRequirements() { emitter.Emit(IR::ValueOpcode::LaneId, {}); const auto binary = Spirv::EmitProgram(compiled.program, options.input_info); CheckSpirvBinaryValidates(binary); - Check(Common::ContainsStr(DisassembleSpirvBinary(binary), - "BuiltIn SubgroupLocalInvocationId"), + Check((DisassembleSpirvBinary(binary).find("BuiltIn SubgroupLocalInvocationId") != std::string::npos), "emission reused requirements from an earlier IR version"); } @@ -13309,7 +13167,7 @@ void TestNewShaderRecompilerSpirvSizeBaselines() { .branches = 6, .conditional_branches = 1}); const auto structured_metrics = MeasureSpirv(structured_result.spirv); - Check(Common::ContainsStr(structured_result.ir_dump, "Phi"), + Check((structured_result.ir_dump.find("Phi") != std::string::npos), "structured Phi size fixture no longer contains an IR Phi"); Check(structured_metrics.phis == 1u && structured_metrics.function_variables == 0u && @@ -13348,9 +13206,9 @@ void TestNewShaderRecompilerSpirvSizeBaselines() { .selection_merges = 10, .branches = 23, .conditional_branches = 10}); - Check(Common::ContainsStr(wide_result.decoded_dump, "BUFFER_LOAD_DWORDX4"), + Check((wide_result.decoded_dump.find("BUFFER_LOAD_DWORDX4") != std::string::npos), "wide buffer size fixture no longer decodes its x4 load"); - Check(Common::ContainsStr(wide_result.decoded_dump, "BUFFER_STORE_DWORDX4"), + Check((wide_result.decoded_dump.find("BUFFER_STORE_DWORDX4") != std::string::npos), "wide buffer size fixture no longer decodes its x4 store"); uint32_t wide_loads = 0; uint32_t wide_stores = 0; @@ -13477,7 +13335,7 @@ void TestNewShaderRecompilerSpirvSizeBaselines() { .conditional_branches = 1, .ballots = 1}, ShaderType::Vertex); - Check(Common::ContainsStr(wqm_result.ir_dump, "WqmU64"), + Check((wqm_result.ir_dump.find("WqmU64") != std::string::npos), "WQM size fixture no longer reaches scalar mask expansion"); const uint32_t dispatcher[] = { @@ -13502,7 +13360,7 @@ void TestNewShaderRecompilerSpirvSizeBaselines() { .conditional_branches = 1, .switches = 1}); Check(dispatcher_result.program.dispatcher_fallback && - Common::ContainsStr(dispatcher_result.ir_dump, "Phi") && + (dispatcher_result.ir_dump.find("Phi") != std::string::npos) && SpirvInstructionOpcodeCount(dispatcher_result.spirv, 245u) == 2u && SpirvInstructionOpcodeCount(dispatcher_result.spirv, 251u) == 1u, "dispatcher size fixture lost its two control Phis or switch");