diff --git a/.github/workflows/commit-access-review.py b/.github/workflows/commit-access-review.py index 4f539fe98004a..52b9fd35290e5 100644 --- a/.github/workflows/commit-access-review.py +++ b/.github/workflows/commit-access-review.py @@ -170,80 +170,6 @@ def get_num_commits(gh: github.Github, user: str, start_date: datetime.datetime) return count -def is_new_committer_query_repo( - gh: github.Github, user: str, start_date: datetime.datetime -) -> bool: - """ - Determine if ``user`` is a new committer. A new committer can keep their - commit access even if they don't meet the criteria. - """ - variables = { - "user": user, - } - - user_query = """ - query ($user: String!) { - user(login: $user) { - id - } - } - """ - - res_header, res_data = gh._Github__requester.graphql_query( - query=user_query, variables=variables - ) - data = res_data["data"] - variables["owner"] = "llvm" - variables["user_id"] = data["user"]["id"] - variables["start_date"] = start_date.strftime("%Y-%m-%dT%H:%M:%S") - - query = """ - query ($owner: String!, $user_id: ID!){ - organization(login: $owner) { - repository(name: "llvm-project") { - ref(qualifiedName: "main") { - target { - ... on Commit { - history(author: {id: $user_id }, first: 5) { - nodes { - committedDate - } - } - } - } - } - } - } - } - """ - - res_header, res_data = gh._Github__requester.graphql_query( - query=query, variables=variables - ) - data = res_data["data"] - repo = data["organization"]["repository"] - commits = repo["ref"]["target"]["history"]["nodes"] - if len(commits) == 0: - return True - committed_date = commits[-1]["committedDate"] - if datetime.datetime.strptime(committed_date, "%Y-%m-%dT%H:%M:%SZ") < start_date: - return False - return True - - -def is_new_committer( - gh: github.Github, user: str, start_date: datetime.datetime -) -> bool: - """ - Wrapper around is_new_commiter_query_repo to handle exceptions. - """ - try: - return is_new_committer_query_repo(gh, user, start_date) - except: - pass - return True - - def get_review_count( gh: github.Github, user: str, start_date: datetime.datetime ) -> int: @@ -383,13 +309,6 @@ def main(): print("After Commits:", len(triage_list), "triagers") - # Step 4 check for new committers - for user in list(triage_list.keys()): - print("Checking", user) - if is_new_committer(gh, user, one_year_ago): - print("Removing new committer: ", user) - del triage_list[user] - print("Complete:", len(triage_list), "triagers") with open("triagers.log", "w") as triagers_log: diff --git a/.github/workflows/hlsl-test-all.yaml b/.github/workflows/hlsl-test-all.yaml index eff5d8975187a..6e5bfd5b870a3 100644 --- a/.github/workflows/hlsl-test-all.yaml +++ b/.github/workflows/hlsl-test-all.yaml @@ -52,11 +52,6 @@ jobs: repository: llvm/offload-golden-images ref: main path: golden-images - - name: Setup Windows - if: runner.os == 'Windows' - uses: llvm/actions/setup-windows@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main - with: - arch: amd64 - name: Build DXC run: | cd DXC diff --git a/.github/workflows/libclang-abi-tests.yml b/.github/workflows/libclang-abi-tests.yml index 62a8d64ea84d0..0d3f9fe3f69ea 100644 --- a/.github/workflows/libclang-abi-tests.yml +++ b/.github/workflows/libclang-abi-tests.yml @@ -101,8 +101,6 @@ jobs: ref: ${{ github.sha }} repo: ${{ github.repository }} steps: - - name: Install Ninja - uses: llvm/actions/install-ninja@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main - name: Download source code uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp index a5f6f1c7ea732..667e5d5a318f0 100644 --- a/clang-tools-extra/clang-doc/Generators.cpp +++ b/clang-tools-extra/clang-doc/Generators.cpp @@ -7,9 +7,15 @@ //===----------------------------------------------------------------------===// #include "Generators.h" +#include "support/File.h" +#include "llvm/Support/TimeProfiler.h" LLVM_INSTANTIATE_REGISTRY(clang::doc::GeneratorRegistry) +using namespace llvm; +using namespace llvm::json; +using namespace llvm::mustache; + namespace clang { namespace doc { @@ -42,6 +48,136 @@ std::string getTagType(TagTypeKind AS) { llvm_unreachable("Unknown TagTypeKind"); } +Error createFileOpenError(StringRef FileName, std::error_code EC) { + return createFileError("cannot open file " + FileName, EC); +} + +Error MustacheGenerator::setupTemplate( + std::unique_ptr &Template, StringRef TemplatePath, + std::vector> Partials) { + auto T = MustacheTemplateFile::createMustacheFile(TemplatePath); + if (Error Err = T.takeError()) + return Err; + Template = std::move(T.get()); + for (const auto &[Name, FileName] : Partials) + if (auto Err = Template->registerPartialFile(Name, FileName)) + return Err; + return Error::success(); +} + +Error MustacheGenerator::generateDocumentation( + StringRef RootDir, StringMap> Infos, + const clang::doc::ClangDocContext &CDCtx, std::string DirName) { + { + llvm::TimeTraceScope TS("Setup Templates"); + if (auto Err = setupTemplateFiles(CDCtx)) + return Err; + } + + { + llvm::TimeTraceScope TS("Generate JSON for Mustache"); + if (auto JSONGenerator = findGeneratorByName("json")) { + if (Error Err = JSONGenerator.get()->generateDocumentation( + RootDir, std::move(Infos), CDCtx)) + return Err; + } else + return JSONGenerator.takeError(); + } + + SmallString<128> JSONPath; + sys::path::native(RootDir.str() + "/json", JSONPath); + + { + llvm::TimeTraceScope TS("Iterate JSON files"); + std::error_code EC; + sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC); + std::vector JSONFiles; + JSONFiles.reserve(Infos.size()); + if (EC) + return createStringError("Failed to create directory iterator."); + + SmallString<128> DocsDirPath(RootDir.str() + '/' + DirName); + sys::path::native(DocsDirPath); + if (auto EC = sys::fs::create_directories(DocsDirPath)) + return createFileError(DocsDirPath, EC); + while (JSONIter != sys::fs::recursive_directory_iterator()) { + // create the same directory structure in the docs format dir + if (JSONIter->type() == sys::fs::file_type::directory_file) { + SmallString<128> DocsClonedPath(JSONIter->path()); + sys::path::replace_path_prefix(DocsClonedPath, JSONPath, DocsDirPath); + if (auto EC = sys::fs::create_directories(DocsClonedPath)) { + return createFileError(DocsClonedPath, EC); + } + } + + if (EC) + return createFileError("Failed to iterate: " + JSONIter->path(), EC); + + auto Path = StringRef(JSONIter->path()); + if (!Path.ends_with(".json")) { + JSONIter.increment(EC); + continue; + } + + auto File = MemoryBuffer::getFile(Path); + if (EC = File.getError(); EC) { + // TODO: Buffer errors to report later, look into using Clang + // diagnostics. + llvm::errs() << "Failed to open file: " << Path << " " << EC.message() + << '\n'; + } + + auto Parsed = json::parse((*File)->getBuffer()); + if (!Parsed) + return Parsed.takeError(); + auto ValidJSON = Parsed.get(); + + std::error_code FileErr; + SmallString<128> DocsFilePath(JSONIter->path()); + sys::path::replace_path_prefix(DocsFilePath, JSONPath, DocsDirPath); + sys::path::replace_extension(DocsFilePath, DirName); + raw_fd_ostream InfoOS(DocsFilePath, FileErr, sys::fs::OF_None); + if (FileErr) + return createFileOpenError(Path, FileErr); + + auto RelativeRootPath = getRelativePathToRoot(DocsFilePath, DocsDirPath); + auto InfoTypeStr = + getInfoTypeStr(Parsed->getAsObject(), sys::path::stem(DocsFilePath)); + if (!InfoTypeStr) + return InfoTypeStr.takeError(); + if (Error Err = generateDocForJSON(*Parsed, InfoOS, CDCtx, + InfoTypeStr.get(), RelativeRootPath)) + return Err; + JSONIter.increment(EC); + } + } + + return Error::success(); +} + +Expected MustacheGenerator::getInfoTypeStr(Object *Info, + StringRef Filename) { + auto StrValue = (*Info)["InfoType"]; + if (StrValue.kind() != json::Value::Kind::String) + return createStringError("JSON file '%s' does not contain key: 'InfoType'.", + Filename.str().c_str()); + auto ObjTypeStr = StrValue.getAsString(); + if (!ObjTypeStr.has_value()) + return createStringError( + "JSON file '%s' does not contain 'InfoType' field as a string.", + Filename.str().c_str()); + return ObjTypeStr.value().str(); +} + +SmallString<128> +MustacheGenerator::getRelativePathToRoot(StringRef PathToFile, + StringRef DocsRootPath) { + SmallString<128> PathVec(PathToFile); + // Remove filename, or else the relative path will have an extra "../" + sys::path::remove_filename(PathVec); + return computeRelativePath(DocsRootPath, PathVec); +} + llvm::Error Generator::createResources(ClangDocContext &CDCtx) { return llvm::Error::success(); } diff --git a/clang-tools-extra/clang-doc/Generators.h b/clang-tools-extra/clang-doc/Generators.h index 92d3006e6002d..847722646b029 100644 --- a/clang-tools-extra/clang-doc/Generators.h +++ b/clang-tools-extra/clang-doc/Generators.h @@ -14,6 +14,8 @@ #include "Representation.h" #include "llvm/Support/Error.h" +#include "llvm/Support/JSON.h" +#include "llvm/Support/Mustache.h" #include "llvm/Support/Registry.h" namespace clang { @@ -27,10 +29,9 @@ class Generator { // Write out the decl info for the objects in the given map in the specified // format. - virtual llvm::Error - generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) = 0; + virtual llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName = "") = 0; // This function writes a file with the index previously constructed. // It can be overwritten by any of the inherited generators. @@ -52,6 +53,85 @@ findGeneratorByName(llvm::StringRef Format); std::string getTagType(TagTypeKind AS); +llvm::Error createFileOpenError(StringRef FileName, std::error_code EC); + +class MustacheTemplateFile { + llvm::BumpPtrAllocator Allocator; + llvm::StringSaver Saver; + llvm::mustache::MustacheContext Ctx; + llvm::mustache::Template T; + std::unique_ptr Buffer; + +public: + static Expected> + createMustacheFile(StringRef FileName) { + llvm::ErrorOr> BufferOrError = + llvm::MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return createFileOpenError(FileName, EC); + return std::make_unique( + std::move(BufferOrError.get())); + } + + llvm::Error registerPartialFile(StringRef Name, StringRef FileName) { + llvm::ErrorOr> BufferOrError = + llvm::MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return createFileOpenError(FileName, EC); + + std::unique_ptr Buffer = std::move(BufferOrError.get()); + StringRef FileContent = Buffer->getBuffer(); + T.registerPartial(Name.str(), FileContent.str()); + return llvm::Error::success(); + } + + void render(llvm::json::Value &V, raw_ostream &OS) { T.render(V, OS); } + + MustacheTemplateFile(std::unique_ptr &&B) + : Saver(Allocator), Ctx(Allocator, Saver), T(B->getBuffer(), Ctx), + Buffer(std::move(B)) {} +}; + +struct MustacheGenerator : public Generator { + Expected getInfoTypeStr(llvm::json::Object *Info, + StringRef Filename); + + /// Used to find the relative path from the file to the format's docs root. + /// Mainly used for the HTML resource paths. + SmallString<128> getRelativePathToRoot(StringRef PathToFile, + StringRef DocsRootPath); + virtual ~MustacheGenerator() = default; + + /// Initializes the template files from disk and calls setupTemplate to + /// register partials + virtual llvm::Error setupTemplateFiles(const ClangDocContext &CDCtx) = 0; + + /// Populates templates with data from JSON and calls any specifics for the + /// format. For example, for HTML it will render the paths for CSS and JS. + virtual llvm::Error generateDocForJSON(llvm::json::Value &JSON, + llvm::raw_fd_ostream &OS, + const ClangDocContext &CDCtx, + StringRef ObjectTypeStr, + StringRef RelativeRootPath) = 0; + + /// Registers partials to templates. + llvm::Error + setupTemplate(std::unique_ptr &Template, + StringRef TemplatePath, + std::vector> Partials); + + /// \brief The main orchestrator for Mustache-based documentation. + /// + /// 1. Initializes templates files from disk by calling setupTemplateFiles. + /// 2. Calls the JSON generator to write JSON to disk. + /// 3. Iterates over the JSON files, recreates the directory structure from + /// JSON, and calls generateDocForJSON for each file. + /// 4. A file of the desired format is created. + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const clang::doc::ClangDocContext &CDCtx, std::string DirName) override; +}; + // This anchor is used to force the linker to link in the generated object file // and thus register the generators. extern volatile int YAMLGeneratorAnchorSource; diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 8294ff9118558..7c8c16b8e8aca 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -897,9 +897,9 @@ class HTMLGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error createResources(ClangDocContext &CDCtx) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -907,10 +907,9 @@ class HTMLGenerator : public Generator { const char *HTMLGenerator::Format = "html"; -llvm::Error -HTMLGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error HTMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { // Track which directories we already tried to create. llvm::StringSet<> CreatedDirs; diff --git a/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp index 1e757101549c6..c09f908c7eb22 100644 --- a/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp @@ -16,10 +16,7 @@ #include "Representation.h" #include "support/File.h" #include "llvm/Support/Error.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/Mustache.h" #include "llvm/Support/Path.h" -#include "llvm/Support/TimeProfiler.h" using namespace llvm; using namespace llvm::json; @@ -27,82 +24,30 @@ using namespace llvm::mustache; namespace clang { namespace doc { -static Error generateDocForJSON(json::Value &JSON, StringRef Filename, - StringRef Path, raw_fd_ostream &OS, - const ClangDocContext &CDCtx, - StringRef HTMLRootPath); -static Error createFileOpenError(StringRef FileName, std::error_code EC) { - return createFileError("cannot open file " + FileName, EC); -} +static std::unique_ptr NamespaceTemplate = nullptr; + +static std::unique_ptr RecordTemplate = nullptr; -class MustacheHTMLGenerator : public Generator { +class MustacheHTMLGenerator : public MustacheGenerator { public: static const char *Format; - Error generateDocs(StringRef RootDir, - StringMap> Infos, - const ClangDocContext &CDCtx) override; Error createResources(ClangDocContext &CDCtx) override; Error generateDocForInfo(Info *I, raw_ostream &OS, const ClangDocContext &CDCtx) override; + Error setupTemplateFiles(const ClangDocContext &CDCtx) override; + Error generateDocForJSON(json::Value &JSON, raw_fd_ostream &OS, + const ClangDocContext &CDCtx, StringRef ObjTypeStr, + StringRef RelativeRootPath) override; + // Populates templates with CSS stylesheets, JS scripts paths. + Error setupTemplateResources(const ClangDocContext &CDCtx, json::Value &V, + SmallString<128> RelativeRootPath); + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; }; -class MustacheTemplateFile { - BumpPtrAllocator Allocator; - StringSaver Saver; - MustacheContext Ctx; - Template T; - std::unique_ptr Buffer; - -public: - static Expected> - createMustacheFile(StringRef FileName) { - ErrorOr> BufferOrError = - MemoryBuffer::getFile(FileName); - if (auto EC = BufferOrError.getError()) - return createFileOpenError(FileName, EC); - return std::make_unique( - std::move(BufferOrError.get())); - } - - Error registerPartialFile(StringRef Name, StringRef FileName) { - ErrorOr> BufferOrError = - MemoryBuffer::getFile(FileName); - if (auto EC = BufferOrError.getError()) - return createFileOpenError(FileName, EC); - - std::unique_ptr Buffer = std::move(BufferOrError.get()); - StringRef FileContent = Buffer->getBuffer(); - T.registerPartial(Name.str(), FileContent.str()); - return Error::success(); - } - - void render(json::Value &V, raw_ostream &OS) { T.render(V, OS); } - - MustacheTemplateFile(std::unique_ptr &&B) - : Saver(Allocator), Ctx(Allocator, Saver), T(B->getBuffer(), Ctx), - Buffer(std::move(B)) {} -}; - -static std::unique_ptr NamespaceTemplate = nullptr; - -static std::unique_ptr RecordTemplate = nullptr; - -static Error -setupTemplate(std::unique_ptr &Template, - StringRef TemplatePath, - std::vector> Partials) { - auto T = MustacheTemplateFile::createMustacheFile(TemplatePath); - if (Error Err = T.takeError()) - return Err; - Template = std::move(T.get()); - for (const auto &[Name, FileName] : Partials) - if (auto Err = Template->registerPartialFile(Name, FileName)) - return Err; - return Error::success(); -} - -static Error setupTemplateFiles(const clang::doc::ClangDocContext &CDCtx) { +Error MustacheHTMLGenerator::setupTemplateFiles(const ClangDocContext &CDCtx) { // Template files need to use the native path when they're opened, // but have to be used in POSIX style when used in HTML. auto ConvertToNative = [](std::string &&Path) -> std::string { @@ -135,97 +80,17 @@ static Error setupTemplateFiles(const clang::doc::ClangDocContext &CDCtx) { return Error::success(); } -Error MustacheHTMLGenerator::generateDocs( - StringRef RootDir, StringMap> Infos, - const clang::doc::ClangDocContext &CDCtx) { - { - llvm::TimeTraceScope TS("Setup Templates"); - if (auto Err = setupTemplateFiles(CDCtx)) - return Err; - } - - { - llvm::TimeTraceScope TS("Generate JSON for Mustache"); - if (auto JSONGenerator = findGeneratorByName("json")) { - if (Error Err = JSONGenerator.get()->generateDocs( - RootDir, std::move(Infos), CDCtx)) - return Err; - } else - return JSONGenerator.takeError(); - } - SmallString<128> JSONPath; - sys::path::native(RootDir.str() + "/json", JSONPath); - - { - llvm::TimeTraceScope TS("Iterate JSON files"); - std::error_code EC; - sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC); - std::vector JSONFiles; - JSONFiles.reserve(Infos.size()); - if (EC) - return createStringError("Failed to create directory iterator."); - - SmallString<128> HTMLDirPath(RootDir.str() + "/html"); - if (auto EC = sys::fs::create_directories(HTMLDirPath)) - return createFileError(HTMLDirPath, EC); - while (JSONIter != sys::fs::recursive_directory_iterator()) { - // create the same directory structure in the HTML dir - if (JSONIter->type() == sys::fs::file_type::directory_file) { - SmallString<128> HTMLClonedPath(JSONIter->path()); - sys::path::replace_path_prefix(HTMLClonedPath, JSONPath, HTMLDirPath); - if (auto EC = sys::fs::create_directories(HTMLClonedPath)) - return createFileError(HTMLClonedPath, EC); - } - - if (EC) - return createFileError("Failed to iterate: " + JSONIter->path(), EC); - - auto Path = StringRef(JSONIter->path()); - if (!Path.ends_with(".json")) { - JSONIter.increment(EC); - continue; - } - - auto File = MemoryBuffer::getFile(Path); - if (EC = File.getError(); EC) - // TODO: Buffer errors to report later, look into using Clang - // diagnostics. - llvm::errs() << "Failed to open file: " << Path << " " << EC.message() - << '\n'; - - auto Parsed = json::parse((*File)->getBuffer()); - if (!Parsed) - return Parsed.takeError(); - - std::error_code FileErr; - SmallString<128> HTMLFilePath(JSONIter->path()); - sys::path::replace_path_prefix(HTMLFilePath, JSONPath, HTMLDirPath); - sys::path::replace_extension(HTMLFilePath, "html"); - raw_fd_ostream InfoOS(HTMLFilePath, FileErr, sys::fs::OF_None); - if (FileErr) - return createFileOpenError(Path, FileErr); - - if (Error Err = - generateDocForJSON(*Parsed, sys::path::stem(HTMLFilePath), - HTMLFilePath, InfoOS, CDCtx, HTMLDirPath)) - return Err; - JSONIter.increment(EC); - } - } - - return Error::success(); -} - -static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, - SmallString<128> RelativeHTMLPath) { +Error MustacheHTMLGenerator::setupTemplateResources( + const ClangDocContext &CDCtx, json::Value &V, + SmallString<128> RelativeRootPath) { V.getAsObject()->insert({"ProjectName", CDCtx.ProjectName}); json::Value StylesheetArr = Array(); - sys::path::native(RelativeHTMLPath, sys::path::Style::posix); + sys::path::native(RelativeRootPath, sys::path::Style::posix); auto *SSA = StylesheetArr.getAsArray(); SSA->reserve(CDCtx.UserStylesheets.size()); for (const auto &FilePath : CDCtx.UserStylesheets) { - SmallString<128> StylesheetPath = RelativeHTMLPath; + SmallString<128> StylesheetPath = RelativeRootPath; sys::path::append(StylesheetPath, sys::path::Style::posix, sys::path::filename(FilePath)); SSA->emplace_back(StylesheetPath); @@ -236,7 +101,7 @@ static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, auto *SCA = ScriptArr.getAsArray(); SCA->reserve(CDCtx.JsScripts.size()); for (auto Script : CDCtx.JsScripts) { - SmallString<128> JsPath = RelativeHTMLPath; + SmallString<128> JsPath = RelativeRootPath; sys::path::append(JsPath, sys::path::Style::posix, sys::path::filename(Script)); SCA->emplace_back(JsPath); @@ -245,31 +110,18 @@ static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, return Error::success(); } -static Error generateDocForJSON(json::Value &JSON, StringRef Filename, - StringRef Path, raw_fd_ostream &OS, - const ClangDocContext &CDCtx, - StringRef HTMLRootPath) { - auto StrValue = (*JSON.getAsObject())["InfoType"]; - if (StrValue.kind() != json::Value::Kind::String) - return createStringError("JSON file '%s' does not contain key: 'InfoType'.", - Filename.str().c_str()); - auto ObjTypeStr = StrValue.getAsString(); - if (!ObjTypeStr.has_value()) - return createStringError( - "JSON file '%s' does not contain 'InfoType' field as a string.", - Filename.str().c_str()); - - SmallString<128> PathVec(Path); - // Remove filename, or else the relative path will have an extra "../" - sys::path::remove_filename(PathVec); - auto RelativeHTMLPath = computeRelativePath(HTMLRootPath, PathVec); - if (ObjTypeStr.value() == "namespace") { - if (auto Err = setupTemplateValue(CDCtx, JSON, RelativeHTMLPath)) +Error MustacheHTMLGenerator::generateDocForJSON(json::Value &JSON, + raw_fd_ostream &OS, + const ClangDocContext &CDCtx, + StringRef ObjTypeStr, + StringRef RelativeRootPath) { + if (ObjTypeStr == "namespace") { + if (auto Err = setupTemplateResources(CDCtx, JSON, RelativeRootPath)) return Err; assert(NamespaceTemplate && "NamespaceTemplate is nullptr."); NamespaceTemplate->render(JSON, OS); - } else if (ObjTypeStr.value() == "record") { - if (auto Err = setupTemplateValue(CDCtx, JSON, RelativeHTMLPath)) + } else if (ObjTypeStr == "record") { + if (auto Err = setupTemplateResources(CDCtx, JSON, RelativeRootPath)) return Err; assert(RecordTemplate && "RecordTemplate is nullptr."); RecordTemplate->render(JSON, OS); @@ -306,6 +158,13 @@ Error MustacheHTMLGenerator::createResources(ClangDocContext &CDCtx) { return Error::success(); } +Error MustacheHTMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { + return MustacheGenerator::generateDocumentation(RootDir, std::move(Infos), + CDCtx, "html"); +} + const char *MustacheHTMLGenerator::Format = "mustache"; static GeneratorRegistry::Add diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index e28a7ecd5175f..97c599a3f605c 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -12,9 +12,10 @@ class JSONGenerator : public Generator { public: static const char *Format; - Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + Error generateDocumentation(StringRef RootDir, + llvm::StringMap> Infos, + const ClangDocContext &CDCtx, + std::string DirName) override; Error createResources(ClangDocContext &CDCtx) override; Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -596,9 +597,9 @@ static SmallString<16> determineFileName(Info *I, SmallString<128> &Path) { return FileName; } -Error JSONGenerator::generateDocs( +Error JSONGenerator::generateDocumentation( StringRef RootDir, llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { + const ClangDocContext &CDCtx, std::string DirName) { StringSet<> CreatedDirs; StringMap> FileToInfos; for (const auto &Group : Infos) { diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 6f16f5bd2f528..fcb75af80f9e9 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -398,9 +398,9 @@ class MDGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error createResources(ClangDocContext &CDCtx) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -408,10 +408,9 @@ class MDGenerator : public Generator { const char *MDGenerator::Format = "md"; -llvm::Error -MDGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error MDGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { // Track which directories we already tried to create. llvm::StringSet<> CreatedDirs; diff --git a/clang-tools-extra/clang-doc/YAMLGenerator.cpp b/clang-tools-extra/clang-doc/YAMLGenerator.cpp index eeccdd804b669..ce4ef58e582e5 100644 --- a/clang-tools-extra/clang-doc/YAMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/YAMLGenerator.cpp @@ -347,19 +347,18 @@ class YAMLGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; }; const char *YAMLGenerator::Format = "yaml"; -llvm::Error -YAMLGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error YAMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { for (const auto &Group : Infos) { doc::Info *Info = Group.getValue().get(); diff --git a/clang-tools-extra/clang-doc/assets/class-template.mustache b/clang-tools-extra/clang-doc/assets/class-template.mustache index a320a938a91ff..8eb28f33e65f6 100644 --- a/clang-tools-extra/clang-doc/assets/class-template.mustache +++ b/clang-tools-extra/clang-doc/assets/class-template.mustache @@ -174,7 +174,7 @@

Public Methods

{{#PublicFunctions}} -{{>FunctionPartial}} + {{>FunctionPartial}} {{/PublicFunctions}}
diff --git a/clang-tools-extra/clang-doc/assets/comment-template.mustache b/clang-tools-extra/clang-doc/assets/comment-template.mustache index d374c715296d0..1f40333cfd4b2 100644 --- a/clang-tools-extra/clang-doc/assets/comment-template.mustache +++ b/clang-tools-extra/clang-doc/assets/comment-template.mustache @@ -6,61 +6,61 @@ This file defines templates for generating comments }} {{#BriefComments}} -
- {{#.}} -

{{TextComment}}

- {{/.}} -
+
+{{#.}} +

{{TextComment}}

+{{/.}} +
{{/BriefComments}} {{#ParagraphComments}} -
- {{#.}} -

{{TextComment}}

- {{/.}} -
+
+{{#.}} +

{{TextComment}}

+{{/.}} +
{{/ParagraphComments}} {{#ParagraphComment}} - {{#Children}} - {{>Comments}} - {{/Children}} +{{#Children}} +{{TextComment}} +{{/Children}} {{/ParagraphComment}} {{#HasParamComments}} -

Parameters

- {{#ParamComments}} -
- {{ParamName}} {{#Explicit}}{{Direction}}{{/Explicit}} {{#Children}}{{>Comments}}{{/Children}} -
- {{/ParamComments}} +

Parameters

+{{#ParamComments}} +
+ {{ParamName}} {{#Explicit}}{{Direction}}{{/Explicit}} {{#Children}}{{TextComment}}{{/Children}} +
+{{/ParamComments}} {{/HasParamComments}} {{#HasReturnComments}} -

Returns

- {{#ReturnComments}} - {{#.}} -

{{TextComment}}

- {{/.}} - {{/ReturnComments}} +

Returns

+{{#ReturnComments}} +{{#.}} +

{{TextComment}}

+{{/.}} +{{/ReturnComments}} {{/HasReturnComments}} {{#HasCodeComments}} -

Code

- {{#CodeComments}} -
-
-            
-            {{#.}}
+

Code

+{{#CodeComments}} +
+
+        
+        {{#.}}
             {{.}}
-            {{/.}}
-            
-        
-
- {{/CodeComments}} + {{/.}} +
+
+
+{{/CodeComments}} {{/HasCodeComments}} {{#HasThrowsComments}} -

Throws

- {{#ThrowsComments}} -
- {{Exception}} {{#Children}}{{TextComment}}{{/Children}} -
- {{/ThrowsComments}} +

Throws

+{{#ThrowsComments}} +
+ {{Exception}} {{#Children}}{{TextComment}}{{/Children}} +
+{{/ThrowsComments}} {{/HasThrowsComments}} {{#BlockCommandComment}}
@@ -74,8 +74,3 @@
{{/BlockCommandComment}} -{{#TextComment}} -
-

{{TextComment}}

-
-{{/TextComment}} diff --git a/clang-tools-extra/clang-doc/assets/function-template.mustache b/clang-tools-extra/clang-doc/assets/function-template.mustache index 2510a4de2cd68..dc787bf0c8694 100644 --- a/clang-tools-extra/clang-doc/assets/function-template.mustache +++ b/clang-tools-extra/clang-doc/assets/function-template.mustache @@ -8,11 +8,7 @@
{{! Function Prototype }} -
-            
-{{ReturnType.Name}} {{Name}} ({{#Params}}{{^End}}{{Type}} {{Name}}, {{/End}}{{#End}}{{Type}} {{Name}}{{/End}}{{/Params}})
-            
-        
+
{{ReturnType.Name}} {{Name}} ({{#Params}}{{^End}}{{Type}} {{Name}}, {{/End}}{{#End}}{{Type}} {{Name}}{{/End}}{{/Params}})
{{! Function Comments }} {{#Description}}
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 3bb67baf65739..c86fd720d996b 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -438,7 +438,8 @@ Example usage for a project using a compile commands database: // Run the generator. llvm::outs() << "Generating docs...\n"; - ExitOnErr(G->generateDocs(OutDirectory, std::move(USRToInfo), CDCtx)); + ExitOnErr( + G->generateDocumentation(OutDirectory, std::move(USRToInfo), CDCtx)); llvm::outs() << "Generating assets for docs...\n"; ExitOnErr(G->createResources(CDCtx)); llvm::timeTraceProfilerEnd(); diff --git a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp index cc9ae471a926d..4842fe22a8890 100644 --- a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp @@ -7,10 +7,12 @@ //===----------------------------------------------------------------------===// #include "DuplicateIncludeCheck.h" +#include "../utils/OptionsUtils.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/Regex.h" #include namespace clang::tidy::readability { @@ -33,11 +35,8 @@ using FileList = SmallVector; class DuplicateIncludeCallbacks : public PPCallbacks { public: DuplicateIncludeCallbacks(DuplicateIncludeCheck &Check, - const SourceManager &SM) - : Check(Check), SM(SM) { - // The main file doesn't participate in the FileChanged notification. - Files.emplace_back(); - } + const SourceManager &SM, + llvm::ArrayRef IgnoredList); void FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, @@ -62,10 +61,31 @@ class DuplicateIncludeCallbacks : public PPCallbacks { SmallVector Files; DuplicateIncludeCheck &Check; const SourceManager &SM; + SmallVector AllowedRegexes; }; } // namespace +DuplicateIncludeCheck::DuplicateIncludeCheck(StringRef Name, + ClangTidyContext *Context) + : ClangTidyCheck(Name, Context), + IgnoredFilesList(utils::options::parseStringList( + Options.get("IgnoredFilesList", ""))) {} + +DuplicateIncludeCallbacks::DuplicateIncludeCallbacks( + DuplicateIncludeCheck &Check, const SourceManager &SM, + llvm::ArrayRef IgnoredList) + : Check(Check), SM(SM) { + // The main file doesn't participate in the FileChanged notification. + Files.emplace_back(); + + AllowedRegexes.reserve(IgnoredList.size()); + for (const StringRef &It : IgnoredList) { + if (!It.empty()) + AllowedRegexes.emplace_back(It); + } +} + void DuplicateIncludeCallbacks::FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, @@ -78,7 +98,7 @@ void DuplicateIncludeCallbacks::FileChanged(SourceLocation Loc, void DuplicateIncludeCallbacks::InclusionDirective( SourceLocation HashLoc, const Token &IncludeTok, StringRef FileName, - bool IsAngled, CharSourceRange FilenameRange, OptionalFileEntryRef File, + bool IsAngled, CharSourceRange FilenameRange, OptionalFileEntryRef /*File*/, StringRef SearchPath, StringRef RelativePath, const Module *SuggestedModule, bool ModuleImported, SrcMgr::CharacteristicKind FileType) { // Skip includes behind macros @@ -86,6 +106,10 @@ void DuplicateIncludeCallbacks::InclusionDirective( FilenameRange.getEnd().isMacroID()) return; if (llvm::is_contained(Files.back(), FileName)) { + if (llvm::any_of(AllowedRegexes, [&FileName](const llvm::Regex &R) { + return R.match(FileName); + })) + return; // We want to delete the entire line, so make sure that [Start,End] covers // everything. const SourceLocation Start = @@ -111,7 +135,13 @@ void DuplicateIncludeCallbacks::MacroUndefined(const Token &MacroNameTok, void DuplicateIncludeCheck::registerPPCallbacks( const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - PP->addPPCallbacks(std::make_unique(*this, SM)); + PP->addPPCallbacks( + std::make_unique(*this, SM, IgnoredFilesList)); +} + +void DuplicateIncludeCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { + Options.store(Opts, "IgnoredFilesList", + utils::options::serializeStringList(IgnoredFilesList)); } } // namespace clang::tidy::readability diff --git a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h index ca3679108e60b..1ee5b1c209ff7 100644 --- a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h +++ b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h @@ -19,11 +19,16 @@ namespace clang::tidy::readability { /// directives between them are analyzed. class DuplicateIncludeCheck : public ClangTidyCheck { public: - DuplicateIncludeCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} + DuplicateIncludeCheck(StringRef Name, ClangTidyContext *Context); void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override; + void storeOptions(ClangTidyOptions::OptionMap &Opts) override; + +private: + // Semicolon-separated list of regexes or file names to ignore from duplicate + // warnings. + const std::vector IgnoredFilesList; }; } // namespace clang::tidy::readability diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index dc8abd88899a4..a6f80e3721db1 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -527,6 +527,11 @@ Changes in existing checks ignoring default constructors with user provided arguments and adding detection in container's method except ``empty``. +- Improved :doc:`readability-duplicate-include + ` check by adding + the ``IgnoredFilesList`` option (semicolon-separated list of regexes or + filenames) to allow intentional duplicates. + - Improved :doc:`readability-identifier-naming ` check by ignoring declarations and macros in system headers. The documentation is also improved diff --git a/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst b/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst index 45df7e1b84f3f..28a4991a922f8 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst @@ -33,3 +33,12 @@ Because of the intervening macro definitions, this code remains unchanged: #define NDEBUG #include "assertion.h" // ...code with assertions disabled + +Options +------- + +.. option:: IgnoredFilesList + + A semicolon-separated list of regular expressions or filenames that are + allowed to be included multiple times without diagnostics. Matching is + performed against the textual include name. Default is an empty string. diff --git a/clang-tools-extra/test/clang-doc/basic-project.mustache.test b/clang-tools-extra/test/clang-doc/basic-project.mustache.test index a3041336327e8..9f7de6e689313 100644 --- a/clang-tools-extra/test/clang-doc/basic-project.mustache.test +++ b/clang-tools-extra/test/clang-doc/basic-project.mustache.test @@ -60,84 +60,72 @@ HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:

class Shape

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Abstract base class for shapes.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Provides a common interface for different types of shapes.

-HTML-SHAPE:
-HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Abstract base class for shapes.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Provides a common interface for different types of shapes.

+HTML-SHAPE:
+HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:

Public Methods

HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: double area ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Calculates the area of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:

Returns

-HTML-SHAPE:

double The area of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: double perimeter ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Calculates the perimeter of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:

Returns

-HTML-SHAPE:

double The perimeter of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: void ~Shape ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Virtual destructor.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
double area ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Calculates the area of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:

Returns

+HTML-SHAPE:

double The area of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
double perimeter ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Calculates the perimeter of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:

Returns

+HTML-SHAPE:

double The perimeter of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
void ~Shape ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Virtual destructor.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
HTML-SHAPE: HTML-SHAPE:
HTML-SHAPE:
@@ -217,219 +205,164 @@ HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:

class Calculator

-HTML-CALC:
-HTML-CALC:

A simple calculator class.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Provides basic arithmetic operations.

-HTML-CALC:
-HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

A simple calculator class.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Provides basic arithmetic operations.

+HTML-CALC:
+HTML-CALC:
HTML-CALC:
HTML-CALC: HTML-CALC:
HTML-CALC:

Public Members

HTML-CALC:
HTML-CALC:
-HTML-CALC:
-HTML-CALC: int public_val
-HTML-CALC:                         
+HTML-CALC:
int public_val
HTML-CALC:
HTML-CALC:
-HTML-CALC:
-HTML-CALC: const int static_val
-HTML-CALC:                         
+HTML-CALC:
const int static_val
HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:

Public Methods

HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int add (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Adds two integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The sum of a and b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int subtract (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Subtracts the second integer from the first.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The result of a - b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int multiply (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Multiplies two integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The product of a and b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: double divide (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Divides the first integer by the second.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

double The result of a / b.

-HTML-CALC:

-HTML-CALC:

Throws

-HTML-CALC:
-HTML-CALC: std::invalid_argument if b is zero. -HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int mod (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Performs the mod operation on integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

The result of a % b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int add (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Adds two integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The sum of a and b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int subtract (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Subtracts the second integer from the first.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The result of a - b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int multiply (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Multiplies two integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The product of a and b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
double divide (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Divides the first integer by the second.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

double The result of a / b.

+HTML-CALC:

+HTML-CALC:

Throws

+HTML-CALC:
+HTML-CALC: std::invalid_argument if b is zero. +HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int mod (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Performs the mod operation on integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

The result of a % b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC: @@ -438,6 +371,7 @@ HTML-CALC: HTML-CALC: + HTML-RECTANGLE: HTML-RECTANGLE: HTML-RECTANGLE: @@ -492,101 +426,82 @@ HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:

class Rectangle

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Rectangle class derived from Shape.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Represents a rectangle with a given width and height.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Rectangle class derived from Shape.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Represents a rectangle with a given width and height.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:

Public Methods

HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: void Rectangle (double width, double height)
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Constructs a new Rectangle object.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Parameters

-HTML-RECTANGLE:
-HTML-RECTANGLE: width
-HTML-RECTANGLE:

Width of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE: height
-HTML-RECTANGLE:

Height of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: double area ()
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Calculates the area of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Returns

-HTML-RECTANGLE:

double The area of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: double perimeter ()
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Calculates the perimeter of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Returns

-HTML-RECTANGLE:

double The perimeter of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
void Rectangle (double width, double height)
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Constructs a new Rectangle object.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Parameters

+HTML-RECTANGLE:
+HTML-RECTANGLE: width Width of the rectangle. +HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE: height Height of the rectangle. +HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
double area ()
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Calculates the area of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Returns

+HTML-RECTANGLE:

double The area of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
double perimeter ()
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Calculates the perimeter of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Returns

+HTML-RECTANGLE:

double The perimeter of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
HTML-RECTANGLE: HTML-RECTANGLE: HTML-RECTANGLE: @@ -595,6 +510,7 @@ HTML-RECTANGLE: HTML-RECTANGLE: + HTML-CIRCLE: HTML-CIRCLE: HTML-CIRCLE: @@ -649,102 +565,91 @@ HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:

class Circle

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Circle class derived from Shape.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Represents a circle with a given radius.

-HTML-CIRCLE:
-HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Circle class derived from Shape.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Represents a circle with a given radius.

+HTML-CIRCLE:
+HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:

Public Methods

HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: void Circle (double radius)
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Constructs a new Circle object.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Parameters

-HTML-CIRCLE:
-HTML-CIRCLE: radius
-HTML-CIRCLE:

Radius of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: double area ()
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Calculates the area of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Returns

-HTML-CIRCLE:

double The area of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: double perimeter ()
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Calculates the perimeter of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Returns

-HTML-CIRCLE:

double The perimeter of the circle.

-HTML-CIRCLE:

Code

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:                            
-HTML-CIRCLE:                            Circle circle(5.0);
-HTML-CIRCLE:                            double perimeter = circle.perimeter();
-HTML-CIRCLE:                            
-HTML-CIRCLE:                        
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
void Circle (double radius)
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Constructs a new Circle object.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Parameters

+HTML-CIRCLE:
+HTML-CIRCLE: radius Radius of the circle. +HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
double area ()
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Calculates the area of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Returns

+HTML-CIRCLE:

double The area of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
double perimeter ()
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Calculates the perimeter of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Returns

+HTML-CIRCLE:

double The perimeter of the circle.

+HTML-CIRCLE:

Code

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:                                         
+HTML-CIRCLE:                                              Circle circle(5.0);
+HTML-CIRCLE:                                              double perimeter = circle.perimeter();
+HTML-CIRCLE:                                         
+HTML-CIRCLE:                                     
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
HTML-CIRCLE: HTML-CIRCLE: HTML-CIRCLE: diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h new file mode 100644 index 0000000000000..fc9369c0cfb8f --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h @@ -0,0 +1 @@ +// Intentionally unguarded begin-pack header used in tests diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h new file mode 100644 index 0000000000000..78fd0a9adf475 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h @@ -0,0 +1 @@ +// Intentionally unguarded end-pack header used in tests diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp new file mode 100644 index 0000000000000..cdc2f44432d76 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp @@ -0,0 +1,24 @@ +// RUN: %check_clang_tidy %s readability-duplicate-include %t -- \ +// RUN: -config="{CheckOptions: {readability-duplicate-include.IgnoredFilesList: 'pack_.*\\.h'}}" \ +// RUN: -header-filter='' -- -I %S/Inputs/duplicate-include + +int g; +#include "duplicate-include.h" +int h; +#include "duplicate-include.h" +int i; +// CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include [readability-duplicate-include] +// CHECK-FIXES: int g; +// CHECK-FIXES-NEXT: #include "duplicate-include.h" +// CHECK-FIXES-NEXT: int h; +// CHECK-FIXES-NEXT: int i; + +#include "pack_begin.h" +struct A { int x; }; +#include "pack_end.h" + +#include "pack_begin.h" +struct B { int x; }; +#include "pack_end.h" + +// No warning here. diff --git a/clang/docs/AddressSanitizer.rst b/clang/docs/AddressSanitizer.rst index 2c2131b01d361..ed59afa1e0af5 100644 --- a/clang/docs/AddressSanitizer.rst +++ b/clang/docs/AddressSanitizer.rst @@ -164,6 +164,18 @@ To summarize: ``-fsanitize-address-use-after-return=`` * ``always``: Enables detection of UAR errors in all cases. (reduces code size, but not as much as ``never``). +Container Overflow Detection +---------------------------- + +AddressSanitizer can detect overflows in containers with custom allocators +(such as std::vector) where the library developers have added calls into the +AddressSanitizer runtime to indicate which memory is poisoned etc. + +In environments where not all the process binaries can be recompiled with +AddressSanitizer enabled, these checks can cause false positives. + +See `Disabling container overflow checks`_ for details on suppressing checks. + Memory leak detection --------------------- @@ -242,6 +254,46 @@ AddressSanitizer also supports works similarly to ``__attribute__((no_sanitize("address")))``, but it also prevents instrumentation performed by other sanitizers. +Disabling container overflow checks +----------------------------------- + +Runtime suppression +^^^^^^^^^^^^^^^^^^^ + +Container overflow checks can be disabled at runtime using the +``ASAN_OPTIONS=detect_container_overflow=0`` environment variable. + +Compile time suppression +^^^^^^^^^^^^^^^^^^^^^^^^ + +``-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__`` can be used at compile time to +disable container overflow checks if the container library has added support +for this define. + +To support a standard way to disable container overflow checks at compile time, +library developers should use this definition in conjunction with the +AddressSanitizer feature test to conditionally include container overflow +related code compiled into user code: + +The recommended form is + +.. code-block:: c + + // include the sanitizer common interfaces + #include + + #if __has_feature(address_sanitizer) + // Container overflow detection enabled - include annotations + __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid); + #endif + +This pattern ensures that: + +* Container overflow annotations are only included when AddressSanitizer is + enabled +* Container overflow detection can be disabled by passing + ``-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__`` to the compiler + Suppressing Errors in Recompiled Code (Ignorelist) -------------------------------------------------- diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 2891af65611a0..7ea62c578fd8b 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -727,6 +727,7 @@ Bug Fixes in This Version - Fixed a failed assertion with empty filename in ``#embed`` directive. (#GH162951) - Fixed a crash triggered by unterminated ``__has_embed``. (#GH162953) - Accept empty enumerations in MSVC-compatible C mode. (#GH114402) +- Fix a bug leading to incorrect code generation with complex number compound assignment and bitfield values, which also caused a crash with UBsan. (#GH166798) - Fixed false-positive shadow diagnostics for lambdas in explicit object member functions. (#GH163731) Bug Fixes to Compiler Builtins diff --git a/clang/include/clang/AST/StmtOpenACC.h b/clang/include/clang/AST/StmtOpenACC.h index ad4e2d65771b8..2bd0b52071697 100644 --- a/clang/include/clang/AST/StmtOpenACC.h +++ b/clang/include/clang/AST/StmtOpenACC.h @@ -829,8 +829,13 @@ class OpenACCAtomicConstruct final // Listed as 'expr' in the standard, this is typically a generic expression // as a component. const Expr *RefExpr; + // If this is an 'update', records whether this is a post-fix + // increment/decrement. In the case where we have a single-line variant of + // 'capture' we have to form the IR differently if this is the case to make + // sure the old value is 'read' in the 2nd step. + bool IsPostfixIncDec = false; static SingleStmtInfo Empty() { - return {nullptr, nullptr, nullptr, nullptr}; + return {nullptr, nullptr, nullptr, nullptr, false}; } static SingleStmtInfo createRead(const Expr *WholeExpr, const Expr *V, @@ -841,8 +846,9 @@ class OpenACCAtomicConstruct final const Expr *RefExpr) { return {WholeExpr, /*V=*/nullptr, X, RefExpr}; } - static SingleStmtInfo createUpdate(const Expr *WholeExpr, const Expr *X) { - return {WholeExpr, /*V=*/nullptr, X, /*RefExpr=*/nullptr}; + static SingleStmtInfo createUpdate(const Expr *WholeExpr, const Expr *X, + bool PostfixIncDec) { + return {WholeExpr, /*V=*/nullptr, X, /*RefExpr=*/nullptr, PostfixIncDec}; } }; diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 47da17e5cfe83..502382a069856 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -4949,25 +4949,25 @@ def HLSLResourceGetPointer : LangBuiltin<"HLSL_LANG"> { def HLSLResourceUninitializedHandle : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_uninitializedhandle"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t)"; } def HLSLResourceHandleFromBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_handlefrombinding"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t, int32_t, uint32_t, char const*)"; } def HLSLResourceHandleFromImplicitBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_handlefromimplicitbinding"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t, int32_t, uint32_t, char const*)"; } def HLSLResourceCounterHandleFromImplicitBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_counterhandlefromimplicitbinding"]; - let Attributes = [NoThrow, CustomTypeChecking]; - let Prototype = "void(...)"; + let Attributes = [NoThrow]; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t)"; } def HLSLResourceNonUniformIndex : LangBuiltin<"HLSL_LANG"> { @@ -4979,13 +4979,13 @@ def HLSLResourceNonUniformIndex : LangBuiltin<"HLSL_LANG"> { def HLSLResourceGetDimensionsX : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_getdimensions_x"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "void(__hlsl_resource_t, uint32_t&)"; } def HLSLResourceGetStride : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_getstride"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "void(__hlsl_resource_t, uint32_t&)"; } def HLSLAll : LangBuiltin<"HLSL_LANG"> { @@ -5213,7 +5213,7 @@ def HLSLRadians : LangBuiltin<"HLSL_LANG"> { def HLSLBufferUpdateCounter : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_buffer_update_counter"]; let Attributes = [NoThrow]; - let Prototype = "uint32_t(...)"; + let Prototype = "uint32_t(__hlsl_resource_t, int)"; } def HLSLSplitDouble: LangBuiltin<"HLSL_LANG"> { diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index 06e0796959c8f..79a1b292df462 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -802,8 +802,8 @@ def CIR_ConditionOp : CIR_Op<"condition", [ //===----------------------------------------------------------------------===// defvar CIR_YieldableScopes = [ - "ArrayCtor", "ArrayDtor", "CaseOp", "DoWhileOp", "ForOp", "GlobalOp", "IfOp", - "ScopeOp", "SwitchOp", "TernaryOp", "WhileOp", "TryOp" + "ArrayCtor", "ArrayDtor", "AwaitOp", "CaseOp", "DoWhileOp", "ForOp", + "GlobalOp", "IfOp", "ScopeOp", "SwitchOp", "TernaryOp", "WhileOp", "TryOp" ]; def CIR_YieldOp : CIR_Op<"yield", [ @@ -2752,6 +2752,100 @@ def CIR_CallOp : CIR_CallOpBase<"call", [NoRegionArguments]> { ]; } +//===----------------------------------------------------------------------===// +// AwaitOp +//===----------------------------------------------------------------------===// + +def CIR_AwaitKind : CIR_I32EnumAttr<"AwaitKind", "await kind", [ + I32EnumAttrCase<"Init", 0, "init">, + I32EnumAttrCase<"User", 1, "user">, + I32EnumAttrCase<"Yield", 2, "yield">, + I32EnumAttrCase<"Final", 3, "final"> +]>; + +def CIR_AwaitOp : CIR_Op<"await",[ + DeclareOpInterfaceMethods, + RecursivelySpeculatable, NoRegionArguments +]> { + let summary = "Wraps C++ co_await implicit logic"; + let description = [{ + The under the hood effect of using C++ `co_await expr` roughly + translates to: + + ```c++ + // co_await expr; + + auto &&x = CommonExpr(); + if (!x.await_ready()) { + ... + x.await_suspend(...); + ... + } + x.await_resume(); + ``` + + `cir.await` represents this logic by using 3 regions: + - ready: covers veto power from x.await_ready() + - suspend: wraps actual x.await_suspend() logic + - resume: handles x.await_resume() + + Breaking this up in regions allows individual scrutiny of conditions + which might lead to folding some of them out. Lowerings coming out + of CIR, e.g. LLVM, should use the `suspend` region to track more + lower level codegen (e.g. intrinsic emission for coro.save/coro.suspend). + + There are also 4 flavors of `cir.await` available: + - `init`: compiler generated initial suspend via implicit `co_await`. + - `user`: also known as normal, representing a user written `co_await`. + - `yield`: user written `co_yield` expressions. + - `final`: compiler generated final suspend via implicit `co_await`. + + ```mlir + cir.scope { + ... // auto &&x = CommonExpr(); + cir.await(user, ready : { + ... // x.await_ready() + }, suspend : { + ... // x.await_suspend() + }, resume : { + ... // x.await_resume() + }) + } + ``` + + Note that resulution of the common expression is assumed to happen + as part of the enclosing await scope. + }]; + + let arguments = (ins CIR_AwaitKind:$kind); + let regions = (region SizedRegion<1>:$ready, + SizedRegion<1>:$suspend, + SizedRegion<1>:$resume); + let assemblyFormat = [{ + `(` $kind `,` + `ready` `:` $ready `,` + `suspend` `:` $suspend `,` + `resume` `:` $resume `,` + `)` + attr-dict + }]; + + let skipDefaultBuilders = 1; + let builders = [ + OpBuilder<(ins + "cir::AwaitKind":$kind, + CArg<"BuilderCallbackRef", + "nullptr">:$readyBuilder, + CArg<"BuilderCallbackRef", + "nullptr">:$suspendBuilder, + CArg<"BuilderCallbackRef", + "nullptr">:$resumeBuilder + )> + ]; + + let hasVerifier = 1; +} + //===----------------------------------------------------------------------===// // CopyOp //===----------------------------------------------------------------------===// @@ -4018,6 +4112,72 @@ def CIR_RotateOp : CIR_Op<"rotate", [Pure, SameOperandsAndResultType]> { let hasFolder = 1; } +//===----------------------------------------------------------------------===// +// FPClass Test Flags +//===----------------------------------------------------------------------===// + +def FPClassTestEnum : CIR_I32EnumAttr<"FPClassTest", "floating-point class test flags", [ + // Basic flags + I32EnumAttrCase<"SignalingNaN", 1, "fcSNan">, + I32EnumAttrCase<"QuietNaN", 2, "fcQNan">, + I32EnumAttrCase<"NegativeInfinity", 4, "fcNegInf">, + I32EnumAttrCase<"NegativeNormal", 8, "fcNegNormal">, + I32EnumAttrCase<"NegativeSubnormal", 16, "fcNegSubnormal">, + I32EnumAttrCase<"NegativeZero", 32, "fcNegZero">, + I32EnumAttrCase<"PositiveZero", 64, "fcPosZero">, + I32EnumAttrCase<"PositiveSubnormal", 128, "fcPosSubnormal">, + I32EnumAttrCase<"PositiveNormal", 256, "fcPosNormal">, + I32EnumAttrCase<"PositiveInfinity", 512, "fcPosInf">, + + // Composite flags + I32EnumAttrCase<"Nan", 3, "fcNan">, // fcSNan | fcQNan + I32EnumAttrCase<"Infinity", 516, "fcInf">, // fcPosInf | fcNegInf + I32EnumAttrCase<"Normal", 264, "fcNormal">, // fcPosNormal | fcNegNormal + I32EnumAttrCase<"Subnormal", 144, "fcSubnormal">, // fcPosSubnormal | fcNegSubnormal + I32EnumAttrCase<"Zero", 96, "fcZero">, // fcPosZero | fcNegZero + I32EnumAttrCase<"PositiveFinite", 448, "fcPosFinite">,// fcPosNormal | fcPosSubnormal | fcPosZero + I32EnumAttrCase<"NegativeFinite", 56, "fcNegFinite">, // fcNegNormal | fcNegSubnormal | fcNegZero + I32EnumAttrCase<"Finite", 504, "fcFinite">, // fcPosFinite | fcNegFinite + I32EnumAttrCase<"Positive", 960, "fcPositive">, // fcPosFinite | fcPosInf + I32EnumAttrCase<"Negative", 60, "fcNegative">, // fcNegFinite | fcNegInf + I32EnumAttrCase<"All", 1023, "fcAllFlags">, // fcNan | fcInf | fcFinite +]> { + let cppNamespace = "::cir"; +} + +def CIR_IsFPClassOp : CIR_Op<"is_fp_class"> { + let summary = "Corresponding to the `__builtin_fpclassify` builtin function in clang"; + + let description = [{ + The `cir.is_fp_class` operation takes a floating-point value as its first + argument and a bitfield of flags as its second argument. The operation + returns a boolean value indicating whether the floating-point value + satisfies the given flags. + + The flags must be a compile time constant and the values are: + + | Bit # | floating-point class | + | ----- | -------------------- | + | 0 | Signaling NaN | + | 1 | Quiet NaN | + | 2 | Negative infinity | + | 3 | Negative normal | + | 4 | Negative subnormal | + | 5 | Negative zero | + | 6 | Positive zero | + | 7 | Positive subnormal | + | 8 | Positive normal | + | 9 | Positive infinity | + }]; + + let arguments = (ins CIR_AnyFloatType:$src, + FPClassTestEnum:$flags); + let results = (outs CIR_BoolType:$result); + let assemblyFormat = [{ + $src `,` $flags `:` functional-type($src, $result) attr-dict + }]; +} + //===----------------------------------------------------------------------===// // Assume Operations //===----------------------------------------------------------------------===// diff --git a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td index 313184764f536..3e062add6633a 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td +++ b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td @@ -657,6 +657,9 @@ def CIR_RecordType : CIR_Type<"Record", "record", [ } llvm_unreachable("Invalid value for RecordType::getKind()"); } + mlir::Type getElementType(size_t idx) { + return getMembers()[idx]; + } std::string getPrefixedName() { return getKindAsStr() + "." + getName().getValue().str(); } diff --git a/clang/include/clang/CIR/MissingFeatures.h b/clang/include/clang/CIR/MissingFeatures.h index 6b5c34d28ce2a..2ecde9aa5d56d 100644 --- a/clang/include/clang/CIR/MissingFeatures.h +++ b/clang/include/clang/CIR/MissingFeatures.h @@ -266,6 +266,7 @@ struct MissingFeatures { static bool emitTypeCheck() { return false; } static bool emitTypeMetadataCodeForVCall() { return false; } static bool fastMathFlags() { return false; } + static bool fpConstraints() { return false; } static bool generateDebugInfo() { return false; } static bool globalViewIndices() { return false; } diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 7412ef9620e7b..ac8bcefbfb153 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -12549,6 +12549,10 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context, Type = Context.AMDGPUTextureTy; break; } + case 'r': { + Type = Context.HLSLResourceTy; + break; + } default: llvm_unreachable("Unexpected target builtin type"); } diff --git a/clang/lib/AST/StmtOpenACC.cpp b/clang/lib/AST/StmtOpenACC.cpp index d3a7e7601f618..ec8ceb949c6c0 100644 --- a/clang/lib/AST/StmtOpenACC.cpp +++ b/clang/lib/AST/StmtOpenACC.cpp @@ -347,16 +347,17 @@ getBinaryAssignOpArgs(const Expr *Op) { return getBinaryAssignOpArgs(Op, IsCompoundAssign); } -static std::optional getUnaryOpArgs(const Expr *Op) { +static std::optional> +getUnaryOpArgs(const Expr *Op) { if (const auto *UO = dyn_cast(Op)) - return UO->getSubExpr(); + return {{UO->getSubExpr(), UO->isPostfix()}}; if (const auto *OpCall = dyn_cast(Op)) { // Post-inc/dec have a second unused argument to differentiate it, so we // accept -- or ++ as unary, or any operator call with only 1 arg. if (OpCall->getNumArgs() == 1 || OpCall->getOperator() == OO_PlusPlus || OpCall->getOperator() == OO_MinusMinus) - return {OpCall->getArg(0)}; + return {{OpCall->getArg(0), /*IsPostfix=*/OpCall->getNumArgs() == 1}}; } return std::nullopt; @@ -410,10 +411,10 @@ getWriteStmtInfo(const Expr *E) { static std::optional getUpdateStmtInfo(const Expr *E) { - std::optional UnaryArgs = getUnaryOpArgs(E); + std::optional> UnaryArgs = getUnaryOpArgs(E); if (UnaryArgs) { auto Res = OpenACCAtomicConstruct::SingleStmtInfo::createUpdate( - E, (*UnaryArgs)->IgnoreImpCasts()); + E, UnaryArgs->first->IgnoreImpCasts(), UnaryArgs->second); if (!Res.X->isLValue() || !Res.X->getType()->isScalarType()) return std::nullopt; @@ -428,7 +429,7 @@ getUpdateStmtInfo(const Expr *E) { return std::nullopt; auto Res = OpenACCAtomicConstruct::SingleStmtInfo::createUpdate( - E, BinaryArgs->first->IgnoreImpCasts()); + E, BinaryArgs->first->IgnoreImpCasts(), /*PostFixIncDec=*/false); if (!Res.X->isLValue() || !Res.X->getType()->isScalarType()) return std::nullopt; @@ -513,17 +514,12 @@ getCaptureStmtInfo(const Stmt *AssocStmt) { return OpenACCAtomicConstruct::StmtInfo::createUpdateRead(*Update, *Read); } else { - // All of the possible forms (listed below) that are writable as a single - // line are expressed as an update, then as a read. We should be able to - // just run these two in the right order. - // UPDATE: READ - // v = x++; - // v = x--; - // v = ++x; - // v = --x; - // v = x binop=expr - // v = x = x binop expr - // v = x = expr binop x + // All of the forms that can be done in a single line fall into 2 + // categories: update/read, or read/update. The special cases are the + // postfix unary operators, which we have to make sure we do the 'read' + // first. However, we still parse these as the RHS first, so we have a + // 'reversing' step. READ: UPDATE v = x++; v = x--; UPDATE: READ v = ++x; v + // = --x; v = x binop=expr v = x = x binop expr v = x = expr binop x const Expr *E = cast(AssocStmt); @@ -535,6 +531,11 @@ getCaptureStmtInfo(const Stmt *AssocStmt) { // Fixup this, since the 'X' for the read is the result after write, but is // the same value as the LHS-most variable of the update(its X). Read->X = Update->X; + + // Postfix is a read FIRST, then an update. + if (Update->IsPostfixIncDec) + return OpenACCAtomicConstruct::StmtInfo::createReadUpdate(*Read, *Update); + return OpenACCAtomicConstruct::StmtInfo::createUpdateRead(*Update, *Read); } return {}; diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h index 5ab1d0e05cf8a..85b38120169fd 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h +++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h @@ -212,6 +212,16 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy { &ignored); return fv.bitwiseIsEqual(fpVal); } + if (const auto recordVal = mlir::dyn_cast(attr)) { + for (const auto elt : recordVal.getMembers()) { + // FIXME(cir): the record's ID should not be considered a member. + if (mlir::isa(elt)) + continue; + if (!isNullValue(elt)) + return false; + } + return true; + } if (const auto arrayVal = mlir::dyn_cast(attr)) { if (mlir::isa(arrayVal.getElts())) @@ -334,6 +344,11 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy { llvm_unreachable("negation for the given type is NYI"); } + cir::IsFPClassOp createIsFPClass(mlir::Location loc, mlir::Value src, + cir::FPClassTest flags) { + return cir::IsFPClassOp::create(*this, loc, src, flags); + } + // TODO: split this to createFPExt/createFPTrunc when we have dedicated cast // operations. mlir::Value createFloatingCast(mlir::Value v, mlir::Type destType) { diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index 77f19343653db..dee5704c66011 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -520,6 +520,98 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, cir::PrefetchOp::create(builder, loc, address, locality, isWrite); return RValue::get(nullptr); } + // From https://clang.llvm.org/docs/LanguageExtensions.html#builtin-isfpclass + // : + // + // The `__builtin_isfpclass()` builtin is a generalization of functions + // isnan, isinf, isfinite and some others defined by the C standard. It tests + // if the floating-point value, specified by the first argument, falls into + // any of data classes, specified by the second argument. + case Builtin::BI__builtin_isnan: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Nan), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_issignaling: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::SignalingNaN), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_isinf: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Infinity), + convertType(e->getType()))); + } + + case Builtin::BIfinite: + case Builtin::BI__finite: + case Builtin::BIfinitef: + case Builtin::BI__finitef: + case Builtin::BIfinitel: + case Builtin::BI__finitel: + case Builtin::BI__builtin_isfinite: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Finite), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_isnormal: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Normal), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_issubnormal: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Subnormal), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_iszero: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Zero), + convertType(e->getType()))); + } + case Builtin::BI__builtin_isfpclass: { + Expr::EvalResult result; + if (!e->getArg(1)->EvaluateAsInt(result, cgm.getASTContext())) + break; + + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + uint64_t test = result.Val.getInt().getLimitedValue(); + mlir::Location loc = getLoc(e->getBeginLoc()); + // + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest(test)), + convertType(e->getType()))); + } } // If this is an alias for a lib function (e.g. __builtin_sin), emit diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp index ee6900141647f..ac16702fb8e95 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp @@ -169,10 +169,26 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID, case X86::BI__builtin_ia32_vec_set_v16hi: case X86::BI__builtin_ia32_vec_set_v8si: case X86::BI__builtin_ia32_vec_set_v4di: + cgm.errorNYI(expr->getSourceRange(), + std::string("unimplemented X86 builtin call: ") + + getContext().BuiltinInfo.getName(builtinID)); + return {}; case X86::BI_mm_setcsr: - case X86::BI__builtin_ia32_ldmxcsr: + case X86::BI__builtin_ia32_ldmxcsr: { + mlir::Location loc = getLoc(expr->getExprLoc()); + Address tmp = createMemTemp(expr->getArg(0)->getType(), loc); + builder.createStore(loc, ops[0], tmp); + return emitIntrinsicCallOp(*this, expr, "x86.sse.ldmxcsr", + builder.getVoidTy(), tmp.getPointer()); + } case X86::BI_mm_getcsr: - case X86::BI__builtin_ia32_stmxcsr: + case X86::BI__builtin_ia32_stmxcsr: { + mlir::Location loc = getLoc(expr->getExprLoc()); + Address tmp = createMemTemp(expr->getType(), loc); + emitIntrinsicCallOp(*this, expr, "x86.sse.stmxcsr", builder.getVoidTy(), + tmp.getPointer()); + return builder.createLoad(loc, tmp); + } case X86::BI__builtin_ia32_xsave: case X86::BI__builtin_ia32_xsave64: case X86::BI__builtin_ia32_xrstor: diff --git a/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp b/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp index 05fb1aedcbf4a..bb55991d9366a 100644 --- a/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp @@ -22,6 +22,10 @@ using namespace clang; using namespace clang::CIRGen; struct clang::CIRGen::CGCoroData { + // What is the current await expression kind and how many + // await/yield expressions were encountered so far. + // These are used to generate pretty labels for await expressions in LLVM IR. + cir::AwaitKind currentAwaitKind = cir::AwaitKind::Init; // Stores the __builtin_coro_id emitted in the function so that we can supply // it as the first argument to other builtins. cir::CallOp coroId = nullptr; @@ -249,7 +253,114 @@ CIRGenFunction::emitCoroutineBody(const CoroutineBodyStmt &s) { emitAnyExprToMem(s.getReturnValue(), returnValue, s.getReturnValue()->getType().getQualifiers(), /*isInit*/ true); + + assert(!cir::MissingFeatures::ehCleanupScope()); + // FIXME(cir): EHStack.pushCleanup(EHCleanup); + curCoro.data->currentAwaitKind = cir::AwaitKind::Init; + if (emitStmt(s.getInitSuspendStmt(), /*useCurrentScope=*/true).failed()) + return mlir::failure(); assert(!cir::MissingFeatures::emitBodyAndFallthrough()); } return mlir::success(); } +// Given a suspend expression which roughly looks like: +// +// auto && x = CommonExpr(); +// if (!x.await_ready()) { +// x.await_suspend(...); (*) +// } +// x.await_resume(); +// +// where the result of the entire expression is the result of x.await_resume() +// +// (*) If x.await_suspend return type is bool, it allows to veto a suspend: +// if (x.await_suspend(...)) +// llvm_coro_suspend(); +// +// This is more higher level than LLVM codegen, for that one see llvm's +// docs/Coroutines.rst for more details. +namespace { +struct LValueOrRValue { + LValue lv; + RValue rv; +}; +} // namespace + +static LValueOrRValue +emitSuspendExpression(CIRGenFunction &cgf, CGCoroData &coro, + CoroutineSuspendExpr const &s, cir::AwaitKind kind, + AggValueSlot aggSlot, bool ignoreResult, + mlir::Block *scopeParentBlock, + mlir::Value &tmpResumeRValAddr, bool forLValue) { + mlir::LogicalResult awaitBuild = mlir::success(); + LValueOrRValue awaitRes; + + CIRGenFunction::OpaqueValueMapping binder = + CIRGenFunction::OpaqueValueMapping(cgf, s.getOpaqueValue()); + CIRGenBuilderTy &builder = cgf.getBuilder(); + [[maybe_unused]] cir::AwaitOp awaitOp = cir::AwaitOp::create( + builder, cgf.getLoc(s.getSourceRange()), kind, + /*readyBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + builder.createCondition( + cgf.createDummyValue(loc, cgf.getContext().BoolTy)); + }, + /*suspendBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + cir::YieldOp::create(builder, loc); + }, + /*resumeBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + cir::YieldOp::create(builder, loc); + }); + + assert(awaitBuild.succeeded() && "Should know how to codegen"); + return awaitRes; +} + +static RValue emitSuspendExpr(CIRGenFunction &cgf, + const CoroutineSuspendExpr &e, + cir::AwaitKind kind, AggValueSlot aggSlot, + bool ignoreResult) { + RValue rval; + mlir::Location scopeLoc = cgf.getLoc(e.getSourceRange()); + + // Since we model suspend / resume as an inner region, we must store + // resume scalar results in a tmp alloca, and load it after we build the + // suspend expression. An alternative way to do this would be to make + // every region return a value when promise.return_value() is used, but + // it's a bit awkward given that resume is the only region that actually + // returns a value. + mlir::Block *currEntryBlock = cgf.curLexScope->getEntryBlock(); + [[maybe_unused]] mlir::Value tmpResumeRValAddr; + + // No need to explicitly wrap this into a scope since the AST already uses a + // ExprWithCleanups, which will wrap this into a cir.scope anyways. + rval = emitSuspendExpression(cgf, *cgf.curCoro.data, e, kind, aggSlot, + ignoreResult, currEntryBlock, tmpResumeRValAddr, + /*forLValue*/ false) + .rv; + + if (ignoreResult || rval.isIgnored()) + return rval; + + if (rval.isScalar()) { + rval = RValue::get(cir::LoadOp::create(cgf.getBuilder(), scopeLoc, + rval.getValue().getType(), + tmpResumeRValAddr)); + } else if (rval.isAggregate()) { + // This is probably already handled via AggSlot, remove this assertion + // once we have a testcase and prove all pieces work. + cgf.cgm.errorNYI("emitSuspendExpr Aggregate"); + } else { // complex + cgf.cgm.errorNYI("emitSuspendExpr Complex"); + } + return rval; +} + +RValue CIRGenFunction::emitCoawaitExpr(const CoawaitExpr &e, + AggValueSlot aggSlot, + bool ignoreResult) { + return emitSuspendExpr(*this, e, curCoro.data->currentAwaitKind, aggSlot, + ignoreResult); +} diff --git a/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp b/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp index 007d873ff5db6..c3580dcfff171 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp @@ -240,8 +240,46 @@ static void emitNullBaseClassInitialization(CIRGenFunction &cgf, if (base->isEmpty()) return; - cgf.cgm.errorNYI(base->getSourceRange(), - "emitNullBaseClassInitialization: not empty"); + const ASTRecordLayout &layout = cgf.getContext().getASTRecordLayout(base); + CharUnits nvSize = layout.getNonVirtualSize(); + + // We cannot simply zero-initialize the entire base sub-object if vbptrs are + // present, they are initialized by the most derived class before calling the + // constructor. + SmallVector, 1> stores; + stores.emplace_back(CharUnits::Zero(), nvSize); + + // Each store is split by the existence of a vbptr. + // TODO(cir): This only needs handling for the MS CXXABI. + assert(!cir::MissingFeatures::msabi()); + + // If the type contains a pointer to data member we can't memset it to zero. + // Instead, create a null constant and copy it to the destination. + // TODO: there are other patterns besides zero that we can usefully memset, + // like -1, which happens to be the pattern used by member-pointers. + // TODO: isZeroInitializable can be over-conservative in the case where a + // virtual base contains a member pointer. + mlir::TypedAttr nullConstantForBase = cgf.cgm.emitNullConstantForBase(base); + if (!cgf.getBuilder().isNullValue(nullConstantForBase)) { + cgf.cgm.errorNYI( + base->getSourceRange(), + "emitNullBaseClassInitialization: base constant is not null"); + } else { + // Otherwise, just memset the whole thing to zero. This is legal + // because in LLVM, all default initializers (other than the ones we just + // handled above) are guaranteed to have a bit pattern of all zeros. + // TODO(cir): When the MS CXXABI is supported, we will need to iterate over + // `stores` and create a separate memset for each one. For now, we know that + // there will only be one store and it will begin at offset zero, so that + // simplifies this code considerably. + assert(stores.size() == 1 && "Expected only one store"); + assert(stores[0].first == CharUnits::Zero() && + "Expected store to begin at offset zero"); + CIRGenBuilderTy builder = cgf.getBuilder(); + mlir::Location loc = cgf.getLoc(base->getBeginLoc()); + builder.createStore(loc, builder.getConstant(loc, nullConstantForBase), + destPtr); + } } void CIRGenFunction::emitCXXConstructExpr(const CXXConstructExpr *e, diff --git a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp index 6af87a0159f0a..66f8ef9b05913 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp @@ -1521,6 +1521,101 @@ ConstantEmitter::~ConstantEmitter() { "not finalized after being initialized for non-abstract emission"); } +static mlir::TypedAttr emitNullConstantForBase(CIRGenModule &cgm, + mlir::Type baseType, + const CXXRecordDecl *baseDecl); + +static mlir::TypedAttr emitNullConstant(CIRGenModule &cgm, const RecordDecl *rd, + bool asCompleteObject) { + const CIRGenRecordLayout &layout = cgm.getTypes().getCIRGenRecordLayout(rd); + mlir::Type ty = (asCompleteObject ? layout.getCIRType() + : layout.getBaseSubobjectCIRType()); + auto recordTy = mlir::cast(ty); + + unsigned numElements = recordTy.getNumElements(); + SmallVector elements(numElements); + + auto *cxxrd = dyn_cast(rd); + // Fill in all the bases. + if (cxxrd) { + for (const CXXBaseSpecifier &base : cxxrd->bases()) { + if (base.isVirtual()) { + // Ignore virtual bases; if we're laying out for a complete + // object, we'll lay these out later. + continue; + } + + const auto *baseDecl = base.getType()->castAsCXXRecordDecl(); + // Ignore empty bases. + if (isEmptyRecordForLayout(cgm.getASTContext(), base.getType()) || + cgm.getASTContext() + .getASTRecordLayout(baseDecl) + .getNonVirtualSize() + .isZero()) + continue; + + unsigned fieldIndex = layout.getNonVirtualBaseCIRFieldNo(baseDecl); + mlir::Type baseType = recordTy.getElementType(fieldIndex); + elements[fieldIndex] = emitNullConstantForBase(cgm, baseType, baseDecl); + } + } + + // Fill in all the fields. + for (const FieldDecl *field : rd->fields()) { + // Fill in non-bitfields. (Bitfields always use a zero pattern, which we + // will fill in later.) + if (!field->isBitField() && + !isEmptyFieldForLayout(cgm.getASTContext(), field)) { + unsigned fieldIndex = layout.getCIRFieldNo(field); + elements[fieldIndex] = cgm.emitNullConstantAttr(field->getType()); + } + + // For unions, stop after the first named field. + if (rd->isUnion()) { + if (field->getIdentifier()) + break; + if (const auto *fieldRD = field->getType()->getAsRecordDecl()) + if (fieldRD->findFirstNamedDataMember()) + break; + } + } + + // Fill in the virtual bases, if we're working with the complete object. + if (cxxrd && asCompleteObject) { + for ([[maybe_unused]] const CXXBaseSpecifier &vbase : cxxrd->vbases()) { + cgm.errorNYI(vbase.getSourceRange(), "emitNullConstant: virtual base"); + return {}; + } + } + + // Now go through all other fields and zero them out. + for (unsigned i = 0; i != numElements; ++i) { + if (!elements[i]) { + cgm.errorNYI(rd->getSourceRange(), "emitNullConstant: field not zeroed"); + return {}; + } + } + + mlir::MLIRContext *mlirContext = recordTy.getContext(); + return cir::ConstRecordAttr::get(recordTy, + mlir::ArrayAttr::get(mlirContext, elements)); +} + +/// Emit the null constant for a base subobject. +static mlir::TypedAttr emitNullConstantForBase(CIRGenModule &cgm, + mlir::Type baseType, + const CXXRecordDecl *baseDecl) { + const CIRGenRecordLayout &baseLayout = + cgm.getTypes().getCIRGenRecordLayout(baseDecl); + + // Just zero out bases that don't have any pointer to data members. + if (baseLayout.isZeroInitializableAsBase()) + return cgm.getBuilder().getZeroInitAttr(baseType); + + // Otherwise, we can just use its null constant. + return emitNullConstant(cgm, baseDecl, /*asCompleteObject=*/false); +} + mlir::Attribute ConstantEmitter::tryEmitPrivateForVarInit(const VarDecl &d) { // Make a quick check if variable can be default NULL initialized // and avoid going through rest of code which may do, for c++11, @@ -1820,23 +1915,32 @@ mlir::Attribute ConstantEmitter::tryEmitPrivate(const APValue &value, } mlir::Value CIRGenModule::emitNullConstant(QualType t, mlir::Location loc) { - if (t->getAs()) { - return builder.getNullPtr(getTypes().convertTypeForMem(t), loc); - } + return builder.getConstant(loc, emitNullConstantAttr(t)); +} + +mlir::TypedAttr CIRGenModule::emitNullConstantAttr(QualType t) { + if (t->getAs()) + return builder.getConstNullPtrAttr(getTypes().convertTypeForMem(t)); if (getTypes().isZeroInitializable(t)) - return builder.getNullValue(getTypes().convertTypeForMem(t), loc); + return builder.getZeroInitAttr(getTypes().convertTypeForMem(t)); if (getASTContext().getAsConstantArrayType(t)) { - errorNYI("CIRGenModule::emitNullConstant ConstantArrayType"); + errorNYI("CIRGenModule::emitNullConstantAttr ConstantArrayType"); + return {}; } - if (t->isRecordType()) - errorNYI("CIRGenModule::emitNullConstant RecordType"); + if (const RecordType *rt = t->getAs()) + return ::emitNullConstant(*this, rt->getDecl(), /*asCompleteObject=*/true); assert(t->isMemberDataPointerType() && "Should only see pointers to data members here!"); - errorNYI("CIRGenModule::emitNullConstant unsupported type"); + errorNYI("CIRGenModule::emitNullConstantAttr unsupported type"); return {}; } + +mlir::TypedAttr +CIRGenModule::emitNullConstantForBase(const CXXRecordDecl *record) { + return ::emitNullConstant(*this, record, false); +} diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index fc5a501e6a700..7c94743d5ffc6 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -156,6 +156,10 @@ class ScalarExprEmitter : public StmtVisitor { return cgf.emitLoadOfLValue(lv, e->getExprLoc()).getValue(); } + mlir::Value VisitCoawaitExpr(CoawaitExpr *s) { + return cgf.emitCoawaitExpr(*s).getValue(); + } + mlir::Value emitLoadOfLValue(LValue lv, SourceLocation loc) { return cgf.emitLoadOfLValue(lv, loc).getValue(); } @@ -711,6 +715,10 @@ class ScalarExprEmitter : public StmtVisitor { return Visit(e->getSubExpr()); } + mlir::Value VisitCXXDefaultArgExpr(CXXDefaultArgExpr *dae) { + CIRGenFunction::CXXDefaultArgExprScope scope(cgf, dae); + return Visit(dae->getExpr()); + } mlir::Value VisitCXXDefaultInitExpr(CXXDefaultInitExpr *die) { CIRGenFunction::CXXDefaultInitExprScope scope(cgf, die); return Visit(die->getExpr()); diff --git a/clang/lib/CIR/CodeGen/CIRGenFunction.h b/clang/lib/CIR/CodeGen/CIRGenFunction.h index b22bf2d87fc10..b426f3389ff1b 100644 --- a/clang/lib/CIR/CodeGen/CIRGenFunction.h +++ b/clang/lib/CIR/CodeGen/CIRGenFunction.h @@ -1576,6 +1576,9 @@ class CIRGenFunction : public CIRGenTypeCache { void emitForwardingCallToLambda(const CXXMethodDecl *lambdaCallOperator, CallArgList &callArgs); + RValue emitCoawaitExpr(const CoawaitExpr &e, + AggValueSlot aggSlot = AggValueSlot::ignored(), + bool ignoreResult = false); /// Emit the computation of the specified expression of complex type, /// returning the result. mlir::Value emitComplexExpr(const Expr *e); diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.h b/clang/lib/CIR/CodeGen/CIRGenModule.h index dc28d9e8e9d33..7601e39a798d9 100644 --- a/clang/lib/CIR/CodeGen/CIRGenModule.h +++ b/clang/lib/CIR/CodeGen/CIRGenModule.h @@ -461,6 +461,12 @@ class CIRGenModule : public CIRGenTypeCache { /// expression of the given type. mlir::Value emitNullConstant(QualType t, mlir::Location loc); + mlir::TypedAttr emitNullConstantAttr(QualType t); + + /// Return a null constant appropriate for zero-initializing a base class with + /// the given type. This is usually, but not always, an LLVM null constant. + mlir::TypedAttr emitNullConstantForBase(const CXXRecordDecl *record); + llvm::StringRef getMangledName(clang::GlobalDecl gd); void emitTentativeDefinition(const VarDecl *d); diff --git a/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h b/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h index bf0ddc5875059..c9364971e080c 100644 --- a/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h +++ b/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h @@ -184,6 +184,11 @@ class CIRGenRecordLayout { return fieldIdxMap.lookup(fd); } + unsigned getNonVirtualBaseCIRFieldNo(const CXXRecordDecl *rd) const { + assert(nonVirtualBases.count(rd) && "Invalid non-virtual base!"); + return nonVirtualBases.lookup(rd); + } + /// Check whether this struct can be C++ zero-initialized /// with a zeroinitializer. bool isZeroInitializable() const { return zeroInitializable; } diff --git a/clang/lib/CIR/CodeGen/CIRGenValue.h b/clang/lib/CIR/CodeGen/CIRGenValue.h index 20a3d0ef61341..2002bd7e7c488 100644 --- a/clang/lib/CIR/CodeGen/CIRGenValue.h +++ b/clang/lib/CIR/CodeGen/CIRGenValue.h @@ -49,6 +49,7 @@ class RValue { bool isScalar() const { return flavor == Scalar; } bool isComplex() const { return flavor == Complex; } bool isAggregate() const { return flavor == Aggregate; } + bool isIgnored() const { return isScalar() && !getValue(); } bool isVolatileQualified() const { return isVolatile; } diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 22aada882defc..b5840ff12438e 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -289,7 +289,10 @@ void cir::ConditionOp::getSuccessorRegions( regions.emplace_back(getOperation(), loopOp->getResults()); } - assert(!cir::MissingFeatures::awaitOp()); + // Parent is an await: condition may branch to resume or suspend regions. + auto await = cast(getOperation()->getParentOp()); + regions.emplace_back(&await.getResume(), await.getResume().getArguments()); + regions.emplace_back(&await.getSuspend(), await.getSuspend().getArguments()); } MutableOperandRange @@ -299,8 +302,7 @@ cir::ConditionOp::getMutableSuccessorOperands(RegionSuccessor point) { } LogicalResult cir::ConditionOp::verify() { - assert(!cir::MissingFeatures::awaitOp()); - if (!isa(getOperation()->getParentOp())) + if (!isa(getOperation()->getParentOp())) return emitOpError("condition must be within a conditional region"); return success(); } @@ -1910,6 +1912,19 @@ void cir::FuncOp::print(OpAsmPrinter &p) { mlir::LogicalResult cir::FuncOp::verify() { + if (!isDeclaration() && getCoroutine()) { + bool foundAwait = false; + this->walk([&](Operation *op) { + if (auto await = dyn_cast(op)) { + foundAwait = true; + return; + } + }); + if (!foundAwait) + return emitOpError() + << "coroutine body must use at least one cir.await op"; + } + llvm::SmallSet labels; llvm::SmallSet gotos; llvm::SmallSet blockAddresses; @@ -2149,6 +2164,61 @@ OpFoldResult cir::UnaryOp::fold(FoldAdaptor adaptor) { return {}; } +//===----------------------------------------------------------------------===// +// AwaitOp +//===----------------------------------------------------------------------===// + +void cir::AwaitOp::build(OpBuilder &builder, OperationState &result, + cir::AwaitKind kind, BuilderCallbackRef readyBuilder, + BuilderCallbackRef suspendBuilder, + BuilderCallbackRef resumeBuilder) { + result.addAttribute(getKindAttrName(result.name), + cir::AwaitKindAttr::get(builder.getContext(), kind)); + { + OpBuilder::InsertionGuard guard(builder); + Region *readyRegion = result.addRegion(); + builder.createBlock(readyRegion); + readyBuilder(builder, result.location); + } + + { + OpBuilder::InsertionGuard guard(builder); + Region *suspendRegion = result.addRegion(); + builder.createBlock(suspendRegion); + suspendBuilder(builder, result.location); + } + + { + OpBuilder::InsertionGuard guard(builder); + Region *resumeRegion = result.addRegion(); + builder.createBlock(resumeRegion); + resumeBuilder(builder, result.location); + } +} + +void cir::AwaitOp::getSuccessorRegions( + mlir::RegionBranchPoint point, SmallVectorImpl ®ions) { + // If any index all the underlying regions branch back to the parent + // operation. + if (!point.isParent()) { + regions.push_back( + RegionSuccessor(getOperation(), getOperation()->getResults())); + return; + } + + // TODO: retrieve information from the promise and only push the + // necessary ones. Example: `std::suspend_never` on initial or final + // await's might allow suspend region to be skipped. + regions.push_back(RegionSuccessor(&this->getReady())); + regions.push_back(RegionSuccessor(&this->getSuspend())); + regions.push_back(RegionSuccessor(&this->getResume())); +} + +LogicalResult cir::AwaitOp::verify() { + if (!isa(this->getReady().back().getTerminator())) + return emitOpError("ready region must end with cir.condition"); + return success(); +} //===----------------------------------------------------------------------===// // CopyOp Definitions diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index b35359609521e..833464824f0e5 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -676,6 +676,18 @@ mlir::LogicalResult CIRToLLVMASinOpLowering::matchAndRewrite( return mlir::success(); } +mlir::LogicalResult CIRToLLVMIsFPClassOpLowering::matchAndRewrite( + cir::IsFPClassOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const { + mlir::Value src = adaptor.getSrc(); + cir::FPClassTest flags = adaptor.getFlags(); + mlir::IntegerType retTy = rewriter.getI1Type(); + + rewriter.replaceOpWithNewOp( + op, retTy, src, static_cast(flags)); + return mlir::success(); +} + mlir::LogicalResult CIRToLLVMAssumeOpLowering::matchAndRewrite( cir::AssumeOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { @@ -3931,6 +3943,12 @@ mlir::LogicalResult CIRToLLVMBlockAddressOpLowering::matchAndRewrite( return mlir::failure(); } +mlir::LogicalResult CIRToLLVMAwaitOpLowering::matchAndRewrite( + cir::AwaitOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const { + return mlir::failure(); +} + std::unique_ptr createConvertCIRToLLVMPass() { return std::make_unique(); } diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 224e6335d74d6..5e5df7af498b7 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -6261,15 +6261,6 @@ struct ReconstitutableType : public RecursiveASTVisitor { Reconstitutable = false; return false; } - bool VisitType(Type *T) { - // _BitInt(N) isn't reconstitutable because the bit width isn't encoded in - // the DWARF, only the byte width. - if (T->isBitIntType()) { - Reconstitutable = false; - return false; - } - return true; - } bool TraverseEnumType(EnumType *ET, bool = false) { // Unnamed enums can't be reconstituted due to a lack of column info we // produce in the DWARF, so we can't get Clang's full name back. diff --git a/clang/lib/CodeGen/CGExprComplex.cpp b/clang/lib/CodeGen/CGExprComplex.cpp index f8a946a76554a..d281c4c20616a 100644 --- a/clang/lib/CodeGen/CGExprComplex.cpp +++ b/clang/lib/CodeGen/CGExprComplex.cpp @@ -1283,7 +1283,7 @@ EmitCompoundAssignLValue(const CompoundAssignOperator *E, else OpInfo.LHS = EmitComplexToComplexCast(LHSVal, LHSTy, OpInfo.Ty, Loc); } else { - llvm::Value *LHSVal = CGF.EmitLoadOfScalar(LHS, Loc); + llvm::Value *LHSVal = CGF.EmitLoadOfLValue(LHS, Loc).getScalarVal(); // For floating point real operands we can directly pass the scalar form // to the binary operator emission and potentially get more efficient code. if (LHSTy->isRealFloatingType()) { @@ -1318,7 +1318,7 @@ EmitCompoundAssignLValue(const CompoundAssignOperator *E, } else { llvm::Value *ResVal = CGF.EmitComplexToScalarConversion(Result, OpInfo.Ty, LHSTy, Loc); - CGF.EmitStoreOfScalar(ResVal, LHS, /*isInit*/ false); + CGF.EmitStoreThroughLValue(RValue::get(ResVal), LHS, /*isInit*/ false); Val = RValue::get(ResVal); } diff --git a/clang/lib/CodeGen/CGValue.h b/clang/lib/CodeGen/CGValue.h index c4ec8d207d2e3..6b381b59e71cd 100644 --- a/clang/lib/CodeGen/CGValue.h +++ b/clang/lib/CodeGen/CGValue.h @@ -64,6 +64,7 @@ class RValue { bool isScalar() const { return Flavor == Scalar; } bool isComplex() const { return Flavor == Complex; } bool isAggregate() const { return Flavor == Aggregate; } + bool isIgnored() const { return isScalar() && !getScalarVal(); } bool isVolatileQualified() const { return IsVolatile; } diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index b11c204060e5b..b449933bcc72e 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1512,7 +1512,7 @@ static bool checkBuiltinInferAllocToken(Sema &S, CallExpr *TheCall) { return S.Diag(Arg->getBeginLoc(), diag::err_param_with_void_type); } - TheCall->setType(S.Context.UnsignedLongLongTy); + TheCall->setType(S.Context.getSizeType()); return false; } diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index e7ee3b1adf941..c5666941fd36a 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -3058,54 +3058,29 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { break; } case Builtin::BI__builtin_hlsl_resource_uninitializedhandle: { - if (SemaRef.checkArgCount(TheCall, 1) || - CheckResourceHandle(&SemaRef, TheCall, 0)) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 1 && "expected 1 arg"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_handlefrombinding: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 6) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.IntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(4), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(5), - AST.getPointerType(AST.CharTy.withConst()))) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 6 && "expected 6 args"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_handlefromimplicitbinding: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 6) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.IntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(4), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(5), - AST.getPointerType(AST.CharTy.withConst()))) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 6 && "expected 6 args"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_counterhandlefromimplicitbinding: { + assert(TheCall->getNumArgs() == 3 && "expected 3 args"); ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 3) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy)) - return true; - QualType MainHandleTy = TheCall->getArg(0)->getType(); auto *MainResType = MainHandleTy->getAs(); auto MainAttrs = MainResType->getAttrs(); @@ -3114,27 +3089,11 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { QualType CounterHandleTy = AST.getHLSLAttributedResourceType( MainResType->getWrappedType(), MainResType->getContainedType(), MainAttrs); + // Update return type to be the attributed resource type from arg0 + // with added IsCounter flag. TheCall->setType(CounterHandleTy); break; } - case Builtin::BI__builtin_hlsl_resource_getdimensions_x: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckModifiableLValue(&SemaRef, TheCall, 1)) - return true; - break; - } - case Builtin::BI__builtin_hlsl_resource_getstride: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckModifiableLValue(&SemaRef, TheCall, 1)) - return true; - break; - } case Builtin::BI__builtin_hlsl_and: case Builtin::BI__builtin_hlsl_or: { if (SemaRef.checkArgCount(TheCall, 2)) @@ -3434,14 +3393,12 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { break; } case Builtin::BI__builtin_hlsl_buffer_update_counter: { + assert(TheCall->getNumArgs() == 2 && "expected 2 args"); auto checkResTy = [](const HLSLAttributedResourceType *ResTy) -> bool { return !(ResTy->getAttrs().ResourceClass == ResourceClass::UAV && ResTy->getAttrs().RawBuffer && ResTy->hasContainedType()); }; - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0, checkResTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), - SemaRef.getASTContext().IntTy)) + if (CheckResourceHandle(&SemaRef, TheCall, 0, checkResTy)) return true; Expr *OffsetExpr = TheCall->getArg(1); std::optional Offset = diff --git a/clang/lib/Sema/SemaOpenACCClause.cpp b/clang/lib/Sema/SemaOpenACCClause.cpp index 17078e8814a43..8091d91c66464 100644 --- a/clang/lib/Sema/SemaOpenACCClause.cpp +++ b/clang/lib/Sema/SemaOpenACCClause.cpp @@ -1891,13 +1891,6 @@ SemaOpenACC::ActOnClause(ArrayRef ExistingClauses, if (DiagnoseAllowedClauses(Clause.getDirectiveKind(), Clause.getClauseKind(), Clause.getBeginLoc())) return nullptr; - //// Diagnose that we don't support this clause on this directive. - // if (!doesClauseApplyToDirective(Clause.getDirectiveKind(), - // Clause.getClauseKind())) { - // Diag(Clause.getBeginLoc(), diag::err_acc_clause_appertainment) - // << Clause.getDirectiveKind() << Clause.getClauseKind(); - // return nullptr; - // } if (const auto *DevTypeClause = llvm::find_if( ExistingClauses, llvm::IsaPred); @@ -2256,13 +2249,23 @@ SemaOpenACC::CheckLinkClauseVarList(ArrayRef VarExprs) { continue; } + Expr *OrigExpr = VarExpr; + + while (isa(VarExpr)) { + if (auto *ASE = dyn_cast(VarExpr)) + VarExpr = ASE->getBase()->IgnoreParenImpCasts(); + else + VarExpr = + cast(VarExpr)->getBase()->IgnoreParenImpCasts(); + } + const auto *DRE = cast(VarExpr); const VarDecl *Var = dyn_cast(DRE->getDecl()); if (!Var || !Var->hasExternalStorage()) Diag(VarExpr->getBeginLoc(), diag::err_acc_link_not_extern); else - NewVarList.push_back(VarExpr); + NewVarList.push_back(OrigExpr); } return NewVarList; diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 6d011239ec813..897907e0f2b6a 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1826,20 +1826,34 @@ TryImplicitConversion(Sema &S, Expr *From, QualType ToType, return ICS; } - if (S.getLangOpts().HLSL && ToType->isHLSLAttributedResourceType() && - FromType->isHLSLAttributedResourceType()) { - auto *ToResType = cast(ToType); - auto *FromResType = cast(FromType); - if (S.Context.hasSameUnqualifiedType(ToResType->getWrappedType(), - FromResType->getWrappedType()) && - S.Context.hasSameUnqualifiedType(ToResType->getContainedType(), - FromResType->getContainedType()) && - ToResType->getAttrs() == FromResType->getAttrs()) { - ICS.setStandard(); - ICS.Standard.setAsIdentityConversion(); - ICS.Standard.setFromType(FromType); - ICS.Standard.setAllToTypes(ToType); - return ICS; + if (S.getLangOpts().HLSL) { + // Handle conversion of the HLSL resource types. + const Type *FromTy = FromType->getUnqualifiedDesugaredType(); + if (FromTy->isHLSLAttributedResourceType()) { + // Attributed resource types can convert to other attributed + // resource types with the same attributes and contained types, + // or to __hlsl_resource_t without any attributes. + bool CanConvert = false; + const Type *ToTy = ToType->getUnqualifiedDesugaredType(); + if (ToTy->isHLSLAttributedResourceType()) { + auto *ToResType = cast(ToTy); + auto *FromResType = cast(FromTy); + if (S.Context.hasSameUnqualifiedType(ToResType->getWrappedType(), + FromResType->getWrappedType()) && + S.Context.hasSameUnqualifiedType(ToResType->getContainedType(), + FromResType->getContainedType()) && + ToResType->getAttrs() == FromResType->getAttrs()) + CanConvert = true; + } else if (ToTy->isHLSLResourceType()) { + CanConvert = true; + } + if (CanConvert) { + ICS.setStandard(); + ICS.Standard.setAsIdentityConversion(); + ICS.Standard.setFromType(FromType); + ICS.Standard.setAllToTypes(ToType); + return ICS; + } } } diff --git a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl index 61d5e5ab44c97..2713cc19ea2be 100644 --- a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl @@ -50,8 +50,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -97,8 +97,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -127,8 +127,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -149,8 +149,8 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'dim' 'unsigned int &__restrict' diff --git a/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl b/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl index 7a8c57c59643d..538eb5256f8d5 100644 --- a/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl @@ -97,8 +97,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -154,8 +154,8 @@ RESOURCE Buffer; // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -182,8 +182,8 @@ RESOURCE Buffer; // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -209,8 +209,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -222,8 +222,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int' @@ -246,8 +246,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -259,8 +259,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int' @@ -332,8 +332,8 @@ RESOURCE Buffer; // CHECK-COUNTER-NEXT: CompoundStmt // CHECK-COUNTER-NEXT: ReturnStmt // CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} -// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -348,8 +348,8 @@ RESOURCE Buffer; // CHECK-COUNTER-NEXT: CompoundStmt // CHECK-COUNTER-NEXT: ReturnStmt // CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} -// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -374,8 +374,8 @@ RESOURCE Buffer; // CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle // CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-APPEND-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} -// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -399,8 +399,8 @@ RESOURCE Buffer; // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle // CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-CONSUME-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} -// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -417,14 +417,14 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'numStructs' 'unsigned int &__restrict' // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'stride' 'unsigned int &__restrict' diff --git a/clang/test/AST/HLSL/TypedBuffers-AST.hlsl b/clang/test/AST/HLSL/TypedBuffers-AST.hlsl index 14e274d3855ed..4b66faa79662a 100644 --- a/clang/test/AST/HLSL/TypedBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/TypedBuffers-AST.hlsl @@ -72,8 +72,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -119,8 +119,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -147,8 +147,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -221,8 +221,8 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'dim' 'unsigned int &__restrict' diff --git a/clang/test/CIR/CodeGen/X86/sse-builtins.c b/clang/test/CIR/CodeGen/X86/sse-builtins.c index 3a61018741958..04e69a9990159 100644 --- a/clang/test/CIR/CodeGen/X86/sse-builtins.c +++ b/clang/test/CIR/CodeGen/X86/sse-builtins.c @@ -16,6 +16,35 @@ #include +void test_mm_setcsr(unsigned int A) { + // CIR-LABEL: test_mm_setcsr + // CIR: cir.store {{.*}}, {{.*}} : !u32i + // CIR: cir.call_llvm_intrinsic "x86.sse.ldmxcsr" {{.*}} : (!cir.ptr) -> !void + + // LLVM-LABEL: test_mm_setcsr + // LLVM: store i32 + // LLVM: call void @llvm.x86.sse.ldmxcsr(ptr {{.*}}) + + // OGCG-LABEL: test_mm_setcsr + // OGCG: store i32 + // OGCG: call void @llvm.x86.sse.ldmxcsr(ptr {{.*}}) + _mm_setcsr(A); +} + +unsigned int test_mm_getcsr(void) { + // CIR-LABEL: test_mm_getcsr + // CIR: cir.call_llvm_intrinsic "x86.sse.stmxcsr" %{{.*}} : (!cir.ptr) -> !void + // CIR: cir.load {{.*}} : !cir.ptr, !u32i + + // LLVM-LABEL: test_mm_getcsr + // LLVM: call void @llvm.x86.sse.stmxcsr(ptr %{{.*}}) + // LLVM: load i32 + + // OGCG-LABEL: test_mm_getcsr + // OGCG: call void @llvm.x86.sse.stmxcsr(ptr %{{.*}}) + // OGCG: load i32 + return _mm_getcsr(); +} void test_mm_sfence(void) { // CIR-LABEL: test_mm_sfence diff --git a/clang/test/CIR/CodeGen/builtin-isfpclass.c b/clang/test/CIR/CodeGen/builtin-isfpclass.c new file mode 100644 index 0000000000000..16d82c905f445 --- /dev/null +++ b/clang/test/CIR/CodeGen/builtin-isfpclass.c @@ -0,0 +1,174 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=LLVM +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=OGCG +int finite(double); + +// CHECK: cir.func {{.*}}@test_is_finite +void test_is_finite(__fp16 *H, float F, double D, long double LD) { + volatile int res; + res = __builtin_isinf(*H); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 516) + + res = __builtin_isinf(F); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 516) + + res = __builtin_isinf(D); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.double) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 516) + + res = __builtin_isinf(LD); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.long_double) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f80(x86_fp80 {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f80(x86_fp80 {{.*}}, i32 516) + + res = __builtin_isfinite(*H); + // CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 504) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 504) + + res = __builtin_isfinite(F); + // CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + + res = finite(D); + // CIR: cir.call @finite(%{{.*}}) nothrow side_effect(const) : (!cir.double) -> !s32i + // LLVM: call i32 @finite(double {{.*}}) + // OGCG: call i1 @llvm.is.fpclass.f64(double %20, i32 504) + res = __builtin_isnormal(*H); + // CIR: cir.is_fp_class %{{.*}}, fcNormal : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 264) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 264) + + res = __builtin_isnormal(F); + // CIR: cir.is_fp_class %{{.*}}, fcNormal : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 264) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 264) + + res = __builtin_issubnormal(F); + // CIR: cir.is_fp_class %{{.*}}, fcSubnormal : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 144) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 144) + res = __builtin_iszero(F); + // CIR: cir.is_fp_class %{{.*}}, fcZero : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 96) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 96) + res = __builtin_issignaling(F); + // CIR: cir.is_fp_class %{{.*}}, fcSNan : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 1) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 1) +} + +_Bool check_isfpclass_finite(float x) { + return __builtin_isfpclass(x, 504 /*Finite*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_finite +// CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.float) +// LLVM: @check_isfpclass_finite +// LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) +// OGCG: @check_isfpclass_finite +// OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + +_Bool check_isfpclass_nan_f32(float x) { + return __builtin_isfpclass(x, 3 /*NaN*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_nan_f32 +// CIR: cir.is_fp_class %{{.*}}, fcNan : (!cir.float) +// LLVM: @check_isfpclass_nan_f32 +// LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 3) +// OGCG: @check_isfpclass_nan_f32 +// OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 3) + + +_Bool check_isfpclass_snan_f64(double x) { + return __builtin_isfpclass(x, 1 /*SNaN*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_snan_f64 +// CIR: cir.is_fp_class %{{.*}}, fcSNan : (!cir.double) +// LLVM: @check_isfpclass_snan_f64 +// LLVM: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 1) +// OGCG: @check_isfpclass_snan_f64 +// OGCG: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 1) + + +_Bool check_isfpclass_zero_f16(_Float16 x) { + return __builtin_isfpclass(x, 96 /*Zero*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_zero_f16 +// CIR: cir.is_fp_class %{{.*}}, fcZero : (!cir.f16) +// LLVM: @check_isfpclass_zero_f16 +// LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 96) +// OGCG: @check_isfpclass_zero_f16 +// OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 96) + +// Update when we support FP pragma in functions and can convert BoolType in prvalue to i1. + +// _Bool check_isfpclass_finite_strict(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 504 /*Finite*/); +// } +// +// _Bool check_isfpclass_nan_f32_strict(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// _Bool check_isfpclass_snan_f64_strict(double x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 1 /*NaN*/); +// } +// +// _Bool check_isfpclass_zero_f16_strict(_Float16 x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 96 /*Zero*/); +// } +// +// _Bool check_isnan(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isnan(x); +// } +// +// _Bool check_isinf(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isinf(x); +// } +// +// _Bool check_isfinite(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfinite(x); +// } +// +// _Bool check_isnormal(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isnormal(x); +// } +// +// typedef float __attribute__((ext_vector_type(4))) float4; +// typedef double __attribute__((ext_vector_type(4))) double4; +// typedef int __attribute__((ext_vector_type(4))) int4; +// typedef long __attribute__((ext_vector_type(4))) long4; +// +// int4 check_isfpclass_nan_v4f32(float4 x) { +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// int4 check_isfpclass_nan_strict_v4f32(float4 x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// long4 check_isfpclass_nan_v4f64(double4 x) { +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } diff --git a/clang/test/CIR/CodeGen/coro-task.cpp b/clang/test/CIR/CodeGen/coro-task.cpp index 5738c815909ea..01e0786fbda71 100644 --- a/clang/test/CIR/CodeGen/coro-task.cpp +++ b/clang/test/CIR/CodeGen/coro-task.cpp @@ -111,6 +111,8 @@ co_invoke_fn co_invoke; // CIR-DAG: ![[VoidPromisse:.*]] = !cir.record::promise_type" padded {!u8i}> // CIR-DAG: ![[IntPromisse:.*]] = !cir.record::promise_type" padded {!u8i}> // CIR-DAG: ![[StdString:.*]] = !cir.record +// CIR-DAG: ![[SuspendAlways:.*]] = !cir.record + // CIR: module {{.*}} { // CIR-NEXT: cir.global external @_ZN5folly4coro9co_invokeE = #cir.zero : !rec_folly3A3Acoro3A3Aco_invoke_fn @@ -153,6 +155,33 @@ VoidTask silly_task() { // CIR: %[[RetObj:.*]] = cir.call @_ZN5folly4coro4TaskIvE12promise_type17get_return_objectEv(%[[VoidPromisseAddr]]) nothrow : {{.*}} -> ![[VoidTask]] // CIR: cir.store{{.*}} %[[RetObj]], %[[VoidTaskAddr]] : ![[VoidTask]] +// Start a new scope for the actual codegen for co_await, create temporary allocas for +// holding coroutine handle and the suspend_always struct. + +// CIR: cir.scope { +// CIR: %[[SuspendAlwaysAddr:.*]] = cir.alloca ![[SuspendAlways]], {{.*}} ["ref.tmp0"] {alignment = 1 : i64} + +// Effectively execute `coawait promise_type::initial_suspend()` by calling initial_suspend() and getting +// the suspend_always struct to use for cir.await. Note that we return by-value since we defer ABI lowering +// to later passes, same is done elsewhere. + +// CIR: %[[Tmp0:.*]] = cir.call @_ZN5folly4coro4TaskIvE12promise_type15initial_suspendEv(%[[VoidPromisseAddr]]) +// CIR: cir.store{{.*}} %[[Tmp0:.*]], %[[SuspendAlwaysAddr]] + +// +// Here we start mapping co_await to cir.await. +// + +// First regions `ready` has a special cir.yield code to veto suspension. + +// CIR: cir.await(init, ready : { +// CIR: cir.condition({{.*}}) +// CIR: }, suspend : { +// CIR: cir.yield +// CIR: }, resume : { +// CIR: cir.yield +// CIR: },) +// CIR: } folly::coro::Task byRef(const std::string& s) { co_return s.size(); @@ -172,3 +201,13 @@ folly::coro::Task byRef(const std::string& s) { // CIR: cir.store {{.*}} %[[LOAD]], %[[AllocaFnUse]] : !cir.ptr, !cir.ptr> // CIR: %[[RetObj:.*]] = cir.call @_ZN5folly4coro4TaskIiE12promise_type17get_return_objectEv(%4) nothrow : {{.*}} -> ![[IntTask]] // CIR: cir.store {{.*}} %[[RetObj]], %[[IntTaskAddr]] : ![[IntTask]] +// CIR: cir.scope { +// CIR: %[[SuspendAlwaysAddr:.*]] = cir.alloca ![[SuspendAlways]], {{.*}} ["ref.tmp0"] {alignment = 1 : i64} +// CIR: %[[Tmp0:.*]] = cir.call @_ZN5folly4coro4TaskIiE12promise_type15initial_suspendEv(%[[IntPromisseAddr]]) +// CIR: cir.await(init, ready : { +// CIR: cir.condition({{.*}}) +// CIR: }, suspend : { +// CIR: cir.yield +// CIR: }, resume : { +// CIR: cir.yield +// CIR: },) diff --git a/clang/test/CIR/CodeGen/ctor-null-init.cpp b/clang/test/CIR/CodeGen/ctor-null-init.cpp index 4324b329c8b41..6f31a46305ae8 100644 --- a/clang/test/CIR/CodeGen/ctor-null-init.cpp +++ b/clang/test/CIR/CodeGen/ctor-null-init.cpp @@ -29,3 +29,63 @@ void test_empty_base_null_init() { // OGCG-NEXT: entry: // OGCG-NEXT: %[[B:.*]] = alloca %struct.B // OGCG-NEXT: ret void + + +struct C { + int c; + C() = default; + C(int); // This constructor triggers the null base class initialization. +}; + +struct D : C { +}; + +void test_non_empty_base_null_init() { + D{}; +} + +// CIR: cir.func {{.*}} @_Z29test_non_empty_base_null_initv() +// CIR: %[[TMP:.*]] = cir.alloca !rec_D, !cir.ptr, ["agg.tmp.ensured"] +// CIR: %[[BASE:.*]] = cir.base_class_addr %[[TMP]] : !cir.ptr nonnull [0] -> !cir.ptr +// CIR: %[[ZERO:.*]] = cir.const #cir.const_record<{#cir.int<0> : !s32i}> : !rec_C +// CIR: cir.store{{.*}} %[[ZERO]], %[[BASE]] + +// LLVM: define{{.*}} void @_Z29test_non_empty_base_null_initv() +// LLVM: %[[TMP:.*]] = alloca %struct.D +// LLVM: store %struct.C zeroinitializer, ptr %[[TMP]] + +// OGCG: define {{.*}} void @_Z29test_non_empty_base_null_initv() +// OGCG: %[[TMP:.*]] = alloca %struct.D +// OGCG: %[[BASE:.*]] = getelementptr inbounds i8, ptr %[[TMP]], i64 0 +// OGCG: call void @llvm.memset.p0.i64(ptr{{.*}} %[[BASE]], i8 0, i64 4, i1 false) + +struct E { + int e; +}; + +struct F : E { + F() = default; + F(int); +}; + +struct G : F { +}; + +void test_base_chain_null_init() { + G{}; +} + +// CIR: cir.func {{.*}} @_Z25test_base_chain_null_initv() +// CIR: %[[TMP:.*]] = cir.alloca !rec_G, !cir.ptr, ["agg.tmp.ensured"] +// CIR: %[[BASE:.*]] = cir.base_class_addr %[[TMP]] : !cir.ptr nonnull [0] -> !cir.ptr +// CIR: %[[ZERO:.*]] = cir.const #cir.const_record<{#cir.zero : !rec_E}> : !rec_F +// CIR: cir.store{{.*}} %[[ZERO]], %[[BASE]] + +// LLVM: define{{.*}} void @_Z25test_base_chain_null_initv() +// LLVM: %[[TMP:.*]] = alloca %struct.G +// LLVM: store %struct.F zeroinitializer, ptr %[[TMP]] + +// OGCG: define {{.*}} void @_Z25test_base_chain_null_initv() +// OGCG: %[[TMP:.*]] = alloca %struct.G +// OGCG: %[[BASE:.*]] = getelementptr inbounds i8, ptr %[[TMP]], i64 0 +// OGCG: call void @llvm.memset.p0.i64(ptr{{.*}} %[[BASE]], i8 0, i64 4, i1 false) diff --git a/clang/test/CIR/CodeGen/defaultarg.cpp b/clang/test/CIR/CodeGen/defaultarg.cpp index 807230bd003f5..29c929ccd7838 100644 --- a/clang/test/CIR/CodeGen/defaultarg.cpp +++ b/clang/test/CIR/CodeGen/defaultarg.cpp @@ -30,3 +30,25 @@ void foo() { // OGCG: %[[TMP0:.*]] = alloca i32 // OGCG: store i32 42, ptr %[[TMP0]] // OGCG: call void @_Z3barRKi(ptr {{.*}} %[[TMP0]]) + +struct S +{ + S(int n = 2); +}; + +void test_ctor_defaultarg() { + S s; +} + +// CIR: cir.func {{.*}} @_Z20test_ctor_defaultargv() +// CIR: %[[S:.*]] = cir.alloca !rec_S, !cir.ptr, ["s", init] +// CIR: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i +// CIR: cir.call @_ZN1SC1Ei(%[[S]], %[[TWO]]) : (!cir.ptr, !s32i) -> () + +// LLVM: define{{.*}} @_Z20test_ctor_defaultargv() +// LLVM: %[[S:.*]] = alloca %struct.S +// LLVM: call void @_ZN1SC1Ei(ptr %[[S]], i32 2) + +// OGCG: define{{.*}} @_Z20test_ctor_defaultargv() +// OGCG: %[[S:.*]] = alloca %struct.S +// OGCG: call void @_ZN1SC1Ei(ptr{{.*}} %[[S]], i32 {{.*}} 2) diff --git a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp index 8bdffb41d1890..145c04268805f 100644 --- a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp +++ b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp @@ -23,6 +23,7 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[CMP:.*]] = cir.cmp(ne, %[[X_LOAD]], %[[V_LOAD]]) : !s32i, !cir.bool // CHECK-NEXT: %[[IF_COND_CAST:.*]] = builtin.unrealized_conversion_cast %[[CMP:.*]] : !cir.bool to i1 // CHECK-NEXT: acc.atomic.capture if(%[[IF_COND_CAST]]) { + // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: acc.atomic.update %[[X_ALLOCA]] : !cir.ptr { // CHECK-NEXT: ^bb0(%[[X_VAR:.*]]: !s32i{{.*}}): // CHECK-NEXT: %[[X_VAR_ALLOC:.*]] = cir.alloca !s32i, !cir.ptr, ["x_var", init] @@ -35,7 +36,6 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[X_VAR_LOAD:.*]] = cir.load{{.*}} %[[X_VAR_ALLOC]] : !cir.ptr, !s32i // CHECK-NEXT: acc.yield %[[X_VAR_LOAD]] : !s32i // CHECK-NEXT: } - // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: } #pragma acc atomic capture if (x != v) v = x++; @@ -59,6 +59,7 @@ void use(int x, int v, float f, HasOps ops) { v = ++x; // CHECK-NEXT: acc.atomic.capture { + // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: acc.atomic.update %[[X_ALLOCA]] : !cir.ptr { // CHECK-NEXT: ^bb0(%[[X_VAR:.*]]: !s32i{{.*}}): // CHECK-NEXT: %[[X_VAR_ALLOC:.*]] = cir.alloca !s32i, !cir.ptr, ["x_var", init] @@ -71,7 +72,6 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[X_VAR_LOAD:.*]] = cir.load{{.*}} %[[X_VAR_ALLOC]] : !cir.ptr, !s32i // CHECK-NEXT: acc.yield %[[X_VAR_LOAD]] : !s32i // CHECK-NEXT: } - // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: } #pragma acc atomic capture v = x--; diff --git a/clang/test/CIR/IR/await.cir b/clang/test/CIR/IR/await.cir new file mode 100644 index 0000000000000..c1fb0d6d7c57c --- /dev/null +++ b/clang/test/CIR/IR/await.cir @@ -0,0 +1,21 @@ +// RUN: cir-opt %s --verify-roundtrip | FileCheck %s + +cir.func coroutine @checkPrintParse(%arg0 : !cir.bool) { + cir.await(user, ready : { + cir.condition(%arg0) + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) + cir.return +} + +// CHECK: cir.func coroutine @checkPrintParse +// CHECK: cir.await(user, ready : { +// CHECK: cir.condition(%arg0) +// CHECK: }, suspend : { +// CHECK: cir.yield +// CHECK: }, resume : { +// CHECK: cir.yield +// CHECK: },) diff --git a/clang/test/CIR/IR/func.cir b/clang/test/CIR/IR/func.cir index 6e91898a3b452..4e79149315a9d 100644 --- a/clang/test/CIR/IR/func.cir +++ b/clang/test/CIR/IR/func.cir @@ -101,6 +101,15 @@ cir.func @ullfunc() -> !u64i { // CHECK: } cir.func coroutine @coro() { + cir.await(init, ready : { + %0 = cir.alloca !cir.bool, !cir.ptr, [""] {alignment = 1 : i64} + %1 = cir.load align(1) %0 : !cir.ptr, !cir.bool + cir.condition(%1) + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) cir.return } // CHECK: cir.func{{.*}} coroutine @coro() diff --git a/clang/test/CIR/IR/invalid-await.cir b/clang/test/CIR/IR/invalid-await.cir new file mode 100644 index 0000000000000..5f422ca7e954e --- /dev/null +++ b/clang/test/CIR/IR/invalid-await.cir @@ -0,0 +1,19 @@ +// RUN: cir-opt %s -verify-diagnostics -split-input-file +cir.func coroutine @bad_task() { // expected-error {{coroutine body must use at least one cir.await op}} + cir.return +} + +// ----- + +cir.func coroutine @missing_condition() { + cir.scope { + cir.await(user, ready : { // expected-error {{ready region must end with cir.condition}} + cir.yield + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) + } + cir.return +} diff --git a/clang/test/CodeGen/complex-compound-assign-bitfield.c b/clang/test/CodeGen/complex-compound-assign-bitfield.c new file mode 100644 index 0000000000000..e705bff22e67d --- /dev/null +++ b/clang/test/CodeGen/complex-compound-assign-bitfield.c @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -std=c23 -emit-llvm -o - | FileCheck %s + +struct Bits { + int pad1: 30; + bool b: 1; + int pad2: 1; +}; + +int main(void) { +// CHECK-LABEL: define dso_local i32 @main() #0 { + struct Bits x; + x.b += __builtin_complex(-1.0f, 0.0f); +// CHECK: %bf.load = load i32, ptr %x, align 4 +// CHECK-NEXT: %bf.lshr = lshr i32 %bf.load, 30 +// CHECK-NEXT: %bf.clear = and i32 %bf.lshr, 1 +// CHECK-NEXT: %bf.cast = trunc i32 %bf.clear to i1 +// CHECK-NEXT: %conv = uitofp i1 %bf.cast to float + +// CHECK: %0 = zext i1 %tobool1 to i32 +// CHECK-NEXT: %bf.load2 = load i32, ptr %x, align 4 +// CHECK-NEXT: %bf.shl = shl i32 %0, 30 +// CHECK-NEXT: %bf.clear3 = and i32 %bf.load2, -1073741825 +// CHECK-NEXT: %bf.set = or i32 %bf.clear3, %bf.shl +// CHECK-NEXT: store i32 %bf.set, ptr %x, align 4 +} diff --git a/clang/test/DebugInfo/CXX/simple-template-names.cpp b/clang/test/DebugInfo/CXX/simple-template-names.cpp index 5a5d706e81972..3c8ff2780b66a 100644 --- a/clang/test/DebugInfo/CXX/simple-template-names.cpp +++ b/clang/test/DebugInfo/CXX/simple-template-names.cpp @@ -114,12 +114,28 @@ void f() { f3(); // CHECK: !DISubprogram(name: "_STN|f3|", - + f1<_BitInt(3)>(); - // CHECK: !DISubprogram(name: "f1<_BitInt(3)>", + // CHECK: !DISubprogram(name: "_STN|f1|<_BitInt(3)>", f1(); - // CHECK: !DISubprogram(name: "f1", + // CHECK: !DISubprogram(name: "_STN|f1|", + + f1<_BitInt(120)>(); + // CHECK: !DISubprogram(name: "_STN|f1|<_BitInt(120)>", + + f1(); + // CHECK: !DISubprogram(name: "_STN|f1|", + + f2<_BitInt(2), 1>(); + // CHECK: !DISubprogram(name: "_STN|f2|<_BitInt(2), (_BitInt(2))1>", + + f2<_BitInt(64), 12>(); + // CHECK: !DISubprogram(name: "_STN|f2|<_BitInt(64), (_BitInt(64))12>", + + // FIXME: make block forms reconstitutable + f2<_BitInt(65), 1>(); +// CHECK: !DISubprogram(name: "f2<_BitInt(65), (_BitInt(65))1>", // Add a parameter just so this differs from other attributed function types // that don't mangle differently. diff --git a/clang/test/Driver/crash-ir-repro.cpp b/clang/test/Driver/crash-ir-repro.cpp index 1f31a5ca1bb34..fd97e6f0cce11 100644 --- a/clang/test/Driver/crash-ir-repro.cpp +++ b/clang/test/Driver/crash-ir-repro.cpp @@ -1,9 +1,8 @@ // RUN: %clang -S -emit-llvm -o %t.ll %s -// RUN: not %clang -S -DCRASH %s %t.ll 2>&1 | FileCheck %s +// RUN: not %clang -S -DCRASH %s -o %t.ll 2>&1 | FileCheck %s // CHECK: Preprocessed source(s) and associated run script(s) are located at: // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.cpp -// CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.ll // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.sh #ifdef CRASH diff --git a/clang/test/SemaCXX/alloc-token.cpp b/clang/test/SemaCXX/alloc-token.cpp index 518ad7d94eb96..2a11e3366d5fb 100644 --- a/clang/test/SemaCXX/alloc-token.cpp +++ b/clang/test/SemaCXX/alloc-token.cpp @@ -3,6 +3,8 @@ // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -fexperimental-new-constant-interpreter // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -falloc-token-mode=typehash -DMODE_TYPEHASH // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 +// RUN: %clang_cc1 -triple arm-linux-androideabi -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 +// RUN: %clang_cc1 -triple arm-linux-androideabi -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 -fexperimental-new-constant-interpreter #if !__has_builtin(__builtin_infer_alloc_token) #error "missing __builtin_infer_alloc_token" diff --git a/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl index 4aa3ac183d3b1..faac8f07b240a 100644 --- a/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl +++ b/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl @@ -16,7 +16,7 @@ void test_args(int x, bool b) { // expected-error@+1 {{too many arguments to function call, expected 2, have 3}} __builtin_hlsl_buffer_update_counter(x, x, x); - // expected-error@+1 {{used type 'int' where __hlsl_resource_t is required}} + // expected-error@+1 {{cannot initialize a parameter of type '__hlsl_resource_t' with an lvalue of type 'int'}} __builtin_hlsl_buffer_update_counter(x, x); bad_handle_not_raw_t bad1; @@ -37,7 +37,7 @@ void test_args(int x, bool b) { // expected-error@+1 {{argument 1 must be constant integer 1 or -1}} __builtin_hlsl_buffer_update_counter(res, x); - // expected-error@+1 {{passing 'const char *' to parameter of incompatible type 'int'}} + // expected-error@+1 {{cannot initialize a parameter of type 'int' with an lvalue of type 'const char[2]'}} __builtin_hlsl_buffer_update_counter(res, "1"); // expected-error@+1 {{argument 1 must be constant integer 1 or -1}} diff --git a/clang/test/SemaOpenACC/declare-construct-ast.cpp b/clang/test/SemaOpenACC/declare-construct-ast.cpp index 54b40ff6e93de..e39a436f5624b 100644 --- a/clang/test/SemaOpenACC/declare-construct-ast.cpp +++ b/clang/test/SemaOpenACC/declare-construct-ast.cpp @@ -49,6 +49,12 @@ int GlobalArray3[5]; // CHECK-NEXT: DeclRefExpr{{.*}}'Global3' 'int' // CHECK-NEXT: device_resident clause // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray3' 'int[5]' +int GlobalArray4[5]; +// CHECK-NEXT: VarDecl{{.*}}GlobalArray4 'int[5]' +#pragma acc declare link(GlobalArray4[1:1]) +// CHECK-NEXT: OpenACCDeclareDecl +// CHECK-NEXT: link clause +// CHECK-NEXT: ArraySectionExpr namespace NS { int NSVar; diff --git a/clang/test/SemaOpenACC/declare-construct.cpp b/clang/test/SemaOpenACC/declare-construct.cpp index 6828ecdf9ebc1..c2ac72122ee74 100644 --- a/clang/test/SemaOpenACC/declare-construct.cpp +++ b/clang/test/SemaOpenACC/declare-construct.cpp @@ -308,6 +308,13 @@ struct Struct2 { // expected-error@+2{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} // expected-error@+1{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} #pragma acc declare link(I, Local, ExternLocal) + + int Local2[5]; + int Local3[5]; + // expected-error@+3{{OpenACC variable on 'declare' construct is not a valid variable name or array name}} + // expected-warning@+2{{sub-array as a variable on 'declare' construct is not a valid variable name or array name}} + // expected-error@+1{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} +#pragma acc declare link(Local2[1], Local3[1:1]) } }; diff --git a/clang/utils/TableGen/ClangBuiltinsEmitter.cpp b/clang/utils/TableGen/ClangBuiltinsEmitter.cpp index 352765acf5338..9b6dd37c7a4a9 100644 --- a/clang/utils/TableGen/ClangBuiltinsEmitter.cpp +++ b/clang/utils/TableGen/ClangBuiltinsEmitter.cpp @@ -330,6 +330,7 @@ class PrototypeParser { .Case("__builtin_va_list", "a") .Case("__float128", "LLd") .Case("__fp16", "h") + .Case("__hlsl_resource_t", "Qr") .Case("__int128_t", "LLLi") .Case("_Float16", "x") .Case("__bf16", "y") diff --git a/compiler-rt/include/sanitizer/common_interface_defs.h b/compiler-rt/include/sanitizer/common_interface_defs.h index 57313f9bc80e6..51104093758cd 100644 --- a/compiler-rt/include/sanitizer/common_interface_defs.h +++ b/compiler-rt/include/sanitizer/common_interface_defs.h @@ -156,8 +156,15 @@ int SANITIZER_CDECL __sanitizer_acquire_crash_state(); /// \param end End of memory region. /// \param old_mid Old middle of memory region. /// \param new_mid New middle of memory region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void SANITIZER_CDECL +__sanitizer_annotate_contiguous_container(const void *beg, const void *end, + const void *old_mid, + const void *new_mid) {} +#else void SANITIZER_CDECL __sanitizer_annotate_contiguous_container( const void *beg, const void *end, const void *old_mid, const void *new_mid); +#endif /// Similar to __sanitizer_annotate_contiguous_container. /// @@ -188,10 +195,18 @@ void SANITIZER_CDECL __sanitizer_annotate_contiguous_container( /// \param old_container_end End of used region. /// \param new_container_beg New beginning of used region. /// \param new_container_end New end of used region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void + SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( + const void *storage_beg, const void *storage_end, + const void *old_container_beg, const void *old_container_end, + const void *new_container_beg, const void *new_container_end) {} +#else void SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( const void *storage_beg, const void *storage_end, const void *old_container_beg, const void *old_container_end, const void *new_container_beg, const void *new_container_end); +#endif /// Copies memory annotations from a source storage region to a destination /// storage region. After the operation, the destination region has the same @@ -226,9 +241,17 @@ void SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( /// \param src_end End of the source container region. /// \param dst_begin Begin of the destination container region. /// \param dst_end End of the destination container region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void SANITIZER_CDECL +__sanitizer_copy_contiguous_container_annotations(const void *src_begin, + const void *src_end, + const void *dst_begin, + const void *dst_end) {} +#else void SANITIZER_CDECL __sanitizer_copy_contiguous_container_annotations( const void *src_begin, const void *src_end, const void *dst_begin, const void *dst_end); +#endif /// Returns true if the contiguous container [beg, end) is properly /// poisoned. @@ -246,9 +269,16 @@ void SANITIZER_CDECL __sanitizer_copy_contiguous_container_annotations( /// /// \returns True if the contiguous container [beg, end) is properly /// poisoned. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline int + SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, + const void *mid, + const void *end) {} +#else int SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, const void *mid, const void *end); +#endif /// Returns true if the double ended contiguous /// container [storage_beg, storage_end) is properly poisoned. @@ -271,9 +301,17 @@ int SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, /// \returns True if the double-ended contiguous container [storage_beg, /// container_beg, container_end, end) is properly poisoned - only /// [container_beg; container_end) is addressable. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline int SANITIZER_CDECL +__sanitizer_verify_double_ended_contiguous_container(const void *storage_beg, + const void *container_beg, + const void *container_end, + const void *storage_end) {} +#else int SANITIZER_CDECL __sanitizer_verify_double_ended_contiguous_container( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); +#endif /// Similar to __sanitizer_verify_contiguous_container() but also /// returns the address of the first improperly poisoned byte. @@ -285,8 +323,15 @@ int SANITIZER_CDECL __sanitizer_verify_double_ended_contiguous_container( /// \param end Old end of memory region. /// /// \returns The bad address or NULL. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline const void *SANITIZER_CDECL +__sanitizer_contiguous_container_find_bad_address(const void *beg, + const void *mid, + const void *end) {} +#else const void *SANITIZER_CDECL __sanitizer_contiguous_container_find_bad_address( const void *beg, const void *mid, const void *end); +#endif /// returns the address of the first improperly poisoned byte. /// @@ -298,10 +343,17 @@ const void *SANITIZER_CDECL __sanitizer_contiguous_container_find_bad_address( /// \param storage_end End of memory region. /// /// \returns The bad address or NULL. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline const void *SANITIZER_CDECL +__sanitizer_double_ended_contiguous_container_find_bad_address( + const void *storage_beg, const void *container_beg, + const void *container_end, const void *storage_end) {} +#else const void *SANITIZER_CDECL __sanitizer_double_ended_contiguous_container_find_bad_address( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); +#endif /// Prints the stack trace leading to this call (useful for calling from the /// debugger). diff --git a/compiler-rt/lib/asan/asan_errors.cpp b/compiler-rt/lib/asan/asan_errors.cpp index 5f4b839cf2412..0c08fa59689ea 100644 --- a/compiler-rt/lib/asan/asan_errors.cpp +++ b/compiler-rt/lib/asan/asan_errors.cpp @@ -519,11 +519,15 @@ ErrorGeneric::ErrorGeneric(u32 tid, uptr pc_, uptr bp_, uptr sp_, uptr addr, sp(sp_) {} static void PrintContainerOverflowHint() { - Printf("HINT: if you don't care about these errors you may set " - "ASAN_OPTIONS=detect_container_overflow=0.\n" - "If you suspect a false positive see also: " - "https://github.com/google/sanitizers/wiki/" - "AddressSanitizerContainerOverflow.\n"); + Printf( + "HINT: if you don't care about these errors you may set " + "ASAN_OPTIONS=detect_container_overflow=0.\n" + "Or if supported by the container library, pass " + "-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ to the compiler to disable " + " instrumentation.\n" + "If you suspect a false positive see also: " + "https://github.com/google/sanitizers/wiki/" + "AddressSanitizerContainerOverflow.\n"); } static void PrintShadowByte(InternalScopedString *str, const char *before, diff --git a/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp b/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp new file mode 100644 index 0000000000000..680eb252411da --- /dev/null +++ b/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp @@ -0,0 +1,50 @@ +// Test crash gives guidance on -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ and +// ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %clangxx_asan -O %s -o %t +// RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s +// +// Test overflow checks can be disabled at runtime with +// ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %env_asan_opts=detect_container_overflow=0 %run %t 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s +// +// Illustrate use of -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ flag to suppress +// overflow checks at compile time. +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -O %s -o %t-no-overflow +// RUN: %run %t-no-overflow 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s +// + +#include +#include +#include + +// public definition of __sanitizer_annotate_contiguous_container +#include "sanitizer/common_interface_defs.h" + +static volatile int one = 1; + +int TestCrash() { + long t[100]; + t[60] = 0; +#if __has_feature(address_sanitizer) + __sanitizer_annotate_contiguous_container(&t[0], &t[0] + 100, &t[0] + 100, + &t[0] + 50); +#endif + // CHECK-CRASH: AddressSanitizer: container-overflow + // CHECK-CRASH: ASAN_OPTIONS=detect_container_overflow=0 + // CHECK-CRASH: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ + // CHECK-NOCRASH-NOT: AddressSanitizer: container-overflow + // CHECK-NOCRASH-NOT: ASAN_OPTIONS=detect_container_overflow=0 + // CHECK-NOCRASH-NOT: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ + return (int)t[60 * one]; // Touches the poisoned memory. +} + +int main(int argc, char **argv) { + + int retval = 0; + + retval = TestCrash(); + + printf("Exiting main\n"); + + return retval; +} diff --git a/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp b/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp new file mode 100644 index 0000000000000..e17c537f4ac1c --- /dev/null +++ b/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp @@ -0,0 +1,118 @@ +// Test to demonstrate compile-time disabling of container-overflow checks +// in order to handle uninstrumented libraries +// UNSUPPORTED: target={{.*windows-msvc.*}} + +// Mimic a closed-source library compiled without ASan +// RUN: %clangxx_asan -fno-sanitize=address -DSHARED_LIB %s %fPIC -shared -o %t-so.so + +// Mimic multiple files being linked into a single executable, +// %t-object.o and %t-main compiled seperately and then linked together +// RUN: %clangxx_asan -DMULTI_SOURCE %s -c -o %t-object.o +// RUN: %clangxx_asan %s -c -o %t-main.o +// RUN: %clangxx_asan -o %t %t-main.o %t-object.o +// RUN: not %run %t 2>&1 | FileCheck %s + +// Disable container overflow checks at runtime using ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %env_asan_opts=detect_container_overflow=0 %run %t 2>&1 | FileCheck --check-prefix=CHECK-NO-CONTAINER-OVERFLOW %s + +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -DMULTI_SOURCE %s -c -o %t-object.o +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ %s -c -o %t-main.o +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -o %t %t-main.o %t-object.o +// RUN: %run %t 2>&1 | FileCheck --check-prefix=CHECK-NO-CONTAINER-OVERFLOW %s + +#include +#include +#include + +template class Stack { +private: + T data[5]; + size_t size; + +public: + Stack() : size(0) { +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + // Mark entire storage as unaddressable initially + __sanitizer_annotate_contiguous_container(data, data + 5, data + 5, data); +#endif + } + + ~Stack() { +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size, + data + 5); +#endif + } + + void push(const T &value) { + assert(size < 5 && "Stack overflow"); +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size, + data + size + 1); +#endif + data[size++] = value; + } + + T pop() { + assert(size > 0 && "Cannot pop from empty stack"); + T result = data[--size]; +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size + 1, + data + size); +#endif + return result; + } +}; + +#ifdef SHARED_LIB +// Mimics a closed-source library compiled without ASan + +extern "C" void push_value_to_stack(Stack &stack) { stack.push(42); } +#else // SHARED_LIB + +# include +# include + +typedef void (*push_func_t)(Stack &); + +# if defined(MULTI_SOURCE) +extern push_func_t push_value; + +extern "C" void do_push_value_to_stack(Stack &stack) { + assert(push_value); + push_value(stack); +} + +# else +push_func_t push_value = nullptr; + +extern "C" void do_push_value_to_stack(Stack &stack); + +int main(int argc, char *argv[]) { + std::string path = std::string(argv[0]) + "-so.so"; + printf("Loading library: %s\n", path.c_str()); + + void *lib = dlopen(path.c_str(), RTLD_NOW); + assert(lib); + + push_value = (push_func_t)dlsym(lib, "push_value_to_stack"); + assert(push_value); + + Stack stack; + do_push_value_to_stack(stack); + + // BOOM! uninstrumented library didn't update container bounds + int value = stack.pop(); + // CHECK: AddressSanitizer: container-overflow + printf("Popped value: %d\n", value); + assert(value == 42 && "Expected value 42"); + + dlclose(lib); + printf("SUCCESS\n"); + // CHECK-NO-CONTAINER-OVERFLOW: SUCCESS + return 0; +} + +# endif // MULTI_SOURCE + +#endif // SHARED_LIB diff --git a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp index 344005ee98141..6f7ef16d686e5 100644 --- a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp +++ b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp @@ -95,6 +95,8 @@ struct t12 { template void f10() {} +template void f11() {} + int main() { struct { } A; @@ -239,8 +241,10 @@ int main() { f1(); operator_not_really(); t12 v4; - f1<_BitInt(3)>(); - f1(); + f11<_BitInt(3), 2>(); + f11(); + f11<_BitInt(65), 2>(); + f11(); f1, t1<>)>(); f1::*>(); void fcc() __attribute__((swiftcall)); diff --git a/lld/ELF/Arch/AArch64.cpp b/lld/ELF/Arch/AArch64.cpp index b0dc797292511..4613539342f57 100644 --- a/lld/ELF/Arch/AArch64.cpp +++ b/lld/ELF/Arch/AArch64.cpp @@ -114,6 +114,7 @@ AArch64::AArch64(Ctx &ctx) : TargetInfo(ctx) { copyRel = R_AARCH64_COPY; relativeRel = R_AARCH64_RELATIVE; iRelativeRel = R_AARCH64_IRELATIVE; + iRelSymbolicRel = R_AARCH64_FUNCINIT64; gotRel = R_AARCH64_GLOB_DAT; pltRel = R_AARCH64_JUMP_SLOT; symbolicRel = R_AARCH64_ABS64; @@ -137,6 +138,7 @@ RelExpr AArch64::getRelExpr(RelType type, const Symbol &s, case R_AARCH64_ABS16: case R_AARCH64_ABS32: case R_AARCH64_ABS64: + case R_AARCH64_FUNCINIT64: case R_AARCH64_ADD_ABS_LO12_NC: case R_AARCH64_LDST128_ABS_LO12_NC: case R_AARCH64_LDST16_ABS_LO12_NC: @@ -267,7 +269,8 @@ bool AArch64::usesOnlyLowPageBits(RelType type) const { } RelType AArch64::getDynRel(RelType type) const { - if (type == R_AARCH64_ABS64 || type == R_AARCH64_AUTH_ABS64) + if (type == R_AARCH64_ABS64 || type == R_AARCH64_AUTH_ABS64 || + type == R_AARCH64_FUNCINIT64) return type; return R_AARCH64_NONE; } diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index d21376fd3ee47..ef19a2af0c4d2 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -849,8 +849,8 @@ bool RelocScan::isStaticLinkTimeConstant(RelExpr e, RelType type, // only the low bits are used. if (e == R_GOT || e == R_PLT) return ctx.target->usesOnlyLowPageBits(type) || !ctx.arg.isPic; - // R_AARCH64_AUTH_ABS64 requires a dynamic relocation. - if (e == RE_AARCH64_AUTH) + // R_AARCH64_AUTH_ABS64 and iRelSymbolicRel require a dynamic relocation. + if (e == RE_AARCH64_AUTH || type == ctx.target->iRelSymbolicRel) return false; // The behavior of an undefined weak reference is implementation defined. @@ -1023,6 +1023,23 @@ void RelocScan::process(RelExpr expr, RelType type, uint64_t offset, } return; } + if (LLVM_UNLIKELY(type == ctx.target->iRelSymbolicRel)) { + if (sym.isPreemptible) { + auto diag = Err(ctx); + diag << "relocation " << type + << " cannot be used against preemptible symbol '" << &sym << "'"; + printLocation(diag, *sec, sym, offset); + } else if (isIfunc) { + auto diag = Err(ctx); + diag << "relocation " << type + << " cannot be used against ifunc symbol '" << &sym << "'"; + printLocation(diag, *sec, sym, offset); + } else { + part.relaDyn->addReloc({ctx.target->iRelativeRel, sec, offset, false, + sym, addend, R_ABS}); + return; + } + } part.relaDyn->addSymbolReloc(rel, *sec, offset, sym, addend, type); // MIPS ABI turns using of GOT and dynamic relocations inside out. diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 90d8ddfede2c0..8da0b5cb31ca3 100644 --- a/lld/ELF/Target.h +++ b/lld/ELF/Target.h @@ -145,6 +145,7 @@ class TargetInfo { RelType relativeRel = 0; RelType iRelativeRel = 0; RelType symbolicRel = 0; + RelType iRelSymbolicRel = 0; RelType tlsDescRel = 0; RelType tlsGotRel = 0; RelType tlsModuleIndexRel = 0; diff --git a/lld/test/ELF/aarch64-funcinit64-invalid.s b/lld/test/ELF/aarch64-funcinit64-invalid.s new file mode 100644 index 0000000000000..4577db7429773 --- /dev/null +++ b/lld/test/ELF/aarch64-funcinit64-invalid.s @@ -0,0 +1,18 @@ +# REQUIRES: aarch64 + +# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o +# RUN: not ld.lld %t.o -o %t 2>&1 | FileCheck --check-prefix=ERR %s + +.rodata +# ERR: error: relocation R_AARCH64_FUNCINIT64 cannot be used against local symbol +.8byte func@FUNCINIT + +.data +# ERR: error: relocation R_AARCH64_FUNCINIT64 cannot be used against ifunc symbol 'ifunc' +.8byte ifunc@FUNCINIT + +.text +func: +.type ifunc, @gnu_indirect_function +ifunc: +ret diff --git a/lld/test/ELF/aarch64-funcinit64.s b/lld/test/ELF/aarch64-funcinit64.s new file mode 100644 index 0000000000000..5f2b863ee884b --- /dev/null +++ b/lld/test/ELF/aarch64-funcinit64.s @@ -0,0 +1,19 @@ +# REQUIRES: aarch64 + +# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-readelf -s -r %t | FileCheck %s +# RUN: ld.lld %t.o -o %t -pie +# RUN: llvm-readelf -s -r %t | FileCheck %s +# RUN: not ld.lld %t.o -o %t -shared 2>&1 | FileCheck --check-prefix=ERR %s + +.data +# CHECK: R_AARCH64_IRELATIVE [[FOO:[0-9a-f]*]] +# ERR: relocation R_AARCH64_FUNCINIT64 cannot be used against preemptible symbol 'foo' +.8byte foo@FUNCINIT + +.text +# CHECK: {{0*}}[[FOO]] {{.*}} foo +.globl foo +foo: +ret diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py index ae8e0ac08c2b0..b504c01b06da4 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py @@ -20,7 +20,7 @@ def test(self): frame = thread.frames[0] if not self.process().GetAddressByteSize() == 8: - self.skip() + self.skipTest("The test requires a 64-bit process") # The test assumes that std::string is in its cap-size-data layout. self.expect( diff --git a/llvm/include/llvm/Analysis/CMakeLists.txt b/llvm/include/llvm/Analysis/CMakeLists.txt new file mode 100644 index 0000000000000..036f7ff00ce86 --- /dev/null +++ b/llvm/include/llvm/Analysis/CMakeLists.txt @@ -0,0 +1,3 @@ +set(LLVM_TARGET_DEFINITIONS TargetLibraryInfo.td) +tablegen(LLVM TargetLibraryInfo.inc -gen-target-library-info) +add_public_tablegen_target(analysis_gen) diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def deleted file mode 100644 index 76b89dcb3f25d..0000000000000 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def +++ /dev/null @@ -1,2728 +0,0 @@ -//===-- TargetLibraryInfo.def - Library information -------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// This .def file will either fill in the enum definition or fill in the -// string representation array definition for TargetLibraryInfo. -// Which is defined depends on whether TLI_DEFINE_ENUM is defined or -// TLI_DEFINE_STRING is defined. Only one should be defined at a time. - -// NOTE: The nofree attribute is added to Libfuncs which are not -// listed as free or realloc functions in MemoryBuiltins.cpp -// -// When adding a function which frees memory include the LibFunc -// in lib/Analysis/MemoryBuiltins.cpp "isLibFreeFunction". -// -// When adding a LibFunc which reallocates memory include the LibFunc -// in lib/Analysis/MemoryBuiltins.cpp "AllocationFnData[]". - -#if (defined(TLI_DEFINE_ENUM) + \ - defined(TLI_DEFINE_STRING) + \ - defined(TLI_DEFINE_SIG) != 1) -#error "Must define exactly one of TLI_DEFINE_ENUM, TLI_DEFINE_STRING, or TLI_DEFINE_SIG for TLI .def." -#else -// Exactly one of TLI_DEFINE_ENUM/STRING/SIG is defined. - -#if defined(TLI_DEFINE_ENUM) -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) LibFunc_##enum_variant, -#define TLI_DEFINE_STRING_INTERNAL(string_repr) -#define TLI_DEFINE_SIG_INTERNAL(...) -#elif defined(TLI_DEFINE_STRING) -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) -#define TLI_DEFINE_STRING_INTERNAL(string_repr) string_repr, -#define TLI_DEFINE_SIG_INTERNAL(...) -#else -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) -#define TLI_DEFINE_STRING_INTERNAL(string_repr) -#define TLI_DEFINE_SIG_INTERNAL(...) { __VA_ARGS__ }, -#endif - -/// void *operator new(unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_int) -TLI_DEFINE_STRING_INTERNAL("??2@YAPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new(unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_int_nothrow) -TLI_DEFINE_STRING_INTERNAL("??2@YAPAXIABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new(unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_longlong) -TLI_DEFINE_STRING_INTERNAL("??2@YAPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong) - -/// void *operator new(unsigned long long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_longlong_nothrow) -TLI_DEFINE_STRING_INTERNAL("??2@YAPEAX_KAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong, Ptr) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32_nothrow) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAXABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32_int) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64_nothrow) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAXAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64_longlong) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, LLong) - -/// void *operator new[](unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_int) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new[](unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_int_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPAXIABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new[](unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_longlong) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong) - -/// void *operator new[](unsigned long long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_longlong_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPEAX_KAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong, Ptr) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAXABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32_int) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAXAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64_longlong) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, LLong) - -/// int _IO_getc(_IO_FILE * __fp); -TLI_DEFINE_ENUM_INTERNAL(under_IO_getc) -TLI_DEFINE_STRING_INTERNAL("_IO_getc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int _IO_putc(int __c, _IO_FILE * __fp); -TLI_DEFINE_ENUM_INTERNAL(under_IO_putc) -TLI_DEFINE_STRING_INTERNAL("_IO_putc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(ZdaPv) -TLI_DEFINE_STRING_INTERNAL("_ZdaPv") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus) - -/// void operator delete[](void*, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus, Ptr) - -/// void operator delete[](void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvj) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvj") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete[](void*, unsigned int, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int, Int) - -/// void operator delete[](void*, unsigned long); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvm) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvm") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long) - -/// void operator delete[](void*, unsigned long, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long, Long) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(ZdlPv) -TLI_DEFINE_STRING_INTERNAL("_ZdlPv") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus) - -/// void operator delete(void*, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus, Ptr) - -/// void operator delete(void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvj) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvj") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete(void*, unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int, Int) - -/// void operator delete(void*, unsigned long); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvm) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvm") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long) - -/// void operator delete(void*, unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long, Long) - -/// void *operator new[](unsigned int); -TLI_DEFINE_ENUM_INTERNAL(Znaj) -TLI_DEFINE_STRING_INTERNAL("_Znaj") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new[](unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnajRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new[](unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int) - -/// void *operator new[](unsigned int, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int, Ptr) - -/// void *operator new[](unsigned long); -TLI_DEFINE_ENUM_INTERNAL(Znam) -TLI_DEFINE_STRING_INTERNAL("_Znam") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long) - -/// void *operator new[](unsigned long, __hot_cold_t) -/// Currently this and other operator new interfaces that take a __hot_cold_t -/// hint are supported by the open source version of tcmalloc, see: -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/new_extension.h -/// and for the definition of the __hot_cold_t parameter see: -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h -TLI_DEFINE_ENUM_INTERNAL(Znam12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_Znam12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Bool) - -/// void *operator new[](unsigned long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnamRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr) - -/// void *operator new[](unsigned long, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr, Bool) - -/// void *operator new[](unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long) - -/// void *operator new[](unsigned long, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Bool) - -/// void *operator new[](unsigned long, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr) - -/// void *operator new[](unsigned long, std::align_val_t, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr, Bool) - -/// void *operator new(unsigned int); -TLI_DEFINE_ENUM_INTERNAL(Znwj) -TLI_DEFINE_STRING_INTERNAL("_Znwj") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new(unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnwjRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new(unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int) - -/// void *operator new(unsigned int, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int, Ptr) - -/// void *operator new(unsigned long); -TLI_DEFINE_ENUM_INTERNAL(Znwm) -TLI_DEFINE_STRING_INTERNAL("_Znwm") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long) - -/// void *operator new(unsigned long, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(Znwm12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_Znwm12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Bool) - -/// void *operator new(unsigned long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnwmRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr) - -/// void *operator new(unsigned long, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr, Bool) - -/// void *operator new(unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long) - -/// void *operator new(unsigned long, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Bool) - -/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr) - -/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr, Bool) - -/// The following are variants of operator new which return the actual size -/// reserved by the allocator proposed in P0901R5 (Size feedback in operator new). -/// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0901r5.html -/// They are implemented by tcmalloc, see source at -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h - -/// __sized_ptr_t __size_returning_new(size_t size) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_hot_cold(size_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_hot_cold) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_hot_cold") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_aligned) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_aligned") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_aligned_hot_cold) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_aligned_hot_cold") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// double __acos_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(acos_finite) -TLI_DEFINE_STRING_INTERNAL("__acos_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __acosf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(acosf_finite) -TLI_DEFINE_STRING_INTERNAL("__acosf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double __acosh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(acosh_finite) -TLI_DEFINE_STRING_INTERNAL("__acosh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __acoshf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(acoshf_finite) -TLI_DEFINE_STRING_INTERNAL("__acoshf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __acoshl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(acoshl_finite) -TLI_DEFINE_STRING_INTERNAL("__acoshl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double __acosl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(acosl_finite) -TLI_DEFINE_STRING_INTERNAL("__acosl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __asin_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(asin_finite) -TLI_DEFINE_STRING_INTERNAL("__asin_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __asinf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(asinf_finite) -TLI_DEFINE_STRING_INTERNAL("__asinf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __asinl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinl_finite) -TLI_DEFINE_STRING_INTERNAL("__asinl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atan2_finite(double y, double x); -TLI_DEFINE_ENUM_INTERNAL(atan2_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float atan2f_finite(float y, float x); -TLI_DEFINE_ENUM_INTERNAL(atan2f_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double atan2l_finite(long double y, long double x); -TLI_DEFINE_ENUM_INTERNAL(atan2l_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double __atanh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(atanh_finite) -TLI_DEFINE_STRING_INTERNAL("__atanh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __atanhf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(atanhf_finite) -TLI_DEFINE_STRING_INTERNAL("__atanhf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __atanhl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanhl_finite) -TLI_DEFINE_STRING_INTERNAL("__atanhl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void __atomic_load(size_t size, void *mptr, void *vptr, int smodel); -TLI_DEFINE_ENUM_INTERNAL(atomic_load) -TLI_DEFINE_STRING_INTERNAL("__atomic_load") -TLI_DEFINE_SIG_INTERNAL(Void, SizeT, Ptr, Ptr, Int) - -/// void __atomic_store(size_t size, void *mptr, void *vptr, int smodel); -TLI_DEFINE_ENUM_INTERNAL(atomic_store) -TLI_DEFINE_STRING_INTERNAL("__atomic_store") -TLI_DEFINE_SIG_INTERNAL(Void, SizeT, Ptr, Ptr, Int) - -/// double __cosh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(cosh_finite) -TLI_DEFINE_STRING_INTERNAL("__cosh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __coshf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(coshf_finite) -TLI_DEFINE_STRING_INTERNAL("__coshf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __coshl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(coshl_finite) -TLI_DEFINE_STRING_INTERNAL("__coshl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __cospi(double x); -TLI_DEFINE_ENUM_INTERNAL(cospi) -TLI_DEFINE_STRING_INTERNAL("__cospi") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __cospif(float x); -TLI_DEFINE_ENUM_INTERNAL(cospif) -TLI_DEFINE_STRING_INTERNAL("__cospif") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// int __cxa_atexit(void (*f)(void *), void *p, void *d); -TLI_DEFINE_ENUM_INTERNAL(cxa_atexit) -TLI_DEFINE_STRING_INTERNAL("__cxa_atexit") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int atexit(void (*f)(void)); -TLI_DEFINE_ENUM_INTERNAL(atexit) -TLI_DEFINE_STRING_INTERNAL("atexit") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void abort(void) -TLI_DEFINE_ENUM_INTERNAL(abort) -TLI_DEFINE_STRING_INTERNAL("abort") -TLI_DEFINE_SIG_INTERNAL(Void) - -/// void exit(int) -TLI_DEFINE_ENUM_INTERNAL(exit) -TLI_DEFINE_STRING_INTERNAL("exit") -TLI_DEFINE_SIG_INTERNAL(Void, Int) - -/// void _Exit(int) -TLI_DEFINE_ENUM_INTERNAL(Exit) -TLI_DEFINE_STRING_INTERNAL("_Exit") -TLI_DEFINE_SIG_INTERNAL(Void, Int) - -/// void std::terminate(); -TLI_DEFINE_ENUM_INTERNAL(terminate) -TLI_DEFINE_STRING_INTERNAL("_ZSt9terminatev") -TLI_DEFINE_SIG_INTERNAL(Void) - -/// void __cxa_throw(void *, void *, void (*)(void *)); -TLI_DEFINE_ENUM_INTERNAL(cxa_throw) -TLI_DEFINE_STRING_INTERNAL("__cxa_throw") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, Ptr) - -/// void __cxa_guard_abort(guard_t *guard); -/// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_abort) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_abort") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// int __cxa_guard_acquire(guard_t *guard); -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_acquire) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_acquire") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void __cxa_guard_release(guard_t *guard); -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_release) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_release") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double __exp10_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp10_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __exp10f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(exp10f_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __exp10l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp10l_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __exp2_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp2_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __exp2f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(exp2f_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __exp2l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp2l_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __exp_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp_finite) -TLI_DEFINE_STRING_INTERNAL("__exp_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __expf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(expf_finite) -TLI_DEFINE_STRING_INTERNAL("__expf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __expl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(expl_finite) -TLI_DEFINE_STRING_INTERNAL("__expl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int __isoc99_scanf (const char *format, ...) -TLI_DEFINE_ENUM_INTERNAL(dunder_isoc99_scanf) -TLI_DEFINE_STRING_INTERNAL("__isoc99_scanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int __isoc99_sscanf(const char *s, const char *format, ...) -TLI_DEFINE_ENUM_INTERNAL(dunder_isoc99_sscanf) -TLI_DEFINE_STRING_INTERNAL("__isoc99_sscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// void* __kmpc_alloc_shared(size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(__kmpc_alloc_shared) -TLI_DEFINE_STRING_INTERNAL("__kmpc_alloc_shared") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void __kmpc_free_shared(void *ptr, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(__kmpc_free_shared) -TLI_DEFINE_STRING_INTERNAL("__kmpc_free_shared") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT) - -/// double __log10_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log10_finite) -TLI_DEFINE_STRING_INTERNAL("__log10_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __log10f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(log10f_finite) -TLI_DEFINE_STRING_INTERNAL("__log10f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __log10l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(log10l_finite) -TLI_DEFINE_STRING_INTERNAL("__log10l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __log2_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log2_finite) -TLI_DEFINE_STRING_INTERNAL("__log2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __log2f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(log2f_finite) -TLI_DEFINE_STRING_INTERNAL("__log2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __log2l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(log2l_finite) -TLI_DEFINE_STRING_INTERNAL("__log2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __log_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log_finite) -TLI_DEFINE_STRING_INTERNAL("__log_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __logf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(logf_finite) -TLI_DEFINE_STRING_INTERNAL("__logf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __logl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(logl_finite) -TLI_DEFINE_STRING_INTERNAL("__logl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void *__memccpy_chk(void *dst, const void *src, int c, size_t n, -/// size_t dstsize) -TLI_DEFINE_ENUM_INTERNAL(memccpy_chk) -TLI_DEFINE_STRING_INTERNAL("__memccpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Int, SizeT, SizeT) - -/// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__memcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__memmove_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memmove_chk) -TLI_DEFINE_STRING_INTERNAL("__memmove_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__mempcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(mempcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__mempcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__memset_chk(void *s, int v, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memset_chk) -TLI_DEFINE_STRING_INTERNAL("__memset_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT, SizeT) - -// int __nvvm_reflect(const char *) -TLI_DEFINE_ENUM_INTERNAL(nvvm_reflect) -TLI_DEFINE_STRING_INTERNAL("__nvvm_reflect") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double __pow_finite(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(pow_finite) -TLI_DEFINE_STRING_INTERNAL("__pow_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float _powf_finite(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(powf_finite) -TLI_DEFINE_STRING_INTERNAL("__powf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double __powl_finite(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(powl_finite) -TLI_DEFINE_STRING_INTERNAL("__powl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double __sincospi_stret(double x); -TLI_DEFINE_ENUM_INTERNAL(sincospi_stret) -TLI_DEFINE_STRING_INTERNAL("__sincospi_stret") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// float __sincospif_stret(float x); -TLI_DEFINE_ENUM_INTERNAL(sincospif_stret) -TLI_DEFINE_STRING_INTERNAL("__sincospif_stret") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// double __sinh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(sinh_finite) -TLI_DEFINE_STRING_INTERNAL("__sinh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float _sinhf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(sinhf_finite) -TLI_DEFINE_STRING_INTERNAL("__sinhf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __sinhl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinhl_finite) -TLI_DEFINE_STRING_INTERNAL("__sinhl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __sinpi(double x); -TLI_DEFINE_ENUM_INTERNAL(sinpi) -TLI_DEFINE_STRING_INTERNAL("__sinpi") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __sinpif(float x); -TLI_DEFINE_ENUM_INTERNAL(sinpif) -TLI_DEFINE_STRING_INTERNAL("__sinpif") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// int __small_fprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_fprintf) -TLI_DEFINE_STRING_INTERNAL("__small_fprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int __small_printf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_printf) -TLI_DEFINE_STRING_INTERNAL("__small_printf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int __small_sprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_sprintf) -TLI_DEFINE_STRING_INTERNAL("__small_sprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int __snprintf_chk(char *s, size_t n, int flags, size_t slen, -/// const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(snprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__snprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Int, SizeT, Ptr, Ellip) - -/// int __sprintf_chk(char *str, int flags, size_t str_len, -/// const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(sprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__sprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, SizeT, Ptr, Ellip) - -/// double __sqrt_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(sqrt_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrt_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __sqrt_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(sqrtf_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrtf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __sqrt_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(sqrtl_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrtl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// char *__stpcpy_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(stpcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__stpcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *__stpncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(stpncpy_chk) -TLI_DEFINE_STRING_INTERNAL("__stpncpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strcat_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strcat_chk) -TLI_DEFINE_STRING_INTERNAL("__strcat_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *__strcpy_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char * __strdup(const char *s); -TLI_DEFINE_ENUM_INTERNAL(dunder_strdup) -TLI_DEFINE_STRING_INTERNAL("__strdup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// size_t __strlcat_chk(char *dst, const char *src, size_t size, -/// size_t dstsize); -TLI_DEFINE_ENUM_INTERNAL(strlcat_chk) -TLI_DEFINE_STRING_INTERNAL("__strlcat_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT, SizeT) - -/// size_t __strlcpy_chk(char *dst, const char *src, size_t size, -/// size_t dstsize); -TLI_DEFINE_ENUM_INTERNAL(strlcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strlcpy_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT, SizeT) - -/// size_t __strlen_chk(const char *s1, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strlen_chk) -TLI_DEFINE_STRING_INTERNAL("__strlen_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT) - -/// char *strncat_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strncat_chk) -TLI_DEFINE_STRING_INTERNAL("__strncat_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strncpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strncpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strndup(const char *s, size_t n); -TLI_DEFINE_ENUM_INTERNAL(dunder_strndup) -TLI_DEFINE_STRING_INTERNAL("__strndup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// char * __strtok_r(char *s, const char *delim, char **save_ptr); -TLI_DEFINE_ENUM_INTERNAL(dunder_strtok_r) -TLI_DEFINE_STRING_INTERNAL("__strtok_r") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Ptr) - -/// int __vsnprintf_chk(char *s, size_t n, int flags, size_t slen, -/// const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsnprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__vsnprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Int, SizeT, Ptr, Ptr) - -/// int __vsprintf_chk(char *s, int flags, size_t slen, const char *format, -/// va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__vsprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, SizeT, Ptr, Ptr) - -/// int abs(int j); -TLI_DEFINE_ENUM_INTERNAL(abs) -TLI_DEFINE_STRING_INTERNAL("abs") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int access(const char *path, int amode); -TLI_DEFINE_ENUM_INTERNAL(access) -TLI_DEFINE_STRING_INTERNAL("access") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int) - -/// double acos(double x); -TLI_DEFINE_ENUM_INTERNAL(acos) -TLI_DEFINE_STRING_INTERNAL("acos") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float acosf(float x); -TLI_DEFINE_ENUM_INTERNAL(acosf) -TLI_DEFINE_STRING_INTERNAL("acosf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double acosh(double x); -TLI_DEFINE_ENUM_INTERNAL(acosh) -TLI_DEFINE_STRING_INTERNAL("acosh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float acoshf(float x); -TLI_DEFINE_ENUM_INTERNAL(acoshf) -TLI_DEFINE_STRING_INTERNAL("acoshf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double acoshl(long double x); -TLI_DEFINE_ENUM_INTERNAL(acoshl) -TLI_DEFINE_STRING_INTERNAL("acoshl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double acosl(long double x); -TLI_DEFINE_ENUM_INTERNAL(acosl) -TLI_DEFINE_STRING_INTERNAL("acosl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void *aligned_alloc(size_t alignment, size_t size); -TLI_DEFINE_ENUM_INTERNAL(aligned_alloc) -TLI_DEFINE_STRING_INTERNAL("aligned_alloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// double asin(double x); -TLI_DEFINE_ENUM_INTERNAL(asin) -TLI_DEFINE_STRING_INTERNAL("asin") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float asinf(float x); -TLI_DEFINE_ENUM_INTERNAL(asinf) -TLI_DEFINE_STRING_INTERNAL("asinf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double asinh(double x); -TLI_DEFINE_ENUM_INTERNAL(asinh) -TLI_DEFINE_STRING_INTERNAL("asinh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float asinhf(float x); -TLI_DEFINE_ENUM_INTERNAL(asinhf) -TLI_DEFINE_STRING_INTERNAL("asinhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double asinhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinhl) -TLI_DEFINE_STRING_INTERNAL("asinhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double asinl(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinl) -TLI_DEFINE_STRING_INTERNAL("asinl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atan(double x); -TLI_DEFINE_ENUM_INTERNAL(atan) -TLI_DEFINE_STRING_INTERNAL("atan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double atan2(double y, double x); -TLI_DEFINE_ENUM_INTERNAL(atan2) -TLI_DEFINE_STRING_INTERNAL("atan2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float atan2f(float y, float x); -TLI_DEFINE_ENUM_INTERNAL(atan2f) -TLI_DEFINE_STRING_INTERNAL("atan2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double atan2l(long double y, long double x); -TLI_DEFINE_ENUM_INTERNAL(atan2l) -TLI_DEFINE_STRING_INTERNAL("atan2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// float atanf(float x); -TLI_DEFINE_ENUM_INTERNAL(atanf) -TLI_DEFINE_STRING_INTERNAL("atanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double atanh(double x); -TLI_DEFINE_ENUM_INTERNAL(atanh) -TLI_DEFINE_STRING_INTERNAL("atanh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float atanhf(float x); -TLI_DEFINE_ENUM_INTERNAL(atanhf) -TLI_DEFINE_STRING_INTERNAL("atanhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double atanhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanhl) -TLI_DEFINE_STRING_INTERNAL("atanhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double atanl(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanl) -TLI_DEFINE_STRING_INTERNAL("atanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atof(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atof) -TLI_DEFINE_STRING_INTERNAL("atof") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr) - -/// int atoi(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atoi) -TLI_DEFINE_STRING_INTERNAL("atoi") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// long atol(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atol) -TLI_DEFINE_STRING_INTERNAL("atol") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr) - -/// long long atoll(const char *nptr); -TLI_DEFINE_ENUM_INTERNAL(atoll) -TLI_DEFINE_STRING_INTERNAL("atoll") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr) - -/// int bcmp(const void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bcmp) -TLI_DEFINE_STRING_INTERNAL("bcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// void bcopy(const void *s1, void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bcopy) -TLI_DEFINE_STRING_INTERNAL("bcopy") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void bzero(void *s, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bzero) -TLI_DEFINE_STRING_INTERNAL("bzero") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT) - -/// double cabs(double complex z) -TLI_DEFINE_ENUM_INTERNAL(cabs) -TLI_DEFINE_STRING_INTERNAL("cabs") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// float cabs(float complex z) -TLI_DEFINE_ENUM_INTERNAL(cabsf) -TLI_DEFINE_STRING_INTERNAL("cabsf") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// long double cabs(long double complex z) -TLI_DEFINE_ENUM_INTERNAL(cabsl) -TLI_DEFINE_STRING_INTERNAL("cabsl") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// void *calloc(size_t count, size_t size); -TLI_DEFINE_ENUM_INTERNAL(calloc) -TLI_DEFINE_STRING_INTERNAL("calloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// double cbrt(double x); -TLI_DEFINE_ENUM_INTERNAL(cbrt) -TLI_DEFINE_STRING_INTERNAL("cbrt") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float cbrtf(float x); -TLI_DEFINE_ENUM_INTERNAL(cbrtf) -TLI_DEFINE_STRING_INTERNAL("cbrtf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double cbrtl(long double x); -TLI_DEFINE_ENUM_INTERNAL(cbrtl) -TLI_DEFINE_STRING_INTERNAL("cbrtl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double ceil(double x); -TLI_DEFINE_ENUM_INTERNAL(ceil) -TLI_DEFINE_STRING_INTERNAL("ceil") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float ceilf(float x); -TLI_DEFINE_ENUM_INTERNAL(ceilf) -TLI_DEFINE_STRING_INTERNAL("ceilf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double ceill(long double x); -TLI_DEFINE_ENUM_INTERNAL(ceill) -TLI_DEFINE_STRING_INTERNAL("ceill") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int chmod(const char *path, mode_t mode); -TLI_DEFINE_ENUM_INTERNAL(chmod) -TLI_DEFINE_STRING_INTERNAL("chmod") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX) - -/// int chown(const char *path, uid_t owner, gid_t group); -TLI_DEFINE_ENUM_INTERNAL(chown) -TLI_DEFINE_STRING_INTERNAL("chown") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, IntX) - -/// void clearerr(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(clearerr) -TLI_DEFINE_STRING_INTERNAL("clearerr") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// int closedir(DIR *dirp); -TLI_DEFINE_ENUM_INTERNAL(closedir) -TLI_DEFINE_STRING_INTERNAL("closedir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double copysign(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(copysign) -TLI_DEFINE_STRING_INTERNAL("copysign") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float copysignf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(copysignf) -TLI_DEFINE_STRING_INTERNAL("copysignf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double copysignl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(copysignl) -TLI_DEFINE_STRING_INTERNAL("copysignl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double cos(double x); -TLI_DEFINE_ENUM_INTERNAL(cos) -TLI_DEFINE_STRING_INTERNAL("cos") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float cosf(float x); -TLI_DEFINE_ENUM_INTERNAL(cosf) -TLI_DEFINE_STRING_INTERNAL("cosf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double cosh(double x); -TLI_DEFINE_ENUM_INTERNAL(cosh) -TLI_DEFINE_STRING_INTERNAL("cosh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float coshf(float x); -TLI_DEFINE_ENUM_INTERNAL(coshf) -TLI_DEFINE_STRING_INTERNAL("coshf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double coshl(long double x); -TLI_DEFINE_ENUM_INTERNAL(coshl) -TLI_DEFINE_STRING_INTERNAL("coshl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double cosl(long double x); -TLI_DEFINE_ENUM_INTERNAL(cosl) -TLI_DEFINE_STRING_INTERNAL("cosl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// char *ctermid(char *s); -TLI_DEFINE_ENUM_INTERNAL(ctermid) -TLI_DEFINE_STRING_INTERNAL("ctermid") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// double erf(double x); -TLI_DEFINE_ENUM_INTERNAL(erf) -TLI_DEFINE_STRING_INTERNAL("erf") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float erff(float x); -TLI_DEFINE_ENUM_INTERNAL(erff) -TLI_DEFINE_STRING_INTERNAL("erff") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double erfl(long double x); -TLI_DEFINE_ENUM_INTERNAL(erfl) -TLI_DEFINE_STRING_INTERNAL("erfl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double tgamma(double x); -TLI_DEFINE_ENUM_INTERNAL(tgamma) -TLI_DEFINE_STRING_INTERNAL("tgamma") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tgammaf(float x); -TLI_DEFINE_ENUM_INTERNAL(tgammaf) -TLI_DEFINE_STRING_INTERNAL("tgammaf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double tgammal(long double x); -TLI_DEFINE_ENUM_INTERNAL(tgammal) -TLI_DEFINE_STRING_INTERNAL("tgammal") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int execl(const char *path, const char *arg, ...); -TLI_DEFINE_ENUM_INTERNAL(execl) -TLI_DEFINE_STRING_INTERNAL("execl") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execle(const char *file, const char *arg, ..., char * const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execle) -TLI_DEFINE_STRING_INTERNAL("execle") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execlp(const char *file, const char *arg, ...); -TLI_DEFINE_ENUM_INTERNAL(execlp) -TLI_DEFINE_STRING_INTERNAL("execlp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execv(const char *path, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execv) -TLI_DEFINE_STRING_INTERNAL("execv") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int execvP(const char *file, const char *search_path, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execvP) -TLI_DEFINE_STRING_INTERNAL("execvP") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int execve(const char *filename, char *const argv[], char *const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execve) -TLI_DEFINE_STRING_INTERNAL("execve") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int execvp(const char *file, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execvp) -TLI_DEFINE_STRING_INTERNAL("execvp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int execvpe(const char *file, char *const argv[], char *const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execvpe) -TLI_DEFINE_STRING_INTERNAL("execvpe") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// double exp(double x); -TLI_DEFINE_ENUM_INTERNAL(exp) -TLI_DEFINE_STRING_INTERNAL("exp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double exp10(double x); -TLI_DEFINE_ENUM_INTERNAL(exp10) -TLI_DEFINE_STRING_INTERNAL("exp10") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float exp10f(float x); -TLI_DEFINE_ENUM_INTERNAL(exp10f) -TLI_DEFINE_STRING_INTERNAL("exp10f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double exp10l(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp10l) -TLI_DEFINE_STRING_INTERNAL("exp10l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double exp2(double x); -TLI_DEFINE_ENUM_INTERNAL(exp2) -TLI_DEFINE_STRING_INTERNAL("exp2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float exp2f(float x); -TLI_DEFINE_ENUM_INTERNAL(exp2f) -TLI_DEFINE_STRING_INTERNAL("exp2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double exp2l(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp2l) -TLI_DEFINE_STRING_INTERNAL("exp2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float expf(float x); -TLI_DEFINE_ENUM_INTERNAL(expf) -TLI_DEFINE_STRING_INTERNAL("expf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double expl(long double x); -TLI_DEFINE_ENUM_INTERNAL(expl) -TLI_DEFINE_STRING_INTERNAL("expl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double expm1(double x); -TLI_DEFINE_ENUM_INTERNAL(expm1) -TLI_DEFINE_STRING_INTERNAL("expm1") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float expm1f(float x); -TLI_DEFINE_ENUM_INTERNAL(expm1f) -TLI_DEFINE_STRING_INTERNAL("expm1f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double expm1l(long double x); -TLI_DEFINE_ENUM_INTERNAL(expm1l) -TLI_DEFINE_STRING_INTERNAL("expm1l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double fabs(double x); -TLI_DEFINE_ENUM_INTERNAL(fabs) -TLI_DEFINE_STRING_INTERNAL("fabs") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float fabsf(float x); -TLI_DEFINE_ENUM_INTERNAL(fabsf) -TLI_DEFINE_STRING_INTERNAL("fabsf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double fabsl(long double x); -TLI_DEFINE_ENUM_INTERNAL(fabsl) -TLI_DEFINE_STRING_INTERNAL("fabsl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int fclose(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fclose) -TLI_DEFINE_STRING_INTERNAL("fclose") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// FILE *fdopen(int fildes, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(fdopen) -TLI_DEFINE_STRING_INTERNAL("fdopen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// int feof(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(feof) -TLI_DEFINE_STRING_INTERNAL("feof") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ferror(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ferror) -TLI_DEFINE_STRING_INTERNAL("ferror") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fflush(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fflush) -TLI_DEFINE_STRING_INTERNAL("fflush") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ffs(int i); -TLI_DEFINE_ENUM_INTERNAL(ffs) -TLI_DEFINE_STRING_INTERNAL("ffs") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int ffsl(long int i); -TLI_DEFINE_ENUM_INTERNAL(ffsl) -TLI_DEFINE_STRING_INTERNAL("ffsl") -TLI_DEFINE_SIG_INTERNAL(Int, Long) - -/// int ffsll(long long int i); -TLI_DEFINE_ENUM_INTERNAL(ffsll) -TLI_DEFINE_STRING_INTERNAL("ffsll") -TLI_DEFINE_SIG_INTERNAL(Int, LLong) - -/// int fgetc(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgetc) -TLI_DEFINE_STRING_INTERNAL("fgetc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fgetc_unlocked(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgetc_unlocked) -TLI_DEFINE_STRING_INTERNAL("fgetc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fgetpos(FILE *stream, fpos_t *pos); -TLI_DEFINE_ENUM_INTERNAL(fgetpos) -TLI_DEFINE_STRING_INTERNAL("fgetpos") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *fgets(char *s, int n, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgets) -TLI_DEFINE_STRING_INTERNAL("fgets") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, Ptr) - -/// char *fgets_unlocked(char *s, int n, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgets_unlocked) -TLI_DEFINE_STRING_INTERNAL("fgets_unlocked") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, Ptr) - -/// int fileno(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fileno) -TLI_DEFINE_STRING_INTERNAL("fileno") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fiprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(fiprintf) -TLI_DEFINE_STRING_INTERNAL("fiprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// void flockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(flockfile) -TLI_DEFINE_STRING_INTERNAL("flockfile") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double floor(double x); -TLI_DEFINE_ENUM_INTERNAL(floor) -TLI_DEFINE_STRING_INTERNAL("floor") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float floorf(float x); -TLI_DEFINE_ENUM_INTERNAL(floorf) -TLI_DEFINE_STRING_INTERNAL("floorf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double floorl(long double x); -TLI_DEFINE_ENUM_INTERNAL(floorl) -TLI_DEFINE_STRING_INTERNAL("floorl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int fls(int i); -TLI_DEFINE_ENUM_INTERNAL(fls) -TLI_DEFINE_STRING_INTERNAL("fls") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int flsl(long int i); -TLI_DEFINE_ENUM_INTERNAL(flsl) -TLI_DEFINE_STRING_INTERNAL("flsl") -TLI_DEFINE_SIG_INTERNAL(Int, Long) - -/// int flsll(long long int i); -TLI_DEFINE_ENUM_INTERNAL(flsll) -TLI_DEFINE_STRING_INTERNAL("flsll") -TLI_DEFINE_SIG_INTERNAL(Int, LLong) - -// Calls to fmax and fmin library functions expand to the llvm.maxnnum and -// llvm.minnum intrinsics with the correct parameter types for the arguments -// (all types must match). -/// double fmax(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmax) -TLI_DEFINE_STRING_INTERNAL("fmax") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fmaxf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmaxf) -TLI_DEFINE_STRING_INTERNAL("fmaxf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fmaxl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmaxl) -TLI_DEFINE_STRING_INTERNAL("fmaxl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fmin(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmin) -TLI_DEFINE_STRING_INTERNAL("fmin") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fminf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fminf) -TLI_DEFINE_STRING_INTERNAL("fminf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fminl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fminl) -TLI_DEFINE_STRING_INTERNAL("fminl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -// Calls to fmaximum_num and fminimum_num library functions expand to the llvm.maximumnum and -// llvm.minimumnum intrinsics with the correct parameter types for the arguments -// (all types must match). -/// double fmaximum_num(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_num) -TLI_DEFINE_STRING_INTERNAL("fmaximum_num") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fmaximum_numf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_numf) -TLI_DEFINE_STRING_INTERNAL("fmaximum_numf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fmaximum_numl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_numl) -TLI_DEFINE_STRING_INTERNAL("fmaximum_numl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fminimum_num(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_num) -TLI_DEFINE_STRING_INTERNAL("fminimum_num") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fminimum_numf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_numf) -TLI_DEFINE_STRING_INTERNAL("fminimum_numf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fminimum_numl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_numl) -TLI_DEFINE_STRING_INTERNAL("fminimum_numl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fmod(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmod) -TLI_DEFINE_STRING_INTERNAL("fmod") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float fmodf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmodf) -TLI_DEFINE_STRING_INTERNAL("fmodf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double fmodl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmodl) -TLI_DEFINE_STRING_INTERNAL("fmodl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// FILE *fopen(const char *filename, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(fopen) -TLI_DEFINE_STRING_INTERNAL("fopen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// FILE *fopen64(const char *filename, const char *opentype) -TLI_DEFINE_ENUM_INTERNAL(fopen64) -TLI_DEFINE_STRING_INTERNAL("fopen64") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// int fork(); -TLI_DEFINE_ENUM_INTERNAL(fork) -TLI_DEFINE_STRING_INTERNAL("fork") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// int fprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(fprintf) -TLI_DEFINE_STRING_INTERNAL("fprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int fputc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputc) -TLI_DEFINE_STRING_INTERNAL("fputc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fputc_unlocked(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputc_unlocked) -TLI_DEFINE_STRING_INTERNAL("fputc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fputs(const char *s, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputs) -TLI_DEFINE_STRING_INTERNAL("fputs") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int fputs_unlocked(const char *s, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputs_unlocked) -TLI_DEFINE_STRING_INTERNAL("fputs_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fread) -TLI_DEFINE_STRING_INTERNAL("fread") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// size_t fread_unlocked(void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fread_unlocked) -TLI_DEFINE_STRING_INTERNAL("fread_unlocked") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// void free(void *ptr); -TLI_DEFINE_ENUM_INTERNAL(free) -TLI_DEFINE_STRING_INTERNAL("free") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double frexp(double num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexp) -TLI_DEFINE_STRING_INTERNAL("frexp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Ptr) - -/// float frexpf(float num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexpf) -TLI_DEFINE_STRING_INTERNAL("frexpf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Ptr) - -/// long double frexpl(long double num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexpl) -TLI_DEFINE_STRING_INTERNAL("frexpl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Ptr) - -/// int fscanf(FILE *stream, const char *format, ... ); -TLI_DEFINE_ENUM_INTERNAL(fscanf) -TLI_DEFINE_STRING_INTERNAL("fscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int fseek(FILE *stream, long offset, int whence); -TLI_DEFINE_ENUM_INTERNAL(fseek) -TLI_DEFINE_STRING_INTERNAL("fseek") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Long, Int) - -/// int fseeko(FILE *stream, off_t offset, int whence); -TLI_DEFINE_ENUM_INTERNAL(fseeko) -TLI_DEFINE_STRING_INTERNAL("fseeko") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, Int) - -/// int fseeko64(FILE *stream, off64_t offset, int whence) -TLI_DEFINE_ENUM_INTERNAL(fseeko64) -TLI_DEFINE_STRING_INTERNAL("fseeko64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int64, Int) - -/// int fsetpos(FILE *stream, const fpos_t *pos); -TLI_DEFINE_ENUM_INTERNAL(fsetpos) -TLI_DEFINE_STRING_INTERNAL("fsetpos") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int fstat(int fildes, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(fstat) -TLI_DEFINE_STRING_INTERNAL("fstat") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstat64(int filedes, struct stat64 *buf) -TLI_DEFINE_ENUM_INTERNAL(fstat64) -TLI_DEFINE_STRING_INTERNAL("fstat64") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstatvfs(int fildes, struct statvfs *buf); -TLI_DEFINE_ENUM_INTERNAL(fstatvfs) -TLI_DEFINE_STRING_INTERNAL("fstatvfs") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstatvfs64(int fildes, struct statvfs64 *buf); -TLI_DEFINE_ENUM_INTERNAL(fstatvfs64) -TLI_DEFINE_STRING_INTERNAL("fstatvfs64") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// long ftell(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ftell) -TLI_DEFINE_STRING_INTERNAL("ftell") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr) - -/// off_t ftello(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ftello) -TLI_DEFINE_STRING_INTERNAL("ftello") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// off64_t ftello64(FILE *stream) -TLI_DEFINE_ENUM_INTERNAL(ftello64) -TLI_DEFINE_STRING_INTERNAL("ftello64") -TLI_DEFINE_SIG_INTERNAL(Int64, Ptr) - -/// int ftrylockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(ftrylockfile) -TLI_DEFINE_STRING_INTERNAL("ftrylockfile") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void funlockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(funlockfile) -TLI_DEFINE_STRING_INTERNAL("funlockfile") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fwrite) -TLI_DEFINE_STRING_INTERNAL("fwrite") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// size_t fwrite_unlocked(const void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fwrite_unlocked) -TLI_DEFINE_STRING_INTERNAL("fwrite_unlocked") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// int getc(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(getc) -TLI_DEFINE_STRING_INTERNAL("getc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int getc_unlocked(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(getc_unlocked) -TLI_DEFINE_STRING_INTERNAL("getc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int getchar(void); -TLI_DEFINE_ENUM_INTERNAL(getchar) -TLI_DEFINE_STRING_INTERNAL("getchar") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// int getchar_unlocked(void); -TLI_DEFINE_ENUM_INTERNAL(getchar_unlocked) -TLI_DEFINE_STRING_INTERNAL("getchar_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// char *getenv(const char *name); -TLI_DEFINE_ENUM_INTERNAL(getenv) -TLI_DEFINE_STRING_INTERNAL("getenv") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int getitimer(int which, struct itimerval *value); -TLI_DEFINE_ENUM_INTERNAL(getitimer) -TLI_DEFINE_STRING_INTERNAL("getitimer") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int getlogin_r(char *name, size_t namesize); -TLI_DEFINE_ENUM_INTERNAL(getlogin_r) -TLI_DEFINE_STRING_INTERNAL("getlogin_r") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT) - -/// struct passwd *getpwnam(const char *name); -TLI_DEFINE_ENUM_INTERNAL(getpwnam) -TLI_DEFINE_STRING_INTERNAL("getpwnam") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// char *gets(char *s); -TLI_DEFINE_ENUM_INTERNAL(gets) -TLI_DEFINE_STRING_INTERNAL("gets") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int gettimeofday(struct timeval *tp, void *tzp); -TLI_DEFINE_ENUM_INTERNAL(gettimeofday) -TLI_DEFINE_STRING_INTERNAL("gettimeofday") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// uint32_t htonl(uint32_t hostlong); -TLI_DEFINE_ENUM_INTERNAL(htonl) -TLI_DEFINE_STRING_INTERNAL("htonl") -TLI_DEFINE_SIG_INTERNAL(Int32, Int32) - -/// uint16_t htons(uint16_t hostshort); -TLI_DEFINE_ENUM_INTERNAL(htons) -TLI_DEFINE_STRING_INTERNAL("htons") -TLI_DEFINE_SIG_INTERNAL(Int16, Int16) - -/// double hypot(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(hypot) -TLI_DEFINE_STRING_INTERNAL("hypot") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float hypotf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(hypotf) -TLI_DEFINE_STRING_INTERNAL("hypotf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double hypotl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(hypotl) -TLI_DEFINE_STRING_INTERNAL("hypotl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// int iprintf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(iprintf) -TLI_DEFINE_STRING_INTERNAL("iprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int isascii(int c); -TLI_DEFINE_ENUM_INTERNAL(isascii) -TLI_DEFINE_STRING_INTERNAL("isascii") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int isdigit(int c); -TLI_DEFINE_ENUM_INTERNAL(isdigit) -TLI_DEFINE_STRING_INTERNAL("isdigit") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// long int labs(long int j); -TLI_DEFINE_ENUM_INTERNAL(labs) -TLI_DEFINE_STRING_INTERNAL("labs") -TLI_DEFINE_SIG_INTERNAL(Long, Same) - -/// int lchown(const char *path, uid_t owner, gid_t group); -TLI_DEFINE_ENUM_INTERNAL(lchown) -TLI_DEFINE_STRING_INTERNAL("lchown") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, IntX) - -/// double ldexp(double x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexp) -TLI_DEFINE_STRING_INTERNAL("ldexp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Int) - -/// float ldexpf(float x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexpf) -TLI_DEFINE_STRING_INTERNAL("ldexpf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Int) - -/// long double ldexpl(long double x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexpl) -TLI_DEFINE_STRING_INTERNAL("ldexpl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Int) - -/// long long int llabs(long long int j); -TLI_DEFINE_ENUM_INTERNAL(llabs) -TLI_DEFINE_STRING_INTERNAL("llabs") -TLI_DEFINE_SIG_INTERNAL(LLong, LLong) - -/// double log(double x); -TLI_DEFINE_ENUM_INTERNAL(log) -TLI_DEFINE_STRING_INTERNAL("log") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double log10(double x); -TLI_DEFINE_ENUM_INTERNAL(log10) -TLI_DEFINE_STRING_INTERNAL("log10") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log10f(float x); -TLI_DEFINE_ENUM_INTERNAL(log10f) -TLI_DEFINE_STRING_INTERNAL("log10f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double log10l(long double x); -TLI_DEFINE_ENUM_INTERNAL(log10l) -TLI_DEFINE_STRING_INTERNAL("log10l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double log1p(double x); -TLI_DEFINE_ENUM_INTERNAL(log1p) -TLI_DEFINE_STRING_INTERNAL("log1p") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log1pf(float x); -TLI_DEFINE_ENUM_INTERNAL(log1pf) -TLI_DEFINE_STRING_INTERNAL("log1pf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double log1pl(long double x); -TLI_DEFINE_ENUM_INTERNAL(log1pl) -TLI_DEFINE_STRING_INTERNAL("log1pl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double log2(double x); -TLI_DEFINE_ENUM_INTERNAL(log2) -TLI_DEFINE_STRING_INTERNAL("log2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log2f(float x); -TLI_DEFINE_ENUM_INTERNAL(log2f) -TLI_DEFINE_STRING_INTERNAL("log2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double long double log2l(long double x); -TLI_DEFINE_ENUM_INTERNAL(log2l) -TLI_DEFINE_STRING_INTERNAL("log2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int ilogb(double x); -TLI_DEFINE_ENUM_INTERNAL(ilogb) -TLI_DEFINE_STRING_INTERNAL("ilogb") -TLI_DEFINE_SIG_INTERNAL(Int, Dbl) - -/// int ilogbf(float x); -TLI_DEFINE_ENUM_INTERNAL(ilogbf) -TLI_DEFINE_STRING_INTERNAL("ilogbf") -TLI_DEFINE_SIG_INTERNAL(Int, Flt) - -/// int ilogbl(long double x); -TLI_DEFINE_ENUM_INTERNAL(ilogbl) -TLI_DEFINE_STRING_INTERNAL("ilogbl") -TLI_DEFINE_SIG_INTERNAL(Int, LDbl) - -/// double logb(double x); -TLI_DEFINE_ENUM_INTERNAL(logb) -TLI_DEFINE_STRING_INTERNAL("logb") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float logbf(float x); -TLI_DEFINE_ENUM_INTERNAL(logbf) -TLI_DEFINE_STRING_INTERNAL("logbf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double logbl(long double x); -TLI_DEFINE_ENUM_INTERNAL(logbl) -TLI_DEFINE_STRING_INTERNAL("logbl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float logf(float x); -TLI_DEFINE_ENUM_INTERNAL(logf) -TLI_DEFINE_STRING_INTERNAL("logf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double logl(long double x); -TLI_DEFINE_ENUM_INTERNAL(logl) -TLI_DEFINE_STRING_INTERNAL("logl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int lstat(const char *path, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(lstat) -TLI_DEFINE_STRING_INTERNAL("lstat") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int lstat64(const char *path, struct stat64 *buf); -TLI_DEFINE_ENUM_INTERNAL(lstat64) -TLI_DEFINE_STRING_INTERNAL("lstat64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void *malloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(malloc) -TLI_DEFINE_STRING_INTERNAL("malloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *memalign(size_t boundary, size_t size); -TLI_DEFINE_ENUM_INTERNAL(memalign) -TLI_DEFINE_STRING_INTERNAL("memalign") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// void *memccpy(void *s1, const void *s2, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memccpy) -TLI_DEFINE_STRING_INTERNAL("memccpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Int, SizeT) - -/// void *memchr(const void *s, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memchr) -TLI_DEFINE_STRING_INTERNAL("memchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// int memcmp(const void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memcmp) -TLI_DEFINE_STRING_INTERNAL("memcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// void *memcpy(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memcpy) -TLI_DEFINE_STRING_INTERNAL("memcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *memmove(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memmove) -TLI_DEFINE_STRING_INTERNAL("memmove") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *mempcpy(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(mempcpy) -TLI_DEFINE_STRING_INTERNAL("mempcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *memrchr(const void *s, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memrchr) -TLI_DEFINE_STRING_INTERNAL("memrchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// void *memset(void *b, int c, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset) -TLI_DEFINE_STRING_INTERNAL("memset") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// void memset_pattern16(void *b, const void *pattern16, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern16) -TLI_DEFINE_STRING_INTERNAL("memset_pattern16") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void memset_pattern4(void *b, const void *pattern4, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern4) -TLI_DEFINE_STRING_INTERNAL("memset_pattern4") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void memset_pattern8(void *b, const void *pattern8, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern8) -TLI_DEFINE_STRING_INTERNAL("memset_pattern8") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// int mkdir(const char *path, mode_t mode); -TLI_DEFINE_ENUM_INTERNAL(mkdir) -TLI_DEFINE_STRING_INTERNAL("mkdir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX) - -/// time_t mktime(struct tm *timeptr); -TLI_DEFINE_ENUM_INTERNAL(mktime) -TLI_DEFINE_STRING_INTERNAL("mktime") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// double modf(double x, double *iptr); -TLI_DEFINE_ENUM_INTERNAL(modf) -TLI_DEFINE_STRING_INTERNAL("modf") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Ptr) - -/// float modff(float, float *iptr); -TLI_DEFINE_ENUM_INTERNAL(modff) -TLI_DEFINE_STRING_INTERNAL("modff") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Ptr) - -/// long double modfl(long double value, long double *iptr); -TLI_DEFINE_ENUM_INTERNAL(modfl) -TLI_DEFINE_STRING_INTERNAL("modfl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Ptr) - -/// double nan(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nan) -TLI_DEFINE_STRING_INTERNAL("nan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr) - -/// float nanf(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nanf) -TLI_DEFINE_STRING_INTERNAL("nanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Ptr) - -/// long double nanl(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nanl) -TLI_DEFINE_STRING_INTERNAL("nanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, Ptr) - -/// double nearbyint(double x); -TLI_DEFINE_ENUM_INTERNAL(nearbyint) -TLI_DEFINE_STRING_INTERNAL("nearbyint") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float nearbyintf(float x); -TLI_DEFINE_ENUM_INTERNAL(nearbyintf) -TLI_DEFINE_STRING_INTERNAL("nearbyintf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double nearbyintl(long double x); -TLI_DEFINE_ENUM_INTERNAL(nearbyintl) -TLI_DEFINE_STRING_INTERNAL("nearbyintl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double nextafter(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(nextafter) -TLI_DEFINE_STRING_INTERNAL("nextafter") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float nextafterf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(nextafterf) -TLI_DEFINE_STRING_INTERNAL("nextafterf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double nextafterl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nextafterl) -TLI_DEFINE_STRING_INTERNAL("nextafterl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double nexttoward(double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttoward) -TLI_DEFINE_STRING_INTERNAL("nexttoward") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, LDbl) - -/// float nexttowardf(float x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttowardf) -TLI_DEFINE_STRING_INTERNAL("nexttowardf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, LDbl) - -/// long double nexttowardl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttowardl) -TLI_DEFINE_STRING_INTERNAL("nexttowardl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// uint32_t ntohl(uint32_t netlong); -TLI_DEFINE_ENUM_INTERNAL(ntohl) -TLI_DEFINE_STRING_INTERNAL("ntohl") -TLI_DEFINE_SIG_INTERNAL(Int32, Int32) - -/// uint16_t ntohs(uint16_t netshort); -TLI_DEFINE_ENUM_INTERNAL(ntohs) -TLI_DEFINE_STRING_INTERNAL("ntohs") -TLI_DEFINE_SIG_INTERNAL(Int16, Int16) - -/// int open(const char *path, int oflag, ... ); -TLI_DEFINE_ENUM_INTERNAL(open) -TLI_DEFINE_STRING_INTERNAL("open") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, Ellip) - -/// int open64(const char *filename, int flags[, mode_t mode]) -TLI_DEFINE_ENUM_INTERNAL(open64) -TLI_DEFINE_STRING_INTERNAL("open64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, Ellip) - -/// DIR *opendir(const char *dirname); -TLI_DEFINE_ENUM_INTERNAL(opendir) -TLI_DEFINE_STRING_INTERNAL("opendir") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int pclose(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(pclose) -TLI_DEFINE_STRING_INTERNAL("pclose") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void perror(const char *s); -TLI_DEFINE_ENUM_INTERNAL(perror) -TLI_DEFINE_STRING_INTERNAL("perror") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// FILE *popen(const char *command, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(popen) -TLI_DEFINE_STRING_INTERNAL("popen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// int posix_memalign(void **memptr, size_t alignment, size_t size); -TLI_DEFINE_ENUM_INTERNAL(posix_memalign) -TLI_DEFINE_STRING_INTERNAL("posix_memalign") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, SizeT) - -/// double pow(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(pow) -TLI_DEFINE_STRING_INTERNAL("pow") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float powf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(powf) -TLI_DEFINE_STRING_INTERNAL("powf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double powl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(powl) -TLI_DEFINE_STRING_INTERNAL("powl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); -TLI_DEFINE_ENUM_INTERNAL(pread) -TLI_DEFINE_STRING_INTERNAL("pread") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT, IntPlus) - -/// int printf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(printf) -TLI_DEFINE_STRING_INTERNAL("printf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int putc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(putc) -TLI_DEFINE_STRING_INTERNAL("putc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int putc_unlocked(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(putc_unlocked) -TLI_DEFINE_STRING_INTERNAL("putc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int putchar(int c); -TLI_DEFINE_ENUM_INTERNAL(putchar) -TLI_DEFINE_STRING_INTERNAL("putchar") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int putchar_unlocked(int c); -TLI_DEFINE_ENUM_INTERNAL(putchar_unlocked) -TLI_DEFINE_STRING_INTERNAL("putchar_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int puts(const char *s); -TLI_DEFINE_ENUM_INTERNAL(puts) -TLI_DEFINE_STRING_INTERNAL("puts") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void *pvalloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(pvalloc) -TLI_DEFINE_STRING_INTERNAL("pvalloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); -TLI_DEFINE_ENUM_INTERNAL(pwrite) -TLI_DEFINE_STRING_INTERNAL("pwrite") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT, IntPlus) - -/// void qsort(void *base, size_t nel, size_t width, -/// int (*compar)(const void *, const void *)); -TLI_DEFINE_ENUM_INTERNAL(qsort) -TLI_DEFINE_STRING_INTERNAL("qsort") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT, SizeT, Ptr) - -/// ssize_t read(int fildes, void *buf, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(read) -TLI_DEFINE_STRING_INTERNAL("read") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT) - -/// ssize_t readlink(const char *path, char *buf, size_t bufsize); -TLI_DEFINE_ENUM_INTERNAL(readlink) -TLI_DEFINE_STRING_INTERNAL("readlink") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Ptr, Ptr, SizeT) - -/// void *realloc(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(realloc) -TLI_DEFINE_STRING_INTERNAL("realloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// void *reallocf(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(reallocf) -TLI_DEFINE_STRING_INTERNAL("reallocf") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// void *reallocarray(void *ptr, size_t nmemb, size_t size); -TLI_DEFINE_ENUM_INTERNAL(reallocarray) -TLI_DEFINE_STRING_INTERNAL("reallocarray") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT, SizeT) - -/// char *realpath(const char *file_name, char *resolved_name); -TLI_DEFINE_ENUM_INTERNAL(realpath) -TLI_DEFINE_STRING_INTERNAL("realpath") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// double remainder(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(remainder) -TLI_DEFINE_STRING_INTERNAL("remainder") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float remainderf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(remainderf) -TLI_DEFINE_STRING_INTERNAL("remainderf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double remainderl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(remainderl) -TLI_DEFINE_STRING_INTERNAL("remainderl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double remquo(double x, double y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquo) -TLI_DEFINE_STRING_INTERNAL("remquo") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl, Ptr) - -/// float remquof(float x, float y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquof) -TLI_DEFINE_STRING_INTERNAL("remquof") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt, Ptr) - -/// long double remquol(long double x, long double y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquol) -TLI_DEFINE_STRING_INTERNAL("remquol") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl, Ptr) - -/// double fdim(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fdim) -TLI_DEFINE_STRING_INTERNAL("fdim") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float fdimf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fdimf) -TLI_DEFINE_STRING_INTERNAL("fdimf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double fdiml(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fdiml) -TLI_DEFINE_STRING_INTERNAL("fdiml") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// int remove(const char *path); -TLI_DEFINE_ENUM_INTERNAL(remove) -TLI_DEFINE_STRING_INTERNAL("remove") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int rename(const char *old, const char *new); -TLI_DEFINE_ENUM_INTERNAL(rename) -TLI_DEFINE_STRING_INTERNAL("rename") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void rewind(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(rewind) -TLI_DEFINE_STRING_INTERNAL("rewind") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double rint(double x); -TLI_DEFINE_ENUM_INTERNAL(rint) -TLI_DEFINE_STRING_INTERNAL("rint") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float rintf(float x); -TLI_DEFINE_ENUM_INTERNAL(rintf) -TLI_DEFINE_STRING_INTERNAL("rintf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double rintl(long double x); -TLI_DEFINE_ENUM_INTERNAL(rintl) -TLI_DEFINE_STRING_INTERNAL("rintl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int rmdir(const char *path); -TLI_DEFINE_ENUM_INTERNAL(rmdir) -TLI_DEFINE_STRING_INTERNAL("rmdir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double round(double x); -TLI_DEFINE_ENUM_INTERNAL(round) -TLI_DEFINE_STRING_INTERNAL("round") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double roundeven(double x); -TLI_DEFINE_ENUM_INTERNAL(roundeven) -TLI_DEFINE_STRING_INTERNAL("roundeven") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float roundevenf(float x); -TLI_DEFINE_ENUM_INTERNAL(roundevenf) -TLI_DEFINE_STRING_INTERNAL("roundevenf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double roundevenl(long double x); -TLI_DEFINE_ENUM_INTERNAL(roundevenl) -TLI_DEFINE_STRING_INTERNAL("roundevenl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float roundf(float x); -TLI_DEFINE_ENUM_INTERNAL(roundf) -TLI_DEFINE_STRING_INTERNAL("roundf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double roundl(long double x); -TLI_DEFINE_ENUM_INTERNAL(roundl) -TLI_DEFINE_STRING_INTERNAL("roundl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double scalbln(double arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalbln) -TLI_DEFINE_STRING_INTERNAL("scalbln") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Long) - -/// float scalblnf(float arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalblnf) -TLI_DEFINE_STRING_INTERNAL("scalblnf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Long) - -/// long double scalblnl(long double arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalblnl) -TLI_DEFINE_STRING_INTERNAL("scalblnl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Long) - -/// double scalbn(double arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbn) -TLI_DEFINE_STRING_INTERNAL("scalbn") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Int) - -/// float scalbnf(float arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbnf) -TLI_DEFINE_STRING_INTERNAL("scalbnf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Int) - -/// long double scalbnl(long double arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbnl) -TLI_DEFINE_STRING_INTERNAL("scalbnl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Int) - -/// int scanf(const char *restrict format, ... ); -TLI_DEFINE_ENUM_INTERNAL(scanf) -TLI_DEFINE_STRING_INTERNAL("scanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// void setbuf(FILE *stream, char *buf); -TLI_DEFINE_ENUM_INTERNAL(setbuf) -TLI_DEFINE_STRING_INTERNAL("setbuf") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// int setitimer(int which, const struct itimerval *value, -/// struct itimerval *ovalue); -TLI_DEFINE_ENUM_INTERNAL(setitimer) -TLI_DEFINE_STRING_INTERNAL("setitimer") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr, Ptr) - -/// int setvbuf(FILE *stream, char *buf, int type, size_t size); -TLI_DEFINE_ENUM_INTERNAL(setvbuf) -TLI_DEFINE_STRING_INTERNAL("setvbuf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Int, SizeT) - -/// double sin(double x); -TLI_DEFINE_ENUM_INTERNAL(sin) -TLI_DEFINE_STRING_INTERNAL("sin") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sinf(float x); -TLI_DEFINE_ENUM_INTERNAL(sinf) -TLI_DEFINE_STRING_INTERNAL("sinf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double sinh(double x); -TLI_DEFINE_ENUM_INTERNAL(sinh) -TLI_DEFINE_STRING_INTERNAL("sinh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sinhf(float x); -TLI_DEFINE_ENUM_INTERNAL(sinhf) -TLI_DEFINE_STRING_INTERNAL("sinhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double sinhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinhl) -TLI_DEFINE_STRING_INTERNAL("sinhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double sinl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinl) -TLI_DEFINE_STRING_INTERNAL("sinl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void sincos(double x, double *sin_out, double *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincos) -TLI_DEFINE_STRING_INTERNAL("sincos") -TLI_DEFINE_SIG_INTERNAL(Void, Dbl, Ptr, Ptr) - -/// void sincosf(float x, float *sin_out, float *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincosf) -TLI_DEFINE_STRING_INTERNAL("sincosf") -TLI_DEFINE_SIG_INTERNAL(Void, Flt, Ptr, Ptr) - -/// void sincosl(long double x, long double *sin_out, long double *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincosl) -TLI_DEFINE_STRING_INTERNAL("sincosl") -TLI_DEFINE_SIG_INTERNAL(Void, LDbl, Ptr, Ptr) - -/// int siprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(siprintf) -TLI_DEFINE_STRING_INTERNAL("siprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int snprintf(char *s, size_t n, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(snprintf) -TLI_DEFINE_STRING_INTERNAL("snprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Ptr, Ellip) - -/// int sprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(sprintf) -TLI_DEFINE_STRING_INTERNAL("sprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// double sqrt(double x); -TLI_DEFINE_ENUM_INTERNAL(sqrt) -TLI_DEFINE_STRING_INTERNAL("sqrt") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sqrtf(float x); -TLI_DEFINE_ENUM_INTERNAL(sqrtf) -TLI_DEFINE_STRING_INTERNAL("sqrtf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double sqrtl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sqrtl) -TLI_DEFINE_STRING_INTERNAL("sqrtl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int sscanf(const char *s, const char *format, ... ); -TLI_DEFINE_ENUM_INTERNAL(sscanf) -TLI_DEFINE_STRING_INTERNAL("sscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int stat(const char *path, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(stat) -TLI_DEFINE_STRING_INTERNAL("stat") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int stat64(const char *path, struct stat64 *buf); -TLI_DEFINE_ENUM_INTERNAL(stat64) -TLI_DEFINE_STRING_INTERNAL("stat64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int statvfs(const char *path, struct statvfs *buf); -TLI_DEFINE_ENUM_INTERNAL(statvfs) -TLI_DEFINE_STRING_INTERNAL("statvfs") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int statvfs64(const char *path, struct statvfs64 *buf) -TLI_DEFINE_ENUM_INTERNAL(statvfs64) -TLI_DEFINE_STRING_INTERNAL("statvfs64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *stpcpy(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(stpcpy) -TLI_DEFINE_STRING_INTERNAL("stpcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *stpncpy(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(stpncpy) -TLI_DEFINE_STRING_INTERNAL("stpncpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// int strcasecmp(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcasecmp) -TLI_DEFINE_STRING_INTERNAL("strcasecmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *strcat(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcat) -TLI_DEFINE_STRING_INTERNAL("strcat") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strchr(const char *s, int c); -TLI_DEFINE_ENUM_INTERNAL(strchr) -TLI_DEFINE_STRING_INTERNAL("strchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int) - -/// int strcmp(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcmp) -TLI_DEFINE_STRING_INTERNAL("strcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int strcoll(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcoll) -TLI_DEFINE_STRING_INTERNAL("strcoll") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *strcpy(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcpy) -TLI_DEFINE_STRING_INTERNAL("strcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// size_t strcspn(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcspn) -TLI_DEFINE_STRING_INTERNAL("strcspn") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr) - -/// char *strdup(const char *s1); -TLI_DEFINE_ENUM_INTERNAL(strdup) -TLI_DEFINE_STRING_INTERNAL("strdup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// size_t strlcat(char *dst, const char *src, size_t size); -TLI_DEFINE_ENUM_INTERNAL(strlcat) -TLI_DEFINE_STRING_INTERNAL("strlcat") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// size_t strlcpy(char *dst, const char *src, size_t size); -TLI_DEFINE_ENUM_INTERNAL(strlcpy) -TLI_DEFINE_STRING_INTERNAL("strlcpy") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// size_t strlen(const char *s); -TLI_DEFINE_ENUM_INTERNAL(strlen) -TLI_DEFINE_STRING_INTERNAL("strlen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr) - -/// int strncasecmp(const char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncasecmp) -TLI_DEFINE_STRING_INTERNAL("strncasecmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// char *strncat(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncat) -TLI_DEFINE_STRING_INTERNAL("strncat") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// int strncmp(const char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncmp) -TLI_DEFINE_STRING_INTERNAL("strncmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// char *strncpy(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncpy) -TLI_DEFINE_STRING_INTERNAL("strncpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *strndup(const char *s1, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strndup) -TLI_DEFINE_STRING_INTERNAL("strndup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// size_t strnlen(const char *s, size_t maxlen); -TLI_DEFINE_ENUM_INTERNAL(strnlen) -TLI_DEFINE_STRING_INTERNAL("strnlen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT) - -/// char *strpbrk(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strpbrk) -TLI_DEFINE_STRING_INTERNAL("strpbrk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strrchr(const char *s, int c); -TLI_DEFINE_ENUM_INTERNAL(strrchr) -TLI_DEFINE_STRING_INTERNAL("strrchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int) - -/// size_t strspn(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strspn) -TLI_DEFINE_STRING_INTERNAL("strspn") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr) - -/// char *strstr(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strstr) -TLI_DEFINE_STRING_INTERNAL("strstr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// double strtod(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtod) -TLI_DEFINE_STRING_INTERNAL("strtod") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr, Ptr) - -/// float strtof(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtof) -TLI_DEFINE_STRING_INTERNAL("strtof") -TLI_DEFINE_SIG_INTERNAL(Flt, Ptr, Ptr) - -/// char *strtok(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strtok) -TLI_DEFINE_STRING_INTERNAL("strtok") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strtok_r(char *s, const char *sep, char **lasts); -TLI_DEFINE_ENUM_INTERNAL(strtok_r) -TLI_DEFINE_STRING_INTERNAL("strtok_r") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Ptr) - -/// long int strtol(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtol) -TLI_DEFINE_STRING_INTERNAL("strtol") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr, Ptr, Int) - -/// long double strtold(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtold) -TLI_DEFINE_STRING_INTERNAL("strtold") -TLI_DEFINE_SIG_INTERNAL(LDbl, Ptr, Ptr) - -/// long long int strtoll(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoll) -TLI_DEFINE_STRING_INTERNAL("strtoll") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr, Ptr, Int) - -/// unsigned long int strtoul(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoul) -TLI_DEFINE_STRING_INTERNAL("strtoul") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr, Ptr, Int) - -/// unsigned long long int strtoull(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoull) -TLI_DEFINE_STRING_INTERNAL("strtoull") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr, Ptr, Int) - -/// size_t strxfrm(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strxfrm) -TLI_DEFINE_STRING_INTERNAL("strxfrm") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// int system(const char *command); -TLI_DEFINE_ENUM_INTERNAL(system) -TLI_DEFINE_STRING_INTERNAL("system") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double tan(double x); -TLI_DEFINE_ENUM_INTERNAL(tan) -TLI_DEFINE_STRING_INTERNAL("tan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tanf(float x); -TLI_DEFINE_ENUM_INTERNAL(tanf) -TLI_DEFINE_STRING_INTERNAL("tanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double tanh(double x); -TLI_DEFINE_ENUM_INTERNAL(tanh) -TLI_DEFINE_STRING_INTERNAL("tanh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tanhf(float x); -TLI_DEFINE_ENUM_INTERNAL(tanhf) -TLI_DEFINE_STRING_INTERNAL("tanhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double tanhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(tanhl) -TLI_DEFINE_STRING_INTERNAL("tanhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double tanl(long double x); -TLI_DEFINE_ENUM_INTERNAL(tanl) -TLI_DEFINE_STRING_INTERNAL("tanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// clock_t times(struct tms *buffer); -TLI_DEFINE_ENUM_INTERNAL(times) -TLI_DEFINE_STRING_INTERNAL("times") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// FILE *tmpfile(void); -TLI_DEFINE_ENUM_INTERNAL(tmpfile) -TLI_DEFINE_STRING_INTERNAL("tmpfile") -TLI_DEFINE_SIG_INTERNAL(Ptr) - -/// FILE *tmpfile64(void) -TLI_DEFINE_ENUM_INTERNAL(tmpfile64) -TLI_DEFINE_STRING_INTERNAL("tmpfile64") -TLI_DEFINE_SIG_INTERNAL(Ptr) - -/// int toascii(int c); -TLI_DEFINE_ENUM_INTERNAL(toascii) -TLI_DEFINE_STRING_INTERNAL("toascii") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// double trunc(double x); -TLI_DEFINE_ENUM_INTERNAL(trunc) -TLI_DEFINE_STRING_INTERNAL("trunc") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float truncf(float x); -TLI_DEFINE_ENUM_INTERNAL(truncf) -TLI_DEFINE_STRING_INTERNAL("truncf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double truncl(long double x); -TLI_DEFINE_ENUM_INTERNAL(truncl) -TLI_DEFINE_STRING_INTERNAL("truncl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int uname(struct utsname *name); -TLI_DEFINE_ENUM_INTERNAL(uname) -TLI_DEFINE_STRING_INTERNAL("uname") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ungetc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ungetc) -TLI_DEFINE_STRING_INTERNAL("ungetc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int unlink(const char *path); -TLI_DEFINE_ENUM_INTERNAL(unlink) -TLI_DEFINE_STRING_INTERNAL("unlink") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int unsetenv(const char *name); -TLI_DEFINE_ENUM_INTERNAL(unsetenv) -TLI_DEFINE_STRING_INTERNAL("unsetenv") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int utime(const char *path, const struct utimbuf *times); -TLI_DEFINE_ENUM_INTERNAL(utime) -TLI_DEFINE_STRING_INTERNAL("utime") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int utimes(const char *path, const struct timeval times[2]); -TLI_DEFINE_ENUM_INTERNAL(utimes) -TLI_DEFINE_STRING_INTERNAL("utimes") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void *valloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(valloc) -TLI_DEFINE_STRING_INTERNAL("valloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *vec_calloc(size_t count, size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_calloc) -TLI_DEFINE_STRING_INTERNAL("vec_calloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// void vec_free(void *ptr); -TLI_DEFINE_ENUM_INTERNAL(vec_free) -TLI_DEFINE_STRING_INTERNAL("vec_free") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void *vec_malloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_malloc) -TLI_DEFINE_STRING_INTERNAL("vec_malloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *vec_realloc(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_realloc) -TLI_DEFINE_STRING_INTERNAL("vec_realloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// int vfprintf(FILE *stream, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vfprintf) -TLI_DEFINE_STRING_INTERNAL("vfprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vfscanf(FILE *stream, const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vfscanf) -TLI_DEFINE_STRING_INTERNAL("vfscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vprintf(const char *restrict format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vprintf) -TLI_DEFINE_STRING_INTERNAL("vprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int vscanf(const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vscanf) -TLI_DEFINE_STRING_INTERNAL("vscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int vsnprintf(char *s, size_t n, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsnprintf) -TLI_DEFINE_STRING_INTERNAL("vsnprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Ptr, Ptr) - -/// int vsprintf(char *s, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsprintf) -TLI_DEFINE_STRING_INTERNAL("vsprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vsscanf(const char *s, const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vsscanf) -TLI_DEFINE_STRING_INTERNAL("vsscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// size_t wcslen (const wchar_t* wcs); -TLI_DEFINE_ENUM_INTERNAL(wcslen) -TLI_DEFINE_STRING_INTERNAL("wcslen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr) - -/// ssize_t write(int fildes, const void *buf, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(write) -TLI_DEFINE_STRING_INTERNAL("write") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT) - -#undef TLI_DEFINE_ENUM_INTERNAL -#undef TLI_DEFINE_STRING_INTERNAL -#undef TLI_DEFINE_SIG_INTERNAL -#endif // One of TLI_DEFINE_ENUM/STRING are defined. - -#undef TLI_DEFINE_ENUM -#undef TLI_DEFINE_STRING -#undef TLI_DEFINE_SIG diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h index 3b6cc0d1944fd..0f98af69f12c6 100644 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h @@ -10,6 +10,7 @@ #define LLVM_ANALYSIS_TARGETLIBRARYINFO_H #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringTable.h" #include "llvm/IR/Constants.h" #include "llvm/IR/InstrTypes.h" #include "llvm/IR/Module.h" @@ -70,13 +71,8 @@ class VecDesc { LLVM_ABI std::string getVectorFunctionABIVariantString() const; }; - enum LibFunc : unsigned { -#define TLI_DEFINE_ENUM -#include "llvm/Analysis/TargetLibraryInfo.def" - - NumLibFuncs, - NotLibFunc - }; +#define GET_TARGET_LIBRARY_INFO_ENUM +#include "llvm/Analysis/TargetLibraryInfo.inc" /// Implementation of the target library information. /// @@ -89,7 +85,8 @@ class TargetLibraryInfoImpl { unsigned char AvailableArray[(NumLibFuncs+3)/4]; DenseMap CustomNames; - LLVM_ABI static StringLiteral const StandardNames[NumLibFuncs]; +#define GET_TARGET_LIBRARY_INFO_IMPL_DECL +#include "llvm/Analysis/TargetLibraryInfo.inc" bool ShouldExtI32Param, ShouldExtI32Return, ShouldSignExtI32Param, ShouldSignExtI32Return; unsigned SizeOfInt; @@ -160,7 +157,8 @@ class TargetLibraryInfoImpl { /// Forces a function to be marked as available and provide an alternate name /// that must be used. void setAvailableWithName(LibFunc F, StringRef Name) { - if (StandardNames[F] != Name) { + if (StringRef(StandardNamesStrTable.getCString(StandardNamesOffsets[F]), + StandardNamesSizeTable[F]) != Name) { setState(F, CustomName); CustomNames[F] = std::string(Name); assert(CustomNames.contains(F)); @@ -438,7 +436,9 @@ class TargetLibraryInfo { /// Return the canonical name for a LibFunc. This should not be used for /// semantic purposes, use getName instead. static StringRef getStandardName(LibFunc F) { - return TargetLibraryInfoImpl::StandardNames[F]; + return StringRef(TargetLibraryInfoImpl::StandardNamesStrTable.getCString( + TargetLibraryInfoImpl::StandardNamesOffsets[F]), + TargetLibraryInfoImpl::StandardNamesSizeTable[F]); } StringRef getName(LibFunc F) const { @@ -446,7 +446,9 @@ class TargetLibraryInfo { if (State == TargetLibraryInfoImpl::Unavailable) return StringRef(); if (State == TargetLibraryInfoImpl::StandardName) - return Impl->StandardNames[F]; + return StringRef( + Impl->StandardNamesStrTable.getCString(Impl->StandardNamesOffsets[F]), + Impl->StandardNamesSizeTable[F]); assert(State == TargetLibraryInfoImpl::CustomName); return Impl->CustomNames.find(F)->second; } diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.td b/llvm/include/llvm/Analysis/TargetLibraryInfo.td new file mode 100644 index 0000000000000..10b43ad2466fc --- /dev/null +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.td @@ -0,0 +1,1697 @@ +//===-- TargetLibraryInfo.td - File that describes library functions ------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +include "llvm/Analysis/TargetLibraryInfoImpl.td" + +/// void *operator new(unsigned int); +def msvc_new_int : TargetLibCall<"??2@YAPAXI@Z", Ptr, [Int]>; + +/// void *operator new(unsigned int, const std::nothrow_t&); +def msvc_new_int_nothrow + : TargetLibCall<"??2@YAPAXIABUnothrow_t@std@@@Z", Ptr, [Int, Ptr]>; + +/// void *operator new(unsigned long long); +def msvc_new_longlong : TargetLibCall<"??2@YAPEAX_K@Z", Ptr, [LLong]>; + +/// void *operator new(unsigned long long, const std::nothrow_t&); +def msvc_new_longlong_nothrow + : TargetLibCall<"??2@YAPEAX_KAEBUnothrow_t@std@@@Z", Ptr, [LLong, Ptr]>; + +/// void operator delete(void*); +def msvc_delete_ptr32 : TargetLibCall<"??3@YAXPAX@Z", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def msvc_delete_ptr32_nothrow + : TargetLibCall<"??3@YAXPAXABUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, unsigned int); +def msvc_delete_ptr32_int : TargetLibCall<"??3@YAXPAXI@Z", Void, [Ptr, Int]>; + +/// void operator delete(void*); +def msvc_delete_ptr64 : TargetLibCall<"??3@YAXPEAX@Z", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def msvc_delete_ptr64_nothrow + : TargetLibCall<"??3@YAXPEAXAEBUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, unsigned long long); +def msvc_delete_ptr64_longlong + : TargetLibCall<"??3@YAXPEAX_K@Z", Void, [Ptr, LLong]>; + +/// void *operator new[](unsigned int); +def msvc_new_array_int : TargetLibCall<"??_U@YAPAXI@Z", Ptr, [Int]>; + +/// void *operator new](unsigned int, [const std::nothrow_t&); +def msvc_new_array_int_nothrow + : TargetLibCall<"??_U@YAPAXIABUnothrow_t@std@@@Z", Ptr, [Int, Ptr]>; + +/// void *operator new[](unsigned long long); +def msvc_new_array_longlong : TargetLibCall<"??_U@YAPEAX_K@Z", Ptr, [LLong]>; + +/// void *operator new](unsigned long long, [const std::nothrow_t&); +def msvc_new_array_longlong_nothrow + : TargetLibCall<"??_U@YAPEAX_KAEBUnothrow_t@std@@@Z", Ptr, [LLong, Ptr]>; + +/// void operator delete[](void*); +def msvc_delete_array_ptr32 : TargetLibCall<"??_V@YAXPAX@Z", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def msvc_delete_array_ptr32_nothrow + : TargetLibCall<"??_V@YAXPAXABUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [unsigned int); +def msvc_delete_array_ptr32_int + : TargetLibCall<"??_V@YAXPAXI@Z", Void, [Ptr, Int]>; + +/// void operator delete[](void*); +def msvc_delete_array_ptr64 : TargetLibCall<"??_V@YAXPEAX@Z", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def msvc_delete_array_ptr64_nothrow + : TargetLibCall<"??_V@YAXPEAXAEBUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [unsigned long long); +def msvc_delete_array_ptr64_longlong + : TargetLibCall<"??_V@YAXPEAX_K@Z", Void, [Ptr, LLong]>; + +/// int _IO_getc(_IO_FILE * __fp); +def under_IO_getc : TargetLibCall<"_IO_getc", Int, [Ptr]>; + +/// int _IO_putc(int __c, _IO_FILE * __fp); +def under_IO_putc : TargetLibCall<"_IO_putc", Int, [Int, Ptr]>; + +/// void operator delete[](void*); +def ZdaPv : TargetLibCall<"_ZdaPv", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def ZdaPvRKSt9nothrow_t + : TargetLibCall<"_ZdaPvRKSt9nothrow_t", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [std::align_val_t); +def ZdaPvSt11align_val_t + : TargetLibCall<"_ZdaPvSt11align_val_t", Void, [Ptr, IntPlus]>; + +/// void operator delete](void*, [std::align_val_t, const std::nothrow_t&) +def ZdaPvSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZdaPvSt11align_val_tRKSt9nothrow_t", + Void, [Ptr, IntPlus, Ptr]>; + +/// void operator delete](void*, [unsigned int); +def ZdaPvj : TargetLibCall<"_ZdaPvj", Void, [Ptr, Int]>; + +/// void operator delete](void*, [unsigned int, std::align_val_t); +def ZdaPvjSt11align_val_t + : TargetLibCall<"_ZdaPvjSt11align_val_t", Void, [Ptr, Int, Int]>; + +/// void operator delete](void*, [unsigned long); +def ZdaPvm : TargetLibCall<"_ZdaPvm", Void, [Ptr, Long]>; + +/// void operator delete](void*, [unsigned long, std::align_val_t); +def ZdaPvmSt11align_val_t + : TargetLibCall<"_ZdaPvmSt11align_val_t", Void, [Ptr, Long, Long]>; + +/// void operator delete(void*); +def ZdlPv : TargetLibCall<"_ZdlPv", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def ZdlPvRKSt9nothrow_t + : TargetLibCall<"_ZdlPvRKSt9nothrow_t", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, std::align_val_t) +def ZdlPvSt11align_val_t + : TargetLibCall<"_ZdlPvSt11align_val_t", Void, [Ptr, IntPlus]>; + +/// void operator delete(void*, std::align_val_t, const std::nothrow_t&) +def ZdlPvSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZdlPvSt11align_val_tRKSt9nothrow_t", + Void, [Ptr, IntPlus, Ptr]>; + +/// void operator delete(void*, unsigned int); +def ZdlPvj : TargetLibCall<"_ZdlPvj", Void, [Ptr, Int]>; + +/// void operator delete(void*, unsigned int, std::align_val_t) +def ZdlPvjSt11align_val_t + : TargetLibCall<"_ZdlPvjSt11align_val_t", Void, [Ptr, Int, Int]>; + +/// void operator delete(void*, unsigned long); +def ZdlPvm : TargetLibCall<"_ZdlPvm", Void, [Ptr, Long]>; + +/// void operator delete(void*, unsigned long, std::align_val_t) +def ZdlPvmSt11align_val_t + : TargetLibCall<"_ZdlPvmSt11align_val_t", Void, [Ptr, Long, Long]>; + +/// void *operator new[](unsigned int); +def Znaj : TargetLibCall<"_Znaj", Ptr, [Int]>; + +/// void *operator new](unsigned int, [const std::nothrow_t&); +def ZnajRKSt9nothrow_t : TargetLibCall<"_ZnajRKSt9nothrow_t", Ptr, [Int, Ptr]>; + +/// void *operator new](unsigned int, [std::align_val_t) +def ZnajSt11align_val_t + : TargetLibCall<"_ZnajSt11align_val_t", Ptr, [Int, Int]>; + +/// void *operator new](unsigned int, [std::align_val_t, const std::nothrow_t&) +def ZnajSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnajSt11align_val_tRKSt9nothrow_t", Ptr, [Int, Int, Ptr]>; + +/// void *operator new[](unsigned long); +def Znam : TargetLibCall<"_Znam", Ptr, [Long]>; + +/// void *operator new](unsigned long, [__hot_cold_t) +/// Currently this and other operator new interfaces that take a __hot_cold_t +/// hint are supported by the open source version of tcmalloc, see: +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/new_extension.h +/// and for the definition of the __hot_cold_t parameter see: +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h +def Znam12__hot_cold_t + : TargetLibCall<"_Znam12__hot_cold_t", Ptr, [Long, Bool]>; + +/// void *operator new](unsigned long, [const std::nothrow_t&); +def ZnamRKSt9nothrow_t : TargetLibCall<"_ZnamRKSt9nothrow_t", Ptr, [Long, Ptr]>; + +/// void *operator new](unsigned long, [const std::nothrow_t&, __hot_cold_t) +def ZnamRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnamRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Ptr, Bool]>; + +/// void *operator new](unsigned long, [std::align_val_t) +def ZnamSt11align_val_t + : TargetLibCall<"_ZnamSt11align_val_t", Ptr, [Long, Long]>; + +/// void *operator new](unsigned long, [std::align_val_t, __hot_cold_t) +def ZnamSt11align_val_t12__hot_cold_t + : TargetLibCall<"_ZnamSt11align_val_t12__hot_cold_t", + Ptr, [Long, Long, Bool]>; + +/// void *operator new](unsigned long, [std::align_val_t, const std::nothrow_t&) +def ZnamSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnamSt11align_val_tRKSt9nothrow_t", + Ptr, [Long, Long, Ptr]>; + +/// void *operator new](unsigned long, [std::align_val_t, const std::nothrow_t&, +/// __hot_cold_t) +def ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Long, Ptr, Bool]>; + +/// void *operator new(unsigned int); +def Znwj : TargetLibCall<"_Znwj", Ptr, [Int]>; + +/// void *operator new(unsigned int, const std::nothrow_t&); +def ZnwjRKSt9nothrow_t : TargetLibCall<"_ZnwjRKSt9nothrow_t", Ptr, [Int, Ptr]>; + +/// void *operator new(unsigned int, std::align_val_t) +def ZnwjSt11align_val_t + : TargetLibCall<"_ZnwjSt11align_val_t", Ptr, [Int, Int]>; + +/// void *operator new(unsigned int, std::align_val_t, const std::nothrow_t&) +def ZnwjSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnwjSt11align_val_tRKSt9nothrow_t", Ptr, [Int, Int, Ptr]>; + +/// void *operator new(unsigned long); +def Znwm : TargetLibCall<"_Znwm", Ptr, [Long]>; + +/// void *operator new(unsigned long, __hot_cold_t) +def Znwm12__hot_cold_t + : TargetLibCall<"_Znwm12__hot_cold_t", Ptr, [Long, Bool]>; + +/// void *operator new(unsigned long, const std::nothrow_t&); +def ZnwmRKSt9nothrow_t : TargetLibCall<"_ZnwmRKSt9nothrow_t", Ptr, [Long, Ptr]>; + +/// void *operator new(unsigned long, const std::nothrow_t&, __hot_cold_t) +def ZnwmRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnwmRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Ptr, Bool]>; + +/// void *operator new(unsigned long, std::align_val_t) +def ZnwmSt11align_val_t + : TargetLibCall<"_ZnwmSt11align_val_t", Ptr, [Long, Long]>; + +/// void *operator new(unsigned long, std::align_val_t, __hot_cold_t) +def ZnwmSt11align_val_t12__hot_cold_t + : TargetLibCall<"_ZnwmSt11align_val_t12__hot_cold_t", + Ptr, [Long, Long, Bool]>; + +/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&) +def ZnwmSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnwmSt11align_val_tRKSt9nothrow_t", + Ptr, [Long, Long, Ptr]>; + +/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&, +/// __hot_cold_t) +def ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Long, Ptr, Bool]>; + +/// The following are variants of operator new which return the actual size +/// reserved by the allocator proposed in P0901R5 (Size feedback in operator +/// new). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0901r5.html +/// They are implemented by tcmalloc, see source at +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h + +/// __sized_ptr_t __size_returning_new(size_t size) +def size_returning_new + : TargetLibCall<"__size_returning_new", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_hot_cold(size_t, __hot_cold_t) +def size_returning_new_hot_cold + : TargetLibCall<"__size_returning_new_hot_cold", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t) +def size_returning_new_aligned + : TargetLibCall<"__size_returning_new_aligned", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t, +/// __hot_cold_t) +def size_returning_new_aligned_hot_cold + : TargetLibCall<"__size_returning_new_aligned_hot_cold", + ? /* Checked manually. */>; + +/// double __acos_finite(double x); +def acos_finite : TargetLibCall<"__acos_finite", Dbl, [Dbl]>; + +/// float __acosf_finite(float x); +def acosf_finite : TargetLibCall<"__acosf_finite", Flt, [Flt]>; + +/// double __acosh_finite(double x); +def acosh_finite : TargetLibCall<"__acosh_finite", Dbl, [Dbl]>; + +/// float __acoshf_finite(float x); +def acoshf_finite : TargetLibCall<"__acoshf_finite", Flt, [Flt]>; + +/// long double __acoshl_finite(long double x); +def acoshl_finite : TargetLibCall<"__acoshl_finite", LDbl, [LDbl]>; + +/// long double __acosl_finite(long double x); +def acosl_finite : TargetLibCall<"__acosl_finite", LDbl, [LDbl]>; + +/// double __asin_finite(double x); +def asin_finite : TargetLibCall<"__asin_finite", Dbl, [Dbl]>; + +/// float __asinf_finite(float x); +def asinf_finite : TargetLibCall<"__asinf_finite", Flt, [Flt]>; + +/// long double __asinl_finite(long double x); +def asinl_finite : TargetLibCall<"__asinl_finite", LDbl, [LDbl]>; + +/// double atan2_finite(double y, double x); +def atan2_finite : TargetLibCall<"__atan2_finite", Dbl, [Dbl, Dbl]>; + +/// float atan2f_finite(float y, float x); +def atan2f_finite : TargetLibCall<"__atan2f_finite", Flt, [Flt, Flt]>; + +/// long double atan2l_finite(long double y, long double x); +def atan2l_finite : TargetLibCall<"__atan2l_finite", LDbl, [LDbl, LDbl]>; + +/// double __atanh_finite(double x); +def atanh_finite : TargetLibCall<"__atanh_finite", Dbl, [Dbl]>; + +/// float __atanhf_finite(float x); +def atanhf_finite : TargetLibCall<"__atanhf_finite", Flt, [Flt]>; + +/// long double __atanhl_finite(long double x); +def atanhl_finite : TargetLibCall<"__atanhl_finite", LDbl, [LDbl]>; + +/// void __atomic_load(size_t size, void *mptr, void *vptr, int smodel); +def atomic_load : TargetLibCall<"__atomic_load", Void, [SizeT, Ptr, Ptr, Int]>; + +/// void __atomic_store(size_t size, void *mptr, void *vptr, int smodel); +def atomic_store + : TargetLibCall<"__atomic_store", Void, [SizeT, Ptr, Ptr, Int]>; + +/// double __cosh_finite(double x); +def cosh_finite : TargetLibCall<"__cosh_finite", Dbl, [Dbl]>; + +/// float __coshf_finite(float x); +def coshf_finite : TargetLibCall<"__coshf_finite", Flt, [Flt]>; + +/// long double __coshl_finite(long double x); +def coshl_finite : TargetLibCall<"__coshl_finite", LDbl, [LDbl]>; + +/// double __cospi(double x); +def cospi : TargetLibCall<"__cospi", Dbl, [Dbl]>; + +/// float __cospif(float x); +def cospif : TargetLibCall<"__cospif", Flt, [Flt]>; + +/// int __cxa_atexit(void (*f)(void *), void *p, void *d); +def cxa_atexit : TargetLibCall<"__cxa_atexit", Int, [Ptr, Ptr, Ptr]>; + +/// int atexit(void (*f)(void)); +def atexit : TargetLibCall<"atexit", Int, [Ptr]>; + +/// void abort(void) +def abort : TargetLibCall<"abort", Void, []>; + +/// void exit(int) +def exit : TargetLibCall<"exit", Void, [Int]>; + +/// void _Exit(int) +def Exit : TargetLibCall<"_Exit", Void, [Int]>; + +/// void std::terminate(); +def terminate : TargetLibCall<"_ZSt9terminatev", Void, []>; + +/// void __cxa_throw(void *, void *, void (*)(void *)); +def cxa_throw : TargetLibCall<"__cxa_throw", Void, [Ptr, Ptr, Ptr]>; + +/// void __cxa_guard_abort(guard_t *guard); +/// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. +def cxa_guard_abort : TargetLibCall<"__cxa_guard_abort", Void, [Ptr]>; + +/// int __cxa_guard_acquire(guard_t *guard); +def cxa_guard_acquire : TargetLibCall<"__cxa_guard_acquire", Int, [Ptr]>; + +/// void __cxa_guard_release(guard_t *guard); +def cxa_guard_release : TargetLibCall<"__cxa_guard_release", Void, [Ptr]>; + +/// double __exp10_finite(double x); +def exp10_finite : TargetLibCall<"__exp10_finite", Dbl, [Dbl]>; + +/// float __exp10f_finite(float x); +def exp10f_finite : TargetLibCall<"__exp10f_finite", Flt, [Flt]>; + +/// long double __exp10l_finite(long double x); +def exp10l_finite : TargetLibCall<"__exp10l_finite", LDbl, [LDbl]>; + +/// double __exp2_finite(double x); +def exp2_finite : TargetLibCall<"__exp2_finite", Dbl, [Dbl]>; + +/// float __exp2f_finite(float x); +def exp2f_finite : TargetLibCall<"__exp2f_finite", Flt, [Flt]>; + +/// long double __exp2l_finite(long double x); +def exp2l_finite : TargetLibCall<"__exp2l_finite", LDbl, [LDbl]>; + +/// double __exp_finite(double x); +def exp_finite : TargetLibCall<"__exp_finite", Dbl, [Dbl]>; + +/// float __expf_finite(float x); +def expf_finite : TargetLibCall<"__expf_finite", Flt, [Flt]>; + +/// long double __expl_finite(long double x); +def expl_finite : TargetLibCall<"__expl_finite", LDbl, [LDbl]>; + +/// int __isoc99_scanf (const char *format, ...) +def dunder_isoc99_scanf : TargetLibCall<"__isoc99_scanf", Int, [Ptr, Ellip]>; + +/// int __isoc99_sscanf(const char *s, const char *format, ...) +def dunder_isoc99_sscanf + : TargetLibCall<"__isoc99_sscanf", Int, [Ptr, Ptr, Ellip]>; + +/// void* __kmpc_alloc_shared(size_t nbyte); +def __kmpc_alloc_shared : TargetLibCall<"__kmpc_alloc_shared", Ptr, [SizeT]>; + +/// void __kmpc_free_shared(void *ptr, size_t nbyte); +def __kmpc_free_shared + : TargetLibCall<"__kmpc_free_shared", Void, [Ptr, SizeT]>; + +/// double __log10_finite(double x); +def log10_finite : TargetLibCall<"__log10_finite", Dbl, [Dbl]>; + +/// float __log10f_finite(float x); +def log10f_finite : TargetLibCall<"__log10f_finite", Flt, [Flt]>; + +/// long double __log10l_finite(long double x); +def log10l_finite : TargetLibCall<"__log10l_finite", LDbl, [LDbl]>; + +/// double __log2_finite(double x); +def log2_finite : TargetLibCall<"__log2_finite", Dbl, [Dbl]>; + +/// float __log2f_finite(float x); +def log2f_finite : TargetLibCall<"__log2f_finite", Flt, [Flt]>; + +/// long double __log2l_finite(long double x); +def log2l_finite : TargetLibCall<"__log2l_finite", LDbl, [LDbl]>; + +/// double __log_finite(double x); +def log_finite : TargetLibCall<"__log_finite", Dbl, [Dbl]>; + +/// float __logf_finite(float x); +def logf_finite : TargetLibCall<"__logf_finite", Flt, [Flt]>; + +/// long double __logl_finite(long double x); +def logl_finite : TargetLibCall<"__logl_finite", LDbl, [LDbl]>; + +/// void *__memccpy_chk(void *dst, const void *src, int c, size_t n, +/// size_t dstsize) +def memccpy_chk + : TargetLibCall<"__memccpy_chk", Ptr, [Ptr, Ptr, Int, SizeT, SizeT]>; + +/// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); +def memcpy_chk : TargetLibCall<"__memcpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__memmove_chk(void *s1, const void *s2, size_t n, size_t s1size); +def memmove_chk : TargetLibCall<"__memmove_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__mempcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); +def mempcpy_chk : TargetLibCall<"__mempcpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__memset_chk(void *s, int v, size_t n, size_t s1size); +def memset_chk : TargetLibCall<"__memset_chk", Ptr, [Ptr, Int, SizeT, SizeT]>; + +// int __nvvm_reflect(const char *) +def nvvm_reflect : TargetLibCall<"__nvvm_reflect", Int, [Ptr]>; + +/// double __pow_finite(double x, double y); +def pow_finite : TargetLibCall<"__pow_finite", Dbl, [Dbl, Dbl]>; + +/// float _powf_finite(float x, float y); +def powf_finite : TargetLibCall<"__powf_finite", Flt, [Flt, Flt]>; + +/// long double __powl_finite(long double x, long double y); +def powl_finite : TargetLibCall<"__powl_finite", LDbl, [LDbl, LDbl]>; + +/// double __sincospi_stret(double x); +def sincospi_stret + : TargetLibCall<"__sincospi_stret", ? /* Checked manually. */>; + +/// float __sincospif_stret(float x); +def sincospif_stret + : TargetLibCall<"__sincospif_stret", ? /* Checked manually. */>; + +/// double __sinh_finite(double x); +def sinh_finite : TargetLibCall<"__sinh_finite", Dbl, [Dbl]>; + +/// float _sinhf_finite(float x); +def sinhf_finite : TargetLibCall<"__sinhf_finite", Flt, [Flt]>; + +/// long double __sinhl_finite(long double x); +def sinhl_finite : TargetLibCall<"__sinhl_finite", LDbl, [LDbl]>; + +/// double __sinpi(double x); +def sinpi : TargetLibCall<"__sinpi", Dbl, [Dbl]>; + +/// float __sinpif(float x); +def sinpif : TargetLibCall<"__sinpif", Flt, [Flt]>; + +/// int __small_fprintf(FILE *stream, const char *format, ...); +def small_fprintf : TargetLibCall<"__small_fprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int __small_printf(const char *format, ...); +def small_printf : TargetLibCall<"__small_printf", Int, [Ptr, Ellip]>; + +/// int __small_sprintf(char *str, const char *format, ...); +def small_sprintf : TargetLibCall<"__small_sprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int __snprintf_chk(char *s, size_t n, int flags, size_t slen, +/// const char *format, ...); +def snprintf_chk : TargetLibCall<"__snprintf_chk", + Int, [Ptr, SizeT, Int, SizeT, Ptr, Ellip]>; + +/// int __sprintf_chk(char *str, int flags, size_t str_len, +/// const char *format, ...); +def sprintf_chk + : TargetLibCall<"__sprintf_chk", Int, [Ptr, Int, SizeT, Ptr, Ellip]>; + +/// double __sqrt_finite(double x); +def sqrt_finite : TargetLibCall<"__sqrt_finite", Dbl, [Dbl]>; + +/// float __sqrt_finite(float x); +def sqrtf_finite : TargetLibCall<"__sqrtf_finite", Flt, [Flt]>; + +/// long double __sqrt_finite(long double x); +def sqrtl_finite : TargetLibCall<"__sqrtl_finite", LDbl, [LDbl]>; + +/// char *__stpcpy_chk(char *s1, const char *s2, size_t s1size); +def stpcpy_chk : TargetLibCall<"__stpcpy_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *__stpncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); +def stpncpy_chk : TargetLibCall<"__stpncpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strcat_chk(char *s1, const char *s2, size_t s1size); +def strcat_chk : TargetLibCall<"__strcat_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *__strcpy_chk(char *s1, const char *s2, size_t s1size); +def strcpy_chk : TargetLibCall<"__strcpy_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char * __strdup(const char *s); +def dunder_strdup : TargetLibCall<"__strdup", Ptr, [Ptr]>; + +/// size_t __strlcat_chk(char *dst, const char *src, size_t size, +/// size_t dstsize); +def strlcat_chk + : TargetLibCall<"__strlcat_chk", SizeT, [Ptr, Ptr, SizeT, SizeT]>; + +/// size_t __strlcpy_chk(char *dst, const char *src, size_t size, +/// size_t dstsize); +def strlcpy_chk + : TargetLibCall<"__strlcpy_chk", SizeT, [Ptr, Ptr, SizeT, SizeT]>; + +/// size_t __strlen_chk(const char *s1, size_t s1size); +def strlen_chk : TargetLibCall<"__strlen_chk", SizeT, [Ptr, SizeT]>; + +/// char *strncat_chk(char *s1, const char *s2, size_t n, size_t s1size); +def strncat_chk : TargetLibCall<"__strncat_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); +def strncpy_chk : TargetLibCall<"__strncpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strndup(const char *s, size_t n); +def dunder_strndup : TargetLibCall<"__strndup", Ptr, [Ptr, SizeT]>; + +/// char * __strtok_r(char *s, const char *delim, char **save_ptr); +def dunder_strtok_r : TargetLibCall<"__strtok_r", Ptr, [Ptr, Ptr, Ptr]>; + +/// int __vsnprintf_chk(char *s, size_t n, int flags, size_t slen, +/// const char *format, va_list ap); +def vsnprintf_chk + : TargetLibCall<"__vsnprintf_chk", Int, [Ptr, SizeT, Int, SizeT, Ptr, Ptr]>; + +/// int __vsprintf_chk(char *s, int flags, size_t slen, const char *format, +/// va_list ap); +def vsprintf_chk + : TargetLibCall<"__vsprintf_chk", Int, [Ptr, Int, SizeT, Ptr, Ptr]>; + +/// int abs(int j); +def abs : TargetLibCall<"abs", Int, [Int]>; + +/// int access(const char *path, int amode); +def access : TargetLibCall<"access", Int, [Ptr, Int]>; + +/// double acos(double x); +def acos : TargetLibCall<"acos", Dbl, [Dbl]>; + +/// float acosf(float x); +def acosf : TargetLibCall<"acosf", Flt, [Flt]>; + +/// double acosh(double x); +def acosh : TargetLibCall<"acosh", Dbl, [Dbl]>; + +/// float acoshf(float x); +def acoshf : TargetLibCall<"acoshf", Flt, [Flt]>; + +/// long double acoshl(long double x); +def acoshl : TargetLibCall<"acoshl", LDbl, [LDbl]>; + +/// long double acosl(long double x); +def acosl : TargetLibCall<"acosl", LDbl, [LDbl]>; + +/// void *aligned_alloc(size_t alignment, size_t size); +def aligned_alloc : TargetLibCall<"aligned_alloc", Ptr, [SizeT, SizeT]>; + +/// double asin(double x); +def asin : TargetLibCall<"asin", Dbl, [Dbl]>; + +/// float asinf(float x); +def asinf : TargetLibCall<"asinf", Flt, [Flt]>; + +/// double asinh(double x); +def asinh : TargetLibCall<"asinh", Dbl, [Dbl]>; + +/// float asinhf(float x); +def asinhf : TargetLibCall<"asinhf", Flt, [Flt]>; + +/// long double asinhl(long double x); +def asinhl : TargetLibCall<"asinhl", LDbl, [LDbl]>; + +/// long double asinl(long double x); +def asinl : TargetLibCall<"asinl", LDbl, [LDbl]>; + +/// double atan(double x); +def atan : TargetLibCall<"atan", Dbl, [Dbl]>; + +/// double atan2(double y, double x); +def atan2 : TargetLibCall<"atan2", Dbl, [Dbl, Dbl]>; + +/// float atan2f(float y, float x); +def atan2f : TargetLibCall<"atan2f", Flt, [Flt, Flt]>; + +/// long double atan2l(long double y, long double x); +def atan2l : TargetLibCall<"atan2l", LDbl, [LDbl, LDbl]>; + +/// float atanf(float x); +def atanf : TargetLibCall<"atanf", Flt, [Flt]>; + +/// double atanh(double x); +def atanh : TargetLibCall<"atanh", Dbl, [Dbl]>; + +/// float atanhf(float x); +def atanhf : TargetLibCall<"atanhf", Flt, [Flt]>; + +/// long double atanhl(long double x); +def atanhl : TargetLibCall<"atanhl", LDbl, [LDbl]>; + +/// long double atanl(long double x); +def atanl : TargetLibCall<"atanl", LDbl, [LDbl]>; + +/// double atof(const char *str); +def atof : TargetLibCall<"atof", Dbl, [Ptr]>; + +/// int atoi(const char *str); +def atoi : TargetLibCall<"atoi", Int, [Ptr]>; + +/// long atol(const char *str); +def atol : TargetLibCall<"atol", Long, [Ptr]>; + +/// long long atoll(const char *nptr); +def atoll : TargetLibCall<"atoll", LLong, [Ptr]>; + +/// int bcmp(const void *s1, const void *s2, size_t n); +def bcmp : TargetLibCall<"bcmp", Int, [Ptr, Ptr, SizeT]>; + +/// void bcopy(const void *s1, void *s2, size_t n); +def bcopy : TargetLibCall<"bcopy", Void, [Ptr, Ptr, SizeT]>; + +/// void bzero(void *s, size_t n); +def bzero : TargetLibCall<"bzero", Void, [Ptr, SizeT]>; + +/// double cabs(double complex z) +def cabs : TargetLibCall<"cabs", ? /* Checked manually. */>; + +/// float cabs(float complex z) +def cabsf : TargetLibCall<"cabsf", ? /* Checked manually. */>; + +/// long double cabs(long double complex z) +def cabsl : TargetLibCall<"cabsl", ? /* Checked manually. */>; + +/// void *calloc(size_t count, size_t size); +def calloc : TargetLibCall<"calloc", Ptr, [SizeT, SizeT]>; + +/// double cbrt(double x); +def cbrt : TargetLibCall<"cbrt", Dbl, [Dbl]>; + +/// float cbrtf(float x); +def cbrtf : TargetLibCall<"cbrtf", Flt, [Flt]>; + +/// long double cbrtl(long double x); +def cbrtl : TargetLibCall<"cbrtl", LDbl, [LDbl]>; + +/// double ceil(double x); +def ceil : TargetLibCall<"ceil", Dbl, [Dbl]>; + +/// float ceilf(float x); +def ceilf : TargetLibCall<"ceilf", Flt, [Flt]>; + +/// long double ceill(long double x); +def ceill : TargetLibCall<"ceill", LDbl, [LDbl]>; + +/// int chmod(const char *path, mode_t mode); +def chmod : TargetLibCall<"chmod", Int, [Ptr, IntX]>; + +/// int chown(const char *path, uid_t owner, gid_t group); +def chown : TargetLibCall<"chown", Int, [Ptr, IntX, IntX]>; + +/// void clearerr(FILE *stream); +def clearerr : TargetLibCall<"clearerr", Void, [Ptr]>; + +/// int closedir(DIR *dirp); +def closedir : TargetLibCall<"closedir", Int, [Ptr]>; + +/// double copysign(double x, double y); +def copysign : TargetLibCall<"copysign", Dbl, [Dbl, Dbl]>; + +/// float copysignf(float x, float y); +def copysignf : TargetLibCall<"copysignf", Flt, [Flt, Flt]>; + +/// long double copysignl(long double x, long double y); +def copysignl : TargetLibCall<"copysignl", LDbl, [LDbl, LDbl]>; + +/// double cos(double x); +def cos : TargetLibCall<"cos", Dbl, [Dbl]>; + +/// float cosf(float x); +def cosf : TargetLibCall<"cosf", Flt, [Flt]>; + +/// double cosh(double x); +def cosh : TargetLibCall<"cosh", Dbl, [Dbl]>; + +/// float coshf(float x); +def coshf : TargetLibCall<"coshf", Flt, [Flt]>; + +/// long double coshl(long double x); +def coshl : TargetLibCall<"coshl", LDbl, [LDbl]>; + +/// long double cosl(long double x); +def cosl : TargetLibCall<"cosl", LDbl, [LDbl]>; + +/// char *ctermid(char *s); +def ctermid : TargetLibCall<"ctermid", Ptr, [Ptr]>; + +/// double erf(double x); +def erf : TargetLibCall<"erf", Dbl, [Dbl]>; + +/// float erff(float x); +def erff : TargetLibCall<"erff", Flt, [Flt]>; + +/// long double erfl(long double x); +def erfl : TargetLibCall<"erfl", LDbl, [LDbl]>; + +/// double tgamma(double x); +def tgamma : TargetLibCall<"tgamma", Dbl, [Dbl]>; + +/// float tgammaf(float x); +def tgammaf : TargetLibCall<"tgammaf", Flt, [Flt]>; + +/// long double tgammal(long double x); +def tgammal : TargetLibCall<"tgammal", LDbl, [LDbl]>; + +/// int execl(const char *path, const char *arg, ...); +def execl : TargetLibCall<"execl", Int, [Ptr, Ptr, Ellip]>; + +/// int execle(const char *file, const char *arg, ..., char * const envp[]); +def execle : TargetLibCall<"execle", Int, [Ptr, Ptr, Ellip]>; + +/// int execlp(const char *file, const char *arg, ...); +def execlp : TargetLibCall<"execlp", Int, [Ptr, Ptr, Ellip]>; + +/// int execv(const char *path, char *const argv[]); +def execv : TargetLibCall<"execv", Int, [Ptr, Ptr]>; + +/// int execvP(const char *file, const char *search_path, char *const argv[]); +def execvP : TargetLibCall<"execvP", Int, [Ptr, Ptr, Ptr]>; + +/// int execve(const char *filename, char *const argv], [char *const envp[]); +def execve : TargetLibCall<"execve", Int, [Ptr, Ptr, Ptr]>; + +/// int execvp(const char *file, char *const argv[]); +def execvp : TargetLibCall<"execvp", Int, [Ptr, Ptr]>; + +/// int execvpe(const char *file, char *const argv], [char *const envp[]); +def execvpe : TargetLibCall<"execvpe", Int, [Ptr, Ptr, Ptr]>; + +/// double exp(double x); +def exp : TargetLibCall<"exp", Dbl, [Dbl]>; + +/// double exp10(double x); +def exp10 : TargetLibCall<"exp10", Dbl, [Dbl]>; + +/// float exp10f(float x); +def exp10f : TargetLibCall<"exp10f", Flt, [Flt]>; + +/// long double exp10l(long double x); +def exp10l : TargetLibCall<"exp10l", LDbl, [LDbl]>; + +/// double exp2(double x); +def exp2 : TargetLibCall<"exp2", Dbl, [Dbl]>; + +/// float exp2f(float x); +def exp2f : TargetLibCall<"exp2f", Flt, [Flt]>; + +/// long double exp2l(long double x); +def exp2l : TargetLibCall<"exp2l", LDbl, [LDbl]>; + +/// float expf(float x); +def expf : TargetLibCall<"expf", Flt, [Flt]>; + +/// long double expl(long double x); +def expl : TargetLibCall<"expl", LDbl, [LDbl]>; + +/// double expm1(double x); +def expm1 : TargetLibCall<"expm1", Dbl, [Dbl]>; + +/// float expm1f(float x); +def expm1f : TargetLibCall<"expm1f", Flt, [Flt]>; + +/// long double expm1l(long double x); +def expm1l : TargetLibCall<"expm1l", LDbl, [LDbl]>; + +/// double fabs(double x); +def fabs : TargetLibCall<"fabs", Dbl, [Dbl]>; + +/// float fabsf(float x); +def fabsf : TargetLibCall<"fabsf", Flt, [Flt]>; + +/// long double fabsl(long double x); +def fabsl : TargetLibCall<"fabsl", LDbl, [LDbl]>; + +/// int fclose(FILE *stream); +def fclose : TargetLibCall<"fclose", Int, [Ptr]>; + +/// FILE *fdopen(int fildes, const char *mode); +def fdopen : TargetLibCall<"fdopen", Ptr, [Int, Ptr]>; + +/// int feof(FILE *stream); +def feof : TargetLibCall<"feof", Int, [Ptr]>; + +/// int ferror(FILE *stream); +def ferror : TargetLibCall<"ferror", Int, [Ptr]>; + +/// int fflush(FILE *stream); +def fflush : TargetLibCall<"fflush", Int, [Ptr]>; + +/// int ffs(int i); +def ffs : TargetLibCall<"ffs", Int, [Int]>; + +/// int ffsl(long int i); +def ffsl : TargetLibCall<"ffsl", Int, [Long]>; + +/// int ffsll(long long int i); +def ffsll : TargetLibCall<"ffsll", Int, [LLong]>; + +/// int fgetc(FILE *stream); +def fgetc : TargetLibCall<"fgetc", Int, [Ptr]>; + +/// int fgetc_unlocked(FILE *stream); +def fgetc_unlocked : TargetLibCall<"fgetc_unlocked", Int, [Ptr]>; + +/// int fgetpos(FILE *stream, fpos_t *pos); +def fgetpos : TargetLibCall<"fgetpos", Int, [Ptr, Ptr]>; + +/// char *fgets(char *s, int n, FILE *stream); +def fgets : TargetLibCall<"fgets", Ptr, [Ptr, Int, Ptr]>; + +/// char *fgets_unlocked(char *s, int n, FILE *stream); +def fgets_unlocked : TargetLibCall<"fgets_unlocked", Ptr, [Ptr, Int, Ptr]>; + +/// int fileno(FILE *stream); +def fileno : TargetLibCall<"fileno", Int, [Ptr]>; + +/// int fiprintf(FILE *stream, const char *format, ...); +def fiprintf : TargetLibCall<"fiprintf", Int, [Ptr, Ptr, Ellip]>; + +/// void flockfile(FILE *file); +def flockfile : TargetLibCall<"flockfile", Void, [Ptr]>; + +/// double floor(double x); +def floor : TargetLibCall<"floor", Dbl, [Dbl]>; + +/// float floorf(float x); +def floorf : TargetLibCall<"floorf", Flt, [Flt]>; + +/// long double floorl(long double x); +def floorl : TargetLibCall<"floorl", LDbl, [LDbl]>; + +/// int fls(int i); +def fls : TargetLibCall<"fls", Int, [Int]>; + +/// int flsl(long int i); +def flsl : TargetLibCall<"flsl", Int, [Long]>; + +/// int flsll(long long int i); +def flsll : TargetLibCall<"flsll", Int, [LLong]>; + +// Calls to fmax and fmin library functions expand to the llvm.maxnnum and +// llvm.minnum intrinsics with the correct parameter types for the arguments +// (all types must match). +/// double fmax(double x, double y); +def fmax : TargetLibCall<"fmax", Floating, [Same, Same]>; + +/// float fmaxf(float x, float y); +def fmaxf : TargetLibCall<"fmaxf", Floating, [Same, Same]>; + +/// long double fmaxl(long double x, long double y); +def fmaxl : TargetLibCall<"fmaxl", Floating, [Same, Same]>; + +/// double fmin(double x, double y); +def fmin : TargetLibCall<"fmin", Floating, [Same, Same]>; + +/// float fminf(float x, float y); +def fminf : TargetLibCall<"fminf", Floating, [Same, Same]>; + +/// long double fminl(long double x, long double y); +def fminl : TargetLibCall<"fminl", Floating, [Same, Same]>; + +// Calls to fmaximum_num and fminimum_num library functions expand to the +// llvm.maximumnum and llvm.minimumnum intrinsics with the correct parameter +// types for the arguments (all types must match). +/// double fmaximum_num(double x, double y); +def fmaximum_num : TargetLibCall<"fmaximum_num", Floating, [Same, Same]>; + +/// float fmaximum_numf(float x, float y); +def fmaximum_numf : TargetLibCall<"fmaximum_numf", Floating, [Same, Same]>; + +/// long double fmaximum_numl(long double x, long double y); +def fmaximum_numl : TargetLibCall<"fmaximum_numl", Floating, [Same, Same]>; + +/// double fminimum_num(double x, double y); +def fminimum_num : TargetLibCall<"fminimum_num", Floating, [Same, Same]>; + +/// float fminimum_numf(float x, float y); +def fminimum_numf : TargetLibCall<"fminimum_numf", Floating, [Same, Same]>; + +/// long double fminimum_numl(long double x, long double y); +def fminimum_numl : TargetLibCall<"fminimum_numl", Floating, [Same, Same]>; + +/// double fmod(double x, double y); +def fmod : TargetLibCall<"fmod", Dbl, [Dbl, Dbl]>; + +/// float fmodf(float x, float y); +def fmodf : TargetLibCall<"fmodf", Flt, [Flt, Flt]>; + +/// long double fmodl(long double x, long double y); +def fmodl : TargetLibCall<"fmodl", LDbl, [LDbl, LDbl]>; + +/// FILE *fopen(const char *filename, const char *mode); +def fopen : TargetLibCall<"fopen", Ptr, [Ptr, Ptr]>; + +/// FILE *fopen64(const char *filename, const char *opentype) +def fopen64 : TargetLibCall<"fopen64", Ptr, [Ptr, Ptr]>; + +/// int fork(); +def fork : TargetLibCall<"fork", Int, []>; + +/// int fprintf(FILE *stream, const char *format, ...); +def fprintf : TargetLibCall<"fprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int fputc(int c, FILE *stream); +def fputc : TargetLibCall<"fputc", Int, [Int, Ptr]>; + +/// int fputc_unlocked(int c, FILE *stream); +def fputc_unlocked : TargetLibCall<"fputc_unlocked", Int, [Int, Ptr]>; + +/// int fputs(const char *s, FILE *stream); +def fputs : TargetLibCall<"fputs", Int, [Ptr, Ptr]>; + +/// int fputs_unlocked(const char *s, FILE *stream); +def fputs_unlocked : TargetLibCall<"fputs_unlocked", Int, [Ptr, Ptr]>; + +/// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); +def fread : TargetLibCall<"fread", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// size_t fread_unlocked(void *ptr, size_t size, size_t nitems, FILE *stream); +def fread_unlocked + : TargetLibCall<"fread_unlocked", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// void free(void *ptr); +def free : TargetLibCall<"free", Void, [Ptr]>; + +/// double frexp(double num, int *exp); +def frexp : TargetLibCall<"frexp", Dbl, [Dbl, Ptr]>; + +/// float frexpf(float num, int *exp); +def frexpf : TargetLibCall<"frexpf", Flt, [Flt, Ptr]>; + +/// long double frexpl(long double num, int *exp); +def frexpl : TargetLibCall<"frexpl", LDbl, [LDbl, Ptr]>; + +/// int fscanf(FILE *stream, const char *format, ... ); +def fscanf : TargetLibCall<"fscanf", Int, [Ptr, Ptr, Ellip]>; + +/// int fseek(FILE *stream, long offset, int whence); +def fseek : TargetLibCall<"fseek", Int, [Ptr, Long, Int]>; + +/// int fseeko(FILE *stream, off_t offset, int whence); +def fseeko : TargetLibCall<"fseeko", Int, [Ptr, IntX, Int]>; + +/// int fseeko64(FILE *stream, off64_t offset, int whence) +def fseeko64 : TargetLibCall<"fseeko64", Int, [Ptr, Int64, Int]>; + +/// int fsetpos(FILE *stream, const fpos_t *pos); +def fsetpos : TargetLibCall<"fsetpos", Int, [Ptr, Ptr]>; + +/// int fstat(int fildes, struct stat *buf); +def fstat : TargetLibCall<"fstat", Int, [Int, Ptr]>; + +/// int fstat64(int filedes, struct stat64 *buf) +def fstat64 : TargetLibCall<"fstat64", Int, [Int, Ptr]>; + +/// int fstatvfs(int fildes, struct statvfs *buf); +def fstatvfs : TargetLibCall<"fstatvfs", Int, [Int, Ptr]>; + +/// int fstatvfs64(int fildes, struct statvfs64 *buf); +def fstatvfs64 : TargetLibCall<"fstatvfs64", Int, [Int, Ptr]>; + +/// long ftell(FILE *stream); +def ftell : TargetLibCall<"ftell", Long, [Ptr]>; + +/// off_t ftello(FILE *stream); +def ftello : TargetLibCall<"ftello", IntPlus, [Ptr]>; + +/// off64_t ftello64(FILE *stream) +def ftello64 : TargetLibCall<"ftello64", Int64, [Ptr]>; + +/// int ftrylockfile(FILE *file); +def ftrylockfile : TargetLibCall<"ftrylockfile", Int, [Ptr]>; + +/// void funlockfile(FILE *file); +def funlockfile : TargetLibCall<"funlockfile", Void, [Ptr]>; + +/// size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); +def fwrite : TargetLibCall<"fwrite", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// size_t fwrite_unlocked(const void *ptr, size_t size, size_t nitems, +/// FILE *stream); +def fwrite_unlocked + : TargetLibCall<"fwrite_unlocked", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// int getc(FILE *stream); +def getc : TargetLibCall<"getc", Int, [Ptr]>; + +/// int getc_unlocked(FILE *stream); +def getc_unlocked : TargetLibCall<"getc_unlocked", Int, [Ptr]>; + +/// int getchar(void); +def getchar : TargetLibCall<"getchar", Int, []>; + +/// int getchar_unlocked(void); +def getchar_unlocked : TargetLibCall<"getchar_unlocked", Int, []>; + +/// char *getenv(const char *name); +def getenv : TargetLibCall<"getenv", Ptr, [Ptr]>; + +/// int getitimer(int which, struct itimerval *value); +def getitimer : TargetLibCall<"getitimer", Int, [Int, Ptr]>; + +/// int getlogin_r(char *name, size_t namesize); +def getlogin_r : TargetLibCall<"getlogin_r", Int, [Ptr, SizeT]>; + +/// struct passwd *getpwnam(const char *name); +def getpwnam : TargetLibCall<"getpwnam", Ptr, [Ptr]>; + +/// char *gets(char *s); +def gets : TargetLibCall<"gets", Ptr, [Ptr]>; + +/// int gettimeofday(struct timeval *tp, void *tzp); +def gettimeofday : TargetLibCall<"gettimeofday", Int, [Ptr, Ptr]>; + +/// uint32_t htonl(uint32_t hostlong); +def htonl : TargetLibCall<"htonl", Int32, [Int32]>; + +/// uint16_t htons(uint16_t hostshort); +def htons : TargetLibCall<"htons", Int16, [Int16]>; + +/// double hypot(double x, double y); +def hypot : TargetLibCall<"hypot", Dbl, [Dbl, Dbl]>; + +/// float hypotf(float x, float y); +def hypotf : TargetLibCall<"hypotf", Flt, [Flt, Flt]>; + +/// long double hypotl(long double x, long double y); +def hypotl : TargetLibCall<"hypotl", LDbl, [LDbl, LDbl]>; + +/// int iprintf(const char *format, ...); +def iprintf : TargetLibCall<"iprintf", Int, [Ptr, Ellip]>; + +/// int isascii(int c); +def isascii : TargetLibCall<"isascii", Int, [Int]>; + +/// int isdigit(int c); +def isdigit : TargetLibCall<"isdigit", Int, [Int]>; + +/// long int labs(long int j); +def labs : TargetLibCall<"labs", Long, [Same]>; + +/// int lchown(const char *path, uid_t owner, gid_t group); +def lchown : TargetLibCall<"lchown", Int, [Ptr, IntX, IntX]>; + +/// double ldexp(double x, int n); +def ldexp : TargetLibCall<"ldexp", Dbl, [Dbl, Int]>; + +/// float ldexpf(float x, int n); +def ldexpf : TargetLibCall<"ldexpf", Flt, [Flt, Int]>; + +/// long double ldexpl(long double x, int n); +def ldexpl : TargetLibCall<"ldexpl", LDbl, [LDbl, Int]>; + +/// long long int llabs(long long int j); +def llabs : TargetLibCall<"llabs", LLong, [LLong]>; + +/// double log(double x); +def log : TargetLibCall<"log", Dbl, [Dbl]>; + +/// double log10(double x); +def log10 : TargetLibCall<"log10", Dbl, [Dbl]>; + +/// float log10f(float x); +def log10f : TargetLibCall<"log10f", Flt, [Flt]>; + +/// long double log10l(long double x); +def log10l : TargetLibCall<"log10l", LDbl, [LDbl]>; + +/// double log1p(double x); +def log1p : TargetLibCall<"log1p", Dbl, [Dbl]>; + +/// float log1pf(float x); +def log1pf : TargetLibCall<"log1pf", Flt, [Flt]>; + +/// long double log1pl(long double x); +def log1pl : TargetLibCall<"log1pl", LDbl, [LDbl]>; + +/// double log2(double x); +def log2 : TargetLibCall<"log2", Dbl, [Dbl]>; + +/// float log2f(float x); +def log2f : TargetLibCall<"log2f", Flt, [Flt]>; + +/// double long double log2l(long double x); +def log2l : TargetLibCall<"log2l", LDbl, [LDbl]>; + +/// int ilogb(double x); +def ilogb : TargetLibCall<"ilogb", Int, [Dbl]>; + +/// int ilogbf(float x); +def ilogbf : TargetLibCall<"ilogbf", Int, [Flt]>; + +/// int ilogbl(long double x); +def ilogbl : TargetLibCall<"ilogbl", Int, [LDbl]>; + +/// double logb(double x); +def logb : TargetLibCall<"logb", Dbl, [Dbl]>; + +/// float logbf(float x); +def logbf : TargetLibCall<"logbf", Flt, [Flt]>; + +/// long double logbl(long double x); +def logbl : TargetLibCall<"logbl", LDbl, [LDbl]>; + +/// float logf(float x); +def logf : TargetLibCall<"logf", Flt, [Flt]>; + +/// long double logl(long double x); +def logl : TargetLibCall<"logl", LDbl, [LDbl]>; + +/// int lstat(const char *path, struct stat *buf); +def lstat : TargetLibCall<"lstat", Int, [Ptr, Ptr]>; + +/// int lstat64(const char *path, struct stat64 *buf); +def lstat64 : TargetLibCall<"lstat64", Int, [Ptr, Ptr]>; + +/// void *malloc(size_t size); +def malloc : TargetLibCall<"malloc", Ptr, [SizeT]>; + +/// void *memalign(size_t boundary, size_t size); +def memalign : TargetLibCall<"memalign", Ptr, [SizeT, SizeT]>; + +/// void *memccpy(void *s1, const void *s2, int c, size_t n); +def memccpy : TargetLibCall<"memccpy", Ptr, [Ptr, Ptr, Int, SizeT]>; + +/// void *memchr(const void *s, int c, size_t n); +def memchr : TargetLibCall<"memchr", Ptr, [Ptr, Int, SizeT]>; + +/// int memcmp(const void *s1, const void *s2, size_t n); +def memcmp : TargetLibCall<"memcmp", Int, [Ptr, Ptr, SizeT]>; + +/// void *memcpy(void *s1, const void *s2, size_t n); +def memcpy : TargetLibCall<"memcpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *memmove(void *s1, const void *s2, size_t n); +def memmove : TargetLibCall<"memmove", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *mempcpy(void *s1, const void *s2, size_t n); +def mempcpy : TargetLibCall<"mempcpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *memrchr(const void *s, int c, size_t n); +def memrchr : TargetLibCall<"memrchr", Ptr, [Ptr, Int, SizeT]>; + +/// void *memset(void *b, int c, size_t len); +def memset : TargetLibCall<"memset", Ptr, [Ptr, Int, SizeT]>; + +/// void memset_pattern16(void *b, const void *pattern16, size_t len); +def memset_pattern16 + : TargetLibCall<"memset_pattern16", Void, [Ptr, Ptr, SizeT]>; + +/// void memset_pattern4(void *b, const void *pattern4, size_t len); +def memset_pattern4 : TargetLibCall<"memset_pattern4", Void, [Ptr, Ptr, SizeT]>; + +/// void memset_pattern8(void *b, const void *pattern8, size_t len); +def memset_pattern8 : TargetLibCall<"memset_pattern8", Void, [Ptr, Ptr, SizeT]>; + +/// int mkdir(const char *path, mode_t mode); +def mkdir : TargetLibCall<"mkdir", Int, [Ptr, IntX]>; + +/// time_t mktime(struct tm *timeptr); +def mktime : TargetLibCall<"mktime", IntPlus, [Ptr]>; + +/// double modf(double x, double *iptr); +def modf : TargetLibCall<"modf", Dbl, [Dbl, Ptr]>; + +/// float modff(float, float *iptr); +def modff : TargetLibCall<"modff", Flt, [Flt, Ptr]>; + +/// long double modfl(long double value, long double *iptr); +def modfl : TargetLibCall<"modfl", LDbl, [LDbl, Ptr]>; + +/// double nan(const char *arg); +def nan : TargetLibCall<"nan", Dbl, [Ptr]>; + +/// float nanf(const char *arg); +def nanf : TargetLibCall<"nanf", Flt, [Ptr]>; + +/// long double nanl(const char *arg); +def nanl : TargetLibCall<"nanl", LDbl, [Ptr]>; + +/// double nearbyint(double x); +def nearbyint : TargetLibCall<"nearbyint", Dbl, [Dbl]>; + +/// float nearbyintf(float x); +def nearbyintf : TargetLibCall<"nearbyintf", Flt, [Flt]>; + +/// long double nearbyintl(long double x); +def nearbyintl : TargetLibCall<"nearbyintl", LDbl, [LDbl]>; + +/// double nextafter(double x, double y); +def nextafter : TargetLibCall< "nextafter", Dbl, [Dbl, Dbl]>; + +/// float nextafterf(float x, float y); +def nextafterf : TargetLibCall< "nextafterf", Flt, [Flt, Flt]>; + +/// long double nextafterl(long double x, long double y); +def nextafterl : TargetLibCall< "nextafterl", LDbl, [LDbl, LDbl]>; + +/// double nexttoward(double x, long double y); +def nexttoward : TargetLibCall< "nexttoward", Dbl, [Dbl, LDbl]>; + +/// float nexttowardf(float x, long double y); +def nexttowardf : TargetLibCall< "nexttowardf", Flt, [Flt, LDbl]>; + +/// long double nexttowardl(long double x, long double y); +def nexttowardl : TargetLibCall< "nexttowardl", LDbl, [LDbl, LDbl]>; + +/// uint32_t ntohl(uint32_t netlong); +def ntohl : TargetLibCall<"ntohl", Int32, [Int32]>; + +/// uint16_t ntohs(uint16_t netshort); +def ntohs : TargetLibCall<"ntohs", Int16, [Int16]>; + +/// int open(const char *path, int oflag, ... ); +def open : TargetLibCall<"open", Int, [Ptr, Int, Ellip]>; + +/// int open64(const char *filename, int flags, [mode_t mode]) +def open64 : TargetLibCall<"open64", Int, [Ptr, Int, Ellip]>; + +/// DIR *opendir(const char *dirname); +def opendir : TargetLibCall<"opendir", Ptr, [Ptr]>; + +/// int pclose(FILE *stream); +def pclose : TargetLibCall<"pclose", Int, [Ptr]>; + +/// void perror(const char *s); +def perror : TargetLibCall<"perror", Void, [Ptr]>; + +/// FILE *popen(const char *command, const char *mode); +def popen : TargetLibCall<"popen", Ptr, [Ptr, Ptr]>; + +/// int posix_memalign(void **memptr, size_t alignment, size_t size); +def posix_memalign : TargetLibCall<"posix_memalign", Int, [Ptr, SizeT, SizeT]>; + +/// double pow(double x, double y); +def pow : TargetLibCall<"pow", Dbl, [Dbl, Dbl]>; + +/// float powf(float x, float y); +def powf : TargetLibCall<"powf", Flt, [Flt, Flt]>; + +/// long double powl(long double x, long double y); +def powl : TargetLibCall<"powl", LDbl, [LDbl, LDbl]>; + +/// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); +def pread : TargetLibCall<"pread", SSizeT, [Int, Ptr, SizeT, IntPlus]>; + +/// int printf(const char *format, ...); +def printf : TargetLibCall<"printf", Int, [Ptr, Ellip]>; + +/// int putc(int c, FILE *stream); +def putc : TargetLibCall<"putc", Int, [Int, Ptr]>; + +/// int putc_unlocked(int c, FILE *stream); +def putc_unlocked : TargetLibCall<"putc_unlocked", Int, [Int, Ptr]>; + +/// int putchar(int c); +def putchar : TargetLibCall<"putchar", Int, [Int]>; + +/// int putchar_unlocked(int c); +def putchar_unlocked : TargetLibCall<"putchar_unlocked", Int, [Int]>; + +/// int puts(const char *s); +def puts : TargetLibCall<"puts", Int, [Ptr]>; + +/// void *pvalloc(size_t size); +def pvalloc : TargetLibCall<"pvalloc", Ptr, [SizeT]>; + +/// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); +def pwrite : TargetLibCall<"pwrite", SSizeT, [Int, Ptr, SizeT, IntPlus]>; + +/// void qsort(void *base, size_t nel, size_t width, +/// int (*compar)(const void *, const void *)); +def qsort : TargetLibCall<"qsort", Void, [Ptr, SizeT, SizeT, Ptr]>; + +/// ssize_t read(int fildes, void *buf, size_t nbyte); +def read : TargetLibCall<"read", SSizeT, [Int, Ptr, SizeT]>; + +/// ssize_t readlink(const char *path, char *buf, size_t bufsize); +def readlink : TargetLibCall<"readlink", SSizeT, [Ptr, Ptr, SizeT]>; + +/// void *realloc(void *ptr, size_t size); +def realloc : TargetLibCall<"realloc", Ptr, [Ptr, SizeT]>; + +/// void *reallocf(void *ptr, size_t size); +def reallocf : TargetLibCall<"reallocf", Ptr, [Ptr, SizeT]>; + +/// void *reallocarray(void *ptr, size_t nmemb, size_t size); +def reallocarray : TargetLibCall<"reallocarray", Ptr, [Ptr, SizeT, SizeT]>; + +/// char *realpath(const char *file_name, char *resolved_name); +def realpath : TargetLibCall<"realpath", Ptr, [Ptr, Ptr]>; + +/// double remainder(double x, double y); +def remainder : TargetLibCall<"remainder", Dbl, [Dbl, Dbl]>; + +/// float remainderf(float x, float y); +def remainderf : TargetLibCall<"remainderf", Flt, [Flt, Flt]>; + +/// long double remainderl(long double x, long double y); +def remainderl : TargetLibCall<"remainderl", LDbl, [LDbl, LDbl]>; + +/// double remquo(double x, double y, int *quo); +def remquo : TargetLibCall<"remquo", Dbl, [Dbl, Dbl, Ptr]>; + +/// float remquof(float x, float y, int *quo); +def remquof : TargetLibCall<"remquof", Flt, [Flt, Flt, Ptr]>; + +/// long double remquol(long double x, long double y, int *quo); +def remquol : TargetLibCall<"remquol", LDbl, [LDbl, LDbl, Ptr]>; + +/// double fdim(double x, double y); +def fdim : TargetLibCall<"fdim", Dbl, [Dbl, Dbl]>; + +/// float fdimf(float x, float y); +def fdimf : TargetLibCall<"fdimf", Flt, [Flt, Flt]>; + +/// long double fdiml(long double x, long double y); +def fdiml : TargetLibCall<"fdiml", LDbl, [LDbl, LDbl]>; + +/// int remove(const char *path); +def remove : TargetLibCall<"remove", Int, [Ptr]>; + +/// int rename(const char *old, const char *new); +def rename : TargetLibCall<"rename", Int, [Ptr, Ptr]>; + +/// void rewind(FILE *stream); +def rewind : TargetLibCall<"rewind", Void, [Ptr]>; + +/// double rint(double x); +def rint : TargetLibCall<"rint", Dbl, [Dbl]>; + +/// float rintf(float x); +def rintf : TargetLibCall<"rintf", Flt, [Flt]>; + +/// long double rintl(long double x); +def rintl : TargetLibCall<"rintl", LDbl, [LDbl]>; + +/// int rmdir(const char *path); +def rmdir : TargetLibCall<"rmdir", Int, [Ptr]>; + +/// double round(double x); +def round : TargetLibCall<"round", Dbl, [Dbl]>; + +/// double roundeven(double x); +def roundeven : TargetLibCall<"roundeven", Dbl, [Dbl]>; + +/// float roundevenf(float x); +def roundevenf : TargetLibCall<"roundevenf", Flt, [Flt]>; + +/// long double roundevenl(long double x); +def roundevenl : TargetLibCall<"roundevenl", LDbl, [LDbl]>; + +/// float roundf(float x); +def roundf : TargetLibCall<"roundf", Flt, [Flt]>; + +/// long double roundl(long double x); +def roundl : TargetLibCall<"roundl", LDbl, [LDbl]>; + +/// double scalbln(double arg, long exp); +def scalbln : TargetLibCall<"scalbln", Dbl, [Dbl, Long]>; + +/// float scalblnf(float arg, long exp); +def scalblnf : TargetLibCall<"scalblnf", Flt, [Flt, Long]>; + +/// long double scalblnl(long double arg, long exp); +def scalblnl : TargetLibCall<"scalblnl", LDbl, [LDbl, Long]>; + +/// double scalbn(double arg, int exp); +def scalbn : TargetLibCall<"scalbn", Dbl, [Dbl, Int]>; + +/// float scalbnf(float arg, int exp); +def scalbnf : TargetLibCall<"scalbnf", Flt, [Flt, Int]>; + +/// long double scalbnl(long double arg, int exp); +def scalbnl : TargetLibCall<"scalbnl", LDbl, [LDbl, Int]>; + +/// int scanf(const char *restrict format, ... ); +def scanf : TargetLibCall<"scanf", Int, [Ptr, Ellip]>; + +/// void setbuf(FILE *stream, char *buf); +def setbuf : TargetLibCall<"setbuf", Void, [Ptr, Ptr]>; + +/// int setitimer(int which, const struct itimerval *value, +/// struct itimerval *ovalue); +def setitimer : TargetLibCall<"setitimer", Int, [Int, Ptr, Ptr]>; + +/// int setvbuf(FILE *stream, char *buf, int type, size_t size); +def setvbuf : TargetLibCall<"setvbuf", Int, [Ptr, Ptr, Int, SizeT]>; + +/// double sin(double x); +def sin : TargetLibCall<"sin", Dbl, [Dbl]>; + +/// float sinf(float x); +def sinf : TargetLibCall<"sinf", Flt, [Flt]>; + +/// double sinh(double x); +def sinh : TargetLibCall<"sinh", Dbl, [Dbl]>; + +/// float sinhf(float x); +def sinhf : TargetLibCall<"sinhf", Flt, [Flt]>; + +/// long double sinhl(long double x); +def sinhl : TargetLibCall<"sinhl", LDbl, [LDbl]>; + +/// long double sinl(long double x); +def sinl : TargetLibCall<"sinl", LDbl, [LDbl]>; + +/// void sincos(double x, double *sin_out, double *cos_out); +def sincos : TargetLibCall<"sincos", Void, [Dbl, Ptr, Ptr]>; + +/// void sincosf(float x, float *sin_out, float *cos_out); +def sincosf : TargetLibCall<"sincosf", Void, [Flt, Ptr, Ptr]>; + +/// void sincosl(long double x, long double *sin_out, long double *cos_out); +def sincosl : TargetLibCall<"sincosl", Void, [LDbl, Ptr, Ptr]>; + +/// int siprintf(char *str, const char *format, ...); +def siprintf : TargetLibCall<"siprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int snprintf(char *s, size_t n, const char *format, ...); +def snprintf : TargetLibCall<"snprintf", Int, [Ptr, SizeT, Ptr, Ellip]>; + +/// int sprintf(char *str, const char *format, ...); +def sprintf : TargetLibCall<"sprintf", Int, [Ptr, Ptr, Ellip]>; + +/// double sqrt(double x); +def sqrt : TargetLibCall<"sqrt", Dbl, [Dbl]>; + +/// float sqrtf(float x); +def sqrtf : TargetLibCall<"sqrtf", Flt, [Flt]>; + +/// long double sqrtl(long double x); +def sqrtl : TargetLibCall<"sqrtl", LDbl, [LDbl]>; + +/// int sscanf(const char *s, const char *format, ... ); +def sscanf : TargetLibCall<"sscanf", Int, [Ptr, Ptr, Ellip]>; + +/// int stat(const char *path, struct stat *buf); +def stat : TargetLibCall<"stat", Int, [Ptr, Ptr]>; + +/// int stat64(const char *path, struct stat64 *buf); +def stat64 : TargetLibCall<"stat64", Int, [Ptr, Ptr]>; + +/// int statvfs(const char *path, struct statvfs *buf); +def statvfs : TargetLibCall<"statvfs", Int, [Ptr, Ptr]>; + +/// int statvfs64(const char *path, struct statvfs64 *buf) +def statvfs64 : TargetLibCall<"statvfs64", Int, [Ptr, Ptr]>; + +/// char *stpcpy(char *s1, const char *s2); +def stpcpy : TargetLibCall<"stpcpy", Ptr, [Ptr, Ptr]>; + +/// char *stpncpy(char *s1, const char *s2, size_t n); +def stpncpy : TargetLibCall<"stpncpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// int strcasecmp(const char *s1, const char *s2); +def strcasecmp : TargetLibCall<"strcasecmp", Int, [Ptr, Ptr]>; + +/// char *strcat(char *s1, const char *s2); +def strcat : TargetLibCall<"strcat", Ptr, [Ptr, Ptr]>; + +/// char *strchr(const char *s, int c); +def strchr : TargetLibCall<"strchr", Ptr, [Ptr, Int]>; + +/// int strcmp(const char *s1, const char *s2); +def strcmp : TargetLibCall<"strcmp", Int, [Ptr, Ptr]>; + +/// int strcoll(const char *s1, const char *s2); +def strcoll : TargetLibCall<"strcoll", Int, [Ptr, Ptr]>; + +/// char *strcpy(char *s1, const char *s2); +def strcpy : TargetLibCall<"strcpy", Ptr, [Ptr, Ptr]>; + +/// size_t strcspn(const char *s1, const char *s2); +def strcspn : TargetLibCall<"strcspn", SizeT, [Ptr, Ptr]>; + +/// char *strdup(const char *s1); +def strdup : TargetLibCall<"strdup", Ptr, [Ptr]>; + +/// size_t strlcat(char *dst, const char *src, size_t size); +def strlcat : TargetLibCall<"strlcat", SizeT, [Ptr, Ptr, SizeT]>; + +/// size_t strlcpy(char *dst, const char *src, size_t size); +def strlcpy : TargetLibCall<"strlcpy", SizeT, [Ptr, Ptr, SizeT]>; + +/// size_t strlen(const char *s); +def strlen : TargetLibCall<"strlen", SizeT, [Ptr]>; + +/// int strncasecmp(const char *s1, const char *s2, size_t n); +def strncasecmp : TargetLibCall<"strncasecmp", Int, [Ptr, Ptr, SizeT]>; + +/// char *strncat(char *s1, const char *s2, size_t n); +def strncat : TargetLibCall<"strncat", Ptr, [Ptr, Ptr, SizeT]>; + +/// int strncmp(const char *s1, const char *s2, size_t n); +def strncmp : TargetLibCall<"strncmp", Int, [Ptr, Ptr, SizeT]>; + +/// char *strncpy(char *s1, const char *s2, size_t n); +def strncpy : TargetLibCall<"strncpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *strndup(const char *s1, size_t n); +def strndup : TargetLibCall<"strndup", Ptr, [Ptr, SizeT]>; + +/// size_t strnlen(const char *s, size_t maxlen); +def strnlen : TargetLibCall<"strnlen", SizeT, [Ptr, SizeT]>; + +/// char *strpbrk(const char *s1, const char *s2); +def strpbrk : TargetLibCall<"strpbrk", Ptr, [Ptr, Ptr]>; + +/// char *strrchr(const char *s, int c); +def strrchr : TargetLibCall<"strrchr", Ptr, [Ptr, Int]>; + +/// size_t strspn(const char *s1, const char *s2); +def strspn : TargetLibCall<"strspn", SizeT, [Ptr, Ptr]>; + +/// char *strstr(const char *s1, const char *s2); +def strstr : TargetLibCall<"strstr", Ptr, [Ptr, Ptr]>; + +/// double strtod(const char *nptr, char **endptr); +def strtod : TargetLibCall<"strtod", Dbl, [Ptr, Ptr]>; + +/// float strtof(const char *nptr, char **endptr); +def strtof : TargetLibCall<"strtof", Flt, [Ptr, Ptr]>; + +/// char *strtok(char *s1, const char *s2); +def strtok : TargetLibCall<"strtok", Ptr, [Ptr, Ptr]>; + +/// char *strtok_r(char *s, const char *sep, char **lasts); +def strtok_r : TargetLibCall<"strtok_r", Ptr, [Ptr, Ptr, Ptr]>; + +/// long int strtol(const char *nptr, char **endptr, int base); +def strtol : TargetLibCall<"strtol", Long, [Ptr, Ptr, Int]>; + +/// long double strtold(const char *nptr, char **endptr); +def strtold : TargetLibCall<"strtold", LDbl, [Ptr, Ptr]>; + +/// long long int strtoll(const char *nptr, char **endptr, int base); +def strtoll : TargetLibCall<"strtoll", LLong, [Ptr, Ptr, Int]>; + +/// unsigned long int strtoul(const char *nptr, char **endptr, int base); +def strtoul : TargetLibCall<"strtoul", Long, [Ptr, Ptr, Int]>; + +/// unsigned long long int strtoull(const char *nptr, char **endptr, int base); +def strtoull : TargetLibCall<"strtoull", LLong, [Ptr, Ptr, Int]>; + +/// size_t strxfrm(char *s1, const char *s2, size_t n); +def strxfrm : TargetLibCall<"strxfrm", SizeT, [Ptr, Ptr, SizeT]>; + +/// int system(const char *command); +def system : TargetLibCall<"system", Int, [Ptr]>; + +/// double tan(double x); +def tan : TargetLibCall<"tan", Dbl, [Dbl]>; + +/// float tanf(float x); +def tanf : TargetLibCall<"tanf", Flt, [Flt]>; + +/// double tanh(double x); +def tanh : TargetLibCall<"tanh", Dbl, [Dbl]>; + +/// float tanhf(float x); +def tanhf : TargetLibCall<"tanhf", Flt, [Flt]>; + +/// long double tanhl(long double x); +def tanhl : TargetLibCall<"tanhl", LDbl, [LDbl]>; + +/// long double tanl(long double x); +def tanl : TargetLibCall<"tanl", LDbl, [LDbl]>; + +/// clock_t times(struct tms *buffer); +def times : TargetLibCall<"times", IntPlus, [Ptr]>; + +/// FILE *tmpfile(void); +def tmpfile : TargetLibCall<"tmpfile", Ptr, []>; + +/// FILE *tmpfile64(void) +def tmpfile64 : TargetLibCall<"tmpfile64", Ptr, []>; + +/// int toascii(int c); +def toascii : TargetLibCall<"toascii", Int, [Int]>; + +/// double trunc(double x); +def trunc : TargetLibCall<"trunc", Dbl, [Dbl]>; + +/// float truncf(float x); +def truncf : TargetLibCall<"truncf", Flt, [Flt]>; + +/// long double truncl(long double x); +def truncl : TargetLibCall<"truncl", LDbl, [LDbl]>; + +/// int uname(struct utsname *name); +def uname : TargetLibCall<"uname", Int, [Ptr]>; + +/// int ungetc(int c, FILE *stream); +def ungetc : TargetLibCall<"ungetc", Int, [Int, Ptr]>; + +/// int unlink(const char *path); +def unlink : TargetLibCall<"unlink", Int, [Ptr]>; + +/// int unsetenv(const char *name); +def unsetenv : TargetLibCall<"unsetenv", Int, [Ptr]>; + +/// int utime(const char *path, const struct utimbuf *times); +def utime : TargetLibCall<"utime", Int, [Ptr, Ptr]>; + +/// int utimes(const char *path, const struct timeval times[2]); +def utimes : TargetLibCall<"utimes", Int, [Ptr, Ptr]>; + +/// void *valloc(size_t size); +def valloc : TargetLibCall<"valloc", Ptr, [SizeT]>; + +/// void *vec_calloc(size_t count, size_t size); +def vec_calloc : TargetLibCall<"vec_calloc", Ptr, [SizeT, SizeT]>; + +/// void vec_free(void *ptr); +def vec_free : TargetLibCall<"vec_free", Void, [Ptr]>; + +/// void *vec_malloc(size_t size); +def vec_malloc : TargetLibCall<"vec_malloc", Ptr, [SizeT]>; + +/// void *vec_realloc(void *ptr, size_t size); +def vec_realloc : TargetLibCall<"vec_realloc", Ptr, [Ptr, SizeT]>; + +/// int vfprintf(FILE *stream, const char *format, va_list ap); +def vfprintf : TargetLibCall<"vfprintf", Int, [Ptr, Ptr, Ptr]>; + +/// int vfscanf(FILE *stream, const char *format, va_list arg); +def vfscanf : TargetLibCall<"vfscanf", Int, [Ptr, Ptr, Ptr]>; + +/// int vprintf(const char *restrict format, va_list ap); +def vprintf : TargetLibCall<"vprintf", Int, [Ptr, Ptr]>; + +/// int vscanf(const char *format, va_list arg); +def vscanf : TargetLibCall<"vscanf", Int, [Ptr, Ptr]>; + +/// int vsnprintf(char *s, size_t n, const char *format, va_list ap); +def vsnprintf : TargetLibCall<"vsnprintf", Int, [Ptr, SizeT, Ptr, Ptr]>; + +/// int vsprintf(char *s, const char *format, va_list ap); +def vsprintf : TargetLibCall<"vsprintf", Int, [Ptr, Ptr, Ptr]>; + +/// int vsscanf(const char *s, const char *format, va_list arg); +def vsscanf : TargetLibCall<"vsscanf", Int, [Ptr, Ptr, Ptr]>; + +/// size_t wcslen (const wchar_t* wcs); +def wcslen : TargetLibCall<"wcslen", SizeT, [Ptr]>; + +/// ssize_t write(int fildes, const void *buf, size_t nbyte); +def write : TargetLibCall<"write", SSizeT, [Int, Ptr, SizeT]>; diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td b/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td new file mode 100644 index 0000000000000..cd1a0bb45b5de --- /dev/null +++ b/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td @@ -0,0 +1,44 @@ +//===-- TargetLibraryInfoImpl.td - File that describes library functions --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// Return type or argument type of library function. +class FuncArgType { + string Name = NAME; +} + +// Recognized types of library function arguments and return types. +def Void : FuncArgType; +def Bool : FuncArgType; // 8 bits on all targets +def Int16 : FuncArgType; +def Int32 : FuncArgType; +def Int : FuncArgType; +def IntPlus : FuncArgType; // Int or bigger. +def Long : FuncArgType; // Either 32 or 64 bits. +def IntX : FuncArgType; // Any integer type. +def Int64 : FuncArgType; +def LLong : FuncArgType; // 64 bits on all targets. +def SizeT : FuncArgType; // size_t. +def SSizeT : FuncArgType; // POSIX ssize_t. +def Flt : FuncArgType; // IEEE float. +def Dbl : FuncArgType; // IEEE double. +def LDbl : FuncArgType; // Any floating type (TODO: tighten this up). +def Floating : FuncArgType; // Any floating type. +def Ptr : FuncArgType; // Any pointer type. +def Struct : FuncArgType; // Any struct type. +def Ellip : FuncArgType; // The ellipsis (...). +def Same : FuncArgType; // Same argument type as the previous one. + + +// Definition of library function. +class TargetLibCall ArgTypes = []> { + string Name = NAME; + string String = Str; + FuncArgType ReturnType = RetType; + list ArgumentTypes = ArgTypes; +} diff --git a/llvm/include/llvm/CMakeLists.txt b/llvm/include/llvm/CMakeLists.txt index ac6b96a68ab92..81da4f6cb9a90 100644 --- a/llvm/include/llvm/CMakeLists.txt +++ b/llvm/include/llvm/CMakeLists.txt @@ -2,6 +2,7 @@ # LLVM_HEADERS_TABLEGEN points to `llvm-min-tblgen` set(LLVM_TABLEGEN_PROJECT LLVM_HEADERS) +add_subdirectory(Analysis) add_subdirectory(CodeGen) add_subdirectory(IR) add_subdirectory(Support) diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h index 4c932c523e423..7df5d8a09f0f6 100644 --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -355,7 +355,8 @@ class LLVM_ABI TargetLoweringBase { llvm_unreachable("Invalid content kind"); } - explicit TargetLoweringBase(const TargetMachine &TM); + explicit TargetLoweringBase(const TargetMachine &TM, + const TargetSubtargetInfo &STI); TargetLoweringBase(const TargetLoweringBase &) = delete; TargetLoweringBase &operator=(const TargetLoweringBase &) = delete; virtual ~TargetLoweringBase(); @@ -3977,7 +3978,8 @@ class LLVM_ABI TargetLowering : public TargetLoweringBase { TargetLowering(const TargetLowering &) = delete; TargetLowering &operator=(const TargetLowering &) = delete; - explicit TargetLowering(const TargetMachine &TM); + explicit TargetLowering(const TargetMachine &TM, + const TargetSubtargetInfo &STI); ~TargetLowering() override; bool isPositionIndependent() const; diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h index a760f773055d2..9108c718c4794 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h @@ -78,6 +78,12 @@ template struct DWARFTypePrinter { } return false; } + + /// If FormValue is a valid constant Form, print into \c OS the integral value + /// casted to the type referred to by \c Cast. + template + void appendCastedValue(const FormValueType &FormValue, DieType Cast, + bool IsUnsigned); }; template @@ -413,6 +419,31 @@ DieType DWARFTypePrinter::appendQualifiedNameBefore(DieType D) { return appendUnqualifiedNameBefore(D); } +template +template +void DWARFTypePrinter::appendCastedValue( + const FormValueType &FormValue, DieType Cast, bool IsUnsigned) { + std::string ValStr; + if (IsUnsigned) { + std::optional UVal = FormValue.getAsUnsignedConstant(); + if (!UVal) + return; + + ValStr = std::to_string(*UVal); + } else { + std::optional SVal = FormValue.getAsSignedConstant(); + if (!SVal) + return; + + ValStr = std::to_string(*SVal); + } + + OS << '('; + appendQualifiedName(Cast); + OS << ')'; + OS << std::move(ValStr); +} + template bool DWARFTypePrinter::appendTemplateParameters(DieType D, bool *FirstParameter) { @@ -438,13 +469,11 @@ bool DWARFTypePrinter::appendTemplateParameters(DieType D, DieType T = detail::resolveReferencedType(C); Sep(); if (T.getTag() == dwarf::DW_TAG_enumeration_type) { - OS << '('; - appendQualifiedName(T); - OS << ')'; auto V = C.find(dwarf::DW_AT_const_value); - OS << std::to_string(*V->getAsSignedConstant()); + appendCastedValue(*V, T, /*IsUnsigned=*/false); continue; } + // /Maybe/ we could do pointer/reference type parameters, looking for the // symbol in the ELF symbol table to get back to the variable... // but probably not worth it. @@ -539,6 +568,12 @@ bool DWARFTypePrinter::appendTemplateParameters(DieType D, else OS << llvm::format("'\\U%08" PRIx64 "'", Val); } + // FIXME: Handle _BitInt's larger than 64-bits which are emitted as + // block data. + } else if (Name.starts_with("_BitInt")) { + appendCastedValue(*V, T, /*IsUnsigned=*/false); + } else if (Name.starts_with("unsigned _BitInt")) { + appendCastedValue(*V, T, /*IsUnsigned=*/true); } continue; } diff --git a/llvm/include/llvm/TableGen/StringToOffsetTable.h b/llvm/include/llvm/TableGen/StringToOffsetTable.h index 154ded8e94d7f..5ee5fb538f3eb 100644 --- a/llvm/include/llvm/TableGen/StringToOffsetTable.h +++ b/llvm/include/llvm/TableGen/StringToOffsetTable.h @@ -28,10 +28,13 @@ class StringToOffsetTable { /// plus ::) const StringRef ClassPrefix; const bool AppendZero; + const bool UsePrefixForStorageMember; public: - StringToOffsetTable(bool AppendZero = true, StringRef ClassPrefix = "") - : ClassPrefix(ClassPrefix), AppendZero(AppendZero) { + StringToOffsetTable(bool AppendZero = true, StringRef ClassPrefix = "", + bool UsePrefixForStorageMember = true) + : ClassPrefix(ClassPrefix), AppendZero(AppendZero), + UsePrefixForStorageMember(UsePrefixForStorageMember) { // Ensure we always put the empty string at offset zero. That lets empty // initialization also be zero initialization for offsets into the table. GetOrAddStringOffset(""); diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp index 671e023415a6e..4a99a40e0d2cc 100644 --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp @@ -987,7 +987,7 @@ bool BranchProbabilityInfo::calcZeroHeuristics(const BasicBlock *BB, return false; // Check if the LHS is the return value of a library function - LibFunc Func = NumLibFuncs; + LibFunc Func = LibFunc::NotLibFunc; if (TLI) if (CallInst *Call = dyn_cast(CI->getOperand(0))) if (Function *CalledFn = Call->getCalledFunction()) diff --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt index bff9b62d98e06..9abdca099d9fe 100644 --- a/llvm/lib/Analysis/CMakeLists.txt +++ b/llvm/lib/Analysis/CMakeLists.txt @@ -166,6 +166,7 @@ add_llvm_component_library(LLVMAnalysis ${LLVM_MAIN_INCLUDE_DIR}/llvm/Analysis DEPENDS + analysis_gen intrinsics_gen ${MLDeps} diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp old mode 100755 new mode 100644 index a13df6c5bf552..916154b465af4 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1666,6 +1666,12 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) { case Intrinsic::vector_interleave7: case Intrinsic::vector_interleave8: case Intrinsic::vector_deinterleave2: + case Intrinsic::vector_deinterleave3: + case Intrinsic::vector_deinterleave4: + case Intrinsic::vector_deinterleave5: + case Intrinsic::vector_deinterleave6: + case Intrinsic::vector_deinterleave7: + case Intrinsic::vector_deinterleave8: // Target intrinsics case Intrinsic::amdgcn_perm: case Intrinsic::amdgcn_wave_reduce_umin: @@ -4307,6 +4313,22 @@ static Constant *ConstantFoldScalableVectorCall( return ConstantVector::getNullValue(SVTy); break; } + case Intrinsic::vector_interleave2: + case Intrinsic::vector_interleave3: + case Intrinsic::vector_interleave4: + case Intrinsic::vector_interleave5: + case Intrinsic::vector_interleave6: + case Intrinsic::vector_interleave7: + case Intrinsic::vector_interleave8: { + Constant *SplatVal = Operands[0]->getSplatValue(); + if (!SplatVal) + return nullptr; + + if (!llvm::all_equal(Operands)) + return nullptr; + + return ConstantVector::getSplat(SVTy->getElementCount(), SplatVal); + } default: break; } @@ -4425,31 +4447,42 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID, return nullptr; return ConstantStruct::get(StTy, SinResult, CosResult); } - case Intrinsic::vector_deinterleave2: { + case Intrinsic::vector_deinterleave2: + case Intrinsic::vector_deinterleave3: + case Intrinsic::vector_deinterleave4: + case Intrinsic::vector_deinterleave5: + case Intrinsic::vector_deinterleave6: + case Intrinsic::vector_deinterleave7: + case Intrinsic::vector_deinterleave8: { + unsigned NumResults = StTy->getNumElements(); auto *Vec = Operands[0]; auto *VecTy = cast(Vec->getType()); + ElementCount ResultEC = + VecTy->getElementCount().divideCoefficientBy(NumResults); + if (auto *EltC = Vec->getSplatValue()) { - ElementCount HalfEC = VecTy->getElementCount().divideCoefficientBy(2); - auto *HalfVec = ConstantVector::getSplat(HalfEC, EltC); - return ConstantStruct::get(StTy, HalfVec, HalfVec); + auto *ResultVec = ConstantVector::getSplat(ResultEC, EltC); + SmallVector Results(NumResults, ResultVec); + return ConstantStruct::get(StTy, Results); } - if (!isa(Vec->getType())) + if (!ResultEC.isFixed()) return nullptr; - unsigned NumElements = VecTy->getElementCount().getFixedValue() / 2; - SmallVector Res0(NumElements), Res1(NumElements); - for (unsigned I = 0; I < NumElements; ++I) { - Constant *Elt0 = Vec->getAggregateElement(2 * I); - Constant *Elt1 = Vec->getAggregateElement(2 * I + 1); - if (!Elt0 || !Elt1) - return nullptr; - Res0[I] = Elt0; - Res1[I] = Elt1; + unsigned NumElements = ResultEC.getFixedValue(); + SmallVector Results(NumResults); + SmallVector Elements(NumElements); + for (unsigned I = 0; I != NumResults; ++I) { + for (unsigned J = 0; J != NumElements; ++J) { + Constant *Elt = Vec->getAggregateElement(J * NumResults + I); + if (!Elt) + return nullptr; + Elements[J] = Elt; + } + Results[I] = ConstantVector::get(Elements); } - return ConstantStruct::get(StTy, ConstantVector::get(Res0), - ConstantVector::get(Res1)); + return ConstantStruct::get(StTy, Results); } default: // TODO: Constant folding of vector intrinsics that fall through here does diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 26d0c108fb03a..51b1f5874bcb6 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -13,6 +13,7 @@ #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallString.h" +#include "llvm/ADT/StringTable.h" #include "llvm/IR/Constants.h" #include "llvm/IR/Module.h" #include "llvm/IR/SystemLibraries.h" @@ -20,11 +21,8 @@ #include "llvm/TargetParser/Triple.h" using namespace llvm; -StringLiteral const TargetLibraryInfoImpl::StandardNames[LibFunc::NumLibFuncs] = - { -#define TLI_DEFINE_STRING -#include "llvm/Analysis/TargetLibraryInfo.def" -}; +#define GET_TARGET_LIBRARY_INFO_STRING_TABLE +#include "llvm/Analysis/TargetLibraryInfo.inc" std::string VecDesc::getVectorFunctionABIVariantString() const { assert(!VectorFnName.empty() && "Vector function name must not be empty."); @@ -34,39 +32,8 @@ std::string VecDesc::getVectorFunctionABIVariantString() const { return std::string(Out.str()); } -// Recognized types of library function arguments and return types. -enum FuncArgTypeID : char { - Void = 0, // Must be zero. - Bool, // 8 bits on all targets - Int16, - Int32, - Int, - IntPlus, // Int or bigger. - Long, // Either 32 or 64 bits. - IntX, // Any integer type. - Int64, - LLong, // 64 bits on all targets. - SizeT, // size_t. - SSizeT, // POSIX ssize_t. - Flt, // IEEE float. - Dbl, // IEEE double. - LDbl, // Any floating type (TODO: tighten this up). - Floating, // Any floating type. - Ptr, // Any pointer type. - Struct, // Any struct type. - Ellip, // The ellipsis (...). - Same, // Same argument type as the previous one. -}; - -typedef std::array FuncProtoTy; - -static const FuncProtoTy Signatures[] = { -#define TLI_DEFINE_SIG -#include "llvm/Analysis/TargetLibraryInfo.def" -}; - -static_assert(sizeof Signatures / sizeof *Signatures == LibFunc::NumLibFuncs, - "Missing library function signatures"); +#define GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +#include "llvm/Analysis/TargetLibraryInfo.inc" static bool hasSinCosPiStret(const Triple &T) { // Only Darwin variants have _stret versions of combined trig functions. @@ -160,7 +127,7 @@ static void initializeBase(TargetLibraryInfoImpl &TLI, const Triple &T) { /// target triple. This should be carefully written so that a missing target /// triple gets a sane set of defaults. static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T, - ArrayRef StandardNames, + const llvm::StringTable &StandardNames, VectorLibrary VecLib) { // Set IO unlocked variants as unavailable // Set them as available per system below @@ -932,7 +899,7 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T, /// target triple. This should be carefully written so that a missing target /// triple gets a sane set of defaults. static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, - ArrayRef StandardNames, + const llvm::StringTable &StandardNames, VectorLibrary VecLib) { initializeBase(TLI, T); initializeLibCalls(TLI, T, StandardNames, VecLib); @@ -943,7 +910,7 @@ TargetLibraryInfoImpl::TargetLibraryInfoImpl(const Triple &T, // Default to everything being available. memset(AvailableArray, -1, sizeof(AvailableArray)); - initialize(*this, T, StandardNames, VecLib); + initialize(*this, T, StandardNamesStrTable, VecLib); } TargetLibraryInfoImpl::TargetLibraryInfoImpl(const TargetLibraryInfoImpl &TLI) @@ -1005,7 +972,7 @@ static StringRef sanitizeFunctionName(StringRef funcName) { } static DenseMap -buildIndexMap(ArrayRef StandardNames) { +buildIndexMap(const llvm::StringTable &StandardNames) { DenseMap Indices; unsigned Idx = 0; Indices.reserve(LibFunc::NumLibFuncs); @@ -1020,7 +987,7 @@ bool TargetLibraryInfoImpl::getLibFunc(StringRef funcName, LibFunc &F) const { return false; static const DenseMap Indices = - buildIndexMap(StandardNames); + buildIndexMap(StandardNamesStrTable); if (auto Loc = Indices.find(funcName); Loc != Indices.end()) { F = Loc->second; @@ -1190,18 +1157,18 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, // against the function's type FTy, starting with its return type. // Return true if both match in number and kind, inclduing the ellipsis. Type *Ty = FTy.getReturnType(), *LastTy = Ty; - const auto &ProtoTypes = Signatures[F]; - for (auto TyID : ProtoTypes) { - if (Idx && TyID == Void) - // Except in the first position where it designates the function's - // return type Void ends the argument list. + const auto *ProtoTypes = &SignatureTable[SignatureOffset[F]]; + for (auto TyID = ProtoTypes[Idx]; TyID != NoFuncArgType; + TyID = ProtoTypes[++Idx]) { + if (TyID == NoFuncArgType) break; if (TyID == Ellip) { // The ellipsis ends the protoype list but is not a part of FTy's // argument list. Except when it's last it must be followed by - // Void. - assert(Idx == ProtoTypes.size() - 1 || ProtoTypes[Idx + 1] == Void); + // NoFuncArgType. + assert(ProtoTypes[Idx] == NoFuncArgType || + ProtoTypes[Idx + 1] == NoFuncArgType); return FTy.isFunctionVarArg(); } @@ -1219,11 +1186,10 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, // There's at least one and at most two more type ids than there are // arguments in FTy's argument list. Ty = nullptr; - ++Idx; continue; } - Ty = FTy.getParamType(Idx++); + Ty = FTy.getParamType(Idx); } // Return success only if all entries on both lists have been processed diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index ef53ee6df9f06..10d5f7a9b4f65 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -5654,7 +5654,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) { // Widen the input and call convert on the widened input vector. unsigned NumConcat = WidenEC.getKnownMinValue() / InVTEC.getKnownMinValue(); - SmallVector Ops(NumConcat, DAG.getUNDEF(InVT)); + SmallVector Ops(NumConcat, DAG.getPOISON(InVT)); Ops[0] = InOp; SDValue InVec = DAG.getNode(ISD::CONCAT_VECTORS, DL, InWidenVT, Ops); if (N->getNumOperands() == 1) @@ -5673,7 +5673,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) { // Otherwise unroll into some nasty scalar code and rebuild the vector. EVT EltVT = WidenVT.getVectorElementType(); - SmallVector Ops(WidenEC.getFixedValue(), DAG.getUNDEF(EltVT)); + SmallVector Ops(WidenEC.getFixedValue(), DAG.getPOISON(EltVT)); // Use the original element count so we don't do more scalar opts than // necessary. unsigned MinElts = N->getValueType(0).getVectorNumElements(); @@ -5756,7 +5756,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert_StrictFP(SDNode *N) { // Otherwise unroll into some nasty scalar code and rebuild the vector. EVT EltVT = WidenVT.getVectorElementType(); std::array EltVTs = {{EltVT, MVT::Other}}; - SmallVector Ops(WidenNumElts, DAG.getUNDEF(EltVT)); + SmallVector Ops(WidenNumElts, DAG.getPOISON(EltVT)); SmallVector OpChains; // Use the original element count so we don't do more scalar opts than // necessary. @@ -5819,7 +5819,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTEND_VECTOR_INREG(SDNode *N) { } while (Ops.size() != WidenNumElts) - Ops.push_back(DAG.getUNDEF(WidenSVT)); + Ops.push_back(DAG.getPOISON(WidenSVT)); return DAG.getBuildVector(WidenVT, DL, Ops); } @@ -6026,7 +6026,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) { // input and then widening it. To avoid this, we widen the input only if // it results in a legal type. if (WidenSize % InSize == 0) { - SmallVector Ops(NewNumParts, DAG.getUNDEF(InVT)); + SmallVector Ops(NewNumParts, DAG.getPOISON(InVT)); Ops[0] = InOp; NewVec = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewInVT, Ops); @@ -6034,7 +6034,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) { SmallVector Ops; DAG.ExtractVectorElements(InOp, Ops); Ops.append(WidenSize / InScalarSize - Ops.size(), - DAG.getUNDEF(InVT.getVectorElementType())); + DAG.getPOISON(InVT.getVectorElementType())); NewVec = DAG.getNode(ISD::BUILD_VECTOR, dl, NewInVT, Ops); } @@ -6088,7 +6088,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) { if (WidenNumElts % NumInElts == 0) { // Add undef vectors to widen to correct length. unsigned NumConcat = WidenNumElts / NumInElts; - SDValue UndefVal = DAG.getUNDEF(InVT); + SDValue UndefVal = DAG.getPOISON(InVT); SmallVector Ops(NumConcat); for (unsigned i=0; i < NumOperands; ++i) Ops[i] = N->getOperand(i); @@ -6146,7 +6146,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) { for (unsigned j = 0; j < NumInElts; ++j) Ops[Idx++] = DAG.getExtractVectorElt(dl, EltVT, InOp, j); } - SDValue UndefVal = DAG.getUNDEF(EltVT); + SDValue UndefVal = DAG.getPOISON(EltVT); for (; Idx < WidenNumElts; ++Idx) Ops[Idx] = UndefVal; return DAG.getBuildVector(WidenVT, dl, Ops); @@ -6213,7 +6213,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) { Parts.push_back( DAG.getExtractSubvector(dl, PartVT, InOp, IdxVal + I * GCD)); for (; I < WidenNumElts / GCD; ++I) - Parts.push_back(DAG.getUNDEF(PartVT)); + Parts.push_back(DAG.getPOISON(PartVT)); return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts); } @@ -6229,7 +6229,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) { for (i = 0; i < VTNumElts; ++i) Ops[i] = DAG.getExtractVectorElt(dl, EltVT, InOp, IdxVal + i); - SDValue UndefVal = DAG.getUNDEF(EltVT); + SDValue UndefVal = DAG.getPOISON(EltVT); for (; i < WidenNumElts; ++i) Ops[i] = UndefVal; return DAG.getBuildVector(WidenVT, dl, Ops); @@ -6903,7 +6903,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_REVERSE(SDNode *N) { Parts.push_back( DAG.getExtractSubvector(dl, PartVT, ReverseVal, IdxVal + i * GCD)); for (; i < WidenNumElts / GCD; ++i) - Parts.push_back(DAG.getUNDEF(PartVT)); + Parts.push_back(DAG.getPOISON(PartVT)); return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts); } @@ -6992,7 +6992,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_STRICT_FSETCC(SDNode *N) { EVT TmpEltVT = LHS.getValueType().getVectorElementType(); // Fully unroll and reassemble. - SmallVector Scalars(WidenNumElts, DAG.getUNDEF(EltVT)); + SmallVector Scalars(WidenNumElts, DAG.getPOISON(EltVT)); SmallVector Chains(NumElts); for (unsigned i = 0; i != NumElts; ++i) { SDValue LHSElem = DAG.getExtractVectorElt(dl, TmpEltVT, LHS, i); diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index bb64f4ee70280..5684e0e4c26c4 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -41,8 +41,9 @@ using namespace llvm; using namespace llvm::SDPatternMatch; /// NOTE: The TargetMachine owns TLOF. -TargetLowering::TargetLowering(const TargetMachine &tm) - : TargetLoweringBase(tm) {} +TargetLowering::TargetLowering(const TargetMachine &tm, + const TargetSubtargetInfo &STI) + : TargetLoweringBase(tm, STI) {} // Define the virtual destructor out-of-line for build efficiency. TargetLowering::~TargetLowering() = default; diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index 0562fd8c08ba8..f9d727eaf1e20 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -749,7 +749,8 @@ ISD::CondCode TargetLoweringBase::getSoftFloatCmpLibcallPredicate( } /// NOTE: The TargetMachine owns TLOF. -TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm) +TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm, + const TargetSubtargetInfo &STI) : TM(tm), RuntimeLibcallInfo(TM.getTargetTriple(), TM.Options.ExceptionModel, TM.Options.FloatABIType, TM.Options.EABIVersion, diff --git a/llvm/lib/LTO/UpdateCompilerUsed.cpp b/llvm/lib/LTO/UpdateCompilerUsed.cpp index c95aaaf30bf80..1889c2b762ff7 100644 --- a/llvm/lib/LTO/UpdateCompilerUsed.cpp +++ b/llvm/lib/LTO/UpdateCompilerUsed.cpp @@ -62,8 +62,8 @@ class PreserveLibCallsAndAsmUsed { // TargetLibraryInfo has info on C runtime library calls on the current // target. - for (unsigned I = 0, E = static_cast(LibFunc::NumLibFuncs); - I != E; ++I) { + for (unsigned I = LibFunc::Begin_LibFunc, E = LibFunc::End_LibFunc; I != E; + ++I) { LibFunc F = static_cast(I); if (TLI.has(F)) Libcalls.insert(TLI.getName(F)); diff --git a/llvm/lib/TableGen/StringToOffsetTable.cpp b/llvm/lib/TableGen/StringToOffsetTable.cpp index 41f82caa12f82..06d8240486245 100644 --- a/llvm/lib/TableGen/StringToOffsetTable.cpp +++ b/llvm/lib/TableGen/StringToOffsetTable.cpp @@ -39,7 +39,8 @@ void StringToOffsetTable::EmitStringTableDef(raw_ostream &OS, #pragma GCC diagnostic ignored "-Woverlength-strings" #endif {} constexpr char {}{}Storage[] =)", - ClassPrefix.empty() ? "static" : "", ClassPrefix, Name); + ClassPrefix.empty() ? "static" : "", + UsePrefixForStorageMember ? ClassPrefix : "", Name); // MSVC silently miscompiles string literals longer than 64k in some // circumstances. The build system sets EmitLongStrLiterals to false when it diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index 8f41f230b5521..2fc8b0c9a22cd 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -387,7 +387,7 @@ extractPtrauthBlendDiscriminators(SDValue Disc, SelectionDAG *DAG) { AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM, const AArch64Subtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { // AArch64 doesn't have comparisons which set GPRs or setcc instructions, so // we have to make something up. Arbitrarily, choose ZeroOrOne. setBooleanContents(ZeroOrOneBooleanContent); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index db890df7c50f9..19b3ae5e695c7 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -60,8 +60,9 @@ unsigned AMDGPUTargetLowering::numBitsSigned(SDValue Op, SelectionDAG &DAG) { } AMDGPUTargetLowering::AMDGPUTargetLowering(const TargetMachine &TM, - const AMDGPUSubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + const TargetSubtargetInfo &STI, + const AMDGPUSubtarget &AMDGPUSTI) + : TargetLowering(TM, STI), Subtarget(&AMDGPUSTI) { // Always lower memset, memcpy, and memmove intrinsics to load/store // instructions, rather then generating calls to memset, mempcy or memmove. MaxStoresPerMemset = MaxStoresPerMemsetOptSize = ~0U; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h index 473975133f5b3..9c0eff99981cd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h @@ -180,7 +180,8 @@ class AMDGPUTargetLowering : public TargetLowering { const SmallVectorImpl &Ins) const; public: - AMDGPUTargetLowering(const TargetMachine &TM, const AMDGPUSubtarget &STI); + AMDGPUTargetLowering(const TargetMachine &TM, const TargetSubtargetInfo &STI, + const AMDGPUSubtarget &AMDGPUSTI); bool mayIgnoreSignedZero(SDValue Op) const; diff --git a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp index c799c7f63e105..950a9d8649c93 100644 --- a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp @@ -30,7 +30,8 @@ using namespace llvm; R600TargetLowering::R600TargetLowering(const TargetMachine &TM, const R600Subtarget &STI) - : AMDGPUTargetLowering(TM, STI), Subtarget(&STI), Gen(STI.getGeneration()) { + : AMDGPUTargetLowering(TM, STI, STI), Subtarget(&STI), + Gen(STI.getGeneration()) { addRegisterClass(MVT::f32, &R600::R600_Reg32RegClass); addRegisterClass(MVT::i32, &R600::R600_Reg32RegClass); addRegisterClass(MVT::v2f32, &R600::R600_Reg64RegClass); diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index a0459ebec9a22..da240e84ccbf0 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -87,7 +87,7 @@ static unsigned findFirstFreeSGPR(CCState &CCInfo) { SITargetLowering::SITargetLowering(const TargetMachine &TM, const GCNSubtarget &STI) - : AMDGPUTargetLowering(TM, STI), Subtarget(&STI) { + : AMDGPUTargetLowering(TM, STI, STI), Subtarget(&STI) { addRegisterClass(MVT::i1, &AMDGPU::VReg_1RegClass); addRegisterClass(MVT::i64, &AMDGPU::SReg_64RegClass); diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index cd8d7a0bee5e3..2ad8f877ff11b 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -508,7 +508,7 @@ const ARMBaseTargetMachine &ARMTargetLowering::getTM() const { ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_, const ARMSubtarget &STI) - : TargetLowering(TM_), Subtarget(&STI), + : TargetLowering(TM_, STI), Subtarget(&STI), RegInfo(Subtarget->getRegisterInfo()), Itins(Subtarget->getInstrItineraryData()) { const auto &TM = static_cast(TM_); diff --git a/llvm/lib/Target/AVR/AVRISelLowering.cpp b/llvm/lib/Target/AVR/AVRISelLowering.cpp index 545bc3af05383..054ff989d54b8 100644 --- a/llvm/lib/Target/AVR/AVRISelLowering.cpp +++ b/llvm/lib/Target/AVR/AVRISelLowering.cpp @@ -34,7 +34,7 @@ namespace llvm { AVRTargetLowering::AVRTargetLowering(const AVRTargetMachine &TM, const AVRSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { // Set up the register classes. addRegisterClass(MVT::i8, &AVR::GPR8RegClass); addRegisterClass(MVT::i16, &AVR::DREGSRegClass); diff --git a/llvm/lib/Target/BPF/BPFISelLowering.cpp b/llvm/lib/Target/BPF/BPFISelLowering.cpp index ecefd2379356a..a8d1faa85116b 100644 --- a/llvm/lib/Target/BPF/BPFISelLowering.cpp +++ b/llvm/lib/Target/BPF/BPFISelLowering.cpp @@ -58,7 +58,7 @@ static void fail(const SDLoc &DL, SelectionDAG &DAG, const Twine &Msg, BPFTargetLowering::BPFTargetLowering(const TargetMachine &TM, const BPFSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i64, &BPF::GPRRegClass); diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index f0c5f523a003c..fae9cbf9832fe 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -206,7 +206,7 @@ DirectXTargetMachine::getTargetTransformInfo(const Function &F) const { DirectXTargetLowering::DirectXTargetLowering(const DirectXTargetMachine &TM, const DirectXSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { addRegisterClass(MVT::i32, &dxil::DXILClassRegClass); computeRegisterProperties(STI.getRegisterInfo()); } diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp index 8d325a58dc9a7..5767a74513e8d 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -1504,8 +1504,8 @@ HexagonTargetLowering::LowerGlobalTLSAddress(SDValue Op, HexagonTargetLowering::HexagonTargetLowering(const TargetMachine &TM, const HexagonSubtarget &ST) - : TargetLowering(TM), HTM(static_cast(TM)), - Subtarget(ST) { + : TargetLowering(TM, ST), + HTM(static_cast(TM)), Subtarget(ST) { auto &HRI = *Subtarget.getRegisterInfo(); setPrefLoopAlignment(Align(16)); diff --git a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp index f412f66d9d192..631a8de035ac2 100644 --- a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp +++ b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp @@ -70,7 +70,7 @@ static cl::opt LanaiLowerConstantMulThreshold( LanaiTargetLowering::LanaiTargetLowering(const TargetMachine &TM, const LanaiSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i32, &Lanai::GPRRegClass); diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index cf4ffc82f6009..83d841dba33e3 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -76,7 +76,7 @@ static cl::opt ZeroDivCheck("loongarch-check-zero-division", cl::Hidden, LoongArchTargetLowering::LoongArchTargetLowering(const TargetMachine &TM, const LoongArchSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT GRLenVT = Subtarget.getGRLenVT(); diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp index 5653099431b18..89f38c847b1eb 100644 --- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp +++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp @@ -42,7 +42,7 @@ static cl::optMSP430NoLegalImmediate( MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM, const MSP430Subtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i8, &MSP430::GR8RegClass); diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp index 2fd73275721b1..b52aa3ce67950 100644 --- a/llvm/lib/Target/Mips/MipsISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp @@ -295,7 +295,7 @@ const char *MipsTargetLowering::getTargetNodeName(unsigned Opcode) const { MipsTargetLowering::MipsTargetLowering(const MipsTargetMachine &TM, const MipsSubtarget &STI) - : TargetLowering(TM), Subtarget(STI), ABI(TM.getABI()) { + : TargetLowering(TM, STI), Subtarget(STI), ABI(TM.getABI()) { // Mips does not have i1 type, so use i32 for // setcc operations results (slt, sgt, ...). setBooleanContents(ZeroOrOneBooleanContent); diff --git a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp index 8fc3a68de6c79..a77eb0240e677 100644 --- a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp @@ -514,7 +514,7 @@ VectorizePTXValueVTs(const SmallVectorImpl &ValueVTs, // NVPTXTargetLowering Constructor. NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM, const NVPTXSubtarget &STI) - : TargetLowering(TM), nvTM(&TM), STI(STI), GlobalUniqueCallSite(0) { + : TargetLowering(TM, STI), nvTM(&TM), STI(STI), GlobalUniqueCallSite(0) { // always lower memset, memcpy, and memmove intrinsics to load/store // instructions, rather // then generating calls to memset, mempcy or memmove. diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 342532c2e52d2..e58c06bbd4d47 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -174,7 +174,7 @@ extern cl::opt ANDIGlueBug; PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM, const PPCSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { // Initialize map that relates the PPC addressing modes to the computed flags // of a load/store instruction. The map is used to determine the optimal // addressing mode when selecting load and stores. diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 2d6bb06d689c3..3fbfdfb565e53 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -95,7 +95,7 @@ static const unsigned ZvfbfaOps[] = {ISD::FNEG, ISD::FABS, ISD::FCOPYSIGN, RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, const RISCVSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { RISCVABI::ABI ABI = Subtarget.getTargetABI(); assert(ABI != RISCVABI::ABI_Unknown && "Improperly initialised target ABI"); @@ -18396,8 +18396,7 @@ static SDValue combineOp_VLToVWOp_VL(SDNode *N, } } for (std::pair OldNewValues : ValuesToReplace) { - DAG.ReplaceAllUsesOfValueWith(OldNewValues.first, OldNewValues.second); - DCI.AddToWorklist(OldNewValues.second.getNode()); + DCI.CombineTo(OldNewValues.first.getNode(), OldNewValues.second); } return InputRootReplacement; } diff --git a/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp index cba9d45072852..0ba6589c68944 100644 --- a/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp @@ -24,6 +24,10 @@ using namespace llvm; +SPIRVTargetLowering::SPIRVTargetLowering(const TargetMachine &TM, + const SPIRVSubtarget &ST) + : TargetLowering(TM, ST), STI(ST) {} + // Returns true of the types logically match, as defined in // https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpCopyLogical. static bool typesLogicallyMatch(const SPIRVType *Ty1, const SPIRVType *Ty2, diff --git a/llvm/lib/Target/SPIRV/SPIRVISelLowering.h b/llvm/lib/Target/SPIRV/SPIRVISelLowering.h index 9025e6eb0842e..3d31a116bad4a 100644 --- a/llvm/lib/Target/SPIRV/SPIRVISelLowering.h +++ b/llvm/lib/Target/SPIRV/SPIRVISelLowering.h @@ -29,8 +29,7 @@ class SPIRVTargetLowering : public TargetLowering { public: explicit SPIRVTargetLowering(const TargetMachine &TM, - const SPIRVSubtarget &ST) - : TargetLowering(TM), STI(ST) {} + const SPIRVSubtarget &ST); // Stop IRTranslator breaking up FMA instrs to preserve types information. bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF, diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp index ae3c32687c207..dc1196127e3d4 100644 --- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -1573,7 +1573,7 @@ static SPCC::CondCodes FPCondCCodeToFCC(ISD::CondCode CC) { SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM, const SparcSubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); // Instructions which use registers as conditionals examine all the diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp index dfd76f9b0427f..eb93024bed35c 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp @@ -92,7 +92,7 @@ static MachineOperand earlyUseOperand(MachineOperand Op) { SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM, const SystemZSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); auto *Regs = STI.getSpecialRegisters(); @@ -8673,15 +8673,17 @@ SmallVector static simplifyAssumingCCVal(SDValue &Val, SDValue &CC, int CCValidVal = CCValid->getZExtValue(); int CCMaskVal = CCMask->getZExtValue(); - const auto &&TrueSDVals = simplifyAssumingCCVal(TrueVal, CC, DAG); - const auto &&FalseSDVals = simplifyAssumingCCVal(FalseVal, CC, DAG); - if (TrueSDVals.empty() || FalseSDVals.empty()) - return {}; + // Pruning search tree early - Moving CC test and combineCCMask ahead of + // recursive call to simplifyAssumingCCVal. SDValue Op4CCReg = Val.getOperand(4); if (Op4CCReg != CC) combineCCMask(Op4CCReg, CCValidVal, CCMaskVal, DAG); if (Op4CCReg != CC) return {}; + const auto &&TrueSDVals = simplifyAssumingCCVal(TrueVal, CC, DAG); + const auto &&FalseSDVals = simplifyAssumingCCVal(FalseVal, CC, DAG); + if (TrueSDVals.empty() || FalseSDVals.empty()) + return {}; SmallVector MergedSDVals; for (auto &CCVal : {0, 1, 2, 3}) MergedSDVals.emplace_back(((CCMaskVal & (1 << (3 - CCVal))) != 0) diff --git a/llvm/lib/Target/VE/VEISelLowering.cpp b/llvm/lib/Target/VE/VEISelLowering.cpp index e1735424a776b..a64193236f2ad 100644 --- a/llvm/lib/Target/VE/VEISelLowering.cpp +++ b/llvm/lib/Target/VE/VEISelLowering.cpp @@ -886,7 +886,7 @@ bool VETargetLowering::allowsMisalignedMemoryAccesses(EVT VT, VETargetLowering::VETargetLowering(const TargetMachine &TM, const VESubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { // Instructions which use registers as conditionals examine all the // bits (as does the pseudo SELECT_CC expansion). I don't think it // matters much whether it's ZeroOrOneBooleanContent, or diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index ad70d1b7e0a1e..abd8b2e095ae1 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -43,7 +43,7 @@ using namespace llvm; WebAssemblyTargetLowering::WebAssemblyTargetLowering( const TargetMachine &TM, const WebAssemblySubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { auto MVTPtr = Subtarget->hasAddr64() ? MVT::i64 : MVT::i32; // Set the load count for memcmp expand optimization diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index aa9ba6b0e197c..3fc41e5b0bc1c 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -130,7 +130,7 @@ static cl::opt MulConstantOptimization( X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM, const X86Subtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { bool UseX87 = !Subtarget.useSoftFloat() && Subtarget.hasX87(); MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); diff --git a/llvm/lib/Target/XCore/XCoreISelLowering.cpp b/llvm/lib/Target/XCore/XCoreISelLowering.cpp index 0a96ab236c6ad..7c49e5b620bdf 100644 --- a/llvm/lib/Target/XCore/XCoreISelLowering.cpp +++ b/llvm/lib/Target/XCore/XCoreISelLowering.cpp @@ -42,7 +42,7 @@ using namespace llvm; XCoreTargetLowering::XCoreTargetLowering(const TargetMachine &TM, const XCoreSubtarget &Subtarget) - : TargetLowering(TM), TM(TM), Subtarget(Subtarget) { + : TargetLowering(TM, Subtarget), TM(TM), Subtarget(Subtarget) { // Set up the register classes. addRegisterClass(MVT::i32, &XCore::GRRegsRegClass); diff --git a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp index 71c98621c81ee..a9cf67128cdef 100644 --- a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp +++ b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp @@ -54,7 +54,7 @@ static unsigned toCallerWindow(unsigned Reg) { XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &TM, const XtensaSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT PtrVT = MVT::i32; // Set up the register classes. addRegisterClass(MVT::i32, &Xtensa::ARRegClass); diff --git a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp index a2fad021e0480..66d570b3f831e 100644 --- a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp @@ -811,7 +811,7 @@ static bool shouldCheckArgs(CallBase &CI, const TargetLibraryInfo &TLI, return false; const auto ID = Fn->getIntrinsicID(); - LibFunc LFunc = LibFunc::NumLibFuncs; + LibFunc LFunc = LibFunc::NotLibFunc; // Always check args of unknown functions. if (ID == Intrinsic::ID() && !TLI.getLibFunc(*Fn, LFunc)) return true; diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 4a1565977b91c..4f4e64b1c7b70 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -2921,7 +2921,7 @@ Value *LibCallSimplifier::optimizeTrigInversionPairs(CallInst *CI, .Case("asinh", LibFunc_sinh) .Case("asinhf", LibFunc_sinhf) .Case("asinhl", LibFunc_sinhl) - .Default(NumLibFuncs); // Used as error value + .Default(NotLibFunc); // Used as error value if (Func == inverseFunc) Ret = OpC->getArgOperand(0); } diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 267be2e243fc3..36982aaf717ac 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -8665,6 +8665,11 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( !RecurrenceDescriptor::isFindIVRecurrenceKind(Kind) && "AnyOf and FindIV reductions are not allowed for in-loop reductions"); + bool IsFPRecurrence = + RecurrenceDescriptor::isFloatingPointRecurrenceKind(Kind); + FastMathFlags FMFs = + IsFPRecurrence ? FastMathFlags::getFast() : FastMathFlags(); + // Collect the chain of "link" recipes for the reduction starting at PhiR. SetVector Worklist; Worklist.insert(PhiR); @@ -8705,6 +8710,15 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( continue; } + if (IsFPRecurrence) { + FastMathFlags CurFMF = + cast(CurrentLink)->getFastMathFlags(); + if (match(CurrentLink, m_Select(m_VPValue(), m_VPValue(), m_VPValue()))) + CurFMF |= cast(CurrentLink->getOperand(0)) + ->getFastMathFlags(); + FMFs &= CurFMF; + } + Instruction *CurrentLinkI = CurrentLink->getUnderlyingInstr(); // Index of the first operand which holds a non-mask vector operand. @@ -8772,13 +8786,6 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( if (CM.blockNeedsPredicationForAnyReason(CurrentLinkI->getParent())) CondOp = RecipeBuilder.getBlockInMask(CurrentLink->getParent()); - // TODO: Retrieve FMFs from recipes directly. - RecurrenceDescriptor RdxDesc = Legal->getRecurrenceDescriptor( - cast(PhiR->getUnderlyingInstr())); - // Non-FP RdxDescs will have all fast math flags set, so clear them. - FastMathFlags FMFs = isa(CurrentLinkI) - ? RdxDesc.getFastMathFlags() - : FastMathFlags(); auto *RedRecipe = new VPReductionRecipe( Kind, FMFs, CurrentLinkI, PreviousLink, VecOp, CondOp, PhiR->isOrdered(), CurrentLinkI->getDebugLoc()); diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index b1598e8ccf5c6..4b9ac52748e7c 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -2245,7 +2245,6 @@ class slpvectorizer::BoUpSLP { /// Return true if an array of scalar loads can be replaced with a strided /// load (with constant stride). /// - /// TODO: /// It is possible that the load gets "widened". Suppose that originally each /// load loads `k` bytes and `PointerOps` can be arranged as follows (`%s` is /// constant): %b + 0 * %s + 0 %b + 0 * %s + 1 %b + 0 * %s + 2 @@ -7008,32 +7007,93 @@ bool BoUpSLP::analyzeConstantStrideCandidate( const SmallVectorImpl &SortedIndices, const int64_t Diff, Value *Ptr0, Value *PtrN, StridedPtrInfo &SPtrInfo) const { const size_t Sz = PointerOps.size(); - if (!isStridedLoad(PointerOps, ScalarTy, Alignment, Diff, Sz)) + SmallVector SortedOffsetsFromBase(Sz); + // Go through `PointerOps` in sorted order and record offsets from `Ptr0`. + for (unsigned I : seq(Sz)) { + Value *Ptr = + SortedIndices.empty() ? PointerOps[I] : PointerOps[SortedIndices[I]]; + SortedOffsetsFromBase[I] = + *getPointersDiff(ScalarTy, Ptr0, ScalarTy, Ptr, *DL, *SE); + } + + // The code below checks that `SortedOffsetsFromBase` looks as follows: + // ``` + // [ + // (e_{0, 0}, e_{0, 1}, ..., e_{0, GroupSize - 1}), // first group + // (e_{1, 0}, e_{1, 1}, ..., e_{1, GroupSize - 1}), // secon group + // ... + // (e_{NumGroups - 1, 0}, e_{NumGroups - 1, 1}, ..., e_{NumGroups - 1, + // GroupSize - 1}), // last group + // ] + // ``` + // The distance between consecutive elements within each group should all be + // the same `StrideWithinGroup`. The distance between the first elements of + // consecutive groups should all be the same `StrideBetweenGroups`. + + int64_t StrideWithinGroup = + SortedOffsetsFromBase[1] - SortedOffsetsFromBase[0]; + // Determine size of the first group. Later we will check that all other + // groups have the same size. + auto IsEndOfGroupIndex = [=, &SortedOffsetsFromBase](unsigned Idx) { + return SortedOffsetsFromBase[Idx] - SortedOffsetsFromBase[Idx - 1] != + StrideWithinGroup; + }; + auto Indices = seq(1, Sz); + auto FoundIt = llvm::find_if(Indices, IsEndOfGroupIndex); + unsigned GroupSize = FoundIt != Indices.end() ? *FoundIt : Sz; + + unsigned VecSz = Sz; + Type *NewScalarTy = ScalarTy; + + // Quick detour: at this point we can say what the type of strided load would + // be if all the checks pass. Check if this type is legal for the target. + bool NeedsWidening = Sz != GroupSize; + if (NeedsWidening) { + if (Sz % GroupSize != 0) + return false; + + if (StrideWithinGroup != 1) + return false; + VecSz = Sz / GroupSize; + NewScalarTy = Type::getIntNTy( + SE->getContext(), + DL->getTypeSizeInBits(ScalarTy).getFixedValue() * GroupSize); + } + + if (!isStridedLoad(PointerOps, NewScalarTy, Alignment, Diff, VecSz)) return false; - int64_t Stride = Diff / static_cast(Sz - 1); + int64_t StrideIntVal = StrideWithinGroup; + if (NeedsWidening) { + // Continue with checking the "shape" of `SortedOffsetsFromBase`. + // Check that the strides between groups are all the same. + unsigned CurrentGroupStartIdx = GroupSize; + int64_t StrideBetweenGroups = + SortedOffsetsFromBase[GroupSize] - SortedOffsetsFromBase[0]; + StrideIntVal = StrideBetweenGroups; + for (; CurrentGroupStartIdx < Sz; CurrentGroupStartIdx += GroupSize) { + if (SortedOffsetsFromBase[CurrentGroupStartIdx] - + SortedOffsetsFromBase[CurrentGroupStartIdx - GroupSize] != + StrideBetweenGroups) + return false; + } - // Iterate through all pointers and check if all distances are - // unique multiple of Dist. - SmallSet Dists; - for (Value *Ptr : PointerOps) { - int64_t Dist = 0; - if (Ptr == PtrN) - Dist = Diff; - else if (Ptr != Ptr0) - Dist = *getPointersDiff(ScalarTy, Ptr0, ScalarTy, Ptr, *DL, *SE); - // If the strides are not the same or repeated, we can't - // vectorize. - if (((Dist / Stride) * Stride) != Dist || !Dists.insert(Dist).second) - break; - } - if (Dists.size() == Sz) { - Type *StrideTy = DL->getIndexType(Ptr0->getType()); - SPtrInfo.StrideVal = ConstantInt::get(StrideTy, Stride); - SPtrInfo.Ty = getWidenedType(ScalarTy, Sz); - return true; + auto CheckGroup = [=](const unsigned StartIdx) -> bool { + auto Indices = seq(StartIdx + 1, Sz); + auto FoundIt = llvm::find_if(Indices, IsEndOfGroupIndex); + unsigned GroupEndIdx = FoundIt != Indices.end() ? *FoundIt : Sz; + return GroupEndIdx - StartIdx == GroupSize; + }; + for (unsigned I = 0; I < Sz; I += GroupSize) { + if (!CheckGroup(I)) + return false; + } } - return false; + + Type *StrideTy = DL->getIndexType(Ptr0->getType()); + SPtrInfo.StrideVal = ConstantInt::get(StrideTy, StrideIntVal); + SPtrInfo.Ty = getWidenedType(NewScalarTy, VecSz); + return true; } bool BoUpSLP::analyzeRtStrideCandidate(ArrayRef PointerOps, @@ -15061,11 +15121,19 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef VectorizedVals, } break; case TreeEntry::StridedVectorize: { + const StridedPtrInfo &SPtrInfo = TreeEntryToStridedPtrInfoMap.at(E); + FixedVectorType *StridedLoadTy = SPtrInfo.Ty; + assert(StridedLoadTy && "Missing StridedPoinerInfo for tree entry."); Align CommonAlignment = computeCommonAlignment(UniqueValues.getArrayRef()); VecLdCost = TTI->getStridedMemoryOpCost( - Instruction::Load, VecTy, LI0->getPointerOperand(), + Instruction::Load, StridedLoadTy, LI0->getPointerOperand(), /*VariableMask=*/false, CommonAlignment, CostKind); + if (StridedLoadTy != VecTy) + VecLdCost += + TTI->getCastInstrCost(Instruction::BitCast, VecTy, StridedLoadTy, + getCastContextHint(*E), CostKind); + break; } case TreeEntry::CompressVectorize: { @@ -19870,6 +19938,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) { ? NewLI : ::propagateMetadata(NewLI, E->Scalars); + if (StridedLoadTy != VecTy) + V = Builder.CreateBitOrPointerCast(V, VecTy); V = FinalShuffle(V, E); E->VectorizedValue = V; ++NumVectorInstructions; diff --git a/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll b/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll index f6251ff66299e..8fc27248abac3 100644 --- a/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll +++ b/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll @@ -612,13 +612,6 @@ define @extract_nxv14i8_nxv28i8_14( %in) { ; CHECK-NEXT: uunpkhi z3.d, z3.s ; CHECK-NEXT: uzp1 z1.s, z1.s, z3.s ; CHECK-NEXT: uzp1 z1.h, z2.h, z1.h -; CHECK-NEXT: uzp1 z1.b, z0.b, z1.b -; CHECK-NEXT: uunpkhi z1.h, z1.b -; CHECK-NEXT: uunpkhi z2.s, z1.h -; CHECK-NEXT: uunpklo z1.s, z1.h -; CHECK-NEXT: uunpklo z2.d, z2.s -; CHECK-NEXT: uzp1 z2.s, z2.s, z0.s -; CHECK-NEXT: uzp1 z1.h, z1.h, z2.h ; CHECK-NEXT: uzp1 z0.b, z0.b, z1.b ; CHECK-NEXT: ret %res = call @llvm.vector.extract.nxv14i8.nxv28i8( %in, i64 14) diff --git a/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll new file mode 100644 index 0000000000000..1ac3da3b930f9 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll @@ -0,0 +1,131 @@ +; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck %s + +; FIXME: Scale operands of WMMA are limited to low 256 VGPRs +; currently we are spilling it because all low VGPRs are occupied even though our budget is higher. +; Make sure we do not spill scale operands because of the low 256 restriction. +; CHECK: ; ScratchSize: 12 +; CHECK: ; Occupancy: 1 + +define amdgpu_kernel void @spill_scale_test(float %arg, float %arg1, float %arg2, float %arg3, float %arg4, float %arg5, float %arg6, float %arg7, <16 x i32> %arg8, float %arg9, <16 x i32> %arg10, float %arg11, <16 x i8> %arg12) #0 { +bb: + %i = shufflevector <16 x i8> %arg12, <16 x i8> zeroinitializer, <64 x i32> + tail call void @llvm.amdgcn.global.load.async.to.lds.b32(ptr addrspace(1) null, ptr addrspace(3) null, i32 0, i32 0) + %i13 = bitcast <64 x i8> %i to <16 x i32> + tail call void @llvm.amdgcn.global.load.async.to.lds.b32(ptr addrspace(1) null, ptr addrspace(3) null, i32 0, i32 0) + %i14 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i15 = bitcast <2 x i32> %i14 to <8 x i8> + %i16 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i17 = shufflevector <8 x i8> %i15, <8 x i8> zeroinitializer, <64 x i32> + %i18 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i17, <64 x i32> + %i19 = insertelement <64 x i8> %i18, i8 0, i64 57 + %i20 = bitcast <64 x i8> %i19 to <16 x i32> + %.extract2214 = extractelement <2 x i32> %i16, i64 0 + %i21 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i20, i32 0, <16 x i32> %i13, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i22 = extractelement <8 x float> %i21, i64 0 + %i23 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> zeroinitializer, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 %.extract2214, i32 0, i32 0, i32 0, i1 false, i1 false) + %i24 = extractelement <8 x float> %i23, i64 0 + %i25 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %arg8, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i26 = extractelement <8 x float> %i25, i64 0 + %i27 = fmul float %i22, 0.000000e+00 + %i28 = fmul float %i24, 0.000000e+00 + %i29 = insertelement <2 x float> zeroinitializer, float %i26, i64 1 + %i30 = insertelement <2 x float> zeroinitializer, float %i28, i64 0 + %i31 = insertelement <2 x float> zeroinitializer, float %arg11, i64 0 + %i32 = fadd <2 x float> %i31, %i30 + %i33 = insertelement <2 x float> zeroinitializer, float %arg9, i64 0 + %i34 = fadd <2 x float> %i33, %i32 + %i35 = insertelement <2 x float> zeroinitializer, float %arg7, i64 0 + %i36 = fadd <2 x float> %i35, %i34 + %i37 = insertelement <2 x float> zeroinitializer, float %arg1, i64 0 + %i38 = fadd <2 x float> %i37, %i36 + %i39 = insertelement <2 x float> zeroinitializer, float %arg6, i64 0 + %i40 = fadd <2 x float> %i39, %i38 + %i41 = insertelement <2 x float> zeroinitializer, float %arg4, i64 0 + %i42 = fadd <2 x float> %i41, %i40 + %i43 = insertelement <2 x float> zeroinitializer, float %arg5, i64 0 + %i44 = fadd <2 x float> %i43, %i42 + %i45 = insertelement <2 x float> zeroinitializer, float %arg3, i64 0 + %i46 = fadd <2 x float> %i45, %i44 + %i47 = insertelement <2 x float> zeroinitializer, float %arg, i64 0 + %i48 = insertelement <2 x float> zeroinitializer, float %arg2, i64 0 + %i49 = fadd <2 x float> %i48, %i46 + %i50 = fadd <2 x float> %i29, %i49 + %i51 = fadd <2 x float> %i47, %i50 + %i52 = insertelement <8 x float> zeroinitializer, float %i27, i64 0 + %i53 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> %i52, float 0.000000e+00) + %i54 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> splat (float 0x7FF8000000000000), float 0.000000e+00) + %i55 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> splat (float 1.000000e+00), float 0.000000e+00) + %.extract1415 = extractelement <2 x i32> %i53, i64 0 + %.extract1416 = extractelement <2 x i32> %i54, i64 0 + %.extract1424 = extractelement <2 x i32> %i55, i64 0 + %i56 = tail call i32 @llvm.amdgcn.ds.swizzle(i32 %.extract1416, i32 0) + %i57 = bitcast i32 %.extract1415 to <4 x i8> + %i58 = shufflevector <4 x i8> %i57, <4 x i8> zeroinitializer, <64 x i32> + %i59 = bitcast i32 %i56 to <4 x i8> + %i60 = bitcast i32 %.extract1424 to <4 x i8> + %i61 = shufflevector <4 x i8> %i60, <4 x i8> zeroinitializer, <64 x i32> + %i62 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i63 = bitcast <2 x i32> %i62 to <8 x i8> + %i64 = shufflevector <8 x i8> %i63, <8 x i8> zeroinitializer, <64 x i32> + %i65 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i66 = bitcast <2 x i32> %i65 to <8 x i8> + %i67 = shufflevector <8 x i8> %i66, <8 x i8> zeroinitializer, <64 x i32> + %i68 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i69 = bitcast <2 x i32> %i68 to <8 x i8> + %i70 = shufflevector <8 x i8> %i69, <8 x i8> zeroinitializer, <64 x i32> + %i71 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) getelementptr (i8, ptr addrspace(3) null, i32 75232)) + %i72 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i58, <64 x i32> + %i73 = bitcast <64 x i8> %i72 to <16 x i32> + %i74 = shufflevector <4 x i8> %i59, <4 x i8> zeroinitializer, <64 x i32> + %i75 = shufflevector <64 x i8> %i74, <64 x i8> %i61, <64 x i32> + %i76 = bitcast <64 x i8> %i75 to <16 x i32> + %i77 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i64, <64 x i32> + %i78 = bitcast <64 x i8> %i77 to <16 x i32> + %i79 = bitcast <64 x i8> %i67 to <16 x i32> + %i80 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i70, <64 x i32> + %i81 = bitcast <64 x i8> %i80 to <16 x i32> + %.extract1434 = extractelement <2 x i32> %i71, i64 0 + %i82 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i78, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i83 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %arg10, i32 0, <16 x i32> %i73, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i84 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i79, i32 0, <16 x i32> %i73, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2139062143, i1 false, i1 false) + %i85 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i81, i32 0, <16 x i32> %arg8, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2139062143, i1 false, i1 false) + %i86 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> splat (i32 16843009), i32 0, <16 x i32> %arg10, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i87 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> zeroinitializer, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i88 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> splat (i32 1), i32 0, <16 x i32> %i76, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 %.extract1434, i32 0, i32 0, i32 0, i1 false, i1 false) + %i89 = fdiv <8 x float> %i82, zeroinitializer + %i90 = fcmp uno <8 x float> %i89, zeroinitializer + %i91 = select <8 x i1> %i90, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i92 = bitcast <8 x bfloat> %i91 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i92, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i93 = fdiv <8 x float> %i83, zeroinitializer + %i94 = fcmp uno <8 x float> %i93, zeroinitializer + %i95 = select <8 x i1> %i94, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i96 = bitcast <8 x bfloat> %i95 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i96, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i97 = fcmp uno <8 x float> %i84, zeroinitializer + %i98 = select <8 x i1> %i97, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i99 = bitcast <8 x bfloat> %i98 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i99, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i100 = fcmp uno <8 x float> %i85, zeroinitializer + %i101 = select <8 x i1> %i100, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i102 = bitcast <8 x bfloat> %i101 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i102, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i103 = fcmp uno <8 x float> %i86, zeroinitializer + %i104 = select <8 x i1> %i103, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i105 = bitcast <8 x bfloat> %i104 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i105, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i106 = fcmp uno <8 x float> %i87, zeroinitializer + %i107 = select <8 x i1> %i106, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i108 = bitcast <8 x bfloat> %i107 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i108, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i109 = shufflevector <2 x float> %i51, <2 x float> zeroinitializer, <4 x i32> + %i110 = shufflevector <4 x float> %i109, <4 x float> zeroinitializer, <8 x i32> + %i111 = fmul <8 x float> %i88, %i110 + %i112 = fcmp uno <8 x float> %i111, zeroinitializer + %i113 = select <8 x i1> %i112, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i114 = bitcast <8 x bfloat> %i113 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i114, ptr addrspace(8) null, i32 0, i32 0, i32 0) + ret void +} + +attributes #0 = { "amdgpu-flat-work-group-size"="1,128" "amdgpu-waves-per-eu"="1,1" } diff --git a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll index 71c3069a406fe..08ca1d153248e 100644 --- a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll +++ b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll @@ -5286,16 +5286,16 @@ entry: define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE-NEXT: xxswapd 1, 34 +; PC64LE-NEXT: xxswapd 0, 34 +; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 ; PC64LE-NEXT: xscvspdpn 0, 0 ; PC64LE-NEXT: xscvspdpn 1, 1 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 ; PC64LE-NEXT: xscvdpsxws 0, 0 ; PC64LE-NEXT: xscvdpsxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l @@ -5311,25 +5311,25 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE9-NEXT: xxswapd 1, 34 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 ; PC64LE9-NEXT: xscvspdpn 0, 0 -; PC64LE9-NEXT: xscvspdpn 1, 1 ; PC64LE9-NEXT: xscvdpsxws 0, 0 -; PC64LE9-NEXT: xscvdpsxws 1, 1 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvspdpn 1, 1 -; PC64LE9-NEXT: xscvdpsxws 1, 1 -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xxswapd 0, 34 +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: xscvdpsxws 0, 0 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI97_0@toc@ha +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: addi 4, 4, .LCPI97_0@toc@l +; PC64LE9-NEXT: xscvdpsxws 0, 0 +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -5558,11 +5558,11 @@ entry: define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xscvdpsxws 0, 1 -; PC64LE-NEXT: xscvdpsxws 1, 2 +; PC64LE-NEXT: xscvdpsxws 0, 2 +; PC64LE-NEXT: xscvdpsxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l @@ -5577,19 +5577,19 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xscvdpsxws 0, 1 -; PC64LE9-NEXT: xscvdpsxws 1, 2 +; PC64LE9-NEXT: xscvdpsxws 0, 3 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xscvdpsxws 1, 3 -; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xscvdpsxws 0, 2 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xscvdpsxws 0, 1 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI105_0@toc@ha +; PC64LE9-NEXT: addi 4, 4, .LCPI105_0@toc@l +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -5783,16 +5783,16 @@ entry: define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE-NEXT: xxswapd 1, 34 +; PC64LE-NEXT: xxswapd 0, 34 +; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 ; PC64LE-NEXT: xscvspdpn 0, 0 ; PC64LE-NEXT: xscvspdpn 1, 1 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 ; PC64LE-NEXT: xscvdpuxws 0, 0 ; PC64LE-NEXT: xscvdpuxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l @@ -5808,25 +5808,25 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE9-NEXT: xxswapd 1, 34 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 ; PC64LE9-NEXT: xscvspdpn 0, 0 -; PC64LE9-NEXT: xscvspdpn 1, 1 ; PC64LE9-NEXT: xscvdpuxws 0, 0 -; PC64LE9-NEXT: xscvdpuxws 1, 1 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvspdpn 1, 1 -; PC64LE9-NEXT: xscvdpuxws 1, 1 -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xxswapd 0, 34 +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: xscvdpuxws 0, 0 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI113_0@toc@ha +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: addi 4, 4, .LCPI113_0@toc@l +; PC64LE9-NEXT: xscvdpuxws 0, 0 +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -6054,11 +6054,11 @@ entry: define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xscvdpuxws 0, 1 -; PC64LE-NEXT: xscvdpuxws 1, 2 +; PC64LE-NEXT: xscvdpuxws 0, 2 +; PC64LE-NEXT: xscvdpuxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l @@ -6073,19 +6073,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xscvdpuxws 0, 1 -; PC64LE9-NEXT: xscvdpuxws 1, 2 +; PC64LE9-NEXT: xscvdpuxws 0, 3 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xscvdpuxws 1, 3 -; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xscvdpuxws 0, 2 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xscvdpuxws 0, 1 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI121_0@toc@ha +; PC64LE9-NEXT: addi 4, 4, .LCPI121_0@toc@l +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -6269,33 +6269,33 @@ entry: define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xsrsp 0, 1 -; PC64LE-NEXT: xsrsp 1, 2 +; PC64LE-NEXT: xsrsp 0, 3 +; PC64LE-NEXT: xsrsp 2, 2 ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l -; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xsrsp 1, 1 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 -; PC64LE-NEXT: lxvd2x 0, 0, 3 -; PC64LE-NEXT: xxswapd 35, 0 -; PC64LE-NEXT: xsrsp 0, 3 +; PC64LE-NEXT: xscvdpspn 2, 2 ; PC64LE-NEXT: xscvdpspn 36, 0 +; PC64LE-NEXT: xxmrghw 34, 2, 1 +; PC64LE-NEXT: lxvd2x 1, 0, 3 +; PC64LE-NEXT: xxswapd 35, 1 ; PC64LE-NEXT: vperm 2, 4, 2, 3 ; PC64LE-NEXT: blr ; ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xsrsp 0, 1 -; PC64LE9-NEXT: xsrsp 1, 2 +; PC64LE9-NEXT: xsrsp 0, 3 +; PC64LE9-NEXT: xsrsp 2, 2 +; PC64LE9-NEXT: xsrsp 1, 1 ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xsrsp 1, 3 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 2, 1 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( @@ -7142,8 +7142,8 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxswapd 0, 34 -; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 +; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 +; PC64LE-NEXT: xxswapd 1, 34 ; PC64LE-NEXT: mffprwz 3, 0 ; PC64LE-NEXT: mtfprwa 0, 3 ; PC64LE-NEXT: mffprwz 3, 1 @@ -7154,7 +7154,7 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-NEXT: xscvsxdsp 1, 1 ; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 35, 1, 0 +; PC64LE-NEXT: xxmrghw 35, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: mfvsrwz 3, 34 ; PC64LE-NEXT: xxswapd 36, 0 @@ -7166,24 +7166,24 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: li 3, 0 +; PC64LE9-NEXT: li 3, 4 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: mtfprwa 0, 3 -; PC64LE9-NEXT: li 3, 4 +; PC64LE9-NEXT: li 3, 0 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: mtfprwa 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha +; PC64LE9-NEXT: mfvsrwz 3, 34 ; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l +; PC64LE9-NEXT: mtfprwa 2, 3 +; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha +; PC64LE9-NEXT: xscvsxdsp 2, 2 ; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: xscvdpspn 34, 2 +; PC64LE9-NEXT: xxmrghw 35, 0, 1 ; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mfvsrwz 3, 34 -; PC64LE9-NEXT: mtfprwa 1, 3 -; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -7225,15 +7225,15 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: mtfprd 0, 3 -; PC64LE-NEXT: mtfprd 1, 4 +; PC64LE-NEXT: mtfprd 0, 4 +; PC64LE-NEXT: mtfprd 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l ; PC64LE-NEXT: xscvsxdsp 0, 0 ; PC64LE-NEXT: xscvsxdsp 1, 1 -; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 +; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xxmrghw 34, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: xxswapd 35, 0 ; PC64LE-NEXT: mtfprd 0, 5 @@ -7244,20 +7244,20 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: mtfprd 0, 3 ; PC64LE9-NEXT: mtfprd 1, 4 +; PC64LE9-NEXT: mtfprd 2, 3 +; PC64LE9-NEXT: mtfprd 0, 5 ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha -; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: xscvsxdsp 1, 1 +; PC64LE9-NEXT: xscvsxdsp 2, 2 +; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: mtfprd 1, 5 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 1, 2 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> @@ -7709,8 +7709,8 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxswapd 0, 34 -; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 +; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 +; PC64LE-NEXT: xxswapd 1, 34 ; PC64LE-NEXT: mffprwz 3, 0 ; PC64LE-NEXT: mtfprwz 0, 3 ; PC64LE-NEXT: mffprwz 3, 1 @@ -7721,7 +7721,7 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-NEXT: xscvuxdsp 1, 1 ; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 35, 1, 0 +; PC64LE-NEXT: xxmrghw 35, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: mfvsrwz 3, 34 ; PC64LE-NEXT: xxswapd 36, 0 @@ -7733,24 +7733,24 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: li 3, 0 +; PC64LE9-NEXT: li 3, 4 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: li 3, 4 +; PC64LE9-NEXT: li 3, 0 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha +; PC64LE9-NEXT: mfvsrwz 3, 34 ; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l +; PC64LE9-NEXT: mtfprwz 2, 3 +; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha +; PC64LE9-NEXT: xscvuxdsp 2, 2 ; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: xscvdpspn 34, 2 +; PC64LE9-NEXT: xxmrghw 35, 0, 1 ; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mfvsrwz 3, 34 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -7792,15 +7792,15 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: mtfprd 0, 3 -; PC64LE-NEXT: mtfprd 1, 4 +; PC64LE-NEXT: mtfprd 0, 4 +; PC64LE-NEXT: mtfprd 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l ; PC64LE-NEXT: xscvuxdsp 0, 0 ; PC64LE-NEXT: xscvuxdsp 1, 1 -; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 +; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xxmrghw 34, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: xxswapd 35, 0 ; PC64LE-NEXT: mtfprd 0, 5 @@ -7811,20 +7811,20 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: mtfprd 0, 3 ; PC64LE9-NEXT: mtfprd 1, 4 +; PC64LE9-NEXT: mtfprd 2, 3 +; PC64LE9-NEXT: mtfprd 0, 5 ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha -; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: xscvuxdsp 1, 1 +; PC64LE9-NEXT: xscvuxdsp 2, 2 +; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: mtfprd 1, 5 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 1, 2 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> diff --git a/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir b/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir index 08544a95dedb7..d2e5a8208cecf 100644 --- a/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir +++ b/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir @@ -1,4 +1,4 @@ -# RUN: llc %s -mtriple=riscv64 \ +# RUN: llc -x mir < %s -mtriple=riscv64 \ # RUN: -run-pass=cfi-instr-inserter \ # RUN: -riscv-enable-cfi-instr-inserter=true # UNSUPPORTED: target={{.*}} diff --git a/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll b/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll new file mode 100644 index 0000000000000..943d8d2409ffd --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll @@ -0,0 +1,54 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 +; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 + +define void @matmul_min(ptr %vptr, ptr %scalars, ptr %acc0_ptr, ptr %acc1_ptr) { +; CHECK-LABEL: matmul_min: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: li a4, 64 +; CHECK-NEXT: li a5, 32 +; CHECK-NEXT: vsetvli zero, a5, e8, m2, ta, ma +; CHECK-NEXT: vle8.v v16, (a0) +; CHECK-NEXT: lb a0, 0(a1) +; CHECK-NEXT: lb a1, 1(a1) +; CHECK-NEXT: vsetvli zero, a4, e8, m4, ta, ma +; CHECK-NEXT: vle8.v v8, (a2) +; CHECK-NEXT: vle8.v v12, (a3) +; CHECK-NEXT: vsetvli zero, a5, e8, m2, ta, ma +; CHECK-NEXT: vwmacc.vx v8, a0, v16 +; CHECK-NEXT: vwmacc.vx v12, a1, v16 +; CHECK-NEXT: vsetvli zero, a4, e8, m4, ta, ma +; CHECK-NEXT: vse8.v v8, (a2) +; CHECK-NEXT: vse8.v v12, (a3) +; CHECK-NEXT: ret +entry: + %acc0 = load <32 x i16>, ptr %acc0_ptr, align 1 + %acc1 = load <32 x i16>, ptr %acc1_ptr, align 1 + + %v8 = load <32 x i8>, ptr %vptr, align 1 + %v16 = sext <32 x i8> %v8 to <32 x i16> + + %s0_ptr = getelementptr i8, ptr %scalars, i32 0 + %s0_i8 = load i8, ptr %s0_ptr, align 1 + %s0_i16 = sext i8 %s0_i8 to i16 + %tmp0 = insertelement <32 x i16> poison, i16 %s0_i16, i32 0 + %splat0 = shufflevector <32 x i16> %tmp0, <32 x i16> poison, <32 x i32> zeroinitializer + %mul0 = mul <32 x i16> %splat0, %v16 + %add0 = add <32 x i16> %mul0, %acc0 + + %s1_ptr = getelementptr i8, ptr %scalars, i32 1 + %s1_i8 = load i8, ptr %s1_ptr, align 1 + %s1_i16 = sext i8 %s1_i8 to i16 + %tmp1 = insertelement <32 x i16> poison, i16 %s1_i16, i32 0 + %splat1 = shufflevector <32 x i16> %tmp1, <32 x i16> poison, <32 x i32> zeroinitializer + %mul1 = mul <32 x i16> %splat1, %v16 + %add1 = add <32 x i16> %mul1, %acc1 + + store <32 x i16> %add0, ptr %acc0_ptr, align 1 + store <32 x i16> %add1, ptr %acc1_ptr, align 1 + + ret void +} +;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: +; RV32: {{.*}} +; RV64: {{.*}} diff --git a/llvm/test/CodeGen/X86/matrix-multiply.ll b/llvm/test/CodeGen/X86/matrix-multiply.ll index 388d8528a2b80..f38b769fe4987 100644 --- a/llvm/test/CodeGen/X86/matrix-multiply.ll +++ b/llvm/test/CodeGen/X86/matrix-multiply.ll @@ -368,46 +368,47 @@ define <9 x float> @test_mul3x3_f32(<9 x float> %a0, <9 x float> %a1) nounwind { ; AVX512F-NEXT: vaddps %xmm4, %xmm9, %xmm9 ; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0] ; AVX512F-NEXT: vmulss %xmm1, %xmm4, %xmm10 -; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm5[1,1,3,3] -; AVX512F-NEXT: vmulss %xmm6, %xmm5, %xmm6 -; AVX512F-NEXT: vaddss %xmm6, %xmm10, %xmm6 -; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm10 -; AVX512F-NEXT: vmulss %xmm8, %xmm10, %xmm8 -; AVX512F-NEXT: vaddss %xmm6, %xmm8, %xmm6 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm6 = xmm9[0,1],xmm6[0],xmm9[3] +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm11 = xmm5[1,1,3,3] +; AVX512F-NEXT: vmulss %xmm6, %xmm11, %xmm5 +; AVX512F-NEXT: vaddss %xmm5, %xmm10, %xmm5 +; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm6 +; AVX512F-NEXT: vmulss %xmm6, %xmm8, %xmm8 +; AVX512F-NEXT: vaddss %xmm5, %xmm8, %xmm5 +; AVX512F-NEXT: vinsertps {{.*#+}} xmm5 = xmm9[0,1],xmm5[0],xmm9[3] ; AVX512F-NEXT: vmulps %xmm7, %xmm0, %xmm8 ; AVX512F-NEXT: vextractf128 $1, %ymm1, %xmm9 -; AVX512F-NEXT: vmovsldup {{.*#+}} xmm11 = xmm9[0,0,2,2] -; AVX512F-NEXT: vmulps %xmm2, %xmm11, %xmm11 -; AVX512F-NEXT: vaddps %xmm11, %xmm8, %xmm8 -; AVX512F-NEXT: vmovshdup {{.*#+}} xmm11 = xmm9[1,1,3,3] -; AVX512F-NEXT: vmulps %xmm3, %xmm11, %xmm12 +; AVX512F-NEXT: vmovsldup {{.*#+}} xmm10 = xmm9[0,0,2,2] +; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm10 +; AVX512F-NEXT: vaddps %xmm10, %xmm8, %xmm8 +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm10 = xmm9[1,1,3,3] +; AVX512F-NEXT: vmulps %xmm3, %xmm10, %xmm12 ; AVX512F-NEXT: vaddps %xmm12, %xmm8, %xmm8 ; AVX512F-NEXT: vmulss %xmm7, %xmm4, %xmm7 -; AVX512F-NEXT: vmulss %xmm5, %xmm9, %xmm12 +; AVX512F-NEXT: vmulss %xmm9, %xmm11, %xmm12 ; AVX512F-NEXT: vaddss %xmm7, %xmm12, %xmm7 -; AVX512F-NEXT: vmulss %xmm11, %xmm10, %xmm11 -; AVX512F-NEXT: vaddss %xmm7, %xmm11, %xmm7 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm7 = xmm8[0,1],xmm7[0],xmm8[3] -; AVX512F-NEXT: vshufps {{.*#+}} xmm8 = xmm9[3,3,3,3] -; AVX512F-NEXT: vshufpd {{.*#+}} xmm11 = xmm9[1,0] +; AVX512F-NEXT: vmulss %xmm6, %xmm10, %xmm10 +; AVX512F-NEXT: vaddss %xmm7, %xmm10, %xmm7 +; AVX512F-NEXT: vshufps {{.*#+}} xmm10 = xmm9[3,3,3,3] +; AVX512F-NEXT: vshufpd {{.*#+}} xmm12 = xmm9[1,0] ; AVX512F-NEXT: vshufps {{.*#+}} xmm9 = xmm9[2,2,2,2] ; AVX512F-NEXT: vmulps %xmm0, %xmm9, %xmm0 -; AVX512F-NEXT: vmulps %xmm2, %xmm8, %xmm2 +; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm2 ; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0 ; AVX512F-NEXT: vextractf32x4 $2, %zmm1, %xmm1 ; AVX512F-NEXT: vbroadcastss %xmm1, %xmm2 ; AVX512F-NEXT: vmulps %xmm2, %xmm3, %xmm2 ; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0 -; AVX512F-NEXT: vmulss %xmm4, %xmm11, %xmm2 -; AVX512F-NEXT: vmulss %xmm5, %xmm8, %xmm3 +; AVX512F-NEXT: vmulss %xmm4, %xmm12, %xmm2 +; AVX512F-NEXT: vmulss %xmm10, %xmm11, %xmm3 ; AVX512F-NEXT: vaddss %xmm3, %xmm2, %xmm2 -; AVX512F-NEXT: vmulss %xmm1, %xmm10, %xmm1 +; AVX512F-NEXT: vmulss %xmm1, %xmm6, %xmm1 ; AVX512F-NEXT: vaddss %xmm1, %xmm2, %xmm1 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512F-NEXT: vinsertf32x4 $1, %xmm7, %zmm6, %zmm2 -; AVX512F-NEXT: vpmovsxbd {{.*#+}} zmm0 = [0,1,2,4,5,6,16,17,18,0,0,0,0,0,0,0] -; AVX512F-NEXT: vpermi2ps %zmm1, %zmm2, %zmm0 +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm8[1,1,3,3] +; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3] +; AVX512F-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm5[0,1,2],xmm8[0] +; AVX512F-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX512F-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0 ; AVX512F-NEXT: retq ; ; AVX512VL-LABEL: test_mul3x3_f32: @@ -447,26 +448,27 @@ define <9 x float> @test_mul3x3_f32(<9 x float> %a0, <9 x float> %a1) nounwind { ; AVX512VL-NEXT: vaddss %xmm7, %xmm12, %xmm7 ; AVX512VL-NEXT: vmulss %xmm11, %xmm10, %xmm11 ; AVX512VL-NEXT: vaddss %xmm7, %xmm11, %xmm7 -; AVX512VL-NEXT: vinsertps {{.*#+}} xmm5 = xmm5[0,1],xmm7[0],xmm5[3] -; AVX512VL-NEXT: vshufps {{.*#+}} xmm7 = xmm8[3,3,3,3] -; AVX512VL-NEXT: vshufpd {{.*#+}} xmm11 = xmm8[1,0] +; AVX512VL-NEXT: vshufps {{.*#+}} xmm11 = xmm8[3,3,3,3] +; AVX512VL-NEXT: vshufpd {{.*#+}} xmm12 = xmm8[1,0] ; AVX512VL-NEXT: vshufps {{.*#+}} xmm8 = xmm8[2,2,2,2] ; AVX512VL-NEXT: vmulps %xmm0, %xmm8, %xmm0 -; AVX512VL-NEXT: vmulps %xmm7, %xmm2, %xmm2 +; AVX512VL-NEXT: vmulps %xmm2, %xmm11, %xmm2 ; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0 ; AVX512VL-NEXT: vextractf32x4 $2, %zmm1, %xmm1 ; AVX512VL-NEXT: vbroadcastss %xmm1, %xmm2 ; AVX512VL-NEXT: vmulps %xmm2, %xmm6, %xmm2 ; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0 -; AVX512VL-NEXT: vmulss %xmm11, %xmm9, %xmm2 -; AVX512VL-NEXT: vmulss %xmm7, %xmm4, %xmm4 +; AVX512VL-NEXT: vmulss %xmm12, %xmm9, %xmm2 +; AVX512VL-NEXT: vmulss %xmm4, %xmm11, %xmm4 ; AVX512VL-NEXT: vaddss %xmm4, %xmm2, %xmm2 ; AVX512VL-NEXT: vmulss %xmm1, %xmm10, %xmm1 ; AVX512VL-NEXT: vaddss %xmm1, %xmm2, %xmm1 -; AVX512VL-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512VL-NEXT: vinsertf32x4 $1, %xmm5, %zmm3, %zmm2 -; AVX512VL-NEXT: vpmovsxbd {{.*#+}} zmm0 = [0,1,2,4,5,6,16,17,18,0,0,0,0,0,0,0] -; AVX512VL-NEXT: vpermi2ps %zmm1, %zmm2, %zmm0 +; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm2 = xmm5[1,1,3,3] +; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3] +; AVX512VL-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0,1,2],xmm5[0] +; AVX512VL-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX512VL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0 ; AVX512VL-NEXT: retq entry: %block = shufflevector <9 x float> %a0, <9 x float> poison, <2 x i32> diff --git a/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll b/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll index 4a5b4277c3cca..88d3ad181d766 100644 --- a/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll +++ b/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll @@ -4143,11 +4143,11 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { ; CHECK-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4155,10 +4155,10 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { ; AVX-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; AVX: # %bb.0: # %entry ; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vmovd %eax, %xmm0 -; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX-NEXT: vmovd %edx, %xmm0 +; AVX-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX-NEXT: retq entry: @@ -4256,11 +4256,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { ; AVX1-LABEL: constrained_vector_fptosi_v3i64_v3f32: ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm0 -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovq %rdx, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vmovq %rax, %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -4268,11 +4268,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { ; AVX512-LABEL: constrained_vector_fptosi_v3i64_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -4382,11 +4382,11 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4394,10 +4394,10 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { ; AVX-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; AVX: # %bb.0: # %entry ; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vmovd %eax, %xmm0 -; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX-NEXT: vmovd %edx, %xmm0 +; AVX-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX-NEXT: retq entry: @@ -4498,11 +4498,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { ; AVX1-LABEL: constrained_vector_fptosi_v3i64_v3f64: ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm0 -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovq %rdx, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vmovq %rax, %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -4510,11 +4510,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { ; AVX512-LABEL: constrained_vector_fptosi_v3i64_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -4645,11 +4645,11 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { ; CHECK-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4658,19 +4658,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx -; AVX1-NEXT: vmovd %ecx, %xmm0 -; AVX1-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovd %edx, %xmm0 +; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX1-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vmovd %eax, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX512-NEXT: vmovd %edx, %xmm0 +; AVX512-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX512-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX512-NEXT: retq entry: @@ -4911,7 +4911,7 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { ; ; AVX1-LABEL: constrained_vector_fptoui_v3i64_v3f32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX1-NEXT: vmovss {{.*#+}} xmm0 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0] ; AVX1-NEXT: vcomiss %xmm2, %xmm0 ; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 @@ -4921,51 +4921,51 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { ; AVX1-NEXT: vmovaps %xmm0, %xmm3 ; AVX1-NEXT: .LBB123_2: # %entry ; AVX1-NEXT: vsubss %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vcvttss2si %xmm2, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm2 -; AVX1-NEXT: vmovss {{.*#+}} xmm3 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX1-NEXT: vcomiss %xmm3, %xmm0 -; AVX1-NEXT: vxorps %xmm4, %xmm4, %xmm4 +; AVX1-NEXT: vcvttss2si %xmm2, %rcx +; AVX1-NEXT: setbe %al +; AVX1-NEXT: movzbl %al, %eax +; AVX1-NEXT: shlq $63, %rax +; AVX1-NEXT: xorq %rcx, %rax +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vcomiss %xmm2, %xmm0 +; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3 ; AVX1-NEXT: ja .LBB123_4 ; AVX1-NEXT: # %bb.3: # %entry -; AVX1-NEXT: vmovaps %xmm0, %xmm4 +; AVX1-NEXT: vmovaps %xmm0, %xmm3 ; AVX1-NEXT: .LBB123_4: # %entry -; AVX1-NEXT: vsubss %xmm4, %xmm3, %xmm3 -; AVX1-NEXT: vcvttss2si %xmm3, %rax +; AVX1-NEXT: vsubss %xmm3, %xmm2, %xmm2 +; AVX1-NEXT: vcvttss2si %xmm2, %rdx ; AVX1-NEXT: setbe %cl ; AVX1-NEXT: movzbl %cl, %ecx ; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm3 -; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0] -; AVX1-NEXT: vmovss {{.*#+}} xmm3 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX1-NEXT: vcomiss %xmm3, %xmm0 +; AVX1-NEXT: xorq %rdx, %rcx +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vcomiss %xmm2, %xmm0 ; AVX1-NEXT: ja .LBB123_6 ; AVX1-NEXT: # %bb.5: # %entry ; AVX1-NEXT: vmovaps %xmm0, %xmm1 ; AVX1-NEXT: .LBB123_6: # %entry -; AVX1-NEXT: vsubss %xmm1, %xmm3, %xmm0 -; AVX1-NEXT: vcvttss2si %xmm0, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX1-NEXT: vsubss %xmm1, %xmm2, %xmm0 +; AVX1-NEXT: vcvttss2si %xmm0, %rdx +; AVX1-NEXT: setbe %sil +; AVX1-NEXT: movzbl %sil, %esi +; AVX1-NEXT: shlq $63, %rsi +; AVX1-NEXT: xorq %rdx, %rsi +; AVX1-NEXT: vmovq %rsi, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 +; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] +; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i64_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -5194,11 +5194,11 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -5207,19 +5207,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx -; AVX1-NEXT: vmovd %ecx, %xmm0 -; AVX1-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovd %edx, %xmm0 +; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX1-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vmovd %eax, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX512-NEXT: vmovd %edx, %xmm0 +; AVX512-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX512-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX512-NEXT: retq entry: @@ -5466,7 +5466,7 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { ; ; AVX1-LABEL: constrained_vector_fptoui_v3i64_v3f64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2299999999999997E+1,0.0E+0] ; AVX1-NEXT: vmovsd {{.*#+}} xmm0 = [9.2233720368547758E+18,0.0E+0] ; AVX1-NEXT: vcomisd %xmm2, %xmm0 ; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 @@ -5476,51 +5476,51 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { ; AVX1-NEXT: vmovapd %xmm0, %xmm3 ; AVX1-NEXT: .LBB131_2: # %entry ; AVX1-NEXT: vsubsd %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vcvttsd2si %xmm2, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm2 -; AVX1-NEXT: vmovsd {{.*#+}} xmm3 = [4.2100000000000001E+1,0.0E+0] -; AVX1-NEXT: vcomisd %xmm3, %xmm0 -; AVX1-NEXT: vxorpd %xmm4, %xmm4, %xmm4 +; AVX1-NEXT: vcvttsd2si %xmm2, %rcx +; AVX1-NEXT: setbe %al +; AVX1-NEXT: movzbl %al, %eax +; AVX1-NEXT: shlq $63, %rax +; AVX1-NEXT: xorq %rcx, %rax +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2100000000000001E+1,0.0E+0] +; AVX1-NEXT: vcomisd %xmm2, %xmm0 +; AVX1-NEXT: vxorpd %xmm3, %xmm3, %xmm3 ; AVX1-NEXT: ja .LBB131_4 ; AVX1-NEXT: # %bb.3: # %entry -; AVX1-NEXT: vmovapd %xmm0, %xmm4 +; AVX1-NEXT: vmovapd %xmm0, %xmm3 ; AVX1-NEXT: .LBB131_4: # %entry -; AVX1-NEXT: vsubsd %xmm4, %xmm3, %xmm3 -; AVX1-NEXT: vcvttsd2si %xmm3, %rax +; AVX1-NEXT: vsubsd %xmm3, %xmm2, %xmm2 +; AVX1-NEXT: vcvttsd2si %xmm2, %rdx ; AVX1-NEXT: setbe %cl ; AVX1-NEXT: movzbl %cl, %ecx ; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm3 -; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0] -; AVX1-NEXT: vmovsd {{.*#+}} xmm3 = [4.2299999999999997E+1,0.0E+0] -; AVX1-NEXT: vcomisd %xmm3, %xmm0 +; AVX1-NEXT: xorq %rdx, %rcx +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX1-NEXT: vcomisd %xmm2, %xmm0 ; AVX1-NEXT: ja .LBB131_6 ; AVX1-NEXT: # %bb.5: # %entry ; AVX1-NEXT: vmovapd %xmm0, %xmm1 ; AVX1-NEXT: .LBB131_6: # %entry -; AVX1-NEXT: vsubsd %xmm1, %xmm3, %xmm0 -; AVX1-NEXT: vcvttsd2si %xmm0, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX1-NEXT: vsubsd %xmm1, %xmm2, %xmm0 +; AVX1-NEXT: vcvttsd2si %xmm0, %rdx +; AVX1-NEXT: setbe %sil +; AVX1-NEXT: movzbl %sil, %esi +; AVX1-NEXT: shlq $63, %rsi +; AVX1-NEXT: xorq %rdx, %rsi +; AVX1-NEXT: vmovq %rsi, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 +; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] +; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i64_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -5731,26 +5731,26 @@ entry: define <3 x float> @constrained_vector_fptrunc_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptrunc_v3f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2200000000000003E+1,0.0E+0] +; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2299999999999997E+1,0.0E+0] ; CHECK-NEXT: cvtsd2ss %xmm0, %xmm1 ; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2100000000000001E+1,0.0E+0] ; CHECK-NEXT: cvtsd2ss %xmm0, %xmm0 -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: movsd {{.*#+}} xmm1 = [4.2299999999999997E+1,0.0E+0] -; CHECK-NEXT: cvtsd2ss %xmm1, %xmm1 +; CHECK-NEXT: movsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; CHECK-NEXT: cvtsd2ss %xmm2, %xmm2 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX-LABEL: constrained_vector_fptrunc_v3f64: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vmovsd {{.*#+}} xmm0 = [4.2200000000000003E+1,0.0E+0] +; AVX-NEXT: vmovsd {{.*#+}} xmm0 = [4.2299999999999997E+1,0.0E+0] ; AVX-NEXT: vcvtsd2ss %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovsd {{.*#+}} xmm1 = [4.2100000000000001E+1,0.0E+0] ; AVX-NEXT: vcvtsd2ss %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3] -; AVX-NEXT: vmovsd {{.*#+}} xmm1 = [4.2299999999999997E+1,0.0E+0] -; AVX-NEXT: vcvtsd2ss %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] +; AVX-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX-NEXT: vcvtsd2ss %xmm2, %xmm2, %xmm2 +; AVX-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] ; AVX-NEXT: retq entry: %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( @@ -5834,14 +5834,14 @@ define <3 x double> @constrained_vector_fpext_v3f32() #0 { ; ; AVX-LABEL: constrained_vector_fpext_v3f32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vmovss {{.*#+}} xmm0 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX-NEXT: vmovss {{.*#+}} xmm0 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovss {{.*#+}} xmm1 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX-NEXT: vmovss {{.*#+}} xmm1 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 +; AVX-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 +; AVX-NEXT: vmovlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0] +; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 ; AVX-NEXT: retq entry: %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( @@ -6702,14 +6702,14 @@ define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { ; ; AVX-LABEL: constrained_vector_sitofp_v3f64_v3i32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vextractps $1, %xmm0, %eax +; AVX-NEXT: vextractps $2, %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm1 ; AVX-NEXT: vmovd %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm2 -; AVX-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX-NEXT: vpextrd $2, %xmm0, %eax +; AVX-NEXT: vpextrd $1, %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm0 -; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX-NEXT: retq entry: %result = call <3 x double> @@ -6722,31 +6722,31 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; CHECK-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movd %xmm0, %eax +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3] +; CHECK-NEXT: movd %xmm1, %eax +; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %eax, %xmm1 ; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1] ; CHECK-NEXT: movd %xmm2, %eax ; CHECK-NEXT: xorps %xmm2, %xmm2 ; CHECK-NEXT: cvtsi2ss %eax, %xmm2 -; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] ; CHECK-NEXT: movd %xmm0, %eax ; CHECK-NEXT: xorps %xmm0, %xmm0 ; CHECK-NEXT: cvtsi2ss %eax, %xmm0 -; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] -; CHECK-NEXT: movaps %xmm1, %xmm0 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] +; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vextractps $1, %xmm0, %eax +; AVX-NEXT: vextractps $2, %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm1 ; AVX-NEXT: vmovd %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm2 -; AVX-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX-NEXT: vpextrd $2, %xmm0, %eax +; AVX-NEXT: vpextrd $1, %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX-NEXT: retq entry: %result = call <3 x float> @@ -6769,28 +6769,28 @@ define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; ; AVX1-LABEL: constrained_vector_sitofp_v3f64_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovq %xmm0, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_sitofp_v3f64_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -6803,39 +6803,38 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: cvtsi2ss %rsi, %xmm1 -; CHECK-NEXT: cvtsi2ss %rdi, %xmm0 -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %rdx, %xmm1 +; CHECK-NEXT: cvtsi2ss %rdi, %xmm0 +; CHECK-NEXT: cvtsi2ss %rsi, %xmm2 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovq %xmm0, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: vzeroupper ; AVX512-NEXT: retq entry: @@ -7415,26 +7414,26 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { ; ; AVX1-LABEL: constrained_vector_uitofp_v3f64_v3i32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vextractps $1, %xmm0, %eax +; AVX1-NEXT: vextractps $2, %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovd %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vpextrd $2, %xmm0, %eax +; AVX1-NEXT: vpextrd $1, %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f64_v3i32: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vextractps $1, %xmm0, %eax +; AVX512-NEXT: vextractps $2, %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm1 ; AVX512-NEXT: vmovd %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vpextrd $2, %xmm0, %eax +; AVX512-NEXT: vpextrd $1, %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -7447,43 +7446,43 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; CHECK-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movd %xmm0, %eax +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3] +; CHECK-NEXT: movd %xmm1, %eax +; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %rax, %xmm1 ; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1] ; CHECK-NEXT: movd %xmm2, %eax ; CHECK-NEXT: xorps %xmm2, %xmm2 ; CHECK-NEXT: cvtsi2ss %rax, %xmm2 -; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] ; CHECK-NEXT: movd %xmm0, %eax ; CHECK-NEXT: xorps %xmm0, %xmm0 ; CHECK-NEXT: cvtsi2ss %rax, %xmm0 -; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] -; CHECK-NEXT: movaps %xmm1, %xmm0 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] +; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vextractps $1, %xmm0, %eax +; AVX1-NEXT: vextractps $2, %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovd %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vpextrd $2, %xmm0, %eax +; AVX1-NEXT: vpextrd $1, %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vextractps $1, %xmm0, %eax +; AVX512-NEXT: vextractps $2, %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm1 ; AVX512-NEXT: vmovd %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vpextrd $2, %xmm0, %eax +; AVX512-NEXT: vpextrd $1, %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: retq entry: %result = call <3 x float> @@ -7539,7 +7538,8 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; ; AVX1-LABEL: constrained_vector_uitofp_v3f64_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7565,9 +7565,7 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.3: ; AVX1-NEXT: vaddsd %xmm2, %xmm2, %xmm2 ; AVX1-NEXT: .LBB183_4: # %entry -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7580,20 +7578,21 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.5: ; AVX1-NEXT: vaddsd %xmm0, %xmm0, %xmm0 ; AVX1-NEXT: .LBB183_6: # %entry -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f64_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -7606,13 +7605,13 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movq %rsi, %rax +; CHECK-NEXT: movq %rdx, %rax ; CHECK-NEXT: shrq %rax -; CHECK-NEXT: movl %esi, %ecx +; CHECK-NEXT: movl %edx, %ecx ; CHECK-NEXT: andl $1, %ecx ; CHECK-NEXT: orq %rax, %rcx -; CHECK-NEXT: testq %rsi, %rsi -; CHECK-NEXT: cmovnsq %rsi, %rcx +; CHECK-NEXT: testq %rdx, %rdx +; CHECK-NEXT: cmovnsq %rdx, %rcx ; CHECK-NEXT: cvtsi2ss %rcx, %xmm1 ; CHECK-NEXT: jns .LBB184_2 ; CHECK-NEXT: # %bb.1: @@ -7630,26 +7629,26 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: addss %xmm0, %xmm0 ; CHECK-NEXT: .LBB184_4: # %entry -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: movq %rdx, %rax +; CHECK-NEXT: movq %rsi, %rax ; CHECK-NEXT: shrq %rax -; CHECK-NEXT: movl %edx, %ecx +; CHECK-NEXT: movl %esi, %ecx ; CHECK-NEXT: andl $1, %ecx ; CHECK-NEXT: orq %rax, %rcx -; CHECK-NEXT: testq %rdx, %rdx -; CHECK-NEXT: cmovnsq %rdx, %rcx -; CHECK-NEXT: xorps %xmm1, %xmm1 -; CHECK-NEXT: cvtsi2ss %rcx, %xmm1 +; CHECK-NEXT: testq %rsi, %rsi +; CHECK-NEXT: cmovnsq %rsi, %rcx +; CHECK-NEXT: cvtsi2ss %rcx, %xmm2 ; CHECK-NEXT: jns .LBB184_6 ; CHECK-NEXT: # %bb.5: -; CHECK-NEXT: addss %xmm1, %xmm1 +; CHECK-NEXT: addss %xmm2, %xmm2 ; CHECK-NEXT: .LBB184_6: # %entry +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7675,9 +7674,7 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.3: ; AVX1-NEXT: vaddss %xmm2, %xmm2, %xmm2 ; AVX1-NEXT: .LBB184_4: # %entry -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7690,21 +7687,22 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.5: ; AVX1-NEXT: vaddss %xmm0, %xmm0, %xmm0 ; AVX1-NEXT: .LBB184_6: # %entry -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: vzeroupper ; AVX512-NEXT: retq entry: diff --git a/llvm/test/TableGen/TargetLibraryInfo.td b/llvm/test/TableGen/TargetLibraryInfo.td new file mode 100644 index 0000000000000..ca6d16e236bda --- /dev/null +++ b/llvm/test/TableGen/TargetLibraryInfo.td @@ -0,0 +1,115 @@ +// RUN: llvm-tblgen -gen-target-library-info -I %p/../../include %s | FileCheck %s + +include "llvm/Analysis/TargetLibraryInfoImpl.td" + +def cosf : TargetLibCall< "cosf", Flt, [Flt]>; +def sinf : TargetLibCall< "sinf", Flt, [Flt]>; + +def fmaxf : TargetLibCall< "fmaxf", Floating, [Same, Same]>; + +def printf : TargetLibCall< "printf", Int, [Ptr, Ellip]>; + +def cabs : TargetLibCall< "cabs", ? /* Checked manually. */>; + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_ENUM +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_ENUM +// CHECK-NEXT: enum LibFunc : unsigned { +// CHECK-NEXT: NotLibFunc = 0, +// CHECK-NEXT: LibFunc_cosf, +// CHECK-NEXT: LibFunc_sinf, +// CHECK-NEXT: LibFunc_fmaxf, +// CHECK-NEXT: LibFunc_printf, +// CHECK-NEXT: LibFunc_cabs, +// CHECK-NEXT: NumLibFuncs, +// CHECK-NEXT: End_LibFunc = NumLibFuncs, +// CHECK-NEXT: Begin_LibFunc = LibFunc_cosf, +// CHECK-NEXT: }; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_STRING_TABLE +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_STRING_TABLE + +// CHECK: #ifdef __GNUC__ +// CHECK-NEXT: #pragma GCC diagnostic push +// CHECK-NEXT: #pragma GCC diagnostic ignored "-Woverlength-strings" +// CHECK-NEXT: #endif +// CHECK-NEXT: constexpr char StandardNamesStrTableStorage[] = +// CHECK-NEXT: "\0" +// CHECK-NEXT: "cosf\0" +// CHECK-NEXT: "sinf\0" +// CHECK-NEXT: "fmaxf\0" +// CHECK-NEXT: "printf\0" +// CHECK-NEXT: "cabs\0" +// CHECK-NEXT: ; +// CHECK-NEXT: #ifdef __GNUC__ +// CHECK-NEXT: #pragma GCC diagnostic pop +// CHECK-NEXT: #endif + +// CHECK: const llvm::StringTable +// CHECK-NEXT: TargetLibraryInfoImpl::StandardNamesStrTable = StandardNamesStrTableStorage; + +// CHECK: const llvm::StringTable::Offset TargetLibraryInfoImpl::StandardNamesOffsets[6] = { +// CHECK-NEXT: 0, // +// CHECK-NEXT: 1, // cosf +// CHECK-NEXT: 6, // sinf +// CHECK-NEXT: 11, // fmaxf +// CHECK-NEXT: 17, // printf +// CHECK-NEXT: 24, // cabs +// CHECK-NEXT: }; +// CHECK-NEXT: const uint8_t TargetLibraryInfoImpl::StandardNamesSizeTable[6] = { +// CHECK-NEXT: 0, +// CHECK-NEXT: 4, +// CHECK-NEXT: 4, +// CHECK-NEXT: 5, +// CHECK-NEXT: 6, +// CHECK-NEXT: 4, +// CHECK-NEXT: }; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_IMPL_DECL +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_IMPL_DECL +// CHECK-NEXT: LLVM_ABI static const llvm::StringTable StandardNamesStrTable; +// CHECK-NEXT: LLVM_ABI static const llvm::StringTable::Offset StandardNamesOffsets[6]; +// CHECK-NEXT: LLVM_ABI static const uint8_t StandardNamesSizeTable[6]; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +// CHECK-NEXT: enum FuncArgTypeID : char { +// CHECK-NEXT: NoFuncArgType = 0, +// CHECK-NEXT: Void, +// CHECK-NEXT: Bool, +// CHECK-NEXT: Int16, +// CHECK-NEXT: Int32, +// CHECK-NEXT: Int, +// CHECK-NEXT: IntPlus, +// CHECK-NEXT: Long, +// CHECK-NEXT: IntX, +// CHECK-NEXT: Int64, +// CHECK-NEXT: LLong, +// CHECK-NEXT: SizeT, +// CHECK-NEXT: SSizeT, +// CHECK-NEXT: Flt, +// CHECK-NEXT: Dbl, +// CHECK-NEXT: LDbl, +// CHECK-NEXT: Floating, +// CHECK-NEXT: Ptr, +// CHECK-NEXT: Struct, +// CHECK-NEXT: Ellip, +// CHECK-NEXT: Same, +// CHECK-NEXT: }; +// CHECK-NEXT: static const FuncArgTypeID SignatureTable[] = { +// CHECK-NEXT: /* 0 */ Int, Ptr, Ellip, NoFuncArgType, +// CHECK-NEXT: /* 4 */ Flt, Flt, NoFuncArgType, +// CHECK-NEXT: /* 7 */ Floating, Same, Same, NoFuncArgType, +// CHECK-NEXT: /* 11 */ Void, NoFuncArgType, +// CHECK-NEXT: }; +// CHECK-NEXT: static const uint16_t SignatureOffset[] = { +// CHECK-NEXT: 11, // +// CHECK-NEXT: 4, // cosf +// CHECK-NEXT: 4, // sinf +// CHECK-NEXT: 7, // fmaxf +// CHECK-NEXT: 0, // printf +// CHECK-NEXT: 3, // cabs +// CHECK-NEXT: }; +// CHECK-NEXT: #endif diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll index 848f0d17ff373..3f3cf341357d1 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll @@ -51,6 +51,32 @@ define <8 x i32> @fold_vector_interleave2() { ret <8 x i32> %1 } +define @fold_scalable_vector_interleave2() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave2.nxv8i32( zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave2_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 1)) + ret %1 +} + +; Negative test. +define @fold_scalable_vector_interleave2_mismatch_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2_mismatch_splat() { +; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 2)) +; CHECK-NEXT: ret [[TMP1]] +; + %1 = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 2)) + ret %1 +} + define <12 x i32> @fold_vector_interleave3() { ; CHECK-LABEL: define <12 x i32> @fold_vector_interleave3() { ; CHECK-NEXT: ret <12 x i32> @@ -59,6 +85,22 @@ define <12 x i32> @fold_vector_interleave3() { ret <12 x i32> %1 } +define @fold_scalable_vector_interleave3() { +; CHECK-LABEL: define @fold_scalable_vector_interleave3() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave3.nxv8i32( zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave3_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave3_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave3.nxv8i32( splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <16 x i32> @fold_vector_interleave4() { ; CHECK-LABEL: define <16 x i32> @fold_vector_interleave4() { ; CHECK-NEXT: ret <16 x i32> @@ -67,6 +109,22 @@ define <16 x i32> @fold_vector_interleave4() { ret <16 x i32> %1 } +define @fold_scalable_vector_interleave4() { +; CHECK-LABEL: define @fold_scalable_vector_interleave4() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave4.nxv16i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave4_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave4_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave4.nxv16i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <20 x i32> @fold_vector_interleave5() { ; CHECK-LABEL: define <20 x i32> @fold_vector_interleave5() { ; CHECK-NEXT: ret <20 x i32> @@ -75,6 +133,22 @@ define <20 x i32> @fold_vector_interleave5() { ret <20 x i32> %1 } +define @fold_scalable_vector_interleave5() { +; CHECK-LABEL: define @fold_scalable_vector_interleave5() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave5.nxv20i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave5_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave5_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave5.nxv20i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <24 x i32> @fold_vector_interleave6() { ; CHECK-LABEL: define <24 x i32> @fold_vector_interleave6() { ; CHECK-NEXT: ret <24 x i32> @@ -83,6 +157,22 @@ define <24 x i32> @fold_vector_interleave6() { ret <24 x i32> %1 } +define @fold_scalable_vector_interleave6() { +; CHECK-LABEL: define @fold_scalable_vector_interleave6() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave6.nxv24i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave6_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave6_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave6.nxv24i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <28 x i32> @fold_vector_interleave7() { ; CHECK-LABEL: define <28 x i32> @fold_vector_interleave7() { ; CHECK-NEXT: ret <28 x i32> @@ -91,6 +181,22 @@ define <28 x i32> @fold_vector_interleave7() { ret <28 x i32> %1 } +define @fold_scalable_vector_interleave7() { +; CHECK-LABEL: define @fold_scalable_vector_interleave7() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave7.nxv28i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave7_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave7_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave7.nxv28i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <32 x i32> @fold_vector_interleave8() { ; CHECK-LABEL: define <32 x i32> @fold_vector_interleave8() { ; CHECK-NEXT: ret <32 x i32> @@ -99,34 +205,242 @@ define <32 x i32> @fold_vector_interleave8() { ret <32 x i32> %1 } -define {<4 x i32>, <4 x i32>} @fold_vector_deinterleave2() { +define @fold_scalable_vector_interleave8() { +; CHECK-LABEL: define @fold_scalable_vector_interleave8() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave8.nxv32i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave8_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave8_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave8.nxv32i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + +define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-LABEL: define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-NEXT: ret { <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> } ; - %1 = call {<4 x i32>, <4 x i32>} @llvm.vector.deinterleave2.v4i32.v8i32(<8 x i32> ) - ret {<4 x i32>, <4 x i32>} %1 + %1 = call { <4 x i32>, <4 x i32> } @llvm.vector.deinterleave2.v4i32.v8i32(<8 x i32> ) + ret { <4 x i32>, <4 x i32> } %1 } -define {, } @fold_scalable_vector_deinterleave2() { +define { , } @fold_scalable_vector_deinterleave2() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2() { ; CHECK-NEXT: ret { , } zeroinitializer ; - %1 = call {, } @llvm.vector.deinterleave2.v4i32.v8i32( zeroinitializer) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4i32.v8i32( zeroinitializer) + ret { , } %1 } -define {, } @fold_scalable_vector_deinterleave2_splat() { +define { , } @fold_scalable_vector_deinterleave2_splat() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2_splat() { ; CHECK-NEXT: ret { , } { splat (i32 1), splat (i32 1) } ; - %1 = call {, } @llvm.vector.deinterleave2.v4i32.v8i32( splat (i32 1)) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4i32.v8i32( splat (i32 1)) + ret { , } %1 } -define {, } @fold_scalable_vector_deinterleave2_splatfp() { +define { , } @fold_scalable_vector_deinterleave2_splatfp() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2_splatfp() { ; CHECK-NEXT: ret { , } { splat (float 1.000000e+00), splat (float 1.000000e+00) } ; - %1 = call {, } @llvm.vector.deinterleave2.v4f32.v8f32( splat (float 1.0)) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4f32.v8f32( splat (float 1.0)) + ret { , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave3() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave3() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave3.v4i32.v12i32(<12 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3() { +; CHECK-NEXT: ret { , , } zeroinitializer +; + %1 = call { , , } @llvm.vector.deinterleave3.v4i32.v12i32( zeroinitializer) + ret { , , } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3_splat() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3_splat() { +; CHECK-NEXT: ret { , , } { splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , } @llvm.vector.deinterleave3.v4i32.v12i32( splat (i32 1)) + ret { , , } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3_splatfp() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3_splatfp() { +; CHECK-NEXT: ret { , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , } @llvm.vector.deinterleave3.v4f32.v12f32( splat (float 1.0)) + ret { , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave4() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave4() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave4.v4i32.v16i32(<16 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4() { +; CHECK-NEXT: ret { , , , } zeroinitializer +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4i32.v16i32( zeroinitializer) + ret { , , , } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4_splat() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4_splat() { +; CHECK-NEXT: ret { , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4i32.v16i32( splat (i32 1)) + ret { , , , } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4_splatfp() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4_splatfp() { +; CHECK-NEXT: ret { , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4f32.v16f32( splat (float 1.0)) + ret { , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave5() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave5() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave5.v4i32.v20i32(<20 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5() { +; CHECK-NEXT: ret { , , , , } zeroinitializer +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4i32.v20i32( zeroinitializer) + ret { , , , , } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5_splat() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5_splat() { +; CHECK-NEXT: ret { , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4i32.v20i32( splat (i32 1)) + ret { , , , , } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5_splatfp() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5_splatfp() { +; CHECK-NEXT: ret { , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4f32.v20f32( splat (float 1.0)) + ret { , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave6() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave6() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave6.v4i32.v24i32(<24 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6() { +; CHECK-NEXT: ret { , , , , , } zeroinitializer +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4i32.v24i32( zeroinitializer) + ret { , , , , , } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6_splat() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6_splat() { +; CHECK-NEXT: ret { , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4i32.v24i32( splat (i32 1)) + ret { , , , , , } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6_splatfp() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6_splatfp() { +; CHECK-NEXT: ret { , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4f32.v24f32( splat (float 1.0)) + ret { , , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave7() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave7() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave7.v4i32.v28i32(<28 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7() { +; CHECK-NEXT: ret { , , , , , , } zeroinitializer +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4i32.v28i32( zeroinitializer) + ret { , , , , , , } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7_splat() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7_splat() { +; CHECK-NEXT: ret { , , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4i32.v28i32( splat (i32 1)) + ret { , , , , , , } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7_splatfp() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7_splatfp() { +; CHECK-NEXT: ret { , , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4f32.v28f32( splat (float 1.0)) + ret { , , , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave8() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave8() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave8.v4i32.v32i32(<32 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8() { +; CHECK-NEXT: ret { , , , , , , , } zeroinitializer +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4i32.v32i32( zeroinitializer) + ret { , , , , , , , } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8_splat() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8_splat() { +; CHECK-NEXT: ret { , , , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4i32.v32i32( splat (i32 1)) + ret { , , , , , , , } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8_splatfp() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8_splatfp() { +; CHECK-NEXT: ret { , , , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4f32.v32f32( splat (float 1.0)) + ret { , , , , , , , } %1 } diff --git a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll index d447a39aafd93..ac767c68e0b25 100644 --- a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll +++ b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll @@ -1,20 +1,15 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --filter-out-after "scalar.ph:" --version 6 ; RUN: opt -passes=loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -S %s | FileCheck %s -define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_stores_noalias_via_rt_checks_after_loads( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -22,10 +17,8 @@ define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, p ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE17:.*]] ] @@ -106,11 +99,10 @@ define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, p ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_CONTINUE17]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP43]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -141,27 +133,22 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_aliasing_store( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -173,10 +160,8 @@ define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] ; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE21:.*]] ] @@ -259,11 +244,10 @@ define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE21]] ; CHECK: [[PRED_STORE_CONTINUE21]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP43]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -295,28 +279,23 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %src, ptr %cond, i32 %n) { +define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_noalias_store_via_runtime_checks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[DST_1:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[DST_1:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -336,10 +315,8 @@ define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %sr ; CHECK-NEXT: [[BOUND116:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT17:%.*]] = and i1 [[BOUND015]], [[BOUND116]] ; CHECK-NEXT: [[CONFLICT_RDX18:%.*]] = or i1 [[CONFLICT_RDX14]], [[FOUND_CONFLICT17]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE30:.*]] ] @@ -424,11 +401,10 @@ define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %sr ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE30]] ; CHECK: [[PRED_STORE_CONTINUE30]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP45:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP45:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP45]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP33:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -461,27 +437,22 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, ptr %dst.1, i32 %n) { +define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, ptr %dst.1) { ; CHECK-LABEL: define void @test_memory_op_between_loads_alias( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -493,10 +464,8 @@ define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, p ; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] ; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE17:.*]] ] @@ -547,26 +516,25 @@ define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, p ; CHECK-NEXT: br i1 [[TMP26]], label %[[PRED_STORE_IF14:.*]], label %[[PRED_STORE_CONTINUE15:.*]] ; CHECK: [[PRED_STORE_IF14]]: ; CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] -; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 4, !alias.scope [[META38]], !noalias [[META40]] +; CHECK-NEXT: [[TMP32:%.*]] = load i32, ptr [[TMP27]], align 4, !alias.scope [[META38]], !noalias [[META40]] ; CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] -; CHECK-NEXT: store i32 [[TMP28]], ptr [[TMP29]], align 4, !alias.scope [[META42]], !noalias [[META35]] +; CHECK-NEXT: store i32 [[TMP32]], ptr [[TMP29]], align 4, !alias.scope [[META42]], !noalias [[META35]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE15]] ; CHECK: [[PRED_STORE_CONTINUE15]]: ; CHECK-NEXT: [[TMP30:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 ; CHECK-NEXT: br i1 [[TMP30]], label %[[PRED_STORE_IF16:.*]], label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_IF16]]: ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] -; CHECK-NEXT: [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 4, !alias.scope [[META38]], !noalias [[META40]] +; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP31]], align 4, !alias.scope [[META38]], !noalias [[META40]] ; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] -; CHECK-NEXT: store i32 [[TMP32]], ptr [[TMP33]], align 4, !alias.scope [[META42]], !noalias [[META35]] +; CHECK-NEXT: store i32 [[TMP28]], ptr [[TMP33]], align 4, !alias.scope [[META42]], !noalias [[META35]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_CONTINUE17]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP34:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP34:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP34]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP43:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -601,28 +569,23 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr %src, ptr %cond, ptr %dst.1, i32 %n) { +define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr %src, ptr %cond, ptr %dst.1) { ; CHECK-LABEL: define void @test_memory_op_between_loads_no_alias_via_rt_checks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -642,10 +605,8 @@ define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr % ; CHECK-NEXT: [[BOUND116:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT17:%.*]] = and i1 [[BOUND015]], [[BOUND116]] ; CHECK-NEXT: [[CONFLICT_RDX18:%.*]] = or i1 [[CONFLICT_RDX14]], [[FOUND_CONFLICT17]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE26:.*]] ] @@ -698,26 +659,25 @@ define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr % ; CHECK-NEXT: br i1 [[TMP28]], label %[[PRED_STORE_IF23:.*]], label %[[PRED_STORE_CONTINUE24:.*]] ; CHECK: [[PRED_STORE_IF23]]: ; CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] -; CHECK-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 4, !alias.scope [[META53]] +; CHECK-NEXT: [[TMP34:%.*]] = load i32, ptr [[TMP29]], align 4, !alias.scope [[META53]] ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] -; CHECK-NEXT: store i32 [[TMP30]], ptr [[TMP31]], align 4, !alias.scope [[META54]], !noalias [[META55]] +; CHECK-NEXT: store i32 [[TMP34]], ptr [[TMP31]], align 4, !alias.scope [[META54]], !noalias [[META55]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE24]] ; CHECK: [[PRED_STORE_CONTINUE24]]: ; CHECK-NEXT: [[TMP32:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 ; CHECK-NEXT: br i1 [[TMP32]], label %[[PRED_STORE_IF25:.*]], label %[[PRED_STORE_CONTINUE26]] ; CHECK: [[PRED_STORE_IF25]]: ; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] -; CHECK-NEXT: [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 4, !alias.scope [[META53]] +; CHECK-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP33]], align 4, !alias.scope [[META53]] ; CHECK-NEXT: [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] -; CHECK-NEXT: store i32 [[TMP34]], ptr [[TMP35]], align 4, !alias.scope [[META54]], !noalias [[META55]] +; CHECK-NEXT: store i32 [[TMP30]], ptr [[TMP35]], align 4, !alias.scope [[META54]], !noalias [[META55]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE26]] ; CHECK: [[PRED_STORE_CONTINUE26]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP36]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP56:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -752,10 +712,431 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } +; Test that stores are NOT sunk when there's an aliasing load between them +; without scoped noalias metadata. +define void @test_stores_not_sunk_due_to_aliasing_load(ptr %dst, ptr %alias, ptr %cond) { +; CHECK-LABEL: define void @test_stores_not_sunk_due_to_aliasing_load( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[ALIAS:%.*]], ptr [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[ALIAS]], i64 400 +; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[ALIAS]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE11:.*]] ] +; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP4]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 4, !alias.scope [[META58:![0-9]+]] +; CHECK-NEXT: [[TMP10:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP7:%.*]] = xor <2 x i1> [[TMP10]], splat (i1 true) +; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0 +; CHECK-NEXT: br i1 [[TMP8]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i32, ptr [[ALIAS]], i32 [[TMP4]] +; CHECK-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 4, !alias.scope [[META61:![0-9]+]] +; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store i32 [[TMP15]], ptr [[TMP12]], align 4, !alias.scope [[META63:![0-9]+]], !noalias [[META65:![0-9]+]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 +; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF6:.*]], label %[[PRED_STORE_CONTINUE7:.*]] +; CHECK: [[PRED_STORE_IF6]]: +; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[ALIAS]], i32 [[TMP5]] +; CHECK-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP14]], align 4, !alias.scope [[META61]] +; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] +; CHECK-NEXT: store i32 [[TMP11]], ptr [[TMP16]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE7]] +; CHECK: [[PRED_STORE_CONTINUE7]]: +; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0 +; CHECK-NEXT: br i1 [[TMP17]], label %[[PRED_STORE_IF8:.*]], label %[[PRED_STORE_CONTINUE9:.*]] +; CHECK: [[PRED_STORE_IF8]]: +; CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store i32 10, ptr [[TMP18]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_CONTINUE9]]: +; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1 +; CHECK-NEXT: br i1 [[TMP20]], label %[[PRED_STORE_IF10:.*]], label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_IF10]]: +; CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] +; CHECK-NEXT: store i32 10, ptr [[TMP19]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_CONTINUE11]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP21:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP21]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP66:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %c = load i32, ptr %gep.cond, align 4 + %c.0 = icmp ule i32 %c, 11 + br i1 %c.0, label %then, label %else + +then: + %gep.dst.then = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 10, ptr %gep.dst.then, align 4 + br label %loop.latch + +else: + ; This aliasing load prevents store sinking + %gep.alias = getelementptr inbounds i32, ptr %alias, i32 %iv + %v = load i32, ptr %gep.alias, align 4 + %gep.dst.else = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 %v, ptr %gep.dst.else, align 4 + br label %loop.latch + +loop.latch: + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} + +define void @test_stores_not_sunk_aliasing_load_between(ptr %dst, ptr %mid, ptr %cond) { +; CHECK-LABEL: define void @test_stores_not_sunk_aliasing_load_between( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[MID:%.*]], ptr [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[MID]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[MID]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] +; CHECK-NEXT: [[BOUND06:%.*]] = icmp ult ptr [[MID]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] +; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] +; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE15:.*]] ] +; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP0]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP2]], align 4, !alias.scope [[META68:![0-9]+]] +; CHECK-NEXT: [[TMP3:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP4:%.*]] = xor <2 x i1> [[TMP3]], splat (i1 true) +; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0 +; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP0]] +; CHECK-NEXT: store i32 20, ptr [[TMP6]], align 4, !alias.scope [[META71:![0-9]+]], !noalias [[META73:![0-9]+]] +; CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[MID]], i32 [[TMP0]] +; CHECK-NEXT: store i32 [[TMP7]], ptr [[TMP8]], align 4, !alias.scope [[META75:![0-9]+]], !noalias [[META68]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1 +; CHECK-NEXT: br i1 [[TMP9]], label %[[PRED_STORE_IF10:.*]], label %[[PRED_STORE_CONTINUE11:.*]] +; CHECK: [[PRED_STORE_IF10]]: +; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP1]] +; CHECK-NEXT: store i32 20, ptr [[TMP10]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[MID]], i32 [[TMP1]] +; CHECK-NEXT: store i32 [[TMP11]], ptr [[TMP12]], align 4, !alias.scope [[META75]], !noalias [[META68]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_CONTINUE11]]: +; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP3]], i32 0 +; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF12:.*]], label %[[PRED_STORE_CONTINUE13:.*]] +; CHECK: [[PRED_STORE_IF12]]: +; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP0]] +; CHECK-NEXT: store i32 10, ptr [[TMP14]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE13]] +; CHECK: [[PRED_STORE_CONTINUE13]]: +; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP3]], i32 1 +; CHECK-NEXT: br i1 [[TMP15]], label %[[PRED_STORE_IF14:.*]], label %[[PRED_STORE_CONTINUE15]] +; CHECK: [[PRED_STORE_IF14]]: +; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP1]] +; CHECK-NEXT: store i32 10, ptr [[TMP16]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE15]] +; CHECK: [[PRED_STORE_CONTINUE15]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP76:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %c = load i32, ptr %gep.cond, align 4 + %c.0 = icmp ule i32 %c, 11 + br i1 %c.0, label %then, label %else + +then: + %gep.dst.then = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 10, ptr %gep.dst.then, align 4 + br label %loop.latch + +else: + %gep.dst.else = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 20, ptr %gep.dst.else, align 4 + %gep.mid = getelementptr inbounds i32, ptr %mid, i32 %iv + %l = load i32, ptr %gep.dst.else + store i32 %l, ptr %gep.mid, align 4 + br label %loop.latch + +loop.latch: + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} + +define void @sink_multiple_store_groups_noalias_via_scev(ptr %dst, ptr %src) { +; CHECK-LABEL: define void @sink_multiple_store_groups_noalias_via_scev( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 12688 +; CHECK-NEXT: [[SCEVGEP8:%.*]] = getelementptr i8, ptr [[SRC]], i64 12828 +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP8]] +; CHECK-NEXT: [[BOUND2:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND1]], [[BOUND2]] +; CHECK-NEXT: br i1 [[FOUND_CONFLICT]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE9:.*]] ] +; CHECK-NEXT: [[INDEX:%.*]] = mul i64 [[INDEX1]], 16 +; CHECK-NEXT: [[IV:%.*]] = add i64 [[INDEX]], 0 +; CHECK-NEXT: [[TMP17:%.*]] = add i64 [[INDEX]], 16 +; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[IV]] +; CHECK-NEXT: [[TMP22:%.*]] = getelementptr double, ptr [[SRC]], i64 [[TMP17]] +; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x ptr> poison, ptr [[GEP_SRC]], i32 0 +; CHECK-NEXT: [[TMP24:%.*]] = insertelement <2 x ptr> [[TMP23]], ptr [[TMP22]], i32 1 +; CHECK-NEXT: [[GEP_FLAG:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 152 +; CHECK-NEXT: [[TMP26:%.*]] = getelementptr i8, ptr [[TMP22]], i64 152 +; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[GEP_FLAG]], align 4, !alias.scope [[META78:![0-9]+]] +; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP26]], align 4, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP29:%.*]] = insertelement <2 x i32> poison, i32 [[TMP27]], i32 0 +; CHECK-NEXT: [[TMP30:%.*]] = insertelement <2 x i32> [[TMP29]], i32 [[TMP28]], i32 1 +; CHECK-NEXT: [[TMP31:%.*]] = icmp eq <2 x i32> [[TMP30]], zeroinitializer +; CHECK-NEXT: [[TMP13:%.*]] = load double, ptr [[GEP_SRC]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP14:%.*]] = load double, ptr [[TMP22]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP15:%.*]] = insertelement <2 x double> poison, double [[TMP13]], i32 0 +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = insertelement <2 x double> [[TMP15]], double [[TMP14]], i32 1 +; CHECK-NEXT: [[TMP33:%.*]] = xor <2 x i1> [[TMP31]], splat (i1 true) +; CHECK-NEXT: [[TMP34:%.*]] = fadd <2 x double> [[WIDE_LOAD]], splat (double 8.000000e+00) +; CHECK-NEXT: [[GEP_DST1_ELSE:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: [[TMP37:%.*]] = getelementptr double, ptr [[DST]], i64 [[TMP17]] +; CHECK-NEXT: [[TMP38:%.*]] = insertelement <2 x ptr> poison, ptr [[GEP_DST1_ELSE]], i32 0 +; CHECK-NEXT: [[TMP39:%.*]] = insertelement <2 x ptr> [[TMP38]], ptr [[TMP37]], i32 1 +; CHECK-NEXT: [[TMP40:%.*]] = extractelement <2 x i1> [[TMP33]], i32 0 +; CHECK-NEXT: br i1 [[TMP40]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] +; CHECK: [[PRED_LOAD_IF]]: +; CHECK-NEXT: [[TMP41:%.*]] = extractelement <2 x double> [[TMP34]], i32 0 +; CHECK-NEXT: store double [[TMP41]], ptr [[GEP_DST1_ELSE]], align 8, !alias.scope [[META81:![0-9]+]], !noalias [[META78]] +; CHECK-NEXT: [[GEP_SRC_16:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 16 +; CHECK-NEXT: [[TMP43:%.*]] = load double, ptr [[GEP_SRC_16]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP44:%.*]] = insertelement <2 x double> poison, double [[TMP43]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] +; CHECK: [[PRED_LOAD_CONTINUE]]: +; CHECK-NEXT: [[TMP45:%.*]] = phi <2 x double> [ poison, %[[VECTOR_BODY]] ], [ [[TMP44]], %[[PRED_LOAD_IF]] ] +; CHECK-NEXT: [[TMP46:%.*]] = extractelement <2 x i1> [[TMP33]], i32 1 +; CHECK-NEXT: br i1 [[TMP46]], label %[[PRED_LOAD_IF2:.*]], label %[[PRED_LOAD_CONTINUE3:.*]] +; CHECK: [[PRED_LOAD_IF2]]: +; CHECK-NEXT: [[TMP47:%.*]] = extractelement <2 x double> [[TMP34]], i32 1 +; CHECK-NEXT: store double [[TMP47]], ptr [[TMP37]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP48:%.*]] = getelementptr i8, ptr [[TMP22]], i64 16 +; CHECK-NEXT: [[TMP49:%.*]] = load double, ptr [[TMP48]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP50:%.*]] = insertelement <2 x double> [[TMP45]], double [[TMP49]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE3]] +; CHECK: [[PRED_LOAD_CONTINUE3]]: +; CHECK-NEXT: [[TMP51:%.*]] = phi <2 x double> [ [[TMP45]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP50]], %[[PRED_LOAD_IF2]] ] +; CHECK-NEXT: [[TMP53:%.*]] = fmul <2 x double> splat (double 2.000000e+01), [[TMP51]] +; CHECK-NEXT: [[TMP54:%.*]] = extractelement <2 x i1> [[TMP33]], i32 0 +; CHECK-NEXT: br i1 [[TMP54]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[GEP_DST2_ELSE:%.*]] = getelementptr i8, ptr [[GEP_DST1_ELSE]], i64 8 +; CHECK-NEXT: [[TMP56:%.*]] = extractelement <2 x double> [[TMP53]], i32 0 +; CHECK-NEXT: store double [[TMP56]], ptr [[GEP_DST2_ELSE]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP57:%.*]] = extractelement <2 x i1> [[TMP33]], i32 1 +; CHECK-NEXT: br i1 [[TMP57]], label %[[PRED_STORE_IF4:.*]], label %[[PRED_STORE_CONTINUE5:.*]] +; CHECK: [[PRED_STORE_IF4]]: +; CHECK-NEXT: [[TMP58:%.*]] = getelementptr i8, ptr [[TMP37]], i64 8 +; CHECK-NEXT: [[TMP59:%.*]] = extractelement <2 x double> [[TMP53]], i32 1 +; CHECK-NEXT: store double [[TMP59]], ptr [[TMP58]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE5]] +; CHECK: [[PRED_STORE_CONTINUE5]]: +; CHECK-NEXT: [[TMP60:%.*]] = extractelement <2 x i1> [[TMP31]], i32 0 +; CHECK-NEXT: br i1 [[TMP60]], label %[[PRED_STORE_IF6:.*]], label %[[PRED_STORE_CONTINUE7:.*]] +; CHECK: [[PRED_STORE_IF6]]: +; CHECK-NEXT: [[TMP62:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[TMP13]], ptr [[TMP62]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP64:%.*]] = getelementptr i8, ptr [[TMP62]], i64 8 +; CHECK-NEXT: store double 1.000000e+01, ptr [[TMP64]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE7]] +; CHECK: [[PRED_STORE_CONTINUE7]]: +; CHECK-NEXT: [[TMP66:%.*]] = extractelement <2 x i1> [[TMP31]], i32 1 +; CHECK-NEXT: br i1 [[TMP66]], label %[[PRED_STORE_IF8:.*]], label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_IF8]]: +; CHECK-NEXT: [[TMP68:%.*]] = getelementptr double, ptr [[DST]], i64 [[TMP17]] +; CHECK-NEXT: store double [[TMP14]], ptr [[TMP68]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP70:%.*]] = getelementptr i8, ptr [[TMP68]], i64 8 +; CHECK-NEXT: store double 1.000000e+01, ptr [[TMP70]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_CONTINUE9]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX1]], 2 +; CHECK-NEXT: [[TMP52:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP52]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP83:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr double, ptr %src, i64 %iv + %gep.flag = getelementptr i8, ptr %gep.src, i64 152 + %c = load i32, ptr %gep.flag, align 4 + %cmp = icmp eq i32 %c, 0 + %v.1 = load double, ptr %gep.src, align 8 + br i1 %cmp, label %then, label %else + +then: + %gep.dst1.then = getelementptr double, ptr %dst, i64 %iv + store double %v.1, ptr %gep.dst1.then, align 8 + %gep.dst2.then = getelementptr i8, ptr %gep.dst1.then, i64 8 + store double 10.0, ptr %gep.dst2.then, align 8 + br label %loop.latch + +else: + %r.1 = fadd double %v.1, 8.0 + %gep.dst1.else = getelementptr double, ptr %dst, i64 %iv + store double %r.1, ptr %gep.dst1.else, align 8 + %gep.src.16 = getelementptr i8, ptr %gep.src, i64 16 + %v.3 = load double, ptr %gep.src.16, align 8 + %r.2 = fmul double 20.0, %v.3 + %gep.dst2.else = getelementptr i8, ptr %gep.dst1.else, i64 8 + store double %r.2, ptr %gep.dst2.else, align 8 + br label %loop.latch + +loop.latch: + %iv.next = add i64 %iv, 16 + %exit.cond = icmp eq i64 %iv.next, 1600 + br i1 %exit.cond, label %exit, label %loop + +exit: + ret void +} + +define void @multiple_store_groups_alias(ptr %dst, ptr %src) { +; CHECK-LABEL: define void @multiple_store_groups_alias( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*]]: +; CHECK-NEXT: br label %[[LOOP:.*]] +; CHECK: [[LOOP]]: +; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] +; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[IV]] +; CHECK-NEXT: [[GEP_FLAG:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 152 +; CHECK-NEXT: [[C:%.*]] = load i32, ptr [[GEP_FLAG]], align 4 +; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[C]], 0 +; CHECK-NEXT: [[V_1:%.*]] = load double, ptr [[GEP_SRC]], align 8 +; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]] +; CHECK: [[ELSE]]: +; CHECK-NEXT: [[GEP_DST1_THEN:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[V_1]], ptr [[GEP_DST1_THEN]], align 8 +; CHECK-NEXT: [[GEP_DST2_THEN:%.*]] = getelementptr i8, ptr [[GEP_DST1_THEN]], i64 7 +; CHECK-NEXT: store double 1.200000e+01, ptr [[GEP_DST2_THEN]], align 8 +; CHECK-NEXT: br label %[[LOOP_LATCH]] +; CHECK: [[THEN]]: +; CHECK-NEXT: [[T_1:%.*]] = fadd double [[V_1]], 1.000000e+01 +; CHECK-NEXT: [[GEP_DST1_ELSE:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[T_1]], ptr [[GEP_DST1_ELSE]], align 8 +; CHECK-NEXT: [[GEP_SRC_16:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 16 +; CHECK-NEXT: [[V_3:%.*]] = load double, ptr [[GEP_SRC_16]], align 8 +; CHECK-NEXT: [[T_2:%.*]] = fmul double 2.000000e+01, [[V_3]] +; CHECK-NEXT: [[GEP_DST2_ELSE:%.*]] = getelementptr i8, ptr [[GEP_DST1_ELSE]], i64 7 +; CHECK-NEXT: store double [[T_2]], ptr [[GEP_DST2_ELSE]], align 8 +; CHECK-NEXT: br label %[[LOOP_LATCH]] +; CHECK: [[LOOP_LATCH]]: +; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 16 +; CHECK-NEXT: [[EXIT_COND:%.*]] = icmp eq i64 [[IV_NEXT]], 1600 +; CHECK-NEXT: br i1 [[EXIT_COND]], label %[[EXIT:.*]], label %[[LOOP]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void +; +entry: + br label %loop + +loop: + %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr double, ptr %src, i64 %iv + %gep.flag = getelementptr i8, ptr %gep.src, i64 152 + %c = load i32, ptr %gep.flag, align 4 + %cmp = icmp eq i32 %c, 0 + %v.1 = load double, ptr %gep.src, align 8 + br i1 %cmp, label %then, label %else + +else: + %gep.dst1.then = getelementptr double, ptr %dst, i64 %iv + store double %v.1, ptr %gep.dst1.then, align 8 + %gep.dst2.then = getelementptr i8, ptr %gep.dst1.then, i64 7 + store double 12.0, ptr %gep.dst2.then, align 8 + br label %loop.latch + +then: + %r.1 = fadd double %v.1, 10.0 + %gep.dst1.else = getelementptr double, ptr %dst, i64 %iv + store double %r.1, ptr %gep.dst1.else, align 8 + %gep.src.16 = getelementptr i8, ptr %gep.src, i64 16 + %v.3 = load double, ptr %gep.src.16, align 8 + %r.2 = fmul double 20.0, %v.3 + %gep.dst2.else = getelementptr i8, ptr %gep.dst1.else, i64 7 + store double %r.2, ptr %gep.dst2.else, align 8 + br label %loop.latch + +loop.latch: + %iv.next = add i64 %iv, 16 + %exit.cond = icmp eq i64 %iv.next, 1600 + br i1 %exit.cond, label %exit, label %loop + +exit: + ret void +} diff --git a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll index b30d010aaf9c9..e4c893f5269bb 100644 --- a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll +++ b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll @@ -1,20 +1,15 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --filter-out-after "scalar.ph:" --version 6 ; RUN: opt -passes=loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -S %s | FileCheck %s -define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -22,10 +17,8 @@ define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -76,11 +69,10 @@ define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP37:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP37]], align 4, !alias.scope [[META5:![0-9]+]], !noalias [[META7:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP60:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP60]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] +; CHECK-NEXT: [[TMP38:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP38]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -108,7 +100,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -116,16 +108,15 @@ exit: } ; Negative test: Different addresses - should NOT hoist -define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 %n) { +define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond) { ; CHECK-LABEL: define void @different_addresses( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC1:%.*]], ptr [[SRC2:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC1:%.*]], ptr [[SRC2:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[SRC15:%.*]] = ptrtoint ptr [[SRC1]] to i64 ; CHECK-NEXT: [[SRC23:%.*]] = ptrtoint ptr [[SRC2]] to i64 ; CHECK-NEXT: [[COND2:%.*]] = ptrtoint ptr [[COND]] to i64 ; CHECK-NEXT: [[DST1:%.*]] = ptrtoint ptr [[DST]] to i64 -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[DST1]], [[COND2]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = icmp ult i64 [[TMP0]], 8 @@ -135,10 +126,8 @@ define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[DST1]], [[SRC15]] ; CHECK-NEXT: [[FOUND_CONFLICT9:%.*]] = icmp ult i64 [[TMP2]], 8 ; CHECK-NEXT: [[CONFLICT_RDX10:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT9]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE13:.*]] ] @@ -189,11 +178,10 @@ define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 ; CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP34]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP60:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP60]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]] +; CHECK-NEXT: [[TMP35:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP35]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -222,7 +210,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -230,21 +218,16 @@ exit: } ; Negative test: Non-complementary masks - should NOT hoist -define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, i32 %n) { +define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2) { ; CHECK-LABEL: define void @non_complementary_masks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND1:%.*]], ptr [[COND2:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND1:%.*]], ptr [[COND2:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND2]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND1]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND2]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND1]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -256,10 +239,8 @@ define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, ; CHECK-NEXT: [[BOUND18:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT9:%.*]] = and i1 [[BOUND07]], [[BOUND18]] ; CHECK-NEXT: [[CONFLICT_RDX10:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT9]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE17:.*]] ] @@ -315,11 +296,10 @@ define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, ; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI18]], ptr [[TMP41]], align 4, !alias.scope [[META21:![0-9]+]], !noalias [[META23:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP63:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP63]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]] +; CHECK-NEXT: [[TMP42:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP42]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -353,7 +333,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -362,20 +342,15 @@ exit: ; Negative test: Different access sizes - should NOT hoist ; Both loads use the same pointer but have different types (i8 vs i32) -define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @different_access_sizes( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -383,10 +358,8 @@ define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -438,11 +411,10 @@ define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP31]], align 4, !alias.scope [[META31:![0-9]+]], !noalias [[META33:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP32:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP32:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP32]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP34:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -471,7 +443,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -479,20 +451,15 @@ exit: } ; Positive test: Same address with different alignments - should hoist with minimum alignment -define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @different_alignments_same_address( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -500,10 +467,8 @@ define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i3 ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -554,11 +519,10 @@ define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i3 ; CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP34]], align 4, !alias.scope [[META41:![0-9]+]], !noalias [[META43:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP48:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP48]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP44:![0-9]+]] +; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP36]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP44:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -586,7 +550,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -594,9 +558,9 @@ exit: } ; Negative test: Volatile loads - should NOT hoist -define void @volatile_load(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @volatile_load(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @volatile_load( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: ; CHECK-NEXT: br label %[[LOOP:.*]] ; CHECK: [[LOOP]]: @@ -618,7 +582,7 @@ define void @volatile_load(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[GEP_DST:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[IV]] ; CHECK-NEXT: store i32 [[MERGE]], ptr [[GEP_DST]], align 4 ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1 -; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], [[N]] +; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 100 ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP]] ; CHECK: [[EXIT]]: ; CHECK-NEXT: ret void @@ -648,7 +612,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -658,20 +622,15 @@ exit: ; Test hoisting with duplicate GEPs: The same address is computed by different ; GEP instructions in different branches. The hoisting pass should use SCEV to ; recognize they compute the same address and hoist the load. -define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @duplicate_gep( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -679,10 +638,8 @@ define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -733,11 +690,10 @@ define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP30]], align 4, !alias.scope [[META51:![0-9]+]], !noalias [[META53:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP31:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP31:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP31]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP54:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -766,7 +722,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -776,22 +732,15 @@ exit: ; Test with non-unit-stride loads: Loads have stride 16 (2 doubles * 8 bytes) ; instead of unit stride (8 bytes). The hoisting optimization should still work ; since both loads access the same address with the same stride. -define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @non_unit_stride_i64( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[TMP1]], 3 -; CHECK-NEXT: [[TMP5:%.*]] = add nuw nsw i64 [[TMP4]], 4 -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP5]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 796 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -799,10 +748,8 @@ define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -853,11 +800,10 @@ define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP6]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP32]], align 4, !alias.scope [[META61:![0-9]+]], !noalias [[META63:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP33]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP64:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -886,7 +832,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -896,15 +842,12 @@ exit: ; Test that loads inside masked regions (without individual masks) are ; correctly detected and hoisted when they have complementary predicates. -define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, ptr %cond, i32 %n) { +define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, ptr %cond) { ; CHECK-LABEL: define void @hoist_loads_in_masked_regions( -; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ] @@ -917,12 +860,12 @@ define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, p ; CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[INDEX]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP3]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP66:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] -; CHECK: [[SCALAR_PH]]: +; CHECK-NEXT: br label %[[EXIT:.*]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void ; entry: br label %loop @@ -946,7 +889,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -956,15 +899,12 @@ exit: ; loading from the same address, all loads are hoisted and replaced, not just ; the first pair. This tests the K loop that continues searching after finding ; the initial complementary pair. -define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %src, ptr %cond, i32 %n) { +define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %src, ptr %cond) { ; CHECK-LABEL: define void @hoist_multiple_complementary_loads( -; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE10:.*]] ] @@ -1040,12 +980,12 @@ define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %s ; CHECK-NEXT: [[TMP40:%.*]] = getelementptr inbounds i8, ptr [[TMP39]], i64 32 ; CHECK-NEXT: store <2 x i32> [[TMP42]], ptr [[TMP40]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP41:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP41]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP68:![0-9]+]] +; CHECK-NEXT: [[TMP46:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP46]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP67:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] -; CHECK: [[SCALAR_PH]]: +; CHECK-NEXT: br label %[[EXIT:.*]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void ; entry: br label %loop @@ -1084,7 +1024,7 @@ loop.latch: %offset.dst = getelementptr inbounds i8, ptr %gep.dst, i64 32 store i32 %merge, ptr %offset.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -1118,7 +1058,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF]]: ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP1]] ; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[TMP5]], align 2, !alias.scope [[META70:![0-9]+]] +; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[TMP5]], align 2, !alias.scope [[META68:![0-9]+]] ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <2 x i16> poison, i16 [[TMP6]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] ; CHECK: [[PRED_LOAD_CONTINUE]]: @@ -1128,7 +1068,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF3]]: ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP2]] ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i8, ptr [[TMP10]], i64 8 -; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[TMP11]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[TMP11]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x i16> [[TMP8]], i16 [[TMP12]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]] ; CHECK: [[PRED_LOAD_CONTINUE4]]: @@ -1137,7 +1077,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF5]]: ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP1]] ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i8, ptr [[TMP15]], i64 8 -; CHECK-NEXT: [[TMP17:%.*]] = load i16, ptr [[TMP16]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP17:%.*]] = load i16, ptr [[TMP16]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP18:%.*]] = insertelement <2 x i16> poison, i16 [[TMP17]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]] ; CHECK: [[PRED_LOAD_CONTINUE6]]: @@ -1146,17 +1086,17 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF7]]: ; CHECK-NEXT: [[TMP20:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP2]] ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[TMP20]], i64 8 -; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x i16> [[TMP19]], i16 [[TMP22]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_CONTINUE8]]: ; CHECK-NEXT: [[TMP24:%.*]] = phi <2 x i16> [ [[TMP19]], %[[PRED_LOAD_CONTINUE6]] ], [ [[TMP23]], %[[PRED_LOAD_IF7]] ] ; CHECK-NEXT: [[PREDPHI:%.*]] = select i1 [[COND]], <2 x i16> [[TMP24]], <2 x i16> [[TMP14]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i16> [[PREDPHI]], i32 1 -; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META73:![0-9]+]], !noalias [[META70]] +; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META71:![0-9]+]], !noalias [[META68]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 ; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 -; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP75:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP73:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: ; CHECK-NEXT: br label %[[SCALAR_PH]] ; CHECK: [[SCALAR_PH]]: @@ -1221,7 +1161,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[TMP7]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] ; CHECK: [[PRED_LOAD_IF]]: ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP3]], i64 8 -; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[TMP8]], align 2, !alias.scope [[META77:![0-9]+]] +; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[TMP8]], align 2, !alias.scope [[META75:![0-9]+]] ; CHECK-NEXT: [[TMP10:%.*]] = insertelement <2 x i16> poison, i16 [[TMP9]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] ; CHECK: [[PRED_LOAD_CONTINUE]]: @@ -1230,7 +1170,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[TMP12]], label %[[PRED_LOAD_IF3:.*]], label %[[PRED_LOAD_CONTINUE4:.*]] ; CHECK: [[PRED_LOAD_IF3]]: ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[TMP13]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[TMP13]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP15:%.*]] = insertelement <2 x i16> [[TMP11]], i16 [[TMP14]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]] ; CHECK: [[PRED_LOAD_CONTINUE4]]: @@ -1238,7 +1178,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[COND]], label %[[PRED_LOAD_IF5:.*]], label %[[PRED_LOAD_CONTINUE6:.*]] ; CHECK: [[PRED_LOAD_IF5]]: ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[TMP3]], i64 8 -; CHECK-NEXT: [[TMP18:%.*]] = load i16, ptr [[TMP17]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP18:%.*]] = load i16, ptr [[TMP17]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP19:%.*]] = insertelement <2 x i16> poison, i16 [[TMP18]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]] ; CHECK: [[PRED_LOAD_CONTINUE6]]: @@ -1246,17 +1186,17 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[COND]], label %[[PRED_LOAD_IF7:.*]], label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_IF7]]: ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x i16> [[TMP20]], i16 [[TMP22]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_CONTINUE8]]: ; CHECK-NEXT: [[TMP24:%.*]] = phi <2 x i16> [ [[TMP20]], %[[PRED_LOAD_CONTINUE6]] ], [ [[TMP23]], %[[PRED_LOAD_IF7]] ] ; CHECK-NEXT: [[PREDPHI:%.*]] = select i1 [[COND]], <2 x i16> [[TMP24]], <2 x i16> [[TMP16]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i16> [[PREDPHI]], i32 1 -; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META80:![0-9]+]], !noalias [[META77]] +; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META78:![0-9]+]], !noalias [[META75]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 ; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 -; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP82:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP80:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: ; CHECK-NEXT: br label %[[SCALAR_PH]] ; CHECK: [[SCALAR_PH]]: @@ -1289,3 +1229,135 @@ loop.latch: exit: ret void } + +define void @hoist_all_three_loads_at_same_address(ptr %dst, ptr %src, ptr noalias %cond) { +; CHECK-LABEL: define void @hoist_all_three_loads_at_same_address( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr noalias [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: br i1 [[FOUND_CONFLICT5]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] +; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] +; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] +; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x ptr> poison, ptr [[TMP6]], i32 0 +; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x ptr> [[TMP8]], ptr [[TMP7]], i32 1 +; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP4]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP10]], align 4 +; CHECK-NEXT: [[TMP11:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP12:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 20) +; CHECK-NEXT: [[TMP13:%.*]] = xor <2 x i1> [[TMP11]], splat (i1 true) +; CHECK-NEXT: [[TMP14:%.*]] = xor <2 x i1> [[TMP12]], splat (i1 true) +; CHECK-NEXT: [[TMP15:%.*]] = select <2 x i1> [[TMP13]], <2 x i1> [[TMP14]], <2 x i1> zeroinitializer +; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP15]], i32 0 +; CHECK-NEXT: br i1 [[TMP16]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] +; CHECK: [[PRED_LOAD_IF]]: +; CHECK-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62:![0-9]+]] +; CHECK-NEXT: [[TMP18:%.*]] = insertelement <2 x i32> poison, i32 [[TMP17]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] +; CHECK: [[PRED_LOAD_CONTINUE]]: +; CHECK-NEXT: [[TMP19:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP18]], %[[PRED_LOAD_IF]] ] +; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i1> [[TMP15]], i32 1 +; CHECK-NEXT: br i1 [[TMP20]], label %[[PRED_LOAD_IF2:.*]], label %[[PRED_LOAD_CONTINUE3:.*]] +; CHECK: [[PRED_LOAD_IF2]]: +; CHECK-NEXT: [[TMP21:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP22:%.*]] = insertelement <2 x i32> [[TMP19]], i32 [[TMP21]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE3]] +; CHECK: [[PRED_LOAD_CONTINUE3]]: +; CHECK-NEXT: [[TMP23:%.*]] = phi <2 x i32> [ [[TMP19]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP22]], %[[PRED_LOAD_IF2]] ] +; CHECK-NEXT: [[TMP24:%.*]] = add <2 x i32> [[TMP23]], splat (i32 10) +; CHECK-NEXT: [[TMP25:%.*]] = select <2 x i1> [[TMP13]], <2 x i1> [[TMP12]], <2 x i1> zeroinitializer +; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x i1> [[TMP25]], i32 0 +; CHECK-NEXT: br i1 [[TMP26]], label %[[PRED_LOAD_IF4:.*]], label %[[PRED_LOAD_CONTINUE5:.*]] +; CHECK: [[PRED_LOAD_IF4]]: +; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP28:%.*]] = insertelement <2 x i32> poison, i32 [[TMP27]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE5]] +; CHECK: [[PRED_LOAD_CONTINUE5]]: +; CHECK-NEXT: [[TMP29:%.*]] = phi <2 x i32> [ poison, %[[PRED_LOAD_CONTINUE3]] ], [ [[TMP28]], %[[PRED_LOAD_IF4]] ] +; CHECK-NEXT: [[TMP30:%.*]] = extractelement <2 x i1> [[TMP25]], i32 1 +; CHECK-NEXT: br i1 [[TMP30]], label %[[PRED_LOAD_IF6:.*]], label %[[PRED_LOAD_CONTINUE7:.*]] +; CHECK: [[PRED_LOAD_IF6]]: +; CHECK-NEXT: [[TMP31:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP32:%.*]] = insertelement <2 x i32> [[TMP29]], i32 [[TMP31]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE7]] +; CHECK: [[PRED_LOAD_CONTINUE7]]: +; CHECK-NEXT: [[TMP33:%.*]] = phi <2 x i32> [ [[TMP29]], %[[PRED_LOAD_CONTINUE5]] ], [ [[TMP32]], %[[PRED_LOAD_IF6]] ] +; CHECK-NEXT: [[TMP34:%.*]] = mul <2 x i32> [[TMP33]], splat (i32 2) +; CHECK-NEXT: [[TMP35:%.*]] = extractelement <2 x i1> [[TMP11]], i32 0 +; CHECK-NEXT: br i1 [[TMP35]], label %[[PRED_LOAD_IF8:.*]], label %[[PRED_LOAD_CONTINUE9:.*]] +; CHECK: [[PRED_LOAD_IF8]]: +; CHECK-NEXT: [[TMP36:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP37:%.*]] = insertelement <2 x i32> poison, i32 [[TMP36]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE9]] +; CHECK: [[PRED_LOAD_CONTINUE9]]: +; CHECK-NEXT: [[TMP38:%.*]] = phi <2 x i32> [ poison, %[[PRED_LOAD_CONTINUE7]] ], [ [[TMP37]], %[[PRED_LOAD_IF8]] ] +; CHECK-NEXT: [[TMP39:%.*]] = extractelement <2 x i1> [[TMP11]], i32 1 +; CHECK-NEXT: br i1 [[TMP39]], label %[[PRED_LOAD_IF10:.*]], label %[[PRED_LOAD_CONTINUE11]] +; CHECK: [[PRED_LOAD_IF10]]: +; CHECK-NEXT: [[TMP40:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP41:%.*]] = insertelement <2 x i32> [[TMP38]], i32 [[TMP40]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE11]] +; CHECK: [[PRED_LOAD_CONTINUE11]]: +; CHECK-NEXT: [[TMP42:%.*]] = phi <2 x i32> [ [[TMP38]], %[[PRED_LOAD_CONTINUE9]] ], [ [[TMP41]], %[[PRED_LOAD_IF10]] ] +; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP25]], <2 x i32> [[TMP34]], <2 x i32> [[TMP24]] +; CHECK-NEXT: [[PREDPHI16:%.*]] = select <2 x i1> [[TMP11]], <2 x i32> [[TMP42]], <2 x i32> [[PREDPHI]] +; CHECK-NEXT: [[TMP43:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store <2 x i32> [[PREDPHI16]], ptr [[TMP43]], align 4, !alias.scope [[META65:![0-9]+]], !noalias [[META62]] +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP44:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP44]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP67:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr inbounds i32, ptr %src, i32 %iv + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %l.c = load i32, ptr %gep.cond + %c1 = icmp ule i32 %l.c, 11 + %c2 = icmp ule i32 %l.c, 20 + br i1 %c1, label %then, label %else + +then: + %l.src.then = load i32, ptr %gep.src, align 4 + br label %loop.latch + +else: + br i1 %c2, label %else.if, label %else.else + +else.if: + %l.src.else.if = load i32, ptr %gep.src, align 4 + %mul = mul i32 %l.src.else.if, 2 + br label %loop.latch + +else.else: + %l.src.else.else = load i32, ptr %gep.src, align 4 + %add = add i32 %l.src.else.else, 10 + br label %loop.latch + +loop.latch: + %merge = phi i32 [ %l.src.then, %then ], [ %mul, %else.if ], [ %add, %else.else ] + %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 %merge, ptr %gep.dst, align 4 + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll index f8229b3555653..f3f9191a6fdc7 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 -; RUN: opt -mtriple=riscv64 -mattr=+m,+v -passes=slp-vectorizer -S < %s | FileCheck %s +; RUN: opt -mtriple=riscv64 -mattr=+m,+v,+unaligned-vector-mem -passes=slp-vectorizer -S < %s | FileCheck %s define void @const_stride_1_no_reordering(ptr %pl, ptr %ps) { ; CHECK-LABEL: define void @const_stride_1_no_reordering( @@ -621,21 +621,9 @@ define void @constant_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) ; CHECK-LABEL: define void @constant_stride_widen_no_reordering( ; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] { ; CHECK-NEXT: [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0 -; CHECK-NEXT: [[GEP_L4:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 100 -; CHECK-NEXT: [[GEP_L8:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 200 -; CHECK-NEXT: [[GEP_L12:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 300 ; CHECK-NEXT: [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0 -; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[GEP_L0]], align 1 -; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[GEP_L4]], align 1 -; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i8>, ptr [[GEP_L8]], align 1 -; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i8>, ptr [[GEP_L12]], align 1 -; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> [[TMP2]], <16 x i32> -; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <16 x i8> [[TMP7]], <16 x i8> [[TMP11]], <16 x i32> -; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <4 x i8> [[TMP4]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <16 x i8> [[TMP9]], <16 x i8> [[TMP10]], <16 x i32> +; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.experimental.vp.strided.load.v4i32.p0.i64(ptr align 1 [[GEP_L0]], i64 100, <4 x i1> splat (i1 true), i32 4) +; CHECK-NEXT: [[TMP8:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8> ; CHECK-NEXT: store <16 x i8> [[TMP8]], ptr [[GEP_S0]], align 1 ; CHECK-NEXT: ret void ; diff --git a/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s b/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s index 73e713398545c..d87c038ae39b0 100644 --- a/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s +++ b/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s @@ -2,28 +2,23 @@ # RUN: | llvm-dwarfdump --verify - | FileCheck %s # Checking the LLVM side of cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp -# Compile that file with `-g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -S -std=c++20` +# Compile that file with `-g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -S -std=c++20 -target x86_64-linux` # to (re)generate this assembly file - while it might be slightly overkill in # some ways, it seems small/simple enough to keep this as an exact match for # that end to end test. # CHECK: No errors. - .text .file "simplified_template_names.cpp" - .file 0 "/usr/local/google/home/blaikie/dev/llvm/src" "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" md5 0x32ddf5ad86a2fc516a43ad9a2b034228 - .file 1 "/usr" "include/x86_64-linux-gnu/bits/types.h" md5 0x58b79843d97f4309eefa4aa722dac91e - .file 2 "/usr" "include/x86_64-linux-gnu/bits/stdint-intn.h" md5 0xb26974ec56196748bbc399ee826d2a0e - .file 3 "/usr" "lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/cstdint" - .file 4 "/usr" "include/stdint.h" md5 0x8e56ab3ccd56760d8ae9848ebf326071 - .file 5 "/usr" "include/x86_64-linux-gnu/bits/stdint-uintn.h" md5 0x3d2fbc5d847dd222c2fbd70457568436 + .file 0 "/Users/michaelbuch/Git/llvm-worktrees/main" "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" md5 0x0d97d46dd4360733206888e9ffc9e7e6 + .text .globl _Zli5_suffy # -- Begin function _Zli5_suffy - .p2align 4, 0x90 + .p2align 4 .type _Zli5_suffy,@function _Zli5_suffy: # @_Zli5_suffy .Lfunc_begin0: - .loc 0 142 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:142:0 + .loc 0 144 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -31,7 +26,7 @@ _Zli5_suffy: # @_Zli5_suffy .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp0: - .loc 0 142 44 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:142:44 + .loc 0 144 44 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:44 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -41,343 +36,352 @@ _Zli5_suffy: # @_Zli5_suffy .cfi_endproc # -- End function .globl main # -- Begin function main - .p2align 4, 0x90 + .p2align 4 .type main,@function main: # @main .Lfunc_begin1: - .loc 0 182 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:182:0 + .loc 0 190 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:190:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp - subq $64, %rsp + subq $16, %rsp .Ltmp2: - .loc 0 184 8 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:8 + .loc 0 192 8 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:8 movb .L__const.main.L(%rip), %al - movb %al, -16(%rbp) - .loc 0 185 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:185:3 + movb %al, -2(%rbp) + .loc 0 193 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:193:3 callq _Z2f1IJiEEvv - .loc 0 186 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:186:3 + .loc 0 194 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:194:3 callq _Z2f1IJfEEvv - .loc 0 187 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:187:3 + .loc 0 195 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:195:3 callq _Z2f1IJbEEvv - .loc 0 188 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:3 + .loc 0 196 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:196:3 callq _Z2f1IJdEEvv - .loc 0 189 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:189:3 + .loc 0 197 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:197:3 callq _Z2f1IJlEEvv - .loc 0 190 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:190:3 + .loc 0 198 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:198:3 callq _Z2f1IJsEEvv - .loc 0 191 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3 + .loc 0 199 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:199:3 callq _Z2f1IJjEEvv - .loc 0 192 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:3 + .loc 0 200 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:200:3 callq _Z2f1IJyEEvv - .loc 0 193 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:193:3 + .loc 0 201 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:201:3 callq _Z2f1IJxEEvv - .loc 0 194 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:194:3 + .loc 0 202 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:202:3 callq _Z2f1IJ3udtEEvv - .loc 0 195 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:195:3 + .loc 0 203 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:203:3 callq _Z2f1IJN2ns3udtEEEvv - .loc 0 196 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:196:3 + .loc 0 204 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:204:3 callq _Z2f1IJPN2ns3udtEEEvv - .loc 0 197 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:197:3 + .loc 0 205 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:205:3 callq _Z2f1IJN2ns5inner3udtEEEvv - .loc 0 198 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:198:3 + .loc 0 206 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:206:3 callq _Z2f1IJ2t1IJiEEEEvv - .loc 0 199 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:199:3 + .loc 0 207 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:207:3 callq _Z2f1IJifEEvv - .loc 0 200 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:200:3 + .loc 0 208 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:208:3 callq _Z2f1IJPiEEvv - .loc 0 201 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:201:3 + .loc 0 209 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:209:3 callq _Z2f1IJRiEEvv - .loc 0 202 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:202:3 + .loc 0 210 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:210:3 callq _Z2f1IJOiEEvv - .loc 0 203 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:203:3 + .loc 0 211 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:211:3 callq _Z2f1IJKiEEvv - .loc 0 204 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:204:3 + .loc 0 212 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:212:3 callq _Z2f1IJA3_iEEvv - .loc 0 205 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:205:3 + .loc 0 213 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:213:3 callq _Z2f1IJvEEvv - .loc 0 206 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:206:3 + .loc 0 214 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:214:3 callq _Z2f1IJN11outer_class11inner_classEEEvv - .loc 0 207 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:207:3 + .loc 0 215 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:215:3 callq _Z2f1IJmEEvv - .loc 0 208 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:208:3 + .loc 0 216 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:216:3 callq _Z2f2ILb1ELi3EEvv - .loc 0 209 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:209:3 - callq _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .loc 0 210 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:210:3 - callq _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .loc 0 211 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:211:3 - callq _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .loc 0 212 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:212:3 - callq _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .loc 0 213 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:213:3 - callq _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .loc 0 214 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:214:3 - callq _Z2f3IPiJXadL_Z1iEEEEvv - .loc 0 215 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:215:3 - callq _Z2f3IPiJLS0_0EEEvv .loc 0 217 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:217:3 - callq _Z2f3ImJLm1EEEvv + callq _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .loc 0 218 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:218:3 - callq _Z2f3IyJLy1EEEvv + callq _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .loc 0 219 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:219:3 - callq _Z2f3IlJLl1EEEvv + callq _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .loc 0 220 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:220:3 - callq _Z2f3IjJLj1EEEvv + callq _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv .loc 0 221 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:221:3 - callq _Z2f3IsJLs1EEEvv + callq _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .loc 0 222 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:222:3 - callq _Z2f3IhJLh0EEEvv + callq _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .loc 0 223 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:223:3 - callq _Z2f3IaJLa0EEEvv - .loc 0 224 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:224:3 - callq _Z2f3ItJLt1ELt2EEEvv + callq _Z2f3IPiTpTnT_JLS0_0EEEvv .loc 0 225 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:225:3 - callq _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + callq _Z2f3ImTpTnT_JLm1EEEvv .loc 0 226 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:226:3 - callq _Z2f3InJLn18446744073709551614EEEvv + callq _Z2f3IyTpTnT_JLy1EEEvv .loc 0 227 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:227:3 - callq _Z2f4IjLj3EEvv + callq _Z2f3IlTpTnT_JLl1EEEvv .loc 0 228 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:228:3 - callq _Z2f1IJ2t3IiLb0EEEEvv + callq _Z2f3IjTpTnT_JLj1EEEvv .loc 0 229 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:229:3 - callq _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv + callq _Z2f3IsTpTnT_JLs1EEEvv .loc 0 230 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:230:3 - callq _Z2f1IJZ4mainE3$_1EEvv + callq _Z2f3IhTpTnT_JLh0EEEvv + .loc 0 231 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:231:3 + callq _Z2f3IaTpTnT_JLa0EEEvv .loc 0 232 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:232:3 - callq _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + callq _Z2f3ItTpTnT_JLt1ELt2EEEvv .loc 0 233 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:233:3 - callq _Z2f1IJFifEEEvv + callq _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .loc 0 234 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:234:3 - callq _Z2f1IJFvzEEEvv + callq _Z2f3InTpTnT_JLn18446744073709551614EEEvv .loc 0 235 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:235:3 - callq _Z2f1IJFvizEEEvv + callq _Z2f4IjLj3EEvv .loc 0 236 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:236:3 - callq _Z2f1IJRKiEEvv + callq _Z2f1IJ2t3IiLb0EEEEvv .loc 0 237 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:237:3 - callq _Z2f1IJRPKiEEvv + callq _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .loc 0 238 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:238:3 - callq _Z2f1IJN12_GLOBAL__N_12t5EEEvv - .loc 0 239 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:239:3 - callq _Z2f1IJDnEEvv + callq _Z2f1IJZ4mainE3$_0EEvv .loc 0 240 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:240:3 - callq _Z2f1IJPlS0_EEvv + callq _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .loc 0 241 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:241:3 - callq _Z2f1IJPlP3udtEEvv + callq _Z2f1IJFifEEEvv .loc 0 242 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:242:3 - callq _Z2f1IJKPvEEvv + callq _Z2f1IJFvzEEEvv .loc 0 243 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:243:3 - callq _Z2f1IJPKPKvEEvv + callq _Z2f1IJFvizEEEvv .loc 0 244 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:244:3 - callq _Z2f1IJFvvEEEvv + callq _Z2f1IJRKiEEvv .loc 0 245 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:245:3 - callq _Z2f1IJPFvvEEEvv + callq _Z2f1IJRPKiEEvv .loc 0 246 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:246:3 - callq _Z2f1IJPZ4mainE3$_1EEvv + callq _Z2f1IJN12_GLOBAL__N_12t5EEEvv .loc 0 247 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:247:3 - callq _Z2f1IJZ4mainE3$_2EEvv + callq _Z2f1IJDnEEvv .loc 0 248 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:248:3 - callq _Z2f1IJPZ4mainE3$_2EEvv + callq _Z2f1IJPlS0_EEvv .loc 0 249 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:249:3 - callq _Z2f5IJ2t1IJiEEEiEvv + callq _Z2f1IJPlP3udtEEvv .loc 0 250 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:250:3 - callq _Z2f5IJEiEvv + callq _Z2f1IJKPvEEvv .loc 0 251 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:251:3 - callq _Z2f6I2t1IJiEEJEEvv + callq _Z2f1IJPKPKvEEvv .loc 0 252 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:252:3 - callq _Z2f1IJEEvv + callq _Z2f1IJFvvEEEvv .loc 0 253 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:253:3 - callq _Z2f1IJPKvS1_EEvv + callq _Z2f1IJPFvvEEEvv .loc 0 254 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:254:3 - callq _Z2f1IJP2t1IJPiEEEEvv + callq _Z2f1IJPZ4mainE3$_0EEvv .loc 0 255 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:255:3 + callq _Z2f1IJZ4mainE3$_1EEvv + .loc 0 256 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:256:3 + callq _Z2f1IJPZ4mainE3$_1EEvv + .loc 0 257 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:257:3 + callq _Z2f5IJ2t1IJiEEEiEvv + .loc 0 258 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:258:3 + callq _Z2f5IJEiEvv + .loc 0 259 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:259:3 + callq _Z2f6I2t1IJiEEJEEvv + .loc 0 260 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:260:3 + callq _Z2f1IJEEvv + .loc 0 261 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:261:3 + callq _Z2f1IJPKvS1_EEvv + .loc 0 262 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:262:3 + callq _Z2f1IJP2t1IJPiEEEEvv + .loc 0 263 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:263:3 callq _Z2f1IJA_PiEEvv - .loc 0 257 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:257:6 - leaq -40(%rbp), %rdi + .loc 0 265 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:265:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6lsIiEEvi - .loc 0 258 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:258:6 - leaq -40(%rbp), %rdi + .loc 0 266 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:266:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6ltIiEEvi - .loc 0 259 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:259:6 - leaq -40(%rbp), %rdi + .loc 0 267 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:267:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6leIiEEvi - .loc 0 260 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:260:6 - leaq -40(%rbp), %rdi + .loc 0 268 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:268:6 + leaq -5(%rbp), %rdi callq _ZN2t6cvP2t1IJfEEIiEEv - .loc 0 261 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:261:6 - leaq -40(%rbp), %rdi + .loc 0 269 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:269:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6miIiEEvi - .loc 0 262 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:262:6 - leaq -40(%rbp), %rdi + .loc 0 270 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:270:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6mlIiEEvi - .loc 0 263 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:263:6 - leaq -40(%rbp), %rdi + .loc 0 271 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:271:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6dvIiEEvi - .loc 0 264 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:264:6 - leaq -40(%rbp), %rdi + .loc 0 272 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:272:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6rmIiEEvi - .loc 0 265 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:265:6 - leaq -40(%rbp), %rdi + .loc 0 273 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:273:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6eoIiEEvi - .loc 0 266 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:266:6 - leaq -40(%rbp), %rdi + .loc 0 274 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:274:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6anIiEEvi - .loc 0 267 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:267:6 - leaq -40(%rbp), %rdi + .loc 0 275 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:275:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6orIiEEvi - .loc 0 268 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:268:6 - leaq -40(%rbp), %rdi + .loc 0 276 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:276:6 + leaq -5(%rbp), %rdi callq _ZN2t6coIiEEvv - .loc 0 269 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:269:6 - leaq -40(%rbp), %rdi + .loc 0 277 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:277:6 + leaq -5(%rbp), %rdi callq _ZN2t6ntIiEEvv - .loc 0 270 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:270:6 - leaq -40(%rbp), %rdi + .loc 0 278 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:278:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6aSIiEEvi - .loc 0 271 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:271:6 - leaq -40(%rbp), %rdi + .loc 0 279 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:279:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6gtIiEEvi - .loc 0 272 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:272:6 - leaq -40(%rbp), %rdi + .loc 0 280 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:280:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6cmIiEEvi - .loc 0 273 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:273:6 - leaq -40(%rbp), %rdi + .loc 0 281 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:281:6 + leaq -5(%rbp), %rdi callq _ZN2t6clIiEEvv - .loc 0 274 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:274:6 - leaq -40(%rbp), %rdi + .loc 0 282 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:282:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6ixIiEEvi - .loc 0 275 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:275:6 - leaq -40(%rbp), %rdi + .loc 0 283 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:283:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6ssIiEEvi - .loc 0 276 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:276:3 + .loc 0 284 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:284:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6nwIiEEPvmT_ - .loc 0 277 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:277:3 + .loc 0 285 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:285:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6naIiEEPvmT_ - .loc 0 278 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:278:3 + .loc 0 286 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:286:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6dlIiEEvPvT_ - .loc 0 279 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:279:3 + .loc 0 287 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:287:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6daIiEEvPvT_ - .loc 0 280 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:280:6 - leaq -40(%rbp), %rdi + .loc 0 288 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:288:6 + leaq -5(%rbp), %rdi callq _ZN2t6awIiEEiv - .loc 0 281 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:281:3 + .loc 0 289 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:289:3 movl $42, %edi callq _Zli5_suffy - .loc 0 283 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:283:3 + .loc 0 291 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:291:3 callq _Z2f1IJZ4mainE2t7EEvv - .loc 0 284 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:284:3 + .loc 0 292 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:292:3 callq _Z2f1IJRA3_iEEvv - .loc 0 285 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:285:3 + .loc 0 293 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:293:3 callq _Z2f1IJPA3_iEEvv - .loc 0 286 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:286:3 + .loc 0 294 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:294:3 callq _Z2f7I2t1Evv - .loc 0 287 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:287:3 + .loc 0 295 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:295:3 callq _Z2f8I2t1iEvv - .loc 0 289 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:289:3 + .loc 0 297 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:297:3 callq _ZN2ns8ttp_userINS_5inner3ttpEEEvv - .loc 0 290 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:290:3 + .loc 0 298 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:298:3 callq _Z2f1IJPiPDnEEvv - .loc 0 292 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:292:3 + .loc 0 300 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:300:3 callq _Z2f1IJ2t7IiEEEvv - .loc 0 293 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:293:3 - callq _Z2f7IN2ns3inl2t9EEvv - .loc 0 294 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:294:3 + .loc 0 301 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:301:3 + callq _Z2f7ITtTpTyEN2ns3inl2t9EEvv + .loc 0 302 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:302:3 callq _Z2f1IJU7_AtomiciEEvv - .loc 0 295 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:295:3 + .loc 0 303 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:303:3 callq _Z2f1IJilVcEEvv - .loc 0 296 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:296:3 + .loc 0 304 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:304:3 callq _Z2f1IJDv2_iEEvv - .loc 0 297 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:297:3 + .loc 0 305 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:305:3 callq _Z2f1IJVKPiEEvv - .loc 0 298 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:298:3 + .loc 0 306 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:306:3 callq _Z2f1IJVKvEEvv - .loc 0 299 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:299:3 - callq _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv - .loc 0 300 7 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:300:7 - leaq -56(%rbp), %rdi + .loc 0 307 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:307:3 + callq _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv + .loc 0 308 7 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:308:7 + leaq -7(%rbp), %rdi callq _ZN3t10C2IvEEv - .loc 0 301 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:301:3 + .loc 0 309 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:309:3 callq _Z2f1IJM3udtKFvvEEEvv - .loc 0 302 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:302:3 + .loc 0 310 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:310:3 callq _Z2f1IJM3udtVFvvREEEvv - .loc 0 303 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:303:3 + .loc 0 311 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:311:3 callq _Z2f1IJM3udtVKFvvOEEEvv - .loc 0 304 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:304:3 + .loc 0 312 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:312:3 callq _Z2f9IiEPFvvEv - .loc 0 305 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:305:3 + .loc 0 313 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:313:3 callq _Z2f1IJKPFvvEEEvv - .loc 0 306 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:306:3 + .loc 0 314 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:314:3 callq _Z2f1IJRA1_KcEEvv - .loc 0 307 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:307:3 + .loc 0 315 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:315:3 callq _Z2f1IJKFvvREEEvv - .loc 0 308 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:308:3 + .loc 0 316 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:316:3 callq _Z2f1IJVFvvOEEEvv - .loc 0 309 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:309:3 + .loc 0 317 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:317:3 callq _Z2f1IJVKFvvEEEvv - .loc 0 310 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:310:3 + .loc 0 318 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:318:3 callq _Z2f1IJA1_KPiEEvv - .loc 0 311 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:311:3 + .loc 0 319 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:319:3 callq _Z2f1IJRA1_KPiEEvv - .loc 0 312 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:312:3 + .loc 0 320 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:320:3 callq _Z2f1IJRKM3udtFvvEEEvv - .loc 0 313 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:313:3 + .loc 0 321 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:321:3 callq _Z2f1IJFPFvfEiEEEvv - .loc 0 314 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:314:3 + .loc 0 322 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:322:3 callq _Z2f1IJA1_2t1IJiEEEEvv - .loc 0 315 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:315:3 + .loc 0 323 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:323:3 callq _Z2f1IJPDoFvvEEEvv - .loc 0 316 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:316:3 - callq _Z2f1IJFvZ4mainE3$_2EEEvv - .loc 0 318 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:318:3 - callq _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv - .loc 0 319 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:319:3 + .loc 0 324 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:324:3 + callq _Z2f1IJFvZ4mainE3$_1EEEvv + .loc 0 326 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:326:3 + callq _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv + .loc 0 327 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:327:3 callq _Z2f1IJFvZ4mainE2t8EEEvv - .loc 0 320 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:320:3 + .loc 0 328 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:328:3 callq _Z19operator_not_reallyIiEvv - .loc 0 322 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:322:3 - callq _Z2f1IJDB3_EEvv - .loc 0 323 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:323:3 - callq _Z2f1IJKDU5_EEvv - .loc 0 324 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:324:3 + .loc 0 330 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:330:3 + callq _Z3f11IDB3_TnT_LS0_2EEvv + .loc 0 331 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:331:3 + callq _Z3f11IKDU5_TnT_LS0_2EEvv + .loc 0 332 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:332:3 + callq _Z3f11IDB65_TnT_LS0_2EEvv + .loc 0 333 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:333:3 + callq _Z3f11IKDU65_TnT_LS0_2EEvv + .loc 0 334 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:334:3 callq _Z2f1IJFv2t1IJEES1_EEEvv - .loc 0 325 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:325:3 + .loc 0 335 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:335:3 callq _Z2f1IJM2t1IJEEiEEvv - .loc 0 327 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:327:3 + .loc 0 337 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:337:3 callq _Z2f1IJU9swiftcallFvvEEEvv - .loc 0 328 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:328:1 + .loc 0 339 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:339:3 + callq _Z2f1IJFivEEEvv + .loc 0 340 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:340:3 + callq _Z3f10ILN2ns3$_0E0EEvv + .loc 0 341 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:341:1 xorl %eax, %eax - addq $64, %rsp + .loc 0 341 1 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:341:1 + addq $16, %rsp popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -388,20 +392,20 @@ main: # @main # -- End function .section .text._Z2f1IJiEEvv,"axG",@progbits,_Z2f1IJiEEvv,comdat .weak _Z2f1IJiEEvv # -- Begin function _Z2f1IJiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJiEEvv,@function _Z2f1IJiEEvv: # @_Z2f1IJiEEvv .Lfunc_begin2: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp4: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -412,20 +416,20 @@ _Z2f1IJiEEvv: # @_Z2f1IJiEEvv # -- End function .section .text._Z2f1IJfEEvv,"axG",@progbits,_Z2f1IJfEEvv,comdat .weak _Z2f1IJfEEvv # -- Begin function _Z2f1IJfEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJfEEvv,@function _Z2f1IJfEEvv: # @_Z2f1IJfEEvv .Lfunc_begin3: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp6: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -436,20 +440,20 @@ _Z2f1IJfEEvv: # @_Z2f1IJfEEvv # -- End function .section .text._Z2f1IJbEEvv,"axG",@progbits,_Z2f1IJbEEvv,comdat .weak _Z2f1IJbEEvv # -- Begin function _Z2f1IJbEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJbEEvv,@function _Z2f1IJbEEvv: # @_Z2f1IJbEEvv .Lfunc_begin4: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp8: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -460,20 +464,20 @@ _Z2f1IJbEEvv: # @_Z2f1IJbEEvv # -- End function .section .text._Z2f1IJdEEvv,"axG",@progbits,_Z2f1IJdEEvv,comdat .weak _Z2f1IJdEEvv # -- Begin function _Z2f1IJdEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJdEEvv,@function _Z2f1IJdEEvv: # @_Z2f1IJdEEvv .Lfunc_begin5: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp10: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -484,20 +488,20 @@ _Z2f1IJdEEvv: # @_Z2f1IJdEEvv # -- End function .section .text._Z2f1IJlEEvv,"axG",@progbits,_Z2f1IJlEEvv,comdat .weak _Z2f1IJlEEvv # -- Begin function _Z2f1IJlEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJlEEvv,@function _Z2f1IJlEEvv: # @_Z2f1IJlEEvv .Lfunc_begin6: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp12: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -508,20 +512,20 @@ _Z2f1IJlEEvv: # @_Z2f1IJlEEvv # -- End function .section .text._Z2f1IJsEEvv,"axG",@progbits,_Z2f1IJsEEvv,comdat .weak _Z2f1IJsEEvv # -- Begin function _Z2f1IJsEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJsEEvv,@function _Z2f1IJsEEvv: # @_Z2f1IJsEEvv .Lfunc_begin7: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp14: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -532,20 +536,20 @@ _Z2f1IJsEEvv: # @_Z2f1IJsEEvv # -- End function .section .text._Z2f1IJjEEvv,"axG",@progbits,_Z2f1IJjEEvv,comdat .weak _Z2f1IJjEEvv # -- Begin function _Z2f1IJjEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJjEEvv,@function _Z2f1IJjEEvv: # @_Z2f1IJjEEvv .Lfunc_begin8: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp16: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -556,20 +560,20 @@ _Z2f1IJjEEvv: # @_Z2f1IJjEEvv # -- End function .section .text._Z2f1IJyEEvv,"axG",@progbits,_Z2f1IJyEEvv,comdat .weak _Z2f1IJyEEvv # -- Begin function _Z2f1IJyEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJyEEvv,@function _Z2f1IJyEEvv: # @_Z2f1IJyEEvv .Lfunc_begin9: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp18: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -580,20 +584,20 @@ _Z2f1IJyEEvv: # @_Z2f1IJyEEvv # -- End function .section .text._Z2f1IJxEEvv,"axG",@progbits,_Z2f1IJxEEvv,comdat .weak _Z2f1IJxEEvv # -- Begin function _Z2f1IJxEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJxEEvv,@function _Z2f1IJxEEvv: # @_Z2f1IJxEEvv .Lfunc_begin10: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp20: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -604,20 +608,20 @@ _Z2f1IJxEEvv: # @_Z2f1IJxEEvv # -- End function .section .text._Z2f1IJ3udtEEvv,"axG",@progbits,_Z2f1IJ3udtEEvv,comdat .weak _Z2f1IJ3udtEEvv # -- Begin function _Z2f1IJ3udtEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ3udtEEvv,@function _Z2f1IJ3udtEEvv: # @_Z2f1IJ3udtEEvv .Lfunc_begin11: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp22: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -628,20 +632,20 @@ _Z2f1IJ3udtEEvv: # @_Z2f1IJ3udtEEvv # -- End function .section .text._Z2f1IJN2ns3udtEEEvv,"axG",@progbits,_Z2f1IJN2ns3udtEEEvv,comdat .weak _Z2f1IJN2ns3udtEEEvv # -- Begin function _Z2f1IJN2ns3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN2ns3udtEEEvv,@function _Z2f1IJN2ns3udtEEEvv: # @_Z2f1IJN2ns3udtEEEvv .Lfunc_begin12: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp24: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -652,20 +656,20 @@ _Z2f1IJN2ns3udtEEEvv: # @_Z2f1IJN2ns3udtEEEvv # -- End function .section .text._Z2f1IJPN2ns3udtEEEvv,"axG",@progbits,_Z2f1IJPN2ns3udtEEEvv,comdat .weak _Z2f1IJPN2ns3udtEEEvv # -- Begin function _Z2f1IJPN2ns3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPN2ns3udtEEEvv,@function _Z2f1IJPN2ns3udtEEEvv: # @_Z2f1IJPN2ns3udtEEEvv .Lfunc_begin13: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp26: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -676,20 +680,20 @@ _Z2f1IJPN2ns3udtEEEvv: # @_Z2f1IJPN2ns3udtEEEvv # -- End function .section .text._Z2f1IJN2ns5inner3udtEEEvv,"axG",@progbits,_Z2f1IJN2ns5inner3udtEEEvv,comdat .weak _Z2f1IJN2ns5inner3udtEEEvv # -- Begin function _Z2f1IJN2ns5inner3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN2ns5inner3udtEEEvv,@function _Z2f1IJN2ns5inner3udtEEEvv: # @_Z2f1IJN2ns5inner3udtEEEvv .Lfunc_begin14: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp28: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -700,20 +704,20 @@ _Z2f1IJN2ns5inner3udtEEEvv: # @_Z2f1IJN2ns5inner3udtEEEvv # -- End function .section .text._Z2f1IJ2t1IJiEEEEvv,"axG",@progbits,_Z2f1IJ2t1IJiEEEEvv,comdat .weak _Z2f1IJ2t1IJiEEEEvv # -- Begin function _Z2f1IJ2t1IJiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t1IJiEEEEvv,@function _Z2f1IJ2t1IJiEEEEvv: # @_Z2f1IJ2t1IJiEEEEvv .Lfunc_begin15: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp30: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -724,20 +728,20 @@ _Z2f1IJ2t1IJiEEEEvv: # @_Z2f1IJ2t1IJiEEEEvv # -- End function .section .text._Z2f1IJifEEvv,"axG",@progbits,_Z2f1IJifEEvv,comdat .weak _Z2f1IJifEEvv # -- Begin function _Z2f1IJifEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJifEEvv,@function _Z2f1IJifEEvv: # @_Z2f1IJifEEvv .Lfunc_begin16: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp32: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -748,20 +752,20 @@ _Z2f1IJifEEvv: # @_Z2f1IJifEEvv # -- End function .section .text._Z2f1IJPiEEvv,"axG",@progbits,_Z2f1IJPiEEvv,comdat .weak _Z2f1IJPiEEvv # -- Begin function _Z2f1IJPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPiEEvv,@function _Z2f1IJPiEEvv: # @_Z2f1IJPiEEvv .Lfunc_begin17: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp34: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -772,20 +776,20 @@ _Z2f1IJPiEEvv: # @_Z2f1IJPiEEvv # -- End function .section .text._Z2f1IJRiEEvv,"axG",@progbits,_Z2f1IJRiEEvv,comdat .weak _Z2f1IJRiEEvv # -- Begin function _Z2f1IJRiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRiEEvv,@function _Z2f1IJRiEEvv: # @_Z2f1IJRiEEvv .Lfunc_begin18: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp36: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -796,20 +800,20 @@ _Z2f1IJRiEEvv: # @_Z2f1IJRiEEvv # -- End function .section .text._Z2f1IJOiEEvv,"axG",@progbits,_Z2f1IJOiEEvv,comdat .weak _Z2f1IJOiEEvv # -- Begin function _Z2f1IJOiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJOiEEvv,@function _Z2f1IJOiEEvv: # @_Z2f1IJOiEEvv .Lfunc_begin19: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp38: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -820,20 +824,20 @@ _Z2f1IJOiEEvv: # @_Z2f1IJOiEEvv # -- End function .section .text._Z2f1IJKiEEvv,"axG",@progbits,_Z2f1IJKiEEvv,comdat .weak _Z2f1IJKiEEvv # -- Begin function _Z2f1IJKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKiEEvv,@function _Z2f1IJKiEEvv: # @_Z2f1IJKiEEvv .Lfunc_begin20: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp40: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -844,20 +848,20 @@ _Z2f1IJKiEEvv: # @_Z2f1IJKiEEvv # -- End function .section .text._Z2f1IJA3_iEEvv,"axG",@progbits,_Z2f1IJA3_iEEvv,comdat .weak _Z2f1IJA3_iEEvv # -- Begin function _Z2f1IJA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA3_iEEvv,@function _Z2f1IJA3_iEEvv: # @_Z2f1IJA3_iEEvv .Lfunc_begin21: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp42: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -868,20 +872,20 @@ _Z2f1IJA3_iEEvv: # @_Z2f1IJA3_iEEvv # -- End function .section .text._Z2f1IJvEEvv,"axG",@progbits,_Z2f1IJvEEvv,comdat .weak _Z2f1IJvEEvv # -- Begin function _Z2f1IJvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJvEEvv,@function _Z2f1IJvEEvv: # @_Z2f1IJvEEvv .Lfunc_begin22: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp44: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -892,20 +896,20 @@ _Z2f1IJvEEvv: # @_Z2f1IJvEEvv # -- End function .section .text._Z2f1IJN11outer_class11inner_classEEEvv,"axG",@progbits,_Z2f1IJN11outer_class11inner_classEEEvv,comdat .weak _Z2f1IJN11outer_class11inner_classEEEvv # -- Begin function _Z2f1IJN11outer_class11inner_classEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN11outer_class11inner_classEEEvv,@function _Z2f1IJN11outer_class11inner_classEEEvv: # @_Z2f1IJN11outer_class11inner_classEEEvv .Lfunc_begin23: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp46: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -916,20 +920,20 @@ _Z2f1IJN11outer_class11inner_classEEEvv: # @_Z2f1IJN11outer_class11inner_classEE # -- End function .section .text._Z2f1IJmEEvv,"axG",@progbits,_Z2f1IJmEEvv,comdat .weak _Z2f1IJmEEvv # -- Begin function _Z2f1IJmEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJmEEvv,@function _Z2f1IJmEEvv: # @_Z2f1IJmEEvv .Lfunc_begin24: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp48: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -940,20 +944,20 @@ _Z2f1IJmEEvv: # @_Z2f1IJmEEvv # -- End function .section .text._Z2f2ILb1ELi3EEvv,"axG",@progbits,_Z2f2ILb1ELi3EEvv,comdat .weak _Z2f2ILb1ELi3EEvv # -- Begin function _Z2f2ILb1ELi3EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f2ILb1ELi3EEvv,@function _Z2f2ILb1ELi3EEvv: # @_Z2f2ILb1ELi3EEvv .Lfunc_begin25: - .loc 0 38 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:0 + .loc 0 40 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:40:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp50: - .loc 0 39 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:39:1 + .loc 0 41 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -962,427 +966,427 @@ _Z2f2ILb1ELi3EEvv: # @_Z2f2ILb1ELi3EEvv .size _Z2f2ILb1ELi3EEvv, .Lfunc_end25-_Z2f2ILb1ELi3EEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,comdat - .weak _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv + .section .text._Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,comdat + .weak _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv + .p2align 4 + .type _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .Lfunc_begin26: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp52: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp53: .Lfunc_end26: - .size _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv, .Lfunc_end26-_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end26-_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,comdat - .weak _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv + .section .text._Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,comdat + .weak _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv + .p2align 4 + .type _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .Lfunc_begin27: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp54: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp55: .Lfunc_end27: - .size _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv, .Lfunc_end27-_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end27-_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,comdat - .weak _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv # -- Begin function _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,@function -_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv: # @_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv + .section .text._Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,comdat + .weak _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv # -- Begin function _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv + .p2align 4 + .type _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,@function +_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv: # @_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .Lfunc_begin28: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp56: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp57: .Lfunc_end28: - .size _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv, .Lfunc_end28-_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv + .size _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv, .Lfunc_end28-_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .type _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv: # @"_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv" + .p2align 4 # -- Begin function _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv + .type _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv: # @"_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv" .Lfunc_begin29: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp58: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp59: .Lfunc_end29: - .size _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv, .Lfunc_end29-_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end29-_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .type _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv,@function -_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv: # @_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv + .p2align 4 # -- Begin function _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv + .type _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv,@function +_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv: # @_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .Lfunc_begin30: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp60: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp61: .Lfunc_end30: - .size _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv, .Lfunc_end30-_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv + .size _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv, .Lfunc_end30-_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IPiJXadL_Z1iEEEEvv,"axG",@progbits,_Z2f3IPiJXadL_Z1iEEEEvv,comdat - .weak _Z2f3IPiJXadL_Z1iEEEEvv # -- Begin function _Z2f3IPiJXadL_Z1iEEEEvv - .p2align 4, 0x90 - .type _Z2f3IPiJXadL_Z1iEEEEvv,@function -_Z2f3IPiJXadL_Z1iEEEEvv: # @_Z2f3IPiJXadL_Z1iEEEEvv + .section .text._Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,"axG",@progbits,_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,comdat + .weak _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv # -- Begin function _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv + .p2align 4 + .type _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,@function +_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv: # @_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .Lfunc_begin31: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp62: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp63: .Lfunc_end31: - .size _Z2f3IPiJXadL_Z1iEEEEvv, .Lfunc_end31-_Z2f3IPiJXadL_Z1iEEEEvv + .size _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv, .Lfunc_end31-_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .cfi_endproc # -- End function - .section .text._Z2f3IPiJLS0_0EEEvv,"axG",@progbits,_Z2f3IPiJLS0_0EEEvv,comdat - .weak _Z2f3IPiJLS0_0EEEvv # -- Begin function _Z2f3IPiJLS0_0EEEvv - .p2align 4, 0x90 - .type _Z2f3IPiJLS0_0EEEvv,@function -_Z2f3IPiJLS0_0EEEvv: # @_Z2f3IPiJLS0_0EEEvv + .section .text._Z2f3IPiTpTnT_JLS0_0EEEvv,"axG",@progbits,_Z2f3IPiTpTnT_JLS0_0EEEvv,comdat + .weak _Z2f3IPiTpTnT_JLS0_0EEEvv # -- Begin function _Z2f3IPiTpTnT_JLS0_0EEEvv + .p2align 4 + .type _Z2f3IPiTpTnT_JLS0_0EEEvv,@function +_Z2f3IPiTpTnT_JLS0_0EEEvv: # @_Z2f3IPiTpTnT_JLS0_0EEEvv .Lfunc_begin32: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp64: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp65: .Lfunc_end32: - .size _Z2f3IPiJLS0_0EEEvv, .Lfunc_end32-_Z2f3IPiJLS0_0EEEvv + .size _Z2f3IPiTpTnT_JLS0_0EEEvv, .Lfunc_end32-_Z2f3IPiTpTnT_JLS0_0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3ImJLm1EEEvv,"axG",@progbits,_Z2f3ImJLm1EEEvv,comdat - .weak _Z2f3ImJLm1EEEvv # -- Begin function _Z2f3ImJLm1EEEvv - .p2align 4, 0x90 - .type _Z2f3ImJLm1EEEvv,@function -_Z2f3ImJLm1EEEvv: # @_Z2f3ImJLm1EEEvv + .section .text._Z2f3ImTpTnT_JLm1EEEvv,"axG",@progbits,_Z2f3ImTpTnT_JLm1EEEvv,comdat + .weak _Z2f3ImTpTnT_JLm1EEEvv # -- Begin function _Z2f3ImTpTnT_JLm1EEEvv + .p2align 4 + .type _Z2f3ImTpTnT_JLm1EEEvv,@function +_Z2f3ImTpTnT_JLm1EEEvv: # @_Z2f3ImTpTnT_JLm1EEEvv .Lfunc_begin33: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp66: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp67: .Lfunc_end33: - .size _Z2f3ImJLm1EEEvv, .Lfunc_end33-_Z2f3ImJLm1EEEvv + .size _Z2f3ImTpTnT_JLm1EEEvv, .Lfunc_end33-_Z2f3ImTpTnT_JLm1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IyJLy1EEEvv,"axG",@progbits,_Z2f3IyJLy1EEEvv,comdat - .weak _Z2f3IyJLy1EEEvv # -- Begin function _Z2f3IyJLy1EEEvv - .p2align 4, 0x90 - .type _Z2f3IyJLy1EEEvv,@function -_Z2f3IyJLy1EEEvv: # @_Z2f3IyJLy1EEEvv + .section .text._Z2f3IyTpTnT_JLy1EEEvv,"axG",@progbits,_Z2f3IyTpTnT_JLy1EEEvv,comdat + .weak _Z2f3IyTpTnT_JLy1EEEvv # -- Begin function _Z2f3IyTpTnT_JLy1EEEvv + .p2align 4 + .type _Z2f3IyTpTnT_JLy1EEEvv,@function +_Z2f3IyTpTnT_JLy1EEEvv: # @_Z2f3IyTpTnT_JLy1EEEvv .Lfunc_begin34: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp68: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp69: .Lfunc_end34: - .size _Z2f3IyJLy1EEEvv, .Lfunc_end34-_Z2f3IyJLy1EEEvv + .size _Z2f3IyTpTnT_JLy1EEEvv, .Lfunc_end34-_Z2f3IyTpTnT_JLy1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IlJLl1EEEvv,"axG",@progbits,_Z2f3IlJLl1EEEvv,comdat - .weak _Z2f3IlJLl1EEEvv # -- Begin function _Z2f3IlJLl1EEEvv - .p2align 4, 0x90 - .type _Z2f3IlJLl1EEEvv,@function -_Z2f3IlJLl1EEEvv: # @_Z2f3IlJLl1EEEvv + .section .text._Z2f3IlTpTnT_JLl1EEEvv,"axG",@progbits,_Z2f3IlTpTnT_JLl1EEEvv,comdat + .weak _Z2f3IlTpTnT_JLl1EEEvv # -- Begin function _Z2f3IlTpTnT_JLl1EEEvv + .p2align 4 + .type _Z2f3IlTpTnT_JLl1EEEvv,@function +_Z2f3IlTpTnT_JLl1EEEvv: # @_Z2f3IlTpTnT_JLl1EEEvv .Lfunc_begin35: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp70: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp71: .Lfunc_end35: - .size _Z2f3IlJLl1EEEvv, .Lfunc_end35-_Z2f3IlJLl1EEEvv + .size _Z2f3IlTpTnT_JLl1EEEvv, .Lfunc_end35-_Z2f3IlTpTnT_JLl1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IjJLj1EEEvv,"axG",@progbits,_Z2f3IjJLj1EEEvv,comdat - .weak _Z2f3IjJLj1EEEvv # -- Begin function _Z2f3IjJLj1EEEvv - .p2align 4, 0x90 - .type _Z2f3IjJLj1EEEvv,@function -_Z2f3IjJLj1EEEvv: # @_Z2f3IjJLj1EEEvv + .section .text._Z2f3IjTpTnT_JLj1EEEvv,"axG",@progbits,_Z2f3IjTpTnT_JLj1EEEvv,comdat + .weak _Z2f3IjTpTnT_JLj1EEEvv # -- Begin function _Z2f3IjTpTnT_JLj1EEEvv + .p2align 4 + .type _Z2f3IjTpTnT_JLj1EEEvv,@function +_Z2f3IjTpTnT_JLj1EEEvv: # @_Z2f3IjTpTnT_JLj1EEEvv .Lfunc_begin36: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp72: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp73: .Lfunc_end36: - .size _Z2f3IjJLj1EEEvv, .Lfunc_end36-_Z2f3IjJLj1EEEvv + .size _Z2f3IjTpTnT_JLj1EEEvv, .Lfunc_end36-_Z2f3IjTpTnT_JLj1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IsJLs1EEEvv,"axG",@progbits,_Z2f3IsJLs1EEEvv,comdat - .weak _Z2f3IsJLs1EEEvv # -- Begin function _Z2f3IsJLs1EEEvv - .p2align 4, 0x90 - .type _Z2f3IsJLs1EEEvv,@function -_Z2f3IsJLs1EEEvv: # @_Z2f3IsJLs1EEEvv + .section .text._Z2f3IsTpTnT_JLs1EEEvv,"axG",@progbits,_Z2f3IsTpTnT_JLs1EEEvv,comdat + .weak _Z2f3IsTpTnT_JLs1EEEvv # -- Begin function _Z2f3IsTpTnT_JLs1EEEvv + .p2align 4 + .type _Z2f3IsTpTnT_JLs1EEEvv,@function +_Z2f3IsTpTnT_JLs1EEEvv: # @_Z2f3IsTpTnT_JLs1EEEvv .Lfunc_begin37: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp74: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp75: .Lfunc_end37: - .size _Z2f3IsJLs1EEEvv, .Lfunc_end37-_Z2f3IsJLs1EEEvv + .size _Z2f3IsTpTnT_JLs1EEEvv, .Lfunc_end37-_Z2f3IsTpTnT_JLs1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IhJLh0EEEvv,"axG",@progbits,_Z2f3IhJLh0EEEvv,comdat - .weak _Z2f3IhJLh0EEEvv # -- Begin function _Z2f3IhJLh0EEEvv - .p2align 4, 0x90 - .type _Z2f3IhJLh0EEEvv,@function -_Z2f3IhJLh0EEEvv: # @_Z2f3IhJLh0EEEvv + .section .text._Z2f3IhTpTnT_JLh0EEEvv,"axG",@progbits,_Z2f3IhTpTnT_JLh0EEEvv,comdat + .weak _Z2f3IhTpTnT_JLh0EEEvv # -- Begin function _Z2f3IhTpTnT_JLh0EEEvv + .p2align 4 + .type _Z2f3IhTpTnT_JLh0EEEvv,@function +_Z2f3IhTpTnT_JLh0EEEvv: # @_Z2f3IhTpTnT_JLh0EEEvv .Lfunc_begin38: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp76: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp77: .Lfunc_end38: - .size _Z2f3IhJLh0EEEvv, .Lfunc_end38-_Z2f3IhJLh0EEEvv + .size _Z2f3IhTpTnT_JLh0EEEvv, .Lfunc_end38-_Z2f3IhTpTnT_JLh0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IaJLa0EEEvv,"axG",@progbits,_Z2f3IaJLa0EEEvv,comdat - .weak _Z2f3IaJLa0EEEvv # -- Begin function _Z2f3IaJLa0EEEvv - .p2align 4, 0x90 - .type _Z2f3IaJLa0EEEvv,@function -_Z2f3IaJLa0EEEvv: # @_Z2f3IaJLa0EEEvv + .section .text._Z2f3IaTpTnT_JLa0EEEvv,"axG",@progbits,_Z2f3IaTpTnT_JLa0EEEvv,comdat + .weak _Z2f3IaTpTnT_JLa0EEEvv # -- Begin function _Z2f3IaTpTnT_JLa0EEEvv + .p2align 4 + .type _Z2f3IaTpTnT_JLa0EEEvv,@function +_Z2f3IaTpTnT_JLa0EEEvv: # @_Z2f3IaTpTnT_JLa0EEEvv .Lfunc_begin39: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp78: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp79: .Lfunc_end39: - .size _Z2f3IaJLa0EEEvv, .Lfunc_end39-_Z2f3IaJLa0EEEvv + .size _Z2f3IaTpTnT_JLa0EEEvv, .Lfunc_end39-_Z2f3IaTpTnT_JLa0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3ItJLt1ELt2EEEvv,"axG",@progbits,_Z2f3ItJLt1ELt2EEEvv,comdat - .weak _Z2f3ItJLt1ELt2EEEvv # -- Begin function _Z2f3ItJLt1ELt2EEEvv - .p2align 4, 0x90 - .type _Z2f3ItJLt1ELt2EEEvv,@function -_Z2f3ItJLt1ELt2EEEvv: # @_Z2f3ItJLt1ELt2EEEvv + .section .text._Z2f3ItTpTnT_JLt1ELt2EEEvv,"axG",@progbits,_Z2f3ItTpTnT_JLt1ELt2EEEvv,comdat + .weak _Z2f3ItTpTnT_JLt1ELt2EEEvv # -- Begin function _Z2f3ItTpTnT_JLt1ELt2EEEvv + .p2align 4 + .type _Z2f3ItTpTnT_JLt1ELt2EEEvv,@function +_Z2f3ItTpTnT_JLt1ELt2EEEvv: # @_Z2f3ItTpTnT_JLt1ELt2EEEvv .Lfunc_begin40: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp80: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp81: .Lfunc_end40: - .size _Z2f3ItJLt1ELt2EEEvv, .Lfunc_end40-_Z2f3ItJLt1ELt2EEEvv + .size _Z2f3ItTpTnT_JLt1ELt2EEEvv, .Lfunc_end40-_Z2f3ItTpTnT_JLt1ELt2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,"axG",@progbits,_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,comdat - .weak _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv # -- Begin function _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv - .p2align 4, 0x90 - .type _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,@function -_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv: # @_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .section .text._Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,"axG",@progbits,_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,comdat + .weak _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv # -- Begin function _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .p2align 4 + .type _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,@function +_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv: # @_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .Lfunc_begin41: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp82: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp83: .Lfunc_end41: - .size _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv, .Lfunc_end41-_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .size _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv, .Lfunc_end41-_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .cfi_endproc # -- End function - .section .text._Z2f3InJLn18446744073709551614EEEvv,"axG",@progbits,_Z2f3InJLn18446744073709551614EEEvv,comdat - .weak _Z2f3InJLn18446744073709551614EEEvv # -- Begin function _Z2f3InJLn18446744073709551614EEEvv - .p2align 4, 0x90 - .type _Z2f3InJLn18446744073709551614EEEvv,@function -_Z2f3InJLn18446744073709551614EEEvv: # @_Z2f3InJLn18446744073709551614EEEvv + .section .text._Z2f3InTpTnT_JLn18446744073709551614EEEvv,"axG",@progbits,_Z2f3InTpTnT_JLn18446744073709551614EEEvv,comdat + .weak _Z2f3InTpTnT_JLn18446744073709551614EEEvv # -- Begin function _Z2f3InTpTnT_JLn18446744073709551614EEEvv + .p2align 4 + .type _Z2f3InTpTnT_JLn18446744073709551614EEEvv,@function +_Z2f3InTpTnT_JLn18446744073709551614EEEvv: # @_Z2f3InTpTnT_JLn18446744073709551614EEEvv .Lfunc_begin42: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp84: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp85: .Lfunc_end42: - .size _Z2f3InJLn18446744073709551614EEEvv, .Lfunc_end42-_Z2f3InJLn18446744073709551614EEEvv + .size _Z2f3InTpTnT_JLn18446744073709551614EEEvv, .Lfunc_end42-_Z2f3InTpTnT_JLn18446744073709551614EEEvv .cfi_endproc # -- End function .section .text._Z2f4IjLj3EEvv,"axG",@progbits,_Z2f4IjLj3EEvv,comdat .weak _Z2f4IjLj3EEvv # -- Begin function _Z2f4IjLj3EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f4IjLj3EEvv,@function _Z2f4IjLj3EEvv: # @_Z2f4IjLj3EEvv .Lfunc_begin43: - .loc 0 44 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:0 + .loc 0 46 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:46:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp86: - .loc 0 45 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:45:1 + .loc 0 47 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:47:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1393,20 +1397,20 @@ _Z2f4IjLj3EEvv: # @_Z2f4IjLj3EEvv # -- End function .section .text._Z2f1IJ2t3IiLb0EEEEvv,"axG",@progbits,_Z2f1IJ2t3IiLb0EEEEvv,comdat .weak _Z2f1IJ2t3IiLb0EEEEvv # -- Begin function _Z2f1IJ2t3IiLb0EEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t3IiLb0EEEEvv,@function _Z2f1IJ2t3IiLb0EEEEvv: # @_Z2f1IJ2t3IiLb0EEEEvv .Lfunc_begin44: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp88: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1417,20 +1421,20 @@ _Z2f1IJ2t3IiLb0EEEEvv: # @_Z2f1IJ2t3IiLb0EEEEvv # -- End function .section .text._Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,"axG",@progbits,_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,comdat .weak _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv # -- Begin function _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,@function _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv: # @_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .Lfunc_begin45: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp90: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1440,66 +1444,66 @@ _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv: # @_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE3$_1EEvv - .type _Z2f1IJZ4mainE3$_1EEvv,@function -_Z2f1IJZ4mainE3$_1EEvv: # @"_Z2f1IJZ4mainE3$_1EEvv" + .p2align 4 # -- Begin function _Z2f1IJZ4mainE3$_0EEvv + .type _Z2f1IJZ4mainE3$_0EEvv,@function +_Z2f1IJZ4mainE3$_0EEvv: # @"_Z2f1IJZ4mainE3$_0EEvv" .Lfunc_begin46: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp92: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp93: .Lfunc_end46: - .size _Z2f1IJZ4mainE3$_1EEvv, .Lfunc_end46-_Z2f1IJZ4mainE3$_1EEvv + .size _Z2f1IJZ4mainE3$_0EEvv, .Lfunc_end46-_Z2f1IJZ4mainE3$_0EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv - .type _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv,@function -_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv: # @"_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv" + .p2align 4 # -- Begin function _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv + .type _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv,@function +_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv: # @"_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv" .Lfunc_begin47: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp94: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp95: .Lfunc_end47: - .size _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv, .Lfunc_end47-_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + .size _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv, .Lfunc_end47-_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .cfi_endproc # -- End function .section .text._Z2f1IJFifEEEvv,"axG",@progbits,_Z2f1IJFifEEEvv,comdat .weak _Z2f1IJFifEEEvv # -- Begin function _Z2f1IJFifEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFifEEEvv,@function _Z2f1IJFifEEEvv: # @_Z2f1IJFifEEEvv .Lfunc_begin48: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp96: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1510,20 +1514,20 @@ _Z2f1IJFifEEEvv: # @_Z2f1IJFifEEEvv # -- End function .section .text._Z2f1IJFvzEEEvv,"axG",@progbits,_Z2f1IJFvzEEEvv,comdat .weak _Z2f1IJFvzEEEvv # -- Begin function _Z2f1IJFvzEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvzEEEvv,@function _Z2f1IJFvzEEEvv: # @_Z2f1IJFvzEEEvv .Lfunc_begin49: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp98: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1534,20 +1538,20 @@ _Z2f1IJFvzEEEvv: # @_Z2f1IJFvzEEEvv # -- End function .section .text._Z2f1IJFvizEEEvv,"axG",@progbits,_Z2f1IJFvizEEEvv,comdat .weak _Z2f1IJFvizEEEvv # -- Begin function _Z2f1IJFvizEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvizEEEvv,@function _Z2f1IJFvizEEEvv: # @_Z2f1IJFvizEEEvv .Lfunc_begin50: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp100: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1558,20 +1562,20 @@ _Z2f1IJFvizEEEvv: # @_Z2f1IJFvizEEEvv # -- End function .section .text._Z2f1IJRKiEEvv,"axG",@progbits,_Z2f1IJRKiEEvv,comdat .weak _Z2f1IJRKiEEvv # -- Begin function _Z2f1IJRKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRKiEEvv,@function _Z2f1IJRKiEEvv: # @_Z2f1IJRKiEEvv .Lfunc_begin51: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp102: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1582,20 +1586,20 @@ _Z2f1IJRKiEEvv: # @_Z2f1IJRKiEEvv # -- End function .section .text._Z2f1IJRPKiEEvv,"axG",@progbits,_Z2f1IJRPKiEEvv,comdat .weak _Z2f1IJRPKiEEvv # -- Begin function _Z2f1IJRPKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRPKiEEvv,@function _Z2f1IJRPKiEEvv: # @_Z2f1IJRPKiEEvv .Lfunc_begin52: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp104: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1605,20 +1609,20 @@ _Z2f1IJRPKiEEvv: # @_Z2f1IJRPKiEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJN12_GLOBAL__N_12t5EEEvv + .p2align 4 # -- Begin function _Z2f1IJN12_GLOBAL__N_12t5EEEvv .type _Z2f1IJN12_GLOBAL__N_12t5EEEvv,@function _Z2f1IJN12_GLOBAL__N_12t5EEEvv: # @_Z2f1IJN12_GLOBAL__N_12t5EEEvv .Lfunc_begin53: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp106: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1629,20 +1633,20 @@ _Z2f1IJN12_GLOBAL__N_12t5EEEvv: # @_Z2f1IJN12_GLOBAL__N_12t5EEEvv # -- End function .section .text._Z2f1IJDnEEvv,"axG",@progbits,_Z2f1IJDnEEvv,comdat .weak _Z2f1IJDnEEvv # -- Begin function _Z2f1IJDnEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJDnEEvv,@function _Z2f1IJDnEEvv: # @_Z2f1IJDnEEvv .Lfunc_begin54: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp108: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1653,20 +1657,20 @@ _Z2f1IJDnEEvv: # @_Z2f1IJDnEEvv # -- End function .section .text._Z2f1IJPlS0_EEvv,"axG",@progbits,_Z2f1IJPlS0_EEvv,comdat .weak _Z2f1IJPlS0_EEvv # -- Begin function _Z2f1IJPlS0_EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPlS0_EEvv,@function _Z2f1IJPlS0_EEvv: # @_Z2f1IJPlS0_EEvv .Lfunc_begin55: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp110: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1677,20 +1681,20 @@ _Z2f1IJPlS0_EEvv: # @_Z2f1IJPlS0_EEvv # -- End function .section .text._Z2f1IJPlP3udtEEvv,"axG",@progbits,_Z2f1IJPlP3udtEEvv,comdat .weak _Z2f1IJPlP3udtEEvv # -- Begin function _Z2f1IJPlP3udtEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPlP3udtEEvv,@function _Z2f1IJPlP3udtEEvv: # @_Z2f1IJPlP3udtEEvv .Lfunc_begin56: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp112: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1701,20 +1705,20 @@ _Z2f1IJPlP3udtEEvv: # @_Z2f1IJPlP3udtEEvv # -- End function .section .text._Z2f1IJKPvEEvv,"axG",@progbits,_Z2f1IJKPvEEvv,comdat .weak _Z2f1IJKPvEEvv # -- Begin function _Z2f1IJKPvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKPvEEvv,@function _Z2f1IJKPvEEvv: # @_Z2f1IJKPvEEvv .Lfunc_begin57: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp114: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1725,20 +1729,20 @@ _Z2f1IJKPvEEvv: # @_Z2f1IJKPvEEvv # -- End function .section .text._Z2f1IJPKPKvEEvv,"axG",@progbits,_Z2f1IJPKPKvEEvv,comdat .weak _Z2f1IJPKPKvEEvv # -- Begin function _Z2f1IJPKPKvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPKPKvEEvv,@function _Z2f1IJPKPKvEEvv: # @_Z2f1IJPKPKvEEvv .Lfunc_begin58: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp116: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1749,20 +1753,20 @@ _Z2f1IJPKPKvEEvv: # @_Z2f1IJPKPKvEEvv # -- End function .section .text._Z2f1IJFvvEEEvv,"axG",@progbits,_Z2f1IJFvvEEEvv,comdat .weak _Z2f1IJFvvEEEvv # -- Begin function _Z2f1IJFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvvEEEvv,@function _Z2f1IJFvvEEEvv: # @_Z2f1IJFvvEEEvv .Lfunc_begin59: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp118: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1773,20 +1777,20 @@ _Z2f1IJFvvEEEvv: # @_Z2f1IJFvvEEEvv # -- End function .section .text._Z2f1IJPFvvEEEvv,"axG",@progbits,_Z2f1IJPFvvEEEvv,comdat .weak _Z2f1IJPFvvEEEvv # -- Begin function _Z2f1IJPFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPFvvEEEvv,@function _Z2f1IJPFvvEEEvv: # @_Z2f1IJPFvvEEEvv .Lfunc_begin60: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp120: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1796,88 +1800,88 @@ _Z2f1IJPFvvEEEvv: # @_Z2f1IJPFvvEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJPZ4mainE3$_1EEvv - .type _Z2f1IJPZ4mainE3$_1EEvv,@function -_Z2f1IJPZ4mainE3$_1EEvv: # @"_Z2f1IJPZ4mainE3$_1EEvv" + .p2align 4 # -- Begin function _Z2f1IJPZ4mainE3$_0EEvv + .type _Z2f1IJPZ4mainE3$_0EEvv,@function +_Z2f1IJPZ4mainE3$_0EEvv: # @"_Z2f1IJPZ4mainE3$_0EEvv" .Lfunc_begin61: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp122: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp123: .Lfunc_end61: - .size _Z2f1IJPZ4mainE3$_1EEvv, .Lfunc_end61-_Z2f1IJPZ4mainE3$_1EEvv + .size _Z2f1IJPZ4mainE3$_0EEvv, .Lfunc_end61-_Z2f1IJPZ4mainE3$_0EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE3$_2EEvv - .type _Z2f1IJZ4mainE3$_2EEvv,@function -_Z2f1IJZ4mainE3$_2EEvv: # @"_Z2f1IJZ4mainE3$_2EEvv" + .p2align 4 # -- Begin function _Z2f1IJZ4mainE3$_1EEvv + .type _Z2f1IJZ4mainE3$_1EEvv,@function +_Z2f1IJZ4mainE3$_1EEvv: # @"_Z2f1IJZ4mainE3$_1EEvv" .Lfunc_begin62: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp124: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp125: .Lfunc_end62: - .size _Z2f1IJZ4mainE3$_2EEvv, .Lfunc_end62-_Z2f1IJZ4mainE3$_2EEvv + .size _Z2f1IJZ4mainE3$_1EEvv, .Lfunc_end62-_Z2f1IJZ4mainE3$_1EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJPZ4mainE3$_2EEvv - .type _Z2f1IJPZ4mainE3$_2EEvv,@function -_Z2f1IJPZ4mainE3$_2EEvv: # @"_Z2f1IJPZ4mainE3$_2EEvv" + .p2align 4 # -- Begin function _Z2f1IJPZ4mainE3$_1EEvv + .type _Z2f1IJPZ4mainE3$_1EEvv,@function +_Z2f1IJPZ4mainE3$_1EEvv: # @"_Z2f1IJPZ4mainE3$_1EEvv" .Lfunc_begin63: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp126: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp127: .Lfunc_end63: - .size _Z2f1IJPZ4mainE3$_2EEvv, .Lfunc_end63-_Z2f1IJPZ4mainE3$_2EEvv + .size _Z2f1IJPZ4mainE3$_1EEvv, .Lfunc_end63-_Z2f1IJPZ4mainE3$_1EEvv .cfi_endproc # -- End function .section .text._Z2f5IJ2t1IJiEEEiEvv,"axG",@progbits,_Z2f5IJ2t1IJiEEEiEvv,comdat .weak _Z2f5IJ2t1IJiEEEiEvv # -- Begin function _Z2f5IJ2t1IJiEEEiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f5IJ2t1IJiEEEiEvv,@function _Z2f5IJ2t1IJiEEEiEvv: # @_Z2f5IJ2t1IJiEEEiEvv .Lfunc_begin64: - .loc 0 62 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:0 + .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp128: - .loc 0 62 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:13 + .loc 0 64 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1888,20 +1892,20 @@ _Z2f5IJ2t1IJiEEEiEvv: # @_Z2f5IJ2t1IJiEEEiEvv # -- End function .section .text._Z2f5IJEiEvv,"axG",@progbits,_Z2f5IJEiEvv,comdat .weak _Z2f5IJEiEvv # -- Begin function _Z2f5IJEiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f5IJEiEvv,@function _Z2f5IJEiEvv: # @_Z2f5IJEiEvv .Lfunc_begin65: - .loc 0 62 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:0 + .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp130: - .loc 0 62 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:13 + .loc 0 64 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1912,20 +1916,20 @@ _Z2f5IJEiEvv: # @_Z2f5IJEiEvv # -- End function .section .text._Z2f6I2t1IJiEEJEEvv,"axG",@progbits,_Z2f6I2t1IJiEEJEEvv,comdat .weak _Z2f6I2t1IJiEEJEEvv # -- Begin function _Z2f6I2t1IJiEEJEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f6I2t1IJiEEJEEvv,@function _Z2f6I2t1IJiEEJEEvv: # @_Z2f6I2t1IJiEEJEEvv .Lfunc_begin66: - .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 + .loc 0 66 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:66:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp132: - .loc 0 64 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 + .loc 0 66 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:66:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1936,20 +1940,20 @@ _Z2f6I2t1IJiEEJEEvv: # @_Z2f6I2t1IJiEEJEEvv # -- End function .section .text._Z2f1IJEEvv,"axG",@progbits,_Z2f1IJEEvv,comdat .weak _Z2f1IJEEvv # -- Begin function _Z2f1IJEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJEEvv,@function _Z2f1IJEEvv: # @_Z2f1IJEEvv .Lfunc_begin67: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp134: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1960,20 +1964,20 @@ _Z2f1IJEEvv: # @_Z2f1IJEEvv # -- End function .section .text._Z2f1IJPKvS1_EEvv,"axG",@progbits,_Z2f1IJPKvS1_EEvv,comdat .weak _Z2f1IJPKvS1_EEvv # -- Begin function _Z2f1IJPKvS1_EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPKvS1_EEvv,@function _Z2f1IJPKvS1_EEvv: # @_Z2f1IJPKvS1_EEvv .Lfunc_begin68: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp136: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1984,20 +1988,20 @@ _Z2f1IJPKvS1_EEvv: # @_Z2f1IJPKvS1_EEvv # -- End function .section .text._Z2f1IJP2t1IJPiEEEEvv,"axG",@progbits,_Z2f1IJP2t1IJPiEEEEvv,comdat .weak _Z2f1IJP2t1IJPiEEEEvv # -- Begin function _Z2f1IJP2t1IJPiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJP2t1IJPiEEEEvv,@function _Z2f1IJP2t1IJPiEEEEvv: # @_Z2f1IJP2t1IJPiEEEEvv .Lfunc_begin69: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp138: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2008,20 +2012,20 @@ _Z2f1IJP2t1IJPiEEEEvv: # @_Z2f1IJP2t1IJPiEEEEvv # -- End function .section .text._Z2f1IJA_PiEEvv,"axG",@progbits,_Z2f1IJA_PiEEvv,comdat .weak _Z2f1IJA_PiEEvv # -- Begin function _Z2f1IJA_PiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA_PiEEvv,@function _Z2f1IJA_PiEEvv: # @_Z2f1IJA_PiEEvv .Lfunc_begin70: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp140: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2032,13 +2036,13 @@ _Z2f1IJA_PiEEvv: # @_Z2f1IJA_PiEEvv # -- End function .section .text._ZN2t6lsIiEEvi,"axG",@progbits,_ZN2t6lsIiEEvi,comdat .weak _ZN2t6lsIiEEvi # -- Begin function _ZN2t6lsIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6lsIiEEvi,@function _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi .Lfunc_begin71: - .loc 0 67 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:67:0 + .loc 0 69 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:69:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2047,7 +2051,7 @@ _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp142: - .loc 0 68 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:68:3 + .loc 0 70 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:70:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2058,13 +2062,13 @@ _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi # -- End function .section .text._ZN2t6ltIiEEvi,"axG",@progbits,_ZN2t6ltIiEEvi,comdat .weak _ZN2t6ltIiEEvi # -- Begin function _ZN2t6ltIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ltIiEEvi,@function _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi .Lfunc_begin72: - .loc 0 70 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:70:0 + .loc 0 72 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:72:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2073,7 +2077,7 @@ _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp144: - .loc 0 71 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:71:3 + .loc 0 73 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:73:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2084,13 +2088,13 @@ _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi # -- End function .section .text._ZN2t6leIiEEvi,"axG",@progbits,_ZN2t6leIiEEvi,comdat .weak _ZN2t6leIiEEvi # -- Begin function _ZN2t6leIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6leIiEEvi,@function _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi .Lfunc_begin73: - .loc 0 73 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:73:0 + .loc 0 75 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:75:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2099,7 +2103,7 @@ _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp146: - .loc 0 74 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:74:3 + .loc 0 76 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:76:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2110,13 +2114,13 @@ _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi # -- End function .section .text._ZN2t6cvP2t1IJfEEIiEEv,"axG",@progbits,_ZN2t6cvP2t1IJfEEIiEEv,comdat .weak _ZN2t6cvP2t1IJfEEIiEEv # -- Begin function _ZN2t6cvP2t1IJfEEIiEEv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6cvP2t1IJfEEIiEEv,@function _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv .Lfunc_begin74: - .loc 0 76 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:76:0 + .loc 0 78 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:78:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2124,9 +2128,10 @@ _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp148: - .loc 0 77 5 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:77:5 + .loc 0 79 5 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:79:5 xorl %eax, %eax # kill: def $rax killed $eax + .loc 0 79 5 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:79:5 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2137,13 +2142,13 @@ _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv # -- End function .section .text._ZN2t6miIiEEvi,"axG",@progbits,_ZN2t6miIiEEvi,comdat .weak _ZN2t6miIiEEvi # -- Begin function _ZN2t6miIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6miIiEEvi,@function _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi .Lfunc_begin75: - .loc 0 80 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:80:0 + .loc 0 82 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:82:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2152,7 +2157,7 @@ _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp150: - .loc 0 81 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:81:3 + .loc 0 83 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:83:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2163,13 +2168,13 @@ _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi # -- End function .section .text._ZN2t6mlIiEEvi,"axG",@progbits,_ZN2t6mlIiEEvi,comdat .weak _ZN2t6mlIiEEvi # -- Begin function _ZN2t6mlIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6mlIiEEvi,@function _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi .Lfunc_begin76: - .loc 0 83 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:83:0 + .loc 0 85 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:85:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2178,7 +2183,7 @@ _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp152: - .loc 0 84 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:84:3 + .loc 0 86 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:86:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2189,13 +2194,13 @@ _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi # -- End function .section .text._ZN2t6dvIiEEvi,"axG",@progbits,_ZN2t6dvIiEEvi,comdat .weak _ZN2t6dvIiEEvi # -- Begin function _ZN2t6dvIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6dvIiEEvi,@function _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi .Lfunc_begin77: - .loc 0 86 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:86:0 + .loc 0 88 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:88:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2204,7 +2209,7 @@ _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp154: - .loc 0 87 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:87:3 + .loc 0 89 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:89:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2215,13 +2220,13 @@ _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi # -- End function .section .text._ZN2t6rmIiEEvi,"axG",@progbits,_ZN2t6rmIiEEvi,comdat .weak _ZN2t6rmIiEEvi # -- Begin function _ZN2t6rmIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6rmIiEEvi,@function _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi .Lfunc_begin78: - .loc 0 89 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:89:0 + .loc 0 91 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:91:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2230,7 +2235,7 @@ _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp156: - .loc 0 90 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:90:3 + .loc 0 92 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:92:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2241,13 +2246,13 @@ _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi # -- End function .section .text._ZN2t6eoIiEEvi,"axG",@progbits,_ZN2t6eoIiEEvi,comdat .weak _ZN2t6eoIiEEvi # -- Begin function _ZN2t6eoIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6eoIiEEvi,@function _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi .Lfunc_begin79: - .loc 0 92 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:92:0 + .loc 0 94 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:94:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2256,7 +2261,7 @@ _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp158: - .loc 0 93 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:93:3 + .loc 0 95 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:95:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2267,13 +2272,13 @@ _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi # -- End function .section .text._ZN2t6anIiEEvi,"axG",@progbits,_ZN2t6anIiEEvi,comdat .weak _ZN2t6anIiEEvi # -- Begin function _ZN2t6anIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6anIiEEvi,@function _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi .Lfunc_begin80: - .loc 0 95 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:95:0 + .loc 0 97 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:97:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2282,7 +2287,7 @@ _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp160: - .loc 0 96 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:96:3 + .loc 0 98 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:98:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2293,13 +2298,13 @@ _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi # -- End function .section .text._ZN2t6orIiEEvi,"axG",@progbits,_ZN2t6orIiEEvi,comdat .weak _ZN2t6orIiEEvi # -- Begin function _ZN2t6orIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6orIiEEvi,@function _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi .Lfunc_begin81: - .loc 0 98 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:98:0 + .loc 0 100 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:100:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2308,7 +2313,7 @@ _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp162: - .loc 0 99 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:99:3 + .loc 0 101 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:101:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2319,13 +2324,13 @@ _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi # -- End function .section .text._ZN2t6coIiEEvv,"axG",@progbits,_ZN2t6coIiEEvv,comdat .weak _ZN2t6coIiEEvv # -- Begin function _ZN2t6coIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6coIiEEvv,@function _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv .Lfunc_begin82: - .loc 0 101 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:101:0 + .loc 0 103 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:103:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2333,7 +2338,7 @@ _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp164: - .loc 0 102 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:102:3 + .loc 0 104 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:104:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2344,13 +2349,13 @@ _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv # -- End function .section .text._ZN2t6ntIiEEvv,"axG",@progbits,_ZN2t6ntIiEEvv,comdat .weak _ZN2t6ntIiEEvv # -- Begin function _ZN2t6ntIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ntIiEEvv,@function _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv .Lfunc_begin83: - .loc 0 104 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:104:0 + .loc 0 106 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:106:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2358,7 +2363,7 @@ _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp166: - .loc 0 105 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:105:3 + .loc 0 107 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:107:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2369,13 +2374,13 @@ _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv # -- End function .section .text._ZN2t6aSIiEEvi,"axG",@progbits,_ZN2t6aSIiEEvi,comdat .weak _ZN2t6aSIiEEvi # -- Begin function _ZN2t6aSIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6aSIiEEvi,@function _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi .Lfunc_begin84: - .loc 0 107 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:107:0 + .loc 0 109 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:109:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2384,7 +2389,7 @@ _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp168: - .loc 0 108 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:108:3 + .loc 0 110 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:110:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2395,13 +2400,13 @@ _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi # -- End function .section .text._ZN2t6gtIiEEvi,"axG",@progbits,_ZN2t6gtIiEEvi,comdat .weak _ZN2t6gtIiEEvi # -- Begin function _ZN2t6gtIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6gtIiEEvi,@function _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi .Lfunc_begin85: - .loc 0 110 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:110:0 + .loc 0 112 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:112:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2410,7 +2415,7 @@ _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp170: - .loc 0 111 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:111:3 + .loc 0 113 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:113:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2421,13 +2426,13 @@ _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi # -- End function .section .text._ZN2t6cmIiEEvi,"axG",@progbits,_ZN2t6cmIiEEvi,comdat .weak _ZN2t6cmIiEEvi # -- Begin function _ZN2t6cmIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6cmIiEEvi,@function _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi .Lfunc_begin86: - .loc 0 113 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:113:0 + .loc 0 115 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:115:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2436,7 +2441,7 @@ _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp172: - .loc 0 114 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:114:3 + .loc 0 116 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:116:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2447,13 +2452,13 @@ _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi # -- End function .section .text._ZN2t6clIiEEvv,"axG",@progbits,_ZN2t6clIiEEvv,comdat .weak _ZN2t6clIiEEvv # -- Begin function _ZN2t6clIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6clIiEEvv,@function _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv .Lfunc_begin87: - .loc 0 116 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:116:0 + .loc 0 118 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:118:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2461,7 +2466,7 @@ _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp174: - .loc 0 117 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:117:3 + .loc 0 119 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:119:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2472,13 +2477,13 @@ _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv # -- End function .section .text._ZN2t6ixIiEEvi,"axG",@progbits,_ZN2t6ixIiEEvi,comdat .weak _ZN2t6ixIiEEvi # -- Begin function _ZN2t6ixIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ixIiEEvi,@function _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi .Lfunc_begin88: - .loc 0 119 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:119:0 + .loc 0 121 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:121:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2487,7 +2492,7 @@ _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp176: - .loc 0 120 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:120:3 + .loc 0 122 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:122:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2498,13 +2503,13 @@ _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi # -- End function .section .text._ZN2t6ssIiEEvi,"axG",@progbits,_ZN2t6ssIiEEvi,comdat .weak _ZN2t6ssIiEEvi # -- Begin function _ZN2t6ssIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ssIiEEvi,@function _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi .Lfunc_begin89: - .loc 0 122 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:122:0 + .loc 0 124 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:124:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2513,7 +2518,7 @@ _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp178: - .loc 0 123 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:123:3 + .loc 0 125 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:125:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2524,37 +2529,41 @@ _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi # -- End function .section .text._ZN2t6nwIiEEPvmT_,"axG",@progbits,_ZN2t6nwIiEEPvmT_,comdat .weak _ZN2t6nwIiEEPvmT_ # -- Begin function _ZN2t6nwIiEEPvmT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6nwIiEEPvmT_,@function _ZN2t6nwIiEEPvmT_: # @_ZN2t6nwIiEEPvmT_ .Lfunc_begin90: + .loc 0 127 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:127:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 127 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:127:0 movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Lfunc_end90: .size _ZN2t6nwIiEEPvmT_, .Lfunc_end90-_ZN2t6nwIiEEPvmT_ .cfi_endproc - .file 6 "/usr" "lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11/bits/c++config.h" md5 0x6ae0e1f800c3d941fd89365f1601d843 + .file 1 "builds/release/bin/../include/c++/v1/__cstddef" "size_t.h" # -- End function .section .text._ZN2t6naIiEEPvmT_,"axG",@progbits,_ZN2t6naIiEEPvmT_,comdat .weak _ZN2t6naIiEEPvmT_ # -- Begin function _ZN2t6naIiEEPvmT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6naIiEEPvmT_,@function _ZN2t6naIiEEPvmT_: # @_ZN2t6naIiEEPvmT_ .Lfunc_begin91: + .loc 0 134 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:134:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 134 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:134:0 movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Lfunc_end91: @@ -2563,13 +2572,13 @@ _ZN2t6naIiEEPvmT_: # @_ZN2t6naIiEEPvmT_ # -- End function .section .text._ZN2t6dlIiEEvPvT_,"axG",@progbits,_ZN2t6dlIiEEvPvT_,comdat .weak _ZN2t6dlIiEEvPvT_ # -- Begin function _ZN2t6dlIiEEvPvT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6dlIiEEvPvT_,@function _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ .Lfunc_begin92: - .loc 0 129 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:129:0 + .loc 0 131 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:131:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2578,7 +2587,7 @@ _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp180: - .loc 0 130 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:130:3 + .loc 0 132 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:132:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2589,13 +2598,13 @@ _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ # -- End function .section .text._ZN2t6daIiEEvPvT_,"axG",@progbits,_ZN2t6daIiEEvPvT_,comdat .weak _ZN2t6daIiEEvPvT_ # -- Begin function _ZN2t6daIiEEvPvT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6daIiEEvPvT_,@function _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ .Lfunc_begin93: - .loc 0 136 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:136:0 + .loc 0 138 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:138:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2604,7 +2613,7 @@ _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp182: - .loc 0 137 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:137:3 + .loc 0 139 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:139:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2615,37 +2624,39 @@ _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ # -- End function .section .text._ZN2t6awIiEEiv,"axG",@progbits,_ZN2t6awIiEEiv,comdat .weak _ZN2t6awIiEEiv # -- Begin function _ZN2t6awIiEEiv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6awIiEEiv,@function _ZN2t6awIiEEiv: # @_ZN2t6awIiEEiv .Lfunc_begin94: + .loc 0 141 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:141:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 141 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:141:0 movq %rdi, -8(%rbp) .Lfunc_end94: .size _ZN2t6awIiEEiv, .Lfunc_end94-_ZN2t6awIiEEiv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE2t7EEvv + .p2align 4 # -- Begin function _Z2f1IJZ4mainE2t7EEvv .type _Z2f1IJZ4mainE2t7EEvv,@function _Z2f1IJZ4mainE2t7EEvv: # @_Z2f1IJZ4mainE2t7EEvv .Lfunc_begin95: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp184: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2656,20 +2667,20 @@ _Z2f1IJZ4mainE2t7EEvv: # @_Z2f1IJZ4mainE2t7EEvv # -- End function .section .text._Z2f1IJRA3_iEEvv,"axG",@progbits,_Z2f1IJRA3_iEEvv,comdat .weak _Z2f1IJRA3_iEEvv # -- Begin function _Z2f1IJRA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA3_iEEvv,@function _Z2f1IJRA3_iEEvv: # @_Z2f1IJRA3_iEEvv .Lfunc_begin96: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp186: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2680,20 +2691,20 @@ _Z2f1IJRA3_iEEvv: # @_Z2f1IJRA3_iEEvv # -- End function .section .text._Z2f1IJPA3_iEEvv,"axG",@progbits,_Z2f1IJPA3_iEEvv,comdat .weak _Z2f1IJPA3_iEEvv # -- Begin function _Z2f1IJPA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPA3_iEEvv,@function _Z2f1IJPA3_iEEvv: # @_Z2f1IJPA3_iEEvv .Lfunc_begin97: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp188: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2704,20 +2715,20 @@ _Z2f1IJPA3_iEEvv: # @_Z2f1IJPA3_iEEvv # -- End function .section .text._Z2f7I2t1Evv,"axG",@progbits,_Z2f7I2t1Evv,comdat .weak _Z2f7I2t1Evv # -- Begin function _Z2f7I2t1Evv - .p2align 4, 0x90 + .p2align 4 .type _Z2f7I2t1Evv,@function _Z2f7I2t1Evv: # @_Z2f7I2t1Evv .Lfunc_begin98: - .loc 0 143 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:0 + .loc 0 145 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp190: - .loc 0 143 53 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:53 + .loc 0 145 53 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:53 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2728,20 +2739,20 @@ _Z2f7I2t1Evv: # @_Z2f7I2t1Evv # -- End function .section .text._Z2f8I2t1iEvv,"axG",@progbits,_Z2f8I2t1iEvv,comdat .weak _Z2f8I2t1iEvv # -- Begin function _Z2f8I2t1iEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f8I2t1iEvv,@function _Z2f8I2t1iEvv: # @_Z2f8I2t1iEvv .Lfunc_begin99: - .loc 0 144 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:0 + .loc 0 146 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:146:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp192: - .loc 0 144 66 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:66 + .loc 0 146 66 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:146:66 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2752,20 +2763,20 @@ _Z2f8I2t1iEvv: # @_Z2f8I2t1iEvv # -- End function .section .text._ZN2ns8ttp_userINS_5inner3ttpEEEvv,"axG",@progbits,_ZN2ns8ttp_userINS_5inner3ttpEEEvv,comdat .weak _ZN2ns8ttp_userINS_5inner3ttpEEEvv # -- Begin function _ZN2ns8ttp_userINS_5inner3ttpEEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2ns8ttp_userINS_5inner3ttpEEEvv,@function _ZN2ns8ttp_userINS_5inner3ttpEEEvv: # @_ZN2ns8ttp_userINS_5inner3ttpEEEvv .Lfunc_begin100: - .loc 0 26 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:26:0 + .loc 0 28 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:28:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp194: - .loc 0 26 19 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:26:19 + .loc 0 28 19 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:28:19 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2776,20 +2787,20 @@ _ZN2ns8ttp_userINS_5inner3ttpEEEvv: # @_ZN2ns8ttp_userINS_5inner3ttpEEEvv # -- End function .section .text._Z2f1IJPiPDnEEvv,"axG",@progbits,_Z2f1IJPiPDnEEvv,comdat .weak _Z2f1IJPiPDnEEvv # -- Begin function _Z2f1IJPiPDnEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPiPDnEEvv,@function _Z2f1IJPiPDnEEvv: # @_Z2f1IJPiPDnEEvv .Lfunc_begin101: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp196: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2800,20 +2811,20 @@ _Z2f1IJPiPDnEEvv: # @_Z2f1IJPiPDnEEvv # -- End function .section .text._Z2f1IJ2t7IiEEEvv,"axG",@progbits,_Z2f1IJ2t7IiEEEvv,comdat .weak _Z2f1IJ2t7IiEEEvv # -- Begin function _Z2f1IJ2t7IiEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t7IiEEEvv,@function _Z2f1IJ2t7IiEEEvv: # @_Z2f1IJ2t7IiEEEvv .Lfunc_begin102: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp198: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2822,46 +2833,46 @@ _Z2f1IJ2t7IiEEEvv: # @_Z2f1IJ2t7IiEEEvv .size _Z2f1IJ2t7IiEEEvv, .Lfunc_end102-_Z2f1IJ2t7IiEEEvv .cfi_endproc # -- End function - .section .text._Z2f7IN2ns3inl2t9EEvv,"axG",@progbits,_Z2f7IN2ns3inl2t9EEvv,comdat - .weak _Z2f7IN2ns3inl2t9EEvv # -- Begin function _Z2f7IN2ns3inl2t9EEvv - .p2align 4, 0x90 - .type _Z2f7IN2ns3inl2t9EEvv,@function -_Z2f7IN2ns3inl2t9EEvv: # @_Z2f7IN2ns3inl2t9EEvv + .section .text._Z2f7ITtTpTyEN2ns3inl2t9EEvv,"axG",@progbits,_Z2f7ITtTpTyEN2ns3inl2t9EEvv,comdat + .weak _Z2f7ITtTpTyEN2ns3inl2t9EEvv # -- Begin function _Z2f7ITtTpTyEN2ns3inl2t9EEvv + .p2align 4 + .type _Z2f7ITtTpTyEN2ns3inl2t9EEvv,@function +_Z2f7ITtTpTyEN2ns3inl2t9EEvv: # @_Z2f7ITtTpTyEN2ns3inl2t9EEvv .Lfunc_begin103: - .loc 0 143 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:0 + .loc 0 145 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp200: - .loc 0 143 53 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:53 + .loc 0 145 53 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:53 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp201: .Lfunc_end103: - .size _Z2f7IN2ns3inl2t9EEvv, .Lfunc_end103-_Z2f7IN2ns3inl2t9EEvv + .size _Z2f7ITtTpTyEN2ns3inl2t9EEvv, .Lfunc_end103-_Z2f7ITtTpTyEN2ns3inl2t9EEvv .cfi_endproc # -- End function .section .text._Z2f1IJU7_AtomiciEEvv,"axG",@progbits,_Z2f1IJU7_AtomiciEEvv,comdat .weak _Z2f1IJU7_AtomiciEEvv # -- Begin function _Z2f1IJU7_AtomiciEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJU7_AtomiciEEvv,@function _Z2f1IJU7_AtomiciEEvv: # @_Z2f1IJU7_AtomiciEEvv .Lfunc_begin104: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp202: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2872,20 +2883,20 @@ _Z2f1IJU7_AtomiciEEvv: # @_Z2f1IJU7_AtomiciEEvv # -- End function .section .text._Z2f1IJilVcEEvv,"axG",@progbits,_Z2f1IJilVcEEvv,comdat .weak _Z2f1IJilVcEEvv # -- Begin function _Z2f1IJilVcEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJilVcEEvv,@function _Z2f1IJilVcEEvv: # @_Z2f1IJilVcEEvv .Lfunc_begin105: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp204: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2896,20 +2907,20 @@ _Z2f1IJilVcEEvv: # @_Z2f1IJilVcEEvv # -- End function .section .text._Z2f1IJDv2_iEEvv,"axG",@progbits,_Z2f1IJDv2_iEEvv,comdat .weak _Z2f1IJDv2_iEEvv # -- Begin function _Z2f1IJDv2_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJDv2_iEEvv,@function _Z2f1IJDv2_iEEvv: # @_Z2f1IJDv2_iEEvv .Lfunc_begin106: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp206: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2920,20 +2931,20 @@ _Z2f1IJDv2_iEEvv: # @_Z2f1IJDv2_iEEvv # -- End function .section .text._Z2f1IJVKPiEEvv,"axG",@progbits,_Z2f1IJVKPiEEvv,comdat .weak _Z2f1IJVKPiEEvv # -- Begin function _Z2f1IJVKPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKPiEEvv,@function _Z2f1IJVKPiEEvv: # @_Z2f1IJVKPiEEvv .Lfunc_begin107: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp208: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2944,20 +2955,20 @@ _Z2f1IJVKPiEEvv: # @_Z2f1IJVKPiEEvv # -- End function .section .text._Z2f1IJVKvEEvv,"axG",@progbits,_Z2f1IJVKvEEvv,comdat .weak _Z2f1IJVKvEEvv # -- Begin function _Z2f1IJVKvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKvEEvv,@function _Z2f1IJVKvEEvv: # @_Z2f1IJVKvEEvv .Lfunc_begin108: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp210: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2967,37 +2978,37 @@ _Z2f1IJVKvEEvv: # @_Z2f1IJVKvEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv - .type _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv,@function -_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv: # @"_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv" + .p2align 4 # -- Begin function _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv + .type _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv,@function +_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv: # @"_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv" .Lfunc_begin109: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp212: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp213: .Lfunc_end109: - .size _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv, .Lfunc_end109-_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv + .size _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv, .Lfunc_end109-_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv .cfi_endproc # -- End function .section .text._ZN3t10C2IvEEv,"axG",@progbits,_ZN3t10C2IvEEv,comdat .weak _ZN3t10C2IvEEv # -- Begin function _ZN3t10C2IvEEv - .p2align 4, 0x90 + .p2align 4 .type _ZN3t10C2IvEEv,@function _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv .Lfunc_begin110: - .loc 0 167 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:167:0 + .loc 0 169 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:169:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -3005,7 +3016,7 @@ _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp214: - .loc 0 167 11 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:167:11 + .loc 0 169 11 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:169:11 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3016,20 +3027,20 @@ _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv # -- End function .section .text._Z2f1IJM3udtKFvvEEEvv,"axG",@progbits,_Z2f1IJM3udtKFvvEEEvv,comdat .weak _Z2f1IJM3udtKFvvEEEvv # -- Begin function _Z2f1IJM3udtKFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtKFvvEEEvv,@function _Z2f1IJM3udtKFvvEEEvv: # @_Z2f1IJM3udtKFvvEEEvv .Lfunc_begin111: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp216: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3040,20 +3051,20 @@ _Z2f1IJM3udtKFvvEEEvv: # @_Z2f1IJM3udtKFvvEEEvv # -- End function .section .text._Z2f1IJM3udtVFvvREEEvv,"axG",@progbits,_Z2f1IJM3udtVFvvREEEvv,comdat .weak _Z2f1IJM3udtVFvvREEEvv # -- Begin function _Z2f1IJM3udtVFvvREEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtVFvvREEEvv,@function _Z2f1IJM3udtVFvvREEEvv: # @_Z2f1IJM3udtVFvvREEEvv .Lfunc_begin112: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp218: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3064,20 +3075,20 @@ _Z2f1IJM3udtVFvvREEEvv: # @_Z2f1IJM3udtVFvvREEEvv # -- End function .section .text._Z2f1IJM3udtVKFvvOEEEvv,"axG",@progbits,_Z2f1IJM3udtVKFvvOEEEvv,comdat .weak _Z2f1IJM3udtVKFvvOEEEvv # -- Begin function _Z2f1IJM3udtVKFvvOEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtVKFvvOEEEvv,@function _Z2f1IJM3udtVKFvvOEEEvv: # @_Z2f1IJM3udtVKFvvOEEEvv .Lfunc_begin113: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp220: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3088,22 +3099,23 @@ _Z2f1IJM3udtVKFvvOEEEvv: # @_Z2f1IJM3udtVKFvvOEEEvv # -- End function .section .text._Z2f9IiEPFvvEv,"axG",@progbits,_Z2f9IiEPFvvEv,comdat .weak _Z2f9IiEPFvvEv # -- Begin function _Z2f9IiEPFvvEv - .p2align 4, 0x90 + .p2align 4 .type _Z2f9IiEPFvvEv,@function _Z2f9IiEPFvvEv: # @_Z2f9IiEPFvvEv .Lfunc_begin114: - .loc 0 162 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:162:0 + .loc 0 164 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:164:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp222: - .loc 0 163 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:163:3 + .loc 0 165 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:165:3 xorl %eax, %eax # kill: def $rax killed $eax + .loc 0 165 3 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:165:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3114,20 +3126,20 @@ _Z2f9IiEPFvvEv: # @_Z2f9IiEPFvvEv # -- End function .section .text._Z2f1IJKPFvvEEEvv,"axG",@progbits,_Z2f1IJKPFvvEEEvv,comdat .weak _Z2f1IJKPFvvEEEvv # -- Begin function _Z2f1IJKPFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKPFvvEEEvv,@function _Z2f1IJKPFvvEEEvv: # @_Z2f1IJKPFvvEEEvv .Lfunc_begin115: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp224: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3138,20 +3150,20 @@ _Z2f1IJKPFvvEEEvv: # @_Z2f1IJKPFvvEEEvv # -- End function .section .text._Z2f1IJRA1_KcEEvv,"axG",@progbits,_Z2f1IJRA1_KcEEvv,comdat .weak _Z2f1IJRA1_KcEEvv # -- Begin function _Z2f1IJRA1_KcEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA1_KcEEvv,@function _Z2f1IJRA1_KcEEvv: # @_Z2f1IJRA1_KcEEvv .Lfunc_begin116: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp226: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3162,20 +3174,20 @@ _Z2f1IJRA1_KcEEvv: # @_Z2f1IJRA1_KcEEvv # -- End function .section .text._Z2f1IJKFvvREEEvv,"axG",@progbits,_Z2f1IJKFvvREEEvv,comdat .weak _Z2f1IJKFvvREEEvv # -- Begin function _Z2f1IJKFvvREEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKFvvREEEvv,@function _Z2f1IJKFvvREEEvv: # @_Z2f1IJKFvvREEEvv .Lfunc_begin117: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp228: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3186,20 +3198,20 @@ _Z2f1IJKFvvREEEvv: # @_Z2f1IJKFvvREEEvv # -- End function .section .text._Z2f1IJVFvvOEEEvv,"axG",@progbits,_Z2f1IJVFvvOEEEvv,comdat .weak _Z2f1IJVFvvOEEEvv # -- Begin function _Z2f1IJVFvvOEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVFvvOEEEvv,@function _Z2f1IJVFvvOEEEvv: # @_Z2f1IJVFvvOEEEvv .Lfunc_begin118: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp230: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3210,20 +3222,20 @@ _Z2f1IJVFvvOEEEvv: # @_Z2f1IJVFvvOEEEvv # -- End function .section .text._Z2f1IJVKFvvEEEvv,"axG",@progbits,_Z2f1IJVKFvvEEEvv,comdat .weak _Z2f1IJVKFvvEEEvv # -- Begin function _Z2f1IJVKFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKFvvEEEvv,@function _Z2f1IJVKFvvEEEvv: # @_Z2f1IJVKFvvEEEvv .Lfunc_begin119: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp232: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3234,20 +3246,20 @@ _Z2f1IJVKFvvEEEvv: # @_Z2f1IJVKFvvEEEvv # -- End function .section .text._Z2f1IJA1_KPiEEvv,"axG",@progbits,_Z2f1IJA1_KPiEEvv,comdat .weak _Z2f1IJA1_KPiEEvv # -- Begin function _Z2f1IJA1_KPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA1_KPiEEvv,@function _Z2f1IJA1_KPiEEvv: # @_Z2f1IJA1_KPiEEvv .Lfunc_begin120: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp234: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3258,20 +3270,20 @@ _Z2f1IJA1_KPiEEvv: # @_Z2f1IJA1_KPiEEvv # -- End function .section .text._Z2f1IJRA1_KPiEEvv,"axG",@progbits,_Z2f1IJRA1_KPiEEvv,comdat .weak _Z2f1IJRA1_KPiEEvv # -- Begin function _Z2f1IJRA1_KPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA1_KPiEEvv,@function _Z2f1IJRA1_KPiEEvv: # @_Z2f1IJRA1_KPiEEvv .Lfunc_begin121: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp236: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3282,20 +3294,20 @@ _Z2f1IJRA1_KPiEEvv: # @_Z2f1IJRA1_KPiEEvv # -- End function .section .text._Z2f1IJRKM3udtFvvEEEvv,"axG",@progbits,_Z2f1IJRKM3udtFvvEEEvv,comdat .weak _Z2f1IJRKM3udtFvvEEEvv # -- Begin function _Z2f1IJRKM3udtFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRKM3udtFvvEEEvv,@function _Z2f1IJRKM3udtFvvEEEvv: # @_Z2f1IJRKM3udtFvvEEEvv .Lfunc_begin122: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp238: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3306,20 +3318,20 @@ _Z2f1IJRKM3udtFvvEEEvv: # @_Z2f1IJRKM3udtFvvEEEvv # -- End function .section .text._Z2f1IJFPFvfEiEEEvv,"axG",@progbits,_Z2f1IJFPFvfEiEEEvv,comdat .weak _Z2f1IJFPFvfEiEEEvv # -- Begin function _Z2f1IJFPFvfEiEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFPFvfEiEEEvv,@function _Z2f1IJFPFvfEiEEEvv: # @_Z2f1IJFPFvfEiEEEvv .Lfunc_begin123: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp240: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3330,20 +3342,20 @@ _Z2f1IJFPFvfEiEEEvv: # @_Z2f1IJFPFvfEiEEEvv # -- End function .section .text._Z2f1IJA1_2t1IJiEEEEvv,"axG",@progbits,_Z2f1IJA1_2t1IJiEEEEvv,comdat .weak _Z2f1IJA1_2t1IJiEEEEvv # -- Begin function _Z2f1IJA1_2t1IJiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA1_2t1IJiEEEEvv,@function _Z2f1IJA1_2t1IJiEEEEvv: # @_Z2f1IJA1_2t1IJiEEEEvv .Lfunc_begin124: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp242: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3354,20 +3366,20 @@ _Z2f1IJA1_2t1IJiEEEEvv: # @_Z2f1IJA1_2t1IJiEEEEvv # -- End function .section .text._Z2f1IJPDoFvvEEEvv,"axG",@progbits,_Z2f1IJPDoFvvEEEvv,comdat .weak _Z2f1IJPDoFvvEEEvv # -- Begin function _Z2f1IJPDoFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPDoFvvEEEvv,@function _Z2f1IJPDoFvvEEEvv: # @_Z2f1IJPDoFvvEEEvv .Lfunc_begin125: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp244: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3377,64 +3389,64 @@ _Z2f1IJPDoFvvEEEvv: # @_Z2f1IJPDoFvvEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE3$_2EEEvv - .type _Z2f1IJFvZ4mainE3$_2EEEvv,@function -_Z2f1IJFvZ4mainE3$_2EEEvv: # @"_Z2f1IJFvZ4mainE3$_2EEEvv" + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE3$_1EEEvv + .type _Z2f1IJFvZ4mainE3$_1EEEvv,@function +_Z2f1IJFvZ4mainE3$_1EEEvv: # @"_Z2f1IJFvZ4mainE3$_1EEEvv" .Lfunc_begin126: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp246: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp247: .Lfunc_end126: - .size _Z2f1IJFvZ4mainE3$_2EEEvv, .Lfunc_end126-_Z2f1IJFvZ4mainE3$_2EEEvv + .size _Z2f1IJFvZ4mainE3$_1EEEvv, .Lfunc_end126-_Z2f1IJFvZ4mainE3$_1EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv - .type _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv,@function -_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv: # @"_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv" + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv + .type _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv,@function +_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv: # @"_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv" .Lfunc_begin127: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp248: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp249: .Lfunc_end127: - .size _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv, .Lfunc_end127-_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv + .size _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv, .Lfunc_end127-_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE2t8EEEvv + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE2t8EEEvv .type _Z2f1IJFvZ4mainE2t8EEEvv,@function _Z2f1IJFvZ4mainE2t8EEEvv: # @_Z2f1IJFvZ4mainE2t8EEEvv .Lfunc_begin128: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp250: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3445,20 +3457,20 @@ _Z2f1IJFvZ4mainE2t8EEEvv: # @_Z2f1IJFvZ4mainE2t8EEEvv # -- End function .section .text._Z19operator_not_reallyIiEvv,"axG",@progbits,_Z19operator_not_reallyIiEvv,comdat .weak _Z19operator_not_reallyIiEvv # -- Begin function _Z19operator_not_reallyIiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z19operator_not_reallyIiEvv,@function _Z19operator_not_reallyIiEvv: # @_Z19operator_not_reallyIiEvv .Lfunc_begin129: - .loc 0 171 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:171:0 + .loc 0 173 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:173:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp252: - .loc 0 172 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:172:1 + .loc 0 174 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:174:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3467,219 +3479,340 @@ _Z19operator_not_reallyIiEvv: # @_Z19operator_not_reallyIiEvv .size _Z19operator_not_reallyIiEvv, .Lfunc_end129-_Z19operator_not_reallyIiEvv .cfi_endproc # -- End function - .section .text._Z2f1IJDB3_EEvv,"axG",@progbits,_Z2f1IJDB3_EEvv,comdat - .weak _Z2f1IJDB3_EEvv # -- Begin function _Z2f1IJDB3_EEvv - .p2align 4, 0x90 - .type _Z2f1IJDB3_EEvv,@function -_Z2f1IJDB3_EEvv: # @_Z2f1IJDB3_EEvv + .section .text._Z3f11IDB3_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IDB3_TnT_LS0_2EEvv,comdat + .weak _Z3f11IDB3_TnT_LS0_2EEvv # -- Begin function _Z3f11IDB3_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IDB3_TnT_LS0_2EEvv,@function +_Z3f11IDB3_TnT_LS0_2EEvv: # @_Z3f11IDB3_TnT_LS0_2EEvv .Lfunc_begin130: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp254: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp255: .Lfunc_end130: - .size _Z2f1IJDB3_EEvv, .Lfunc_end130-_Z2f1IJDB3_EEvv + .size _Z3f11IDB3_TnT_LS0_2EEvv, .Lfunc_end130-_Z3f11IDB3_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJKDU5_EEvv,"axG",@progbits,_Z2f1IJKDU5_EEvv,comdat - .weak _Z2f1IJKDU5_EEvv # -- Begin function _Z2f1IJKDU5_EEvv - .p2align 4, 0x90 - .type _Z2f1IJKDU5_EEvv,@function -_Z2f1IJKDU5_EEvv: # @_Z2f1IJKDU5_EEvv + .section .text._Z3f11IKDU5_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IKDU5_TnT_LS0_2EEvv,comdat + .weak _Z3f11IKDU5_TnT_LS0_2EEvv # -- Begin function _Z3f11IKDU5_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IKDU5_TnT_LS0_2EEvv,@function +_Z3f11IKDU5_TnT_LS0_2EEvv: # @_Z3f11IKDU5_TnT_LS0_2EEvv .Lfunc_begin131: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp256: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp257: .Lfunc_end131: - .size _Z2f1IJKDU5_EEvv, .Lfunc_end131-_Z2f1IJKDU5_EEvv + .size _Z3f11IKDU5_TnT_LS0_2EEvv, .Lfunc_end131-_Z3f11IKDU5_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJFv2t1IJEES1_EEEvv,"axG",@progbits,_Z2f1IJFv2t1IJEES1_EEEvv,comdat - .weak _Z2f1IJFv2t1IJEES1_EEEvv # -- Begin function _Z2f1IJFv2t1IJEES1_EEEvv - .p2align 4, 0x90 - .type _Z2f1IJFv2t1IJEES1_EEEvv,@function -_Z2f1IJFv2t1IJEES1_EEEvv: # @_Z2f1IJFv2t1IJEES1_EEEvv + .section .text._Z3f11IDB65_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IDB65_TnT_LS0_2EEvv,comdat + .weak _Z3f11IDB65_TnT_LS0_2EEvv # -- Begin function _Z3f11IDB65_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IDB65_TnT_LS0_2EEvv,@function +_Z3f11IDB65_TnT_LS0_2EEvv: # @_Z3f11IDB65_TnT_LS0_2EEvv .Lfunc_begin132: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp258: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp259: .Lfunc_end132: - .size _Z2f1IJFv2t1IJEES1_EEEvv, .Lfunc_end132-_Z2f1IJFv2t1IJEES1_EEEvv + .size _Z3f11IDB65_TnT_LS0_2EEvv, .Lfunc_end132-_Z3f11IDB65_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJM2t1IJEEiEEvv,"axG",@progbits,_Z2f1IJM2t1IJEEiEEvv,comdat - .weak _Z2f1IJM2t1IJEEiEEvv # -- Begin function _Z2f1IJM2t1IJEEiEEvv - .p2align 4, 0x90 - .type _Z2f1IJM2t1IJEEiEEvv,@function -_Z2f1IJM2t1IJEEiEEvv: # @_Z2f1IJM2t1IJEEiEEvv + .section .text._Z3f11IKDU65_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IKDU65_TnT_LS0_2EEvv,comdat + .weak _Z3f11IKDU65_TnT_LS0_2EEvv # -- Begin function _Z3f11IKDU65_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IKDU65_TnT_LS0_2EEvv,@function +_Z3f11IKDU65_TnT_LS0_2EEvv: # @_Z3f11IKDU65_TnT_LS0_2EEvv .Lfunc_begin133: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp260: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp261: .Lfunc_end133: - .size _Z2f1IJM2t1IJEEiEEvv, .Lfunc_end133-_Z2f1IJM2t1IJEEiEEvv + .size _Z3f11IKDU65_TnT_LS0_2EEvv, .Lfunc_end133-_Z3f11IKDU65_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJU9swiftcallFvvEEEvv,"axG",@progbits,_Z2f1IJU9swiftcallFvvEEEvv,comdat - .weak _Z2f1IJU9swiftcallFvvEEEvv # -- Begin function _Z2f1IJU9swiftcallFvvEEEvv - .p2align 4, 0x90 - .type _Z2f1IJU9swiftcallFvvEEEvv,@function -_Z2f1IJU9swiftcallFvvEEEvv: # @_Z2f1IJU9swiftcallFvvEEEvv + .section .text._Z2f1IJFv2t1IJEES1_EEEvv,"axG",@progbits,_Z2f1IJFv2t1IJEES1_EEEvv,comdat + .weak _Z2f1IJFv2t1IJEES1_EEEvv # -- Begin function _Z2f1IJFv2t1IJEES1_EEEvv + .p2align 4 + .type _Z2f1IJFv2t1IJEES1_EEEvv,@function +_Z2f1IJFv2t1IJEES1_EEEvv: # @_Z2f1IJFv2t1IJEES1_EEEvv .Lfunc_begin134: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp262: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp263: .Lfunc_end134: - .size _Z2f1IJU9swiftcallFvvEEEvv, .Lfunc_end134-_Z2f1IJU9swiftcallFvvEEEvv + .size _Z2f1IJFv2t1IJEES1_EEEvv, .Lfunc_end134-_Z2f1IJFv2t1IJEES1_EEEvv .cfi_endproc # -- End function - .text - .globl _ZN2t83memEv # -- Begin function _ZN2t83memEv - .p2align 4, 0x90 - .type _ZN2t83memEv,@function -_ZN2t83memEv: # @_ZN2t83memEv + .section .text._Z2f1IJM2t1IJEEiEEvv,"axG",@progbits,_Z2f1IJM2t1IJEEiEEvv,comdat + .weak _Z2f1IJM2t1IJEEiEEvv # -- Begin function _Z2f1IJM2t1IJEEiEEvv + .p2align 4 + .type _Z2f1IJM2t1IJEEiEEvv,@function +_Z2f1IJM2t1IJEEiEEvv: # @_Z2f1IJM2t1IJEEiEEvv .Lfunc_begin135: - .loc 0 329 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:329:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp - subq $16, %rsp - movq %rdi, -8(%rbp) .Ltmp264: - .loc 0 331 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:331:3 - callq _Z2f1IJZN2t83memEvE2t7EEvv - .loc 0 332 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:332:3 - callq _Z2f1IJM2t8FvvEEEvv - .loc 0 333 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:333:1 - addq $16, %rsp + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp265: .Lfunc_end135: - .size _ZN2t83memEv, .Lfunc_end135-_ZN2t83memEv + .size _Z2f1IJM2t1IJEEiEEvv, .Lfunc_end135-_Z2f1IJM2t1IJEEiEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJZN2t83memEvE2t7EEvv - .type _Z2f1IJZN2t83memEvE2t7EEvv,@function -_Z2f1IJZN2t83memEvE2t7EEvv: # @_Z2f1IJZN2t83memEvE2t7EEvv + .section .text._Z2f1IJU9swiftcallFvvEEEvv,"axG",@progbits,_Z2f1IJU9swiftcallFvvEEEvv,comdat + .weak _Z2f1IJU9swiftcallFvvEEEvv # -- Begin function _Z2f1IJU9swiftcallFvvEEEvv + .p2align 4 + .type _Z2f1IJU9swiftcallFvvEEEvv,@function +_Z2f1IJU9swiftcallFvvEEEvv: # @_Z2f1IJU9swiftcallFvvEEEvv .Lfunc_begin136: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp266: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp267: .Lfunc_end136: - .size _Z2f1IJZN2t83memEvE2t7EEvv, .Lfunc_end136-_Z2f1IJZN2t83memEvE2t7EEvv + .size _Z2f1IJU9swiftcallFvvEEEvv, .Lfunc_end136-_Z2f1IJU9swiftcallFvvEEEvv .cfi_endproc # -- End function - .section .text._Z2f1IJM2t8FvvEEEvv,"axG",@progbits,_Z2f1IJM2t8FvvEEEvv,comdat - .weak _Z2f1IJM2t8FvvEEEvv # -- Begin function _Z2f1IJM2t8FvvEEEvv - .p2align 4, 0x90 - .type _Z2f1IJM2t8FvvEEEvv,@function -_Z2f1IJM2t8FvvEEEvv: # @_Z2f1IJM2t8FvvEEEvv + .section .text._Z2f1IJFivEEEvv,"axG",@progbits,_Z2f1IJFivEEEvv,comdat + .weak _Z2f1IJFivEEEvv # -- Begin function _Z2f1IJFivEEEvv + .p2align 4 + .type _Z2f1IJFivEEEvv,@function +_Z2f1IJFivEEEvv: # @_Z2f1IJFivEEEvv .Lfunc_begin137: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp268: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp269: .Lfunc_end137: - .size _Z2f1IJM2t8FvvEEEvv, .Lfunc_end137-_Z2f1IJM2t8FvvEEEvv + .size _Z2f1IJFivEEEvv, .Lfunc_end137-_Z2f1IJFivEEEvv .cfi_endproc # -- End function - .type i,@object # @i - .data - .globl i - .p2align 2 -i: - .long 3 # 0x3 - .size i, 4 - - .type .L__const.main.L,@object # @__const.main.L - .section .rodata,"a",@progbits -.L__const.main.L: - .zero 1 - .size .L__const.main.L, 1 - - .section ".linker-options","e",@llvm_linker_options - .section .debug_abbrev,"",@progbits + .text + .p2align 4 # -- Begin function _Z3f10ILN2ns3$_0E0EEvv + .type _Z3f10ILN2ns3$_0E0EEvv,@function +_Z3f10ILN2ns3$_0E0EEvv: # @"_Z3f10ILN2ns3$_0E0EEvv" +.Lfunc_begin138: + .loc 0 185 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:185:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp270: + .loc 0 186 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:186:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp271: +.Lfunc_end138: + .size _Z3f10ILN2ns3$_0E0EEvv, .Lfunc_end138-_Z3f10ILN2ns3$_0E0EEvv + .cfi_endproc + # -- End function + .globl _ZN2t83memEv # -- Begin function _ZN2t83memEv + .p2align 4 + .type _ZN2t83memEv,@function +_ZN2t83memEv: # @_ZN2t83memEv +.Lfunc_begin139: + .loc 0 342 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:342:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp + subq $16, %rsp + movq %rdi, -8(%rbp) +.Ltmp272: + .loc 0 344 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:344:3 + callq _Z2f1IJZN2t83memEvE2t7EEvv + .loc 0 345 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:345:3 + callq _Z2f1IJM2t8FvvEEEvv + .loc 0 346 1 epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:346:1 + addq $16, %rsp + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp273: +.Lfunc_end139: + .size _ZN2t83memEv, .Lfunc_end139-_ZN2t83memEv + .cfi_endproc + # -- End function + .p2align 4 # -- Begin function _Z2f1IJZN2t83memEvE2t7EEvv + .type _Z2f1IJZN2t83memEvE2t7EEvv,@function +_Z2f1IJZN2t83memEvE2t7EEvv: # @_Z2f1IJZN2t83memEvE2t7EEvv +.Lfunc_begin140: + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp274: + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp275: +.Lfunc_end140: + .size _Z2f1IJZN2t83memEvE2t7EEvv, .Lfunc_end140-_Z2f1IJZN2t83memEvE2t7EEvv + .cfi_endproc + # -- End function + .section .text._Z2f1IJM2t8FvvEEEvv,"axG",@progbits,_Z2f1IJM2t8FvvEEEvv,comdat + .weak _Z2f1IJM2t8FvvEEEvv # -- Begin function _Z2f1IJM2t8FvvEEEvv + .p2align 4 + .type _Z2f1IJM2t8FvvEEEvv,@function +_Z2f1IJM2t8FvvEEEvv: # @_Z2f1IJM2t8FvvEEEvv +.Lfunc_begin141: + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp276: + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp277: +.Lfunc_end141: + .size _Z2f1IJM2t8FvvEEEvv, .Lfunc_end141-_Z2f1IJM2t8FvvEEEvv + .cfi_endproc + # -- End function + .text + .globl _ZN18complex_type_units2f1Ev # -- Begin function _ZN18complex_type_units2f1Ev + .p2align 4 + .type _ZN18complex_type_units2f1Ev,@function +_ZN18complex_type_units2f1Ev: # @_ZN18complex_type_units2f1Ev +.Lfunc_begin142: + .loc 0 360 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:360:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp278: + .loc 0 363 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:363:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp279: +.Lfunc_end142: + .size _ZN18complex_type_units2f1Ev, .Lfunc_end142-_ZN18complex_type_units2f1Ev + .cfi_endproc + # -- End function + .type i,@object # @i + .data + .globl i + .p2align 2, 0x0 +i: + .long 3 # 0x3 + .size i, 4 + + .type .L__const.main.L,@object # @__const.main.L + .section .rodata,"a",@progbits +.L__const.main.L: + .zero 1 + .size .L__const.main.L, 1 + + .file 2 "builds/release/lib/clang/22/include" "stdint.h" md5 0xa47a6a6c7fcbc62776237de6abac9549 + .file 3 "builds/release/bin/../include/c++/v1" "cstdint" + .file 4 "builds/release/lib/clang/22/include" "__stddef_max_align_t.h" md5 0x3c0a2f19d136d39aa835c737c7105def + .file 5 "builds/release/bin/../include/c++/v1/__cstddef" "max_align_t.h" + .section .debug_abbrev,"",@progbits .byte 1 # Abbreviation Code .byte 17 # DW_TAG_compile_unit .byte 1 # DW_CHILDREN_yes @@ -3779,6 +3912,15 @@ i: .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 9 # Abbreviation Code + .byte 40 # DW_TAG_enumerator + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 28 # DW_AT_const_value + .byte 13 # DW_FORM_sdata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 10 # Abbreviation Code .byte 4 # DW_TAG_enumeration_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type @@ -3795,15 +3937,6 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 10 # Abbreviation Code - .byte 40 # DW_TAG_enumerator - .byte 0 # DW_CHILDREN_no - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 28 # DW_AT_const_value - .byte 13 # DW_FORM_sdata - .byte 0 # EOM(1) - .byte 0 # EOM(2) .byte 11 # Abbreviation Code .byte 4 # DW_TAG_enumeration_type .byte 1 # DW_CHILDREN_yes @@ -3887,6 +4020,8 @@ i: .byte 17 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes + .byte 110 # DW_AT_linkage_name + .byte 37 # DW_FORM_strx1 .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 .byte 58 # DW_AT_decl_file @@ -3904,8 +4039,6 @@ i: .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 19 # Abbreviation Code @@ -3918,43 +4051,6 @@ i: .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 20 # Abbreviation Code - .byte 8 # DW_TAG_imported_declaration - .byte 0 # DW_CHILDREN_no - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 24 # DW_AT_import - .byte 19 # DW_FORM_ref4 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 21 # Abbreviation Code - .byte 22 # DW_TAG_typedef - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 5 # DW_FORM_data2 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 22 # Abbreviation Code - .byte 22 # DW_TAG_typedef - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 23 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -3975,7 +4071,7 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 24 # Abbreviation Code + .byte 21 # Abbreviation Code .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -3988,7 +4084,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 25 # Abbreviation Code + .byte 22 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4009,7 +4105,7 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 26 # Abbreviation Code + .byte 23 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4024,7 +4120,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 27 # Abbreviation Code + .byte 24 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4039,7 +4135,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 28 # Abbreviation Code + .byte 25 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4054,7 +4150,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 29 # Abbreviation Code + .byte 26 # Abbreviation Code .byte 58 # DW_TAG_imported_module .byte 0 # DW_CHILDREN_no .byte 58 # DW_AT_decl_file @@ -4065,7 +4161,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 30 # Abbreviation Code + .byte 27 # Abbreviation Code .byte 2 # DW_TAG_class_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention @@ -4078,7 +4174,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 31 # Abbreviation Code + .byte 28 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention @@ -4091,7 +4187,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 32 # Abbreviation Code + .byte 29 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4100,26 +4196,26 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 33 # Abbreviation Code + .byte 30 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 34 # Abbreviation Code + .byte 31 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 35 # Abbreviation Code + .byte 32 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 36 # Abbreviation Code + .byte 33 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4130,7 +4226,7 @@ i: .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 37 # Abbreviation Code + .byte 34 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4141,25 +4237,25 @@ i: .byte 13 # DW_FORM_sdata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 38 # Abbreviation Code + .byte 35 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata + .byte 13 # DW_FORM_sdata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 39 # Abbreviation Code + .byte 36 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 28 # DW_AT_const_value - .byte 13 # DW_FORM_sdata + .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 40 # Abbreviation Code + .byte 37 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4178,7 +4274,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 41 # Abbreviation Code + .byte 38 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4187,7 +4283,7 @@ i: .byte 24 # DW_FORM_exprloc .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 42 # Abbreviation Code + .byte 39 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4196,37 +4292,7 @@ i: .byte 10 # DW_FORM_block1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 43 # Abbreviation Code - .byte 48 # DW_TAG_template_value_parameter - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present - .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 44 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 1 # DW_CHILDREN_yes - .byte 17 # DW_AT_low_pc - .byte 27 # DW_FORM_addrx - .byte 18 # DW_AT_high_pc - .byte 6 # DW_FORM_data4 - .byte 64 # DW_AT_frame_base - .byte 24 # DW_FORM_exprloc - .byte 110 # DW_AT_linkage_name - .byte 37 # DW_FORM_strx1 - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 45 # Abbreviation Code + .byte 40 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4245,48 +4311,44 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 46 # Abbreviation Code + .byte 41 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 47 # Abbreviation Code + .byte 42 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 48 # Abbreviation Code + .byte 43 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 49 # Abbreviation Code - .byte 47 # DW_TAG_template_type_parameter + .byte 44 # Abbreviation Code + .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 + .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 50 # Abbreviation Code - .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack + .byte 45 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 51 # Abbreviation Code + .byte 46 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 110 # DW_AT_linkage_name @@ -4297,57 +4359,22 @@ i: .byte 11 # DW_FORM_data1 .byte 59 # DW_AT_decl_line .byte 11 # DW_FORM_data1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 .byte 60 # DW_AT_declaration .byte 25 # DW_FORM_flag_present .byte 63 # DW_AT_external .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 52 # Abbreviation Code - .byte 5 # DW_TAG_formal_parameter + .byte 47 # Abbreviation Code + .byte 15 # DW_TAG_pointer_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 53 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 1 # DW_CHILDREN_yes - .byte 110 # DW_AT_linkage_name - .byte 37 # DW_FORM_strx1 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 60 # DW_AT_declaration - .byte 25 # DW_FORM_flag_present - .byte 63 # DW_AT_external - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 54 # Abbreviation Code - .byte 47 # DW_TAG_template_type_parameter - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 55 # Abbreviation Code - .byte 15 # DW_TAG_pointer_type - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 56 # Abbreviation Code + .byte 48 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4362,7 +4389,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 57 # Abbreviation Code + .byte 49 # Abbreviation Code .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4375,12 +4402,45 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 58 # Abbreviation Code + .byte 50 # Abbreviation Code .byte 15 # DW_TAG_pointer_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 59 # Abbreviation Code + .byte 51 # Abbreviation Code + .byte 57 # DW_TAG_namespace + .byte 1 # DW_CHILDREN_yes + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .ascii "\211\001" # DW_AT_export_symbols + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 52 # Abbreviation Code + .byte 22 # DW_TAG_typedef + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 53 # Abbreviation Code + .byte 8 # DW_TAG_imported_declaration + .byte 0 # DW_CHILDREN_no + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 24 # DW_AT_import + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 54 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4393,7 +4453,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 60 # Abbreviation Code + .byte 55 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4410,7 +4470,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 61 # Abbreviation Code + .byte 56 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4433,7 +4493,40 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 62 # Abbreviation Code + .byte 57 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 13 # DW_FORM_sdata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 58 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 15 # DW_FORM_udata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 59 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 10 # DW_FORM_block1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 60 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4450,35 +4543,165 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) + .byte 61 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 17 # DW_AT_low_pc + .byte 27 # DW_FORM_addrx + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 64 # DW_AT_frame_base + .byte 24 # DW_FORM_exprloc + .byte 110 # DW_AT_linkage_name + .byte 38 # DW_FORM_strx2 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 62 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) .byte 63 # Abbreviation Code - .byte 16 # DW_TAG_reference_type + .byte 13 # DW_TAG_member .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 56 # DW_AT_data_member_location + .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 64 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 65 # Abbreviation Code + .byte 47 # DW_TAG_template_type_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 30 # DW_AT_default_value + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 66 # Abbreviation Code + .byte 2 # DW_TAG_class_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 67 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 68 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 30 # DW_AT_default_value + .byte 25 # DW_FORM_flag_present + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 69 # Abbreviation Code + .byte 22 # DW_TAG_typedef + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 70 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 0 # DW_CHILDREN_no + .byte 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 71 # Abbreviation Code + .byte 16 # DW_TAG_reference_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 72 # Abbreviation Code .byte 66 # DW_TAG_rvalue_reference_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 65 # Abbreviation Code + .byte 73 # Abbreviation Code .byte 38 # DW_TAG_const_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 66 # Abbreviation Code + .byte 74 # Abbreviation Code .byte 1 # DW_TAG_array_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 67 # Abbreviation Code + .byte 75 # Abbreviation Code .byte 33 # DW_TAG_subrange_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4487,7 +4710,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 68 # Abbreviation Code + .byte 76 # Abbreviation Code .byte 36 # DW_TAG_base_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4498,7 +4721,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 69 # Abbreviation Code + .byte 77 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name @@ -4507,41 +4730,41 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 70 # Abbreviation Code + .byte 78 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 71 # Abbreviation Code + .byte 79 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 72 # Abbreviation Code + .byte 80 # Abbreviation Code .byte 24 # DW_TAG_unspecified_parameters .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 73 # Abbreviation Code + .byte 81 # Abbreviation Code .byte 59 # DW_TAG_unspecified_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 + .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 74 # Abbreviation Code + .byte 82 # Abbreviation Code .byte 38 # DW_TAG_const_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 75 # Abbreviation Code + .byte 83 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 76 # Abbreviation Code + .byte 84 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 1 # DW_CHILDREN_yes .byte 54 # DW_AT_calling_convention @@ -4556,28 +4779,28 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 77 # Abbreviation Code + .byte 85 # Abbreviation Code .byte 33 # DW_TAG_subrange_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 78 # Abbreviation Code + .byte 86 # Abbreviation Code .byte 71 # DW_TAG_atomic_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 79 # Abbreviation Code + .byte 87 # Abbreviation Code .byte 53 # DW_TAG_volatile_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 80 # Abbreviation Code + .byte 88 # Abbreviation Code .byte 1 # DW_TAG_array_type .byte 1 # DW_CHILDREN_yes .ascii "\207B" # DW_AT_GNU_vector @@ -4586,12 +4809,12 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 81 # Abbreviation Code + .byte 89 # Abbreviation Code .byte 53 # DW_TAG_volatile_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 82 # Abbreviation Code + .byte 90 # Abbreviation Code .byte 31 # DW_TAG_ptr_to_member_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4600,35 +4823,35 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 83 # Abbreviation Code + .byte 91 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 119 # DW_AT_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 84 # Abbreviation Code + .byte 92 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 120 # DW_AT_rvalue_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 85 # Abbreviation Code + .byte 93 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 119 # DW_AT_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 86 # Abbreviation Code + .byte 94 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 120 # DW_AT_rvalue_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 87 # Abbreviation Code + .byte 95 # Abbreviation Code .byte 36 # DW_TAG_base_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4637,27 +4860,25 @@ i: .byte 11 # DW_FORM_data1 .byte 11 # DW_AT_byte_size .byte 11 # DW_FORM_data1 + .byte 13 # DW_AT_bit_size + .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 88 # Abbreviation Code + .byte 96 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 89 # Abbreviation Code - .byte 48 # DW_TAG_template_value_parameter + .byte 97 # Abbreviation Code + .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 90 # Abbreviation Code + .byte 98 # Abbreviation Code .byte 22 # DW_TAG_typedef .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4670,7 +4891,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 91 # Abbreviation Code + .byte 99 # Abbreviation Code .byte 13 # DW_TAG_member .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4685,15 +4906,6 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 92 # Abbreviation Code - .byte 19 # DW_TAG_structure_type - .byte 1 # DW_CHILDREN_yes - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 60 # DW_AT_declaration - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) .byte 0 # EOM(3) .section .debug_info,"",@progbits .Lcu_begin0: @@ -4703,7 +4915,7 @@ i: .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section - .byte 1 # Abbrev [1] 0xc:0x295d DW_TAG_compile_unit + .byte 1 # Abbrev [1] 0xc:0x29ba DW_TAG_compile_unit .byte 0 # DW_AT_producer .short 33 # DW_AT_language .byte 1 # DW_AT_name @@ -4719,7 +4931,7 @@ i: .long 54 # DW_AT_type # DW_AT_external .byte 0 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line + .byte 56 # DW_AT_decl_line .byte 2 # DW_AT_location .byte 161 .byte 0 @@ -4733,13 +4945,13 @@ i: .byte 7 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line + .byte 61 # DW_AT_decl_line .byte 6 # Abbrev [6] 0x44:0x3 DW_TAG_enumerator .byte 6 # DW_AT_name .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 7 # Abbrev [7] 0x48:0x2 DW_TAG_structure_type - .byte 254 # DW_AT_name + .byte 240 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark .byte 3 # Abbrev [3] 0x4b:0x4 DW_TAG_base_type @@ -4749,35 +4961,35 @@ i: .byte 8 # Abbrev [8] 0x4f:0x63 DW_TAG_namespace .byte 8 # DW_AT_name .byte 5 # Abbrev [5] 0x51:0x13 DW_TAG_enumeration_type - .long 75 # DW_AT_type + .long 54 # DW_AT_type .byte 12 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 6 # Abbrev [6] 0x5a:0x3 DW_TAG_enumerator + .byte 29 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x5a:0x3 DW_TAG_enumerator .byte 9 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x5d:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x5d:0x3 DW_TAG_enumerator .byte 10 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x60:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x60:0x3 DW_TAG_enumerator .byte 11 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 9 # Abbrev [9] 0x64:0x13 DW_TAG_enumeration_type + .byte 10 # Abbrev [10] 0x64:0x13 DW_TAG_enumeration_type .long 54 # DW_AT_type # DW_AT_enum_class .byte 13 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 28 # DW_AT_decl_line - .byte 10 # Abbrev [10] 0x6d:0x3 DW_TAG_enumerator + .byte 30 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x6d:0x3 DW_TAG_enumerator .byte 9 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 10 # Abbrev [10] 0x70:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x70:0x3 DW_TAG_enumerator .byte 10 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 10 # Abbrev [10] 0x73:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x73:0x3 DW_TAG_enumerator .byte 11 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark @@ -4786,23 +4998,23 @@ i: .byte 16 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 30 # DW_AT_decl_line + .byte 32 # DW_AT_decl_line .byte 6 # Abbrev [6] 0x80:0x4 DW_TAG_enumerator .byte 15 # DW_AT_name .ascii "\377\001" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 11 # Abbrev [11] 0x85:0x12 DW_TAG_enumeration_type - .long 75 # DW_AT_type + .long 54 # DW_AT_type .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 29 # DW_AT_decl_line - .byte 6 # Abbrev [6] 0x8d:0x3 DW_TAG_enumerator + .byte 31 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x8d:0x3 DW_TAG_enumerator .byte 17 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x90:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x90:0x3 DW_TAG_enumerator .byte 18 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x93:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x93:0x3 DW_TAG_enumerator .byte 19 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark @@ -4811,22 +5023,22 @@ i: .long .Lfunc_end100-.Lfunc_begin100 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 308 # DW_AT_linkage_name - .short 309 # DW_AT_name + .short 294 # DW_AT_linkage_name + .short 295 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line + .byte 28 # DW_AT_decl_line # DW_AT_external .byte 13 # Abbrev [13] 0xa5:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 307 # DW_AT_GNU_template_name + .short 293 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark .byte 7 # Abbrev [7] 0xaa:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 144 # DW_AT_name # DW_AT_declaration .byte 8 # Abbrev [8] 0xac:0x5 DW_TAG_namespace - .byte 165 # DW_AT_name + .byte 151 # DW_AT_name .byte 7 # Abbrev [7] 0xae:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 144 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark @@ -4839,7 +5051,7 @@ i: .byte 23 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 48 # DW_AT_decl_line + .byte 50 # DW_AT_decl_line .byte 15 # Abbrev [15] 0xbc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name @@ -4853,1645 +5065,1275 @@ i: .byte 21 # DW_AT_name .byte 2 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 14 # Abbrev [14] 0xce:0x13 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0xce:0x14 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention .byte 24 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 165 # DW_AT_decl_line - .byte 17 # Abbrev [17] 0xd4:0xc DW_TAG_subprogram - .byte 130 # DW_AT_name - .byte 0 # DW_AT_decl_file .byte 167 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0xd4:0xd DW_TAG_subprogram + .byte 81 # DW_AT_linkage_name + .byte 82 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 169 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 18 # Abbrev [18] 0xd8:0x2 DW_TAG_template_type_parameter + .byte 18 # Abbrev [18] 0xd9:0x2 DW_TAG_template_type_parameter .byte 20 # DW_AT_name - # DW_AT_default_value - .byte 19 # Abbrev [19] 0xda:0x5 DW_TAG_formal_parameter - .long 5915 # DW_AT_type + .byte 19 # Abbrev [19] 0xdb:0x5 DW_TAG_formal_parameter + .long 5528 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 8 # Abbrev [8] 0xe1:0xd0 DW_TAG_namespace - .byte 25 # DW_AT_name - .byte 20 # Abbrev [20] 0xe3:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 47 # DW_AT_decl_line - .long 433 # DW_AT_import - .byte 20 # Abbrev [20] 0xea:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 48 # DW_AT_decl_line - .long 453 # DW_AT_import - .byte 20 # Abbrev [20] 0xf1:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 49 # DW_AT_decl_line - .long 473 # DW_AT_import - .byte 20 # Abbrev [20] 0xf8:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .long 489 # DW_AT_import - .byte 20 # Abbrev [20] 0xff:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .long 509 # DW_AT_import - .byte 20 # Abbrev [20] 0x106:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 53 # DW_AT_decl_line - .long 517 # DW_AT_import - .byte 20 # Abbrev [20] 0x10d:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line - .long 525 # DW_AT_import - .byte 20 # Abbrev [20] 0x114:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 55 # DW_AT_decl_line - .long 533 # DW_AT_import - .byte 20 # Abbrev [20] 0x11b:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 57 # DW_AT_decl_line - .long 541 # DW_AT_import - .byte 20 # Abbrev [20] 0x122:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .long 557 # DW_AT_import - .byte 20 # Abbrev [20] 0x129:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line - .long 573 # DW_AT_import - .byte 20 # Abbrev [20] 0x130:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 60 # DW_AT_decl_line - .long 589 # DW_AT_import - .byte 20 # Abbrev [20] 0x137:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line - .long 605 # DW_AT_import - .byte 20 # Abbrev [20] 0x13e:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 63 # DW_AT_decl_line - .long 621 # DW_AT_import - .byte 20 # Abbrev [20] 0x145:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 65 # DW_AT_decl_line - .long 629 # DW_AT_import - .byte 20 # Abbrev [20] 0x14c:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 66 # DW_AT_decl_line - .long 645 # DW_AT_import - .byte 20 # Abbrev [20] 0x153:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 67 # DW_AT_decl_line - .long 665 # DW_AT_import - .byte 20 # Abbrev [20] 0x15a:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 68 # DW_AT_decl_line - .long 681 # DW_AT_import - .byte 20 # Abbrev [20] 0x161:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line - .long 701 # DW_AT_import - .byte 20 # Abbrev [20] 0x168:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 71 # DW_AT_decl_line - .long 709 # DW_AT_import - .byte 20 # Abbrev [20] 0x16f:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 72 # DW_AT_decl_line - .long 717 # DW_AT_import - .byte 20 # Abbrev [20] 0x176:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .long 725 # DW_AT_import - .byte 20 # Abbrev [20] 0x17d:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 75 # DW_AT_decl_line - .long 733 # DW_AT_import - .byte 20 # Abbrev [20] 0x184:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 76 # DW_AT_decl_line - .long 749 # DW_AT_import - .byte 20 # Abbrev [20] 0x18b:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 77 # DW_AT_decl_line - .long 765 # DW_AT_import - .byte 20 # Abbrev [20] 0x192:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 78 # DW_AT_decl_line - .long 781 # DW_AT_import - .byte 20 # Abbrev [20] 0x199:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line - .long 797 # DW_AT_import - .byte 20 # Abbrev [20] 0x1a0:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 81 # DW_AT_decl_line - .long 813 # DW_AT_import - .byte 21 # Abbrev [21] 0x1a7:0x9 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 121 # DW_AT_name - .byte 6 # DW_AT_decl_file - .short 280 # DW_AT_decl_line - .byte 0 # End Of Children Mark - .byte 22 # Abbrev [22] 0x1b1:0x8 DW_TAG_typedef - .long 441 # DW_AT_type - .byte 28 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 24 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1b9:0x8 DW_TAG_typedef - .long 449 # DW_AT_type - .byte 27 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 37 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1c1:0x4 DW_TAG_base_type - .byte 26 # DW_AT_name - .byte 6 # DW_AT_encoding - .byte 1 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1c5:0x8 DW_TAG_typedef - .long 461 # DW_AT_type - .byte 31 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 25 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1cd:0x8 DW_TAG_typedef - .long 469 # DW_AT_type - .byte 30 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 39 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1d5:0x4 DW_TAG_base_type - .byte 29 # DW_AT_name - .byte 5 # DW_AT_encoding - .byte 2 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1d9:0x8 DW_TAG_typedef - .long 481 # DW_AT_type - .byte 33 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1e1:0x8 DW_TAG_typedef - .long 54 # DW_AT_type - .byte 32 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1e9:0x8 DW_TAG_typedef - .long 497 # DW_AT_type - .byte 36 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1f1:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 35 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1f9:0x4 DW_TAG_base_type - .byte 34 # DW_AT_name - .byte 5 # DW_AT_encoding - .byte 8 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1fd:0x8 DW_TAG_typedef - .long 449 # DW_AT_type - .byte 37 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x205:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 38 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 60 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x20d:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 39 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 61 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x215:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 40 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x21d:0x8 DW_TAG_typedef - .long 549 # DW_AT_type - .byte 42 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 43 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x225:0x8 DW_TAG_typedef - .long 441 # DW_AT_type - .byte 41 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x22d:0x8 DW_TAG_typedef - .long 565 # DW_AT_type - .byte 44 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x235:0x8 DW_TAG_typedef - .long 461 # DW_AT_type - .byte 43 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x23d:0x8 DW_TAG_typedef - .long 581 # DW_AT_type - .byte 46 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 45 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x245:0x8 DW_TAG_typedef - .long 481 # DW_AT_type - .byte 45 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 56 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x24d:0x8 DW_TAG_typedef - .long 597 # DW_AT_type - .byte 48 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 46 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x255:0x8 DW_TAG_typedef - .long 497 # DW_AT_type - .byte 47 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x25d:0x8 DW_TAG_typedef - .long 613 # DW_AT_type - .byte 50 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 101 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x265:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 49 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 72 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x26d:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 51 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 87 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x275:0x8 DW_TAG_typedef - .long 637 # DW_AT_type - .byte 53 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 24 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x27d:0x8 DW_TAG_typedef - .long 178 # DW_AT_type - .byte 52 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 38 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x285:0x8 DW_TAG_typedef - .long 653 # DW_AT_type - .byte 56 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 25 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x28d:0x8 DW_TAG_typedef - .long 661 # DW_AT_type - .byte 55 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 40 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x295:0x4 DW_TAG_base_type - .byte 54 # DW_AT_name - .byte 7 # DW_AT_encoding - .byte 2 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x299:0x8 DW_TAG_typedef - .long 673 # DW_AT_type - .byte 58 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2a1:0x8 DW_TAG_typedef - .long 75 # DW_AT_type - .byte 57 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 42 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2a9:0x8 DW_TAG_typedef - .long 689 # DW_AT_type - .byte 61 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2b1:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 60 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 45 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x2b9:0x4 DW_TAG_base_type - .byte 59 # DW_AT_name - .byte 7 # DW_AT_encoding - .byte 8 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x2bd:0x8 DW_TAG_typedef - .long 178 # DW_AT_type - .byte 62 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 71 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2c5:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 63 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2cd:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 64 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 74 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2d5:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 65 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 75 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2dd:0x8 DW_TAG_typedef - .long 741 # DW_AT_type - .byte 67 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 49 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2e5:0x8 DW_TAG_typedef - .long 637 # DW_AT_type - .byte 66 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 53 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2ed:0x8 DW_TAG_typedef - .long 757 # DW_AT_type - .byte 69 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2f5:0x8 DW_TAG_typedef - .long 653 # DW_AT_type - .byte 68 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 55 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2fd:0x8 DW_TAG_typedef - .long 773 # DW_AT_type - .byte 71 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 51 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x305:0x8 DW_TAG_typedef - .long 673 # DW_AT_type - .byte 70 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 57 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x30d:0x8 DW_TAG_typedef - .long 789 # DW_AT_type - .byte 73 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x315:0x8 DW_TAG_typedef - .long 689 # DW_AT_type - .byte 72 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x31d:0x8 DW_TAG_typedef - .long 805 # DW_AT_type - .byte 75 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 102 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x325:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 74 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x32d:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 76 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 90 # DW_AT_decl_line - .byte 23 # Abbrev [23] 0x335:0x17 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xe2:0x17 DW_TAG_subprogram .byte 1 # DW_AT_low_pc .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 134 # DW_AT_linkage_name - .byte 135 # DW_AT_name + .byte 120 # DW_AT_linkage_name + .byte 121 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 142 # DW_AT_decl_line + .byte 144 # DW_AT_decl_line # DW_AT_external - .byte 24 # Abbrev [24] 0x341:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xee:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 142 # DW_AT_decl_line - .long 7195 # DW_AT_type + .byte 144 # DW_AT_decl_line + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark - .byte 25 # Abbrev [25] 0x34c:0x8a DW_TAG_subprogram + .byte 22 # Abbrev [22] 0xf9:0x8a DW_TAG_subprogram .byte 2 # DW_AT_low_pc .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 136 # DW_AT_name + .byte 122 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 182 # DW_AT_decl_line + .byte 190 # DW_AT_decl_line .long 54 # DW_AT_type # DW_AT_external - .byte 26 # Abbrev [26] 0x35b:0xb DW_TAG_variable + .byte 23 # Abbrev [23] 0x108:0xb DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .byte 194 # DW_AT_name + .byte 127 + .byte 180 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 183 # DW_AT_decl_line - .long 971 # DW_AT_type - .byte 27 # Abbrev [27] 0x366:0xc DW_TAG_variable + .byte 191 # DW_AT_decl_line + .long 376 # DW_AT_type + .byte 24 # Abbrev [24] 0x113:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 112 - .short 386 # DW_AT_name + .byte 126 + .short 385 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 184 # DW_AT_decl_line - .long 966 # DW_AT_type - .byte 27 # Abbrev [27] 0x372:0xc DW_TAG_variable + .byte 192 # DW_AT_decl_line + .long 371 # DW_AT_type + .byte 24 # Abbrev [24] 0x11f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 104 - .short 387 # DW_AT_name + .byte 125 + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 216 # DW_AT_decl_line - .long 7837 # DW_AT_type - .byte 27 # Abbrev [27] 0x37e:0xc DW_TAG_variable + .byte 224 # DW_AT_decl_line + .long 7963 # DW_AT_type + .byte 24 # Abbrev [24] 0x12b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 96 - .short 390 # DW_AT_name + .byte 124 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 231 # DW_AT_decl_line - .long 7310 # DW_AT_type - .byte 28 # Abbrev [28] 0x38a:0xd DW_TAG_variable + .byte 239 # DW_AT_decl_line + .long 7413 # DW_AT_type + .byte 25 # Abbrev [25] 0x137:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 88 - .short 391 # DW_AT_name + .byte 123 + .short 390 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 256 # DW_AT_decl_line - .long 3851 # DW_AT_type - .byte 28 # Abbrev [28] 0x397:0xd DW_TAG_variable + .short 264 # DW_AT_decl_line + .long 3243 # DW_AT_type + .byte 25 # Abbrev [25] 0x144:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 80 - .short 392 # DW_AT_name + .byte 122 + .short 391 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 291 # DW_AT_decl_line - .long 7853 # DW_AT_type - .byte 28 # Abbrev [28] 0x3a4:0xd DW_TAG_variable + .short 299 # DW_AT_decl_line + .long 7979 # DW_AT_type + .byte 25 # Abbrev [25] 0x151:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 72 - .short 394 # DW_AT_name + .byte 121 + .short 393 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 300 # DW_AT_decl_line + .short 308 # DW_AT_decl_line .long 206 # DW_AT_type - .byte 28 # Abbrev [28] 0x3b1:0xd DW_TAG_variable + .byte 25 # Abbrev [25] 0x15e:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 64 - .short 395 # DW_AT_name + .byte 120 + .short 394 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 321 # DW_AT_decl_line - .long 7862 # DW_AT_type - .byte 29 # Abbrev [29] 0x3be:0x8 DW_TAG_imported_module + .short 329 # DW_AT_decl_line + .long 7988 # DW_AT_type + .byte 26 # Abbrev [26] 0x16b:0x8 DW_TAG_imported_module .byte 0 # DW_AT_decl_file - .short 288 # DW_AT_decl_line + .short 296 # DW_AT_decl_line .long 79 # DW_AT_import - .byte 30 # Abbrev [30] 0x3c6:0x5 DW_TAG_class_type + .byte 27 # Abbrev [27] 0x173:0x5 DW_TAG_class_type .byte 5 # DW_AT_calling_convention .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 184 # DW_AT_decl_line - .byte 31 # Abbrev [31] 0x3cb:0x5 DW_TAG_structure_type + .byte 192 # DW_AT_decl_line + .byte 28 # Abbrev [28] 0x178:0x5 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 183 # DW_AT_decl_line - .byte 32 # Abbrev [32] 0x3d0:0x3 DW_TAG_structure_type - .short 295 # DW_AT_name + .byte 191 # DW_AT_decl_line + .byte 29 # Abbrev [29] 0x17d:0x3 DW_TAG_structure_type + .short 281 # DW_AT_name # DW_AT_declaration - .byte 7 # Abbrev [7] 0x3d3:0x2 DW_TAG_structure_type - .byte 133 # DW_AT_name + .byte 7 # Abbrev [7] 0x180:0x2 DW_TAG_structure_type + .byte 85 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x3d6:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x183:0x2d DW_TAG_subprogram .byte 3 # DW_AT_low_pc .long .Lfunc_end2-.Lfunc_begin2 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 137 # DW_AT_linkage_name - .byte 138 # DW_AT_name + .byte 123 # DW_AT_linkage_name + .byte 124 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x3e2:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x18f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7210 # DW_AT_type - .byte 27 # Abbrev [27] 0x3ee:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7313 # DW_AT_type + .byte 24 # Abbrev [24] 0x19b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7903 # DW_AT_type - .byte 33 # Abbrev [33] 0x3fa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x3fc:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8029 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a9:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x403:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x1b0:0x2d DW_TAG_subprogram .byte 4 # DW_AT_low_pc .long .Lfunc_end3-.Lfunc_begin3 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 139 # DW_AT_linkage_name - .byte 140 # DW_AT_name + .byte 125 # DW_AT_linkage_name + .byte 126 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x40f:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1bc:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 4516 # DW_AT_type - .byte 27 # Abbrev [27] 0x41b:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 3908 # DW_AT_type + .byte 24 # Abbrev [24] 0x1c8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7920 # DW_AT_type - .byte 33 # Abbrev [33] 0x427:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x429:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8046 # DW_AT_type + .byte 30 # Abbrev [30] 0x1d4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1d6:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x430:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x1dd:0x2d DW_TAG_subprogram .byte 5 # DW_AT_low_pc .long .Lfunc_end4-.Lfunc_begin4 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 141 # DW_AT_linkage_name - .byte 142 # DW_AT_name + .byte 127 # DW_AT_linkage_name + .byte 128 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x43c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1e9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7937 # DW_AT_type - .byte 27 # Abbrev [27] 0x448:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8063 # DW_AT_type + .byte 24 # Abbrev [24] 0x1f5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7953 # DW_AT_type - .byte 33 # Abbrev [33] 0x454:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x456:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8079 # DW_AT_type + .byte 30 # Abbrev [30] 0x201:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x203:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x45d:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x20a:0x2d DW_TAG_subprogram .byte 6 # DW_AT_low_pc .long .Lfunc_end5-.Lfunc_begin5 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 144 # DW_AT_linkage_name - .byte 145 # DW_AT_name + .byte 130 # DW_AT_linkage_name + .byte 131 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x469:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x216:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7970 # DW_AT_type - .byte 27 # Abbrev [27] 0x475:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8096 # DW_AT_type + .byte 24 # Abbrev [24] 0x222:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7986 # DW_AT_type - .byte 33 # Abbrev [33] 0x481:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x483:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8112 # DW_AT_type + .byte 30 # Abbrev [30] 0x22e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x230:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x48a:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x237:0x2d DW_TAG_subprogram .byte 7 # DW_AT_low_pc .long .Lfunc_end6-.Lfunc_begin6 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 146 # DW_AT_linkage_name - .byte 147 # DW_AT_name + .byte 132 # DW_AT_linkage_name + .byte 133 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x496:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x243:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8003 # DW_AT_type - .byte 27 # Abbrev [27] 0x4a2:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8129 # DW_AT_type + .byte 24 # Abbrev [24] 0x24f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8019 # DW_AT_type - .byte 33 # Abbrev [33] 0x4ae:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x4b0:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8145 # DW_AT_type + .byte 30 # Abbrev [30] 0x25b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25d:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x4b7:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x264:0x2d DW_TAG_subprogram .byte 8 # DW_AT_low_pc .long .Lfunc_end7-.Lfunc_begin7 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 148 # DW_AT_linkage_name - .byte 149 # DW_AT_name + .byte 134 # DW_AT_linkage_name + .byte 135 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x4c3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x270:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8036 # DW_AT_type - .byte 27 # Abbrev [27] 0x4cf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8162 # DW_AT_type + .byte 24 # Abbrev [24] 0x27c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8052 # DW_AT_type - .byte 33 # Abbrev [33] 0x4db:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x4dd:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8178 # DW_AT_type + .byte 30 # Abbrev [30] 0x288:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28a:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x4e4:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x291:0x2d DW_TAG_subprogram .byte 9 # DW_AT_low_pc .long .Lfunc_end8-.Lfunc_begin8 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 150 # DW_AT_linkage_name - .byte 151 # DW_AT_name + .byte 136 # DW_AT_linkage_name + .byte 137 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x4f0:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x29d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8069 # DW_AT_type - .byte 27 # Abbrev [27] 0x4fc:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8195 # DW_AT_type + .byte 24 # Abbrev [24] 0x2a9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8085 # DW_AT_type - .byte 33 # Abbrev [33] 0x508:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x50a:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8211 # DW_AT_type + .byte 30 # Abbrev [30] 0x2b5:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2b7:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x511:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x2be:0x2d DW_TAG_subprogram .byte 10 # DW_AT_low_pc .long .Lfunc_end9-.Lfunc_begin9 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 153 # DW_AT_linkage_name - .byte 154 # DW_AT_name + .byte 139 # DW_AT_linkage_name + .byte 140 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x51d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x2ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8102 # DW_AT_type - .byte 27 # Abbrev [27] 0x529:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8228 # DW_AT_type + .byte 24 # Abbrev [24] 0x2d6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8118 # DW_AT_type - .byte 33 # Abbrev [33] 0x535:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x537:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8244 # DW_AT_type + .byte 30 # Abbrev [30] 0x2e2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2e4:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x53e:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x2eb:0x2d DW_TAG_subprogram .byte 11 # DW_AT_low_pc .long .Lfunc_end10-.Lfunc_begin10 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 156 # DW_AT_linkage_name - .byte 157 # DW_AT_name + .byte 142 # DW_AT_linkage_name + .byte 143 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x54a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x2f7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8135 # DW_AT_type - .byte 27 # Abbrev [27] 0x556:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8261 # DW_AT_type + .byte 24 # Abbrev [24] 0x303:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8151 # DW_AT_type - .byte 33 # Abbrev [33] 0x562:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x564:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8277 # DW_AT_type + .byte 30 # Abbrev [30] 0x30f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x311:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x56b:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x318:0x2d DW_TAG_subprogram .byte 12 # DW_AT_low_pc .long .Lfunc_end11-.Lfunc_begin11 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 159 # DW_AT_linkage_name - .byte 160 # DW_AT_name + .byte 145 # DW_AT_linkage_name + .byte 146 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x577:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x324:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8168 # DW_AT_type - .byte 27 # Abbrev [27] 0x583:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8294 # DW_AT_type + .byte 24 # Abbrev [24] 0x330:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8184 # DW_AT_type - .byte 33 # Abbrev [33] 0x58f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x591:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8310 # DW_AT_type + .byte 30 # Abbrev [30] 0x33c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x33e:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x598:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x345:0x2d DW_TAG_subprogram .byte 13 # DW_AT_low_pc .long .Lfunc_end12-.Lfunc_begin12 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 161 # DW_AT_linkage_name - .byte 162 # DW_AT_name + .byte 147 # DW_AT_linkage_name + .byte 148 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5a4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x351:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8201 # DW_AT_type - .byte 27 # Abbrev [27] 0x5b0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8327 # DW_AT_type + .byte 24 # Abbrev [24] 0x35d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8217 # DW_AT_type - .byte 33 # Abbrev [33] 0x5bc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x5be:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8343 # DW_AT_type + .byte 30 # Abbrev [30] 0x369:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x36b:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x5c5:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x372:0x2d DW_TAG_subprogram .byte 14 # DW_AT_low_pc .long .Lfunc_end13-.Lfunc_begin13 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 163 # DW_AT_linkage_name - .byte 164 # DW_AT_name + .byte 149 # DW_AT_linkage_name + .byte 150 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5d1:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x37e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8234 # DW_AT_type - .byte 27 # Abbrev [27] 0x5dd:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8360 # DW_AT_type + .byte 24 # Abbrev [24] 0x38a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8250 # DW_AT_type - .byte 33 # Abbrev [33] 0x5e9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x5eb:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8376 # DW_AT_type + .byte 30 # Abbrev [30] 0x396:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x398:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x5f2:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x39f:0x2d DW_TAG_subprogram .byte 15 # DW_AT_low_pc .long .Lfunc_end14-.Lfunc_begin14 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 166 # DW_AT_linkage_name - .byte 167 # DW_AT_name + .byte 152 # DW_AT_linkage_name + .byte 153 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5fe:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x3ab:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8267 # DW_AT_type - .byte 27 # Abbrev [27] 0x60a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8393 # DW_AT_type + .byte 24 # Abbrev [24] 0x3b7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8283 # DW_AT_type - .byte 33 # Abbrev [33] 0x616:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x618:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8409 # DW_AT_type + .byte 30 # Abbrev [30] 0x3c3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x3c5:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x61f:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x3cc:0x2d DW_TAG_subprogram .byte 16 # DW_AT_low_pc .long .Lfunc_end15-.Lfunc_begin15 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 169 # DW_AT_linkage_name - .byte 170 # DW_AT_name + .byte 155 # DW_AT_linkage_name + .byte 156 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x62b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x3d8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8300 # DW_AT_type - .byte 27 # Abbrev [27] 0x637:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8426 # DW_AT_type + .byte 24 # Abbrev [24] 0x3e4:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8316 # DW_AT_type - .byte 33 # Abbrev [33] 0x643:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x645:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8442 # DW_AT_type + .byte 30 # Abbrev [30] 0x3f0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x3f2:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x64c:0x32 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x3f9:0x32 DW_TAG_subprogram .byte 17 # DW_AT_low_pc .long .Lfunc_end16-.Lfunc_begin16 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 171 # DW_AT_linkage_name - .byte 172 # DW_AT_name + .byte 157 # DW_AT_linkage_name + .byte 158 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x658:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x405:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8333 # DW_AT_type - .byte 27 # Abbrev [27] 0x664:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8459 # DW_AT_type + .byte 24 # Abbrev [24] 0x411:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8354 # DW_AT_type - .byte 33 # Abbrev [33] 0x670:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x672:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8480 # DW_AT_type + .byte 30 # Abbrev [30] 0x41d:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x41f:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x677:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x424:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x67e:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x42b:0x2d DW_TAG_subprogram .byte 18 # DW_AT_low_pc .long .Lfunc_end17-.Lfunc_begin17 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 173 # DW_AT_linkage_name - .byte 174 # DW_AT_name + .byte 159 # DW_AT_linkage_name + .byte 160 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x68a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x437:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7422 # DW_AT_type - .byte 27 # Abbrev [27] 0x696:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7524 # DW_AT_type + .byte 24 # Abbrev [24] 0x443:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8376 # DW_AT_type - .byte 33 # Abbrev [33] 0x6a2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6a4:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8502 # DW_AT_type + .byte 30 # Abbrev [30] 0x44f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x451:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x6ab:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x458:0x2d DW_TAG_subprogram .byte 19 # DW_AT_low_pc .long .Lfunc_end18-.Lfunc_begin18 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 175 # DW_AT_linkage_name - .byte 176 # DW_AT_name + .byte 161 # DW_AT_linkage_name + .byte 162 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x6b7:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x464:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8393 # DW_AT_type - .byte 27 # Abbrev [27] 0x6c3:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8519 # DW_AT_type + .byte 24 # Abbrev [24] 0x470:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8409 # DW_AT_type - .byte 33 # Abbrev [33] 0x6cf:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6d1:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8535 # DW_AT_type + .byte 30 # Abbrev [30] 0x47c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x47e:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x6d8:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x485:0x2d DW_TAG_subprogram .byte 20 # DW_AT_low_pc .long .Lfunc_end19-.Lfunc_begin19 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 177 # DW_AT_linkage_name - .byte 178 # DW_AT_name + .byte 163 # DW_AT_linkage_name + .byte 164 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x6e4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x491:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8426 # DW_AT_type - .byte 27 # Abbrev [27] 0x6f0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8552 # DW_AT_type + .byte 24 # Abbrev [24] 0x49d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8442 # DW_AT_type - .byte 33 # Abbrev [33] 0x6fc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6fe:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8568 # DW_AT_type + .byte 30 # Abbrev [30] 0x4a9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x4ab:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x705:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x4b2:0x2d DW_TAG_subprogram .byte 21 # DW_AT_low_pc .long .Lfunc_end20-.Lfunc_begin20 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 179 # DW_AT_linkage_name - .byte 180 # DW_AT_name + .byte 165 # DW_AT_linkage_name + .byte 166 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x711:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x4be:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8459 # DW_AT_type - .byte 27 # Abbrev [27] 0x71d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8585 # DW_AT_type + .byte 24 # Abbrev [24] 0x4ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8475 # DW_AT_type - .byte 33 # Abbrev [33] 0x729:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x72b:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8601 # DW_AT_type + .byte 30 # Abbrev [30] 0x4d6:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x4d8:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x732:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x4df:0x2d DW_TAG_subprogram .byte 22 # DW_AT_low_pc .long .Lfunc_end21-.Lfunc_begin21 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 182 # DW_AT_linkage_name - .byte 183 # DW_AT_name + .byte 168 # DW_AT_linkage_name + .byte 169 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x73e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x4eb:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8492 # DW_AT_type - .byte 27 # Abbrev [27] 0x74a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8618 # DW_AT_type + .byte 24 # Abbrev [24] 0x4f7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8508 # DW_AT_type - .byte 33 # Abbrev [33] 0x756:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x758:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8634 # DW_AT_type + .byte 30 # Abbrev [30] 0x503:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x505:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x75f:0x29 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x50c:0x29 DW_TAG_subprogram .byte 23 # DW_AT_low_pc .long .Lfunc_end22-.Lfunc_begin22 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 184 # DW_AT_linkage_name - .byte 185 # DW_AT_name + .byte 170 # DW_AT_linkage_name + .byte 171 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x76b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x518:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8525 # DW_AT_type - .byte 27 # Abbrev [27] 0x777:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8651 # DW_AT_type + .byte 24 # Abbrev [24] 0x524:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8537 # DW_AT_type - .byte 33 # Abbrev [33] 0x783:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x785:0x1 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8663 # DW_AT_type + .byte 30 # Abbrev [30] 0x530:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x532:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x788:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x535:0x2d DW_TAG_subprogram .byte 24 # DW_AT_low_pc .long .Lfunc_end23-.Lfunc_begin23 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 188 # DW_AT_linkage_name - .byte 189 # DW_AT_name + .byte 174 # DW_AT_linkage_name + .byte 175 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x794:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x541:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8550 # DW_AT_type - .byte 27 # Abbrev [27] 0x7a0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8676 # DW_AT_type + .byte 24 # Abbrev [24] 0x54d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8566 # DW_AT_type - .byte 33 # Abbrev [33] 0x7ac:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x7ae:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8692 # DW_AT_type + .byte 30 # Abbrev [30] 0x559:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x55b:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7b5:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x562:0x2d DW_TAG_subprogram .byte 25 # DW_AT_low_pc .long .Lfunc_end24-.Lfunc_begin24 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 190 # DW_AT_linkage_name - .byte 191 # DW_AT_name + .byte 176 # DW_AT_linkage_name + .byte 177 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x7c1:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x56e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8583 # DW_AT_type - .byte 27 # Abbrev [27] 0x7cd:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8709 # DW_AT_type + .byte 24 # Abbrev [24] 0x57a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8599 # DW_AT_type - .byte 33 # Abbrev [33] 0x7d9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x7db:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8725 # DW_AT_type + .byte 30 # Abbrev [30] 0x586:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x588:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7e2:0x1b DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x58f:0x1b DW_TAG_subprogram .byte 26 # DW_AT_low_pc .long .Lfunc_end25-.Lfunc_begin25 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 192 # DW_AT_linkage_name - .byte 193 # DW_AT_name + .byte 178 # DW_AT_linkage_name + .byte 179 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 38 # DW_AT_decl_line + .byte 40 # DW_AT_decl_line # DW_AT_external - .byte 36 # Abbrev [36] 0x7ee:0x7 DW_TAG_template_value_parameter + .byte 33 # Abbrev [33] 0x59b:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 37 # Abbrev [37] 0x7f5:0x7 DW_TAG_template_value_parameter + .byte 34 # Abbrev [34] 0x5a2:0x7 DW_TAG_template_value_parameter .long 54 # DW_AT_type .byte 3 # DW_AT_name .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7fd:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5aa:0x22 DW_TAG_subprogram .byte 27 # DW_AT_low_pc .long .Lfunc_end26-.Lfunc_begin26 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 195 # DW_AT_linkage_name - .byte 196 # DW_AT_name + .byte 181 # DW_AT_linkage_name + .byte 182 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x809:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5b6:0x6 DW_TAG_template_type_parameter .long 81 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x80f:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x811:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x5bc:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x5be:0x6 DW_TAG_template_value_parameter .long 81 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x817:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x5c4:0x6 DW_TAG_template_value_parameter .long 81 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x81f:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5cc:0x22 DW_TAG_subprogram .byte 28 # DW_AT_low_pc .long .Lfunc_end27-.Lfunc_begin27 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 197 # DW_AT_linkage_name - .byte 198 # DW_AT_name + .byte 183 # DW_AT_linkage_name + .byte 184 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x82b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5d8:0x6 DW_TAG_template_type_parameter .long 100 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x831:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x833:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x5de:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x5e0:0x6 DW_TAG_template_value_parameter .long 100 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x839:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x5e6:0x6 DW_TAG_template_value_parameter .long 100 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x841:0x1d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5ee:0x1d DW_TAG_subprogram .byte 29 # DW_AT_low_pc .long .Lfunc_end28-.Lfunc_begin28 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 199 # DW_AT_linkage_name - .byte 200 # DW_AT_name + .byte 185 # DW_AT_linkage_name + .byte 186 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x84d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5fa:0x6 DW_TAG_template_type_parameter .long 119 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x853:0xa DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x855:0x7 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x600:0xa DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x602:0x7 DW_TAG_template_value_parameter .long 119 # DW_AT_type .ascii "\377\001" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0x85e:0x22 DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x60b:0x22 DW_TAG_subprogram .byte 30 # DW_AT_low_pc .long .Lfunc_end29-.Lfunc_begin29 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 201 # DW_AT_linkage_name - .byte 202 # DW_AT_name + .byte 187 # DW_AT_linkage_name + .byte 188 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x86a:0x6 DW_TAG_template_type_parameter + .byte 43 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x617:0x6 DW_TAG_template_type_parameter .long 133 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x870:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x872:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x61d:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x61f:0x6 DW_TAG_template_value_parameter .long 133 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x878:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x625:0x6 DW_TAG_template_value_parameter .long 133 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0x880:0x1c DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x62d:0x1c DW_TAG_subprogram .byte 31 # DW_AT_low_pc .long .Lfunc_end30-.Lfunc_begin30 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 203 # DW_AT_linkage_name - .byte 204 # DW_AT_name + .byte 189 # DW_AT_linkage_name + .byte 190 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x88c:0x6 DW_TAG_template_type_parameter + .byte 43 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x639:0x6 DW_TAG_template_type_parameter .long 59 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x892:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x894:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x63f:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x641:0x6 DW_TAG_template_value_parameter .long 59 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x89c:0x1f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x649:0x1f DW_TAG_subprogram .byte 32 # DW_AT_low_pc .long .Lfunc_end31-.Lfunc_begin31 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 205 # DW_AT_linkage_name - .byte 206 # DW_AT_name + .byte 191 # DW_AT_linkage_name + .byte 192 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8a8:0x6 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 15 # Abbrev [15] 0x655:0x6 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8ae:0xc DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 41 # Abbrev [41] 0x8b0:0x9 DW_TAG_template_value_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x65b:0xc DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 38 # Abbrev [38] 0x65d:0x9 DW_TAG_template_value_parameter + .long 7328 # DW_AT_type .byte 3 # DW_AT_location .byte 161 .byte 0 .byte 159 .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8bb:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x668:0x1c DW_TAG_subprogram .byte 33 # DW_AT_low_pc .long .Lfunc_end32-.Lfunc_begin32 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 207 # DW_AT_linkage_name - .byte 208 # DW_AT_name + .byte 193 # DW_AT_linkage_name + .byte 194 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8c7:0x6 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 15 # Abbrev [15] 0x674:0x6 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8cd:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x8cf:0x6 DW_TAG_template_value_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x67a:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x67c:0x6 DW_TAG_template_value_parameter + .long 7328 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8d7:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x684:0x1c DW_TAG_subprogram .byte 34 # DW_AT_low_pc .long .Lfunc_end33-.Lfunc_begin33 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 209 # DW_AT_linkage_name - .byte 210 # DW_AT_name + .byte 195 # DW_AT_linkage_name + .byte 196 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8e3:0x6 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 15 # Abbrev [15] 0x690:0x6 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8e9:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x8eb:0x6 DW_TAG_template_value_parameter - .long 697 # DW_AT_type + .byte 30 # Abbrev [30] 0x696:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x698:0x6 DW_TAG_template_value_parameter + .long 4793 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8f3:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6a0:0x1c DW_TAG_subprogram .byte 35 # DW_AT_low_pc .long .Lfunc_end34-.Lfunc_begin34 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 211 # DW_AT_linkage_name - .byte 212 # DW_AT_name + .byte 197 # DW_AT_linkage_name + .byte 198 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8ff:0x6 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 15 # Abbrev [15] 0x6ac:0x6 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x905:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x907:0x6 DW_TAG_template_value_parameter - .long 7195 # DW_AT_type + .byte 30 # Abbrev [30] 0x6b2:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x6b4:0x6 DW_TAG_template_value_parameter + .long 7298 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x90f:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6bc:0x1c DW_TAG_subprogram .byte 36 # DW_AT_low_pc .long .Lfunc_end35-.Lfunc_begin35 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 213 # DW_AT_linkage_name - .byte 214 # DW_AT_name + .byte 199 # DW_AT_linkage_name + .byte 200 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x91b:0x6 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 15 # Abbrev [15] 0x6c8:0x6 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x921:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x923:0x6 DW_TAG_template_value_parameter - .long 505 # DW_AT_type + .byte 30 # Abbrev [30] 0x6ce:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x6d0:0x6 DW_TAG_template_value_parameter + .long 7072 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x92b:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6d8:0x1c DW_TAG_subprogram .byte 37 # DW_AT_low_pc .long .Lfunc_end36-.Lfunc_begin36 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 215 # DW_AT_linkage_name - .byte 216 # DW_AT_name + .byte 201 # DW_AT_linkage_name + .byte 202 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x937:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x6e4:0x6 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x93d:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x93f:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x6ea:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x6ec:0x6 DW_TAG_template_value_parameter .long 75 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x947:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6f4:0x1c DW_TAG_subprogram .byte 38 # DW_AT_low_pc .long .Lfunc_end37-.Lfunc_begin37 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 217 # DW_AT_linkage_name - .byte 218 # DW_AT_name + .byte 203 # DW_AT_linkage_name + .byte 204 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x953:0x6 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 15 # Abbrev [15] 0x700:0x6 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x959:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x95b:0x6 DW_TAG_template_value_parameter - .long 469 # DW_AT_type + .byte 30 # Abbrev [30] 0x706:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x708:0x6 DW_TAG_template_value_parameter + .long 7052 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x963:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x710:0x1c DW_TAG_subprogram .byte 39 # DW_AT_low_pc .long .Lfunc_end38-.Lfunc_begin38 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 219 # DW_AT_linkage_name - .byte 220 # DW_AT_name + .byte 205 # DW_AT_linkage_name + .byte 206 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x96f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x71c:0x6 DW_TAG_template_type_parameter .long 178 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x975:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x977:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x722:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x724:0x6 DW_TAG_template_value_parameter .long 178 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x97f:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x72c:0x1c DW_TAG_subprogram .byte 40 # DW_AT_low_pc .long .Lfunc_end39-.Lfunc_begin39 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 221 # DW_AT_linkage_name - .byte 222 # DW_AT_name + .byte 207 # DW_AT_linkage_name + .byte 208 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x98b:0x6 DW_TAG_template_type_parameter - .long 449 # DW_AT_type + .byte 15 # Abbrev [15] 0x738:0x6 DW_TAG_template_type_parameter + .long 7040 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x991:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x993:0x6 DW_TAG_template_value_parameter - .long 449 # DW_AT_type + .byte 30 # Abbrev [30] 0x73e:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x740:0x6 DW_TAG_template_value_parameter + .long 7040 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x99b:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x748:0x22 DW_TAG_subprogram .byte 41 # DW_AT_low_pc .long .Lfunc_end40-.Lfunc_begin40 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 223 # DW_AT_linkage_name - .byte 224 # DW_AT_name + .byte 209 # DW_AT_linkage_name + .byte 210 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x9a7:0x6 DW_TAG_template_type_parameter - .long 661 # DW_AT_type + .byte 15 # Abbrev [15] 0x754:0x6 DW_TAG_template_type_parameter + .long 7093 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x9ad:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x9af:0x6 DW_TAG_template_value_parameter - .long 661 # DW_AT_type + .byte 30 # Abbrev [30] 0x75a:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x75c:0x6 DW_TAG_template_value_parameter + .long 7093 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x9b5:0x6 DW_TAG_template_value_parameter - .long 661 # DW_AT_type + .byte 36 # Abbrev [36] 0x762:0x6 DW_TAG_template_value_parameter + .long 7093 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x9bd:0x5a DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x76a:0x5a DW_TAG_subprogram .byte 42 # DW_AT_low_pc .long .Lfunc_end41-.Lfunc_begin41 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 226 # DW_AT_linkage_name - .byte 227 # DW_AT_name + .byte 212 # DW_AT_linkage_name + .byte 213 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x9c9:0x6 DW_TAG_template_type_parameter - .long 7270 # DW_AT_type + .byte 15 # Abbrev [15] 0x776:0x6 DW_TAG_template_type_parameter + .long 7373 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x9cf:0x47 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x9d1:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 30 # Abbrev [30] 0x77c:0x47 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x77e:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 0 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9d7:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x784:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9dd:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x78a:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 6 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9e3:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x790:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 7 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9e9:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x796:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 13 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9ef:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x79c:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 14 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9f5:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7a2:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 31 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9fb:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7a8:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 32 # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa01:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7ae:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 33 # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa07:0x7 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7b4:0x7 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .asciz "\377" # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa0e:0x7 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7bb:0x7 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .ascii "\200\177" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa17:0x2c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x7c4:0x2c DW_TAG_subprogram .byte 43 # DW_AT_low_pc .long .Lfunc_end42-.Lfunc_begin42 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 229 # DW_AT_linkage_name - .byte 230 # DW_AT_name + .byte 215 # DW_AT_linkage_name + .byte 216 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0xa23:0x6 DW_TAG_template_type_parameter - .long 7274 # DW_AT_type + .byte 15 # Abbrev [15] 0x7d0:0x6 DW_TAG_template_type_parameter + .long 7377 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0xa29:0x19 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 42 # Abbrev [42] 0xa2b:0x16 DW_TAG_template_value_parameter - .long 7274 # DW_AT_type + .byte 30 # Abbrev [30] 0x7d6:0x19 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 39 # Abbrev [39] 0x7d8:0x16 DW_TAG_template_value_parameter + .long 7377 # DW_AT_type .byte 16 # DW_AT_const_value .byte 254 .byte 255 @@ -6511,5288 +6353,5721 @@ i: .byte 0 .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa43:0x19 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x7f0:0x19 DW_TAG_subprogram .byte 44 # DW_AT_low_pc .long .Lfunc_end43-.Lfunc_begin43 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 231 # DW_AT_linkage_name - .byte 232 # DW_AT_name + .byte 217 # DW_AT_linkage_name + .byte 218 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line + .byte 46 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0xa4f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x7fc:0x6 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 20 # DW_AT_name - .byte 43 # Abbrev [43] 0xa55:0x6 DW_TAG_template_value_parameter + .byte 36 # Abbrev [36] 0x802:0x6 DW_TAG_template_value_parameter .long 75 # DW_AT_type - # DW_AT_default_value .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa5c:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x809:0x2d DW_TAG_subprogram .byte 45 # DW_AT_low_pc .long .Lfunc_end44-.Lfunc_begin44 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 233 # DW_AT_linkage_name - .byte 234 # DW_AT_name + .byte 219 # DW_AT_linkage_name + .byte 220 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xa68:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x815:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8616 # DW_AT_type - .byte 27 # Abbrev [27] 0xa74:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8742 # DW_AT_type + .byte 24 # Abbrev [24] 0x821:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8632 # DW_AT_type - .byte 33 # Abbrev [33] 0xa80:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xa82:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8758 # DW_AT_type + .byte 30 # Abbrev [30] 0x82d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x82f:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa89:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x836:0x2d DW_TAG_subprogram .byte 46 # DW_AT_low_pc .long .Lfunc_end45-.Lfunc_begin45 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 236 # DW_AT_linkage_name - .byte 237 # DW_AT_name + .byte 222 # DW_AT_linkage_name + .byte 223 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xa95:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x842:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8649 # DW_AT_type - .byte 27 # Abbrev [27] 0xaa1:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8775 # DW_AT_type + .byte 24 # Abbrev [24] 0x84e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8665 # DW_AT_type - .byte 33 # Abbrev [33] 0xaad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xaaf:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8791 # DW_AT_type + .byte 30 # Abbrev [30] 0x85a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x85c:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0xab6:0x2d DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x863:0x2d DW_TAG_subprogram .byte 47 # DW_AT_low_pc .long .Lfunc_end46-.Lfunc_begin46 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 238 # DW_AT_linkage_name - .byte 239 # DW_AT_name + .byte 224 # DW_AT_linkage_name + .byte 225 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xac2:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x86f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7516 # DW_AT_type - .byte 27 # Abbrev [27] 0xace:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7618 # DW_AT_type + .byte 24 # Abbrev [24] 0x87b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8682 # DW_AT_type - .byte 33 # Abbrev [33] 0xada:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xadc:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8808 # DW_AT_type + .byte 30 # Abbrev [30] 0x887:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x889:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0xae3:0x2d DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x890:0x2d DW_TAG_subprogram .byte 48 # DW_AT_low_pc .long .Lfunc_end47-.Lfunc_begin47 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 242 # DW_AT_linkage_name - .byte 243 # DW_AT_name + .byte 228 # DW_AT_linkage_name + .byte 229 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xaef:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x89c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8699 # DW_AT_type - .byte 27 # Abbrev [27] 0xafb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8825 # DW_AT_type + .byte 24 # Abbrev [24] 0x8a8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8715 # DW_AT_type - .byte 33 # Abbrev [33] 0xb07:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb09:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8841 # DW_AT_type + .byte 30 # Abbrev [30] 0x8b4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x8b6:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb10:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x8bd:0x2d DW_TAG_subprogram .byte 49 # DW_AT_low_pc .long .Lfunc_end48-.Lfunc_begin48 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 244 # DW_AT_linkage_name - .byte 245 # DW_AT_name + .byte 230 # DW_AT_linkage_name + .byte 231 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb1c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x8c9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8732 # DW_AT_type - .byte 27 # Abbrev [27] 0xb28:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8858 # DW_AT_type + .byte 24 # Abbrev [24] 0x8d5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8748 # DW_AT_type - .byte 33 # Abbrev [33] 0xb34:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb36:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8874 # DW_AT_type + .byte 30 # Abbrev [30] 0x8e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x8e3:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb3d:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x8ea:0x2d DW_TAG_subprogram .byte 50 # DW_AT_low_pc .long .Lfunc_end49-.Lfunc_begin49 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 246 # DW_AT_linkage_name - .byte 247 # DW_AT_name + .byte 232 # DW_AT_linkage_name + .byte 233 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb49:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x8f6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8765 # DW_AT_type - .byte 27 # Abbrev [27] 0xb55:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8891 # DW_AT_type + .byte 24 # Abbrev [24] 0x902:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8781 # DW_AT_type - .byte 33 # Abbrev [33] 0xb61:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb63:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8907 # DW_AT_type + .byte 30 # Abbrev [30] 0x90e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x910:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb6a:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x917:0x2d DW_TAG_subprogram .byte 51 # DW_AT_low_pc .long .Lfunc_end50-.Lfunc_begin50 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 248 # DW_AT_linkage_name - .byte 249 # DW_AT_name + .byte 234 # DW_AT_linkage_name + .byte 235 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb76:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x923:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8798 # DW_AT_type - .byte 27 # Abbrev [27] 0xb82:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8924 # DW_AT_type + .byte 24 # Abbrev [24] 0x92f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8814 # DW_AT_type - .byte 33 # Abbrev [33] 0xb8e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb90:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8940 # DW_AT_type + .byte 30 # Abbrev [30] 0x93b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x93d:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb97:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x944:0x2d DW_TAG_subprogram .byte 52 # DW_AT_low_pc .long .Lfunc_end51-.Lfunc_begin51 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 250 # DW_AT_linkage_name - .byte 251 # DW_AT_name + .byte 236 # DW_AT_linkage_name + .byte 237 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xba3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x950:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8831 # DW_AT_type - .byte 27 # Abbrev [27] 0xbaf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8957 # DW_AT_type + .byte 24 # Abbrev [24] 0x95c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8847 # DW_AT_type - .byte 33 # Abbrev [33] 0xbbb:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xbbd:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8973 # DW_AT_type + .byte 30 # Abbrev [30] 0x968:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x96a:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xbc4:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x971:0x2d DW_TAG_subprogram .byte 53 # DW_AT_low_pc .long .Lfunc_end52-.Lfunc_begin52 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 252 # DW_AT_linkage_name - .byte 253 # DW_AT_name + .byte 238 # DW_AT_linkage_name + .byte 239 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xbd0:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x97d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8864 # DW_AT_type - .byte 27 # Abbrev [27] 0xbdc:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8990 # DW_AT_type + .byte 24 # Abbrev [24] 0x989:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8880 # DW_AT_type - .byte 33 # Abbrev [33] 0xbe8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xbea:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9006 # DW_AT_type + .byte 30 # Abbrev [30] 0x995:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x997:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 44 # Abbrev [44] 0xbf1:0x2e DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x99e:0x2d DW_TAG_subprogram .byte 54 # DW_AT_low_pc .long .Lfunc_end53-.Lfunc_begin53 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 255 # DW_AT_linkage_name - .short 256 # DW_AT_name + .byte 241 # DW_AT_linkage_name + .byte 242 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xbfe:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x9aa:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8897 # DW_AT_type - .byte 27 # Abbrev [27] 0xc0a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9023 # DW_AT_type + .byte 24 # Abbrev [24] 0x9b6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8913 # DW_AT_type - .byte 33 # Abbrev [33] 0xc16:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc18:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 9039 # DW_AT_type + .byte 30 # Abbrev [30] 0x9c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x9c4:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc1f:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x9cb:0x2d DW_TAG_subprogram .byte 55 # DW_AT_low_pc .long .Lfunc_end54-.Lfunc_begin54 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 258 # DW_AT_linkage_name - .short 259 # DW_AT_name + .byte 244 # DW_AT_linkage_name + .byte 245 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc2d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x9d7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8930 # DW_AT_type - .byte 27 # Abbrev [27] 0xc39:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9056 # DW_AT_type + .byte 24 # Abbrev [24] 0x9e3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8946 # DW_AT_type - .byte 33 # Abbrev [33] 0xc45:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc47:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9072 # DW_AT_type + .byte 30 # Abbrev [30] 0x9ef:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x9f1:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc4e:0x34 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x9f8:0x32 DW_TAG_subprogram .byte 56 # DW_AT_low_pc .long .Lfunc_end55-.Lfunc_begin55 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 260 # DW_AT_linkage_name - .short 261 # DW_AT_name + .byte 246 # DW_AT_linkage_name + .byte 247 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc5c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa04:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8963 # DW_AT_type - .byte 27 # Abbrev [27] 0xc68:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9089 # DW_AT_type + .byte 24 # Abbrev [24] 0xa10:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8984 # DW_AT_type - .byte 33 # Abbrev [33] 0xc74:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc76:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0xc7b:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9110 # DW_AT_type + .byte 30 # Abbrev [30] 0xa1c:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa1e:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0xa23:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc82:0x34 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa2a:0x32 DW_TAG_subprogram .byte 57 # DW_AT_low_pc .long .Lfunc_end56-.Lfunc_begin56 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 262 # DW_AT_linkage_name - .short 263 # DW_AT_name + .byte 248 # DW_AT_linkage_name + .byte 249 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc90:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa36:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9006 # DW_AT_type - .byte 27 # Abbrev [27] 0xc9c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9132 # DW_AT_type + .byte 24 # Abbrev [24] 0xa42:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9027 # DW_AT_type - .byte 33 # Abbrev [33] 0xca8:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xcaa:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0xcaf:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9153 # DW_AT_type + .byte 30 # Abbrev [30] 0xa4e:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa50:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0xa55:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xcb6:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa5c:0x2d DW_TAG_subprogram .byte 58 # DW_AT_low_pc .long .Lfunc_end57-.Lfunc_begin57 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 264 # DW_AT_linkage_name - .short 265 # DW_AT_name + .byte 250 # DW_AT_linkage_name + .byte 251 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xcc4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa68:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9049 # DW_AT_type - .byte 27 # Abbrev [27] 0xcd0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9175 # DW_AT_type + .byte 24 # Abbrev [24] 0xa74:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9065 # DW_AT_type - .byte 33 # Abbrev [33] 0xcdc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xcde:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9191 # DW_AT_type + .byte 30 # Abbrev [30] 0xa80:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa82:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xce5:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa89:0x2d DW_TAG_subprogram .byte 59 # DW_AT_low_pc .long .Lfunc_end58-.Lfunc_begin58 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 266 # DW_AT_linkage_name - .short 267 # DW_AT_name + .byte 252 # DW_AT_linkage_name + .byte 253 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xcf3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa95:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9082 # DW_AT_type - .byte 27 # Abbrev [27] 0xcff:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9208 # DW_AT_type + .byte 24 # Abbrev [24] 0xaa1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9098 # DW_AT_type - .byte 33 # Abbrev [33] 0xd0b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd0d:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9224 # DW_AT_type + .byte 30 # Abbrev [30] 0xaad:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xaaf:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xd14:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xab6:0x2d DW_TAG_subprogram .byte 60 # DW_AT_low_pc .long .Lfunc_end59-.Lfunc_begin59 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 268 # DW_AT_linkage_name - .short 269 # DW_AT_name + .byte 254 # DW_AT_linkage_name + .byte 255 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xd22:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xac2:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9115 # DW_AT_type - .byte 27 # Abbrev [27] 0xd2e:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9241 # DW_AT_type + .byte 24 # Abbrev [24] 0xace:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9131 # DW_AT_type - .byte 33 # Abbrev [33] 0xd3a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd3c:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9257 # DW_AT_type + .byte 30 # Abbrev [30] 0xada:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xadc:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xd43:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xae3:0x2f DW_TAG_subprogram .byte 61 # DW_AT_low_pc .long .Lfunc_end60-.Lfunc_begin60 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 270 # DW_AT_linkage_name - .short 271 # DW_AT_name + .short 256 # DW_AT_linkage_name + .short 257 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xd51:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xaf1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9148 # DW_AT_type - .byte 27 # Abbrev [27] 0xd5d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9274 # DW_AT_type + .byte 24 # Abbrev [24] 0xafd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9164 # DW_AT_type - .byte 33 # Abbrev [33] 0xd69:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd6b:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9290 # DW_AT_type + .byte 30 # Abbrev [30] 0xb09:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb0b:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xd72:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb12:0x2f DW_TAG_subprogram .byte 62 # DW_AT_low_pc .long .Lfunc_end61-.Lfunc_begin61 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 272 # DW_AT_linkage_name - .short 273 # DW_AT_name + .short 258 # DW_AT_linkage_name + .short 259 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xd80:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb20:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9181 # DW_AT_type - .byte 27 # Abbrev [27] 0xd8c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9307 # DW_AT_type + .byte 24 # Abbrev [24] 0xb2c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9197 # DW_AT_type - .byte 33 # Abbrev [33] 0xd98:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd9a:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9323 # DW_AT_type + .byte 30 # Abbrev [30] 0xb38:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb3a:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xda1:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb41:0x2f DW_TAG_subprogram .byte 63 # DW_AT_low_pc .long .Lfunc_end62-.Lfunc_begin62 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 274 # DW_AT_linkage_name - .short 275 # DW_AT_name + .short 260 # DW_AT_linkage_name + .short 261 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xdaf:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb4f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9214 # DW_AT_type - .byte 27 # Abbrev [27] 0xdbb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9340 # DW_AT_type + .byte 24 # Abbrev [24] 0xb5b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9230 # DW_AT_type - .byte 33 # Abbrev [33] 0xdc7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xdc9:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9356 # DW_AT_type + .byte 30 # Abbrev [30] 0xb67:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb69:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xdd0:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb70:0x2f DW_TAG_subprogram .byte 64 # DW_AT_low_pc .long .Lfunc_end63-.Lfunc_begin63 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 276 # DW_AT_linkage_name - .short 277 # DW_AT_name + .short 262 # DW_AT_linkage_name + .short 263 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xdde:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb7e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9247 # DW_AT_type - .byte 27 # Abbrev [27] 0xdea:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9373 # DW_AT_type + .byte 24 # Abbrev [24] 0xb8a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9263 # DW_AT_type - .byte 33 # Abbrev [33] 0xdf6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xdf8:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9389 # DW_AT_type + .byte 30 # Abbrev [30] 0xb96:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb98:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xdff:0x1f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xb9f:0x1f DW_TAG_subprogram .byte 65 # DW_AT_low_pc .long .Lfunc_end64-.Lfunc_begin64 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 280 # DW_AT_linkage_name - .short 281 # DW_AT_name + .short 266 # DW_AT_linkage_name + .short 267 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line + .byte 64 # DW_AT_decl_line # DW_AT_external - .byte 46 # Abbrev [46] 0xe0d:0x9 DW_TAG_GNU_template_parameter_pack - .short 278 # DW_AT_name - .byte 34 # Abbrev [34] 0xe10:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 41 # Abbrev [41] 0xbad:0x9 DW_TAG_GNU_template_parameter_pack + .short 264 # DW_AT_name + .byte 31 # Abbrev [31] 0xbb0:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark - .byte 47 # Abbrev [47] 0xe16:0x7 DW_TAG_template_type_parameter + .byte 42 # Abbrev [42] 0xbb6:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name - # DW_AT_default_value + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe1e:0x19 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbbe:0x19 DW_TAG_subprogram .byte 66 # DW_AT_low_pc .long .Lfunc_end65-.Lfunc_begin65 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 282 # DW_AT_linkage_name - .short 283 # DW_AT_name + .short 268 # DW_AT_linkage_name + .short 269 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line + .byte 64 # DW_AT_decl_line # DW_AT_external - .byte 48 # Abbrev [48] 0xe2c:0x3 DW_TAG_GNU_template_parameter_pack - .short 278 # DW_AT_name - .byte 47 # Abbrev [47] 0xe2f:0x7 DW_TAG_template_type_parameter + .byte 43 # Abbrev [43] 0xbcc:0x3 DW_TAG_GNU_template_parameter_pack + .short 264 # DW_AT_name + .byte 42 # Abbrev [42] 0xbcf:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name - # DW_AT_default_value + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe37:0x19 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbd7:0x19 DW_TAG_subprogram .byte 67 # DW_AT_low_pc .long .Lfunc_end66-.Lfunc_begin66 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 284 # DW_AT_linkage_name - .short 285 # DW_AT_name + .short 270 # DW_AT_linkage_name + .short 271 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 64 # DW_AT_decl_line + .byte 66 # DW_AT_decl_line # DW_AT_external - .byte 49 # Abbrev [49] 0xe45:0x7 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type - .short 278 # DW_AT_name - .byte 48 # Abbrev [48] 0xe4c:0x3 DW_TAG_GNU_template_parameter_pack - .short 279 # DW_AT_name + .byte 42 # Abbrev [42] 0xbe5:0x7 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type + .short 264 # DW_AT_name + .byte 43 # Abbrev [43] 0xbec:0x3 DW_TAG_GNU_template_parameter_pack + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe50:0x29 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbf0:0x29 DW_TAG_subprogram .byte 68 # DW_AT_low_pc .long .Lfunc_end67-.Lfunc_begin67 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 286 # DW_AT_linkage_name - .short 287 # DW_AT_name + .short 272 # DW_AT_linkage_name + .short 273 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xe5e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xbfe:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7800 # DW_AT_type - .byte 27 # Abbrev [27] 0xe6a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7921 # DW_AT_type + .byte 24 # Abbrev [24] 0xc0a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9280 # DW_AT_type - .byte 50 # Abbrev [50] 0xe76:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name + .byte 37 # DW_AT_decl_line + .long 9406 # DW_AT_type + .byte 44 # Abbrev [44] 0xc16:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe79:0x34 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc19:0x34 DW_TAG_subprogram .byte 69 # DW_AT_low_pc .long .Lfunc_end68-.Lfunc_begin68 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 288 # DW_AT_linkage_name - .short 289 # DW_AT_name + .short 274 # DW_AT_linkage_name + .short 275 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xe87:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc27:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9291 # DW_AT_type - .byte 27 # Abbrev [27] 0xe93:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9417 # DW_AT_type + .byte 24 # Abbrev [24] 0xc33:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9312 # DW_AT_type - .byte 33 # Abbrev [33] 0xe9f:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xea1:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0xea6:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9438 # DW_AT_type + .byte 30 # Abbrev [30] 0xc3f:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xc41:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0xc46:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xead:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc4d:0x2f DW_TAG_subprogram .byte 70 # DW_AT_low_pc .long .Lfunc_end69-.Lfunc_begin69 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 291 # DW_AT_linkage_name - .short 292 # DW_AT_name + .short 277 # DW_AT_linkage_name + .short 278 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xebb:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc5b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9334 # DW_AT_type - .byte 27 # Abbrev [27] 0xec7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9460 # DW_AT_type + .byte 24 # Abbrev [24] 0xc67:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9350 # DW_AT_type - .byte 33 # Abbrev [33] 0xed3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xed5:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9476 # DW_AT_type + .byte 30 # Abbrev [30] 0xc73:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xc75:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xedc:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc7c:0x2f DW_TAG_subprogram .byte 71 # DW_AT_low_pc .long .Lfunc_end70-.Lfunc_begin70 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 293 # DW_AT_linkage_name - .short 294 # DW_AT_name + .short 279 # DW_AT_linkage_name + .short 280 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xeea:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc8a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9367 # DW_AT_type - .byte 27 # Abbrev [27] 0xef6:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9493 # DW_AT_type + .byte 24 # Abbrev [24] 0xc96:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9383 # DW_AT_type - .byte 33 # Abbrev [33] 0xf02:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xf04:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9509 # DW_AT_type + .byte 30 # Abbrev [30] 0xca2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xca4:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0xf0b:0x20e DW_TAG_structure_type + .byte 14 # Abbrev [14] 0xcab:0x20e DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 77 # DW_AT_name + .byte 25 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 65 # DW_AT_decl_line - .byte 51 # Abbrev [51] 0xf11:0x16 DW_TAG_subprogram - .byte 78 # DW_AT_linkage_name - .byte 79 # DW_AT_name - .byte 0 # DW_AT_decl_file .byte 67 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0xcb1:0x16 DW_TAG_subprogram + .byte 26 # DW_AT_linkage_name + .byte 27 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 69 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf16:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xcb6:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf1c:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xcbc:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf21:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xcc1:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf27:0x16 DW_TAG_subprogram - .byte 80 # DW_AT_linkage_name - .byte 81 # DW_AT_name + .byte 17 # Abbrev [17] 0xcc7:0x16 DW_TAG_subprogram + .byte 28 # DW_AT_linkage_name + .byte 29 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line + .byte 72 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf2c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xccc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf32:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xcd2:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf37:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xcd7:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf3d:0x16 DW_TAG_subprogram - .byte 82 # DW_AT_linkage_name - .byte 83 # DW_AT_name + .byte 17 # Abbrev [17] 0xcdd:0x16 DW_TAG_subprogram + .byte 30 # DW_AT_linkage_name + .byte 31 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line + .byte 75 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf42:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xce2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf48:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xce8:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf4d:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xced:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0xf53:0x15 DW_TAG_subprogram - .byte 84 # DW_AT_linkage_name - .byte 85 # DW_AT_name + .byte 46 # Abbrev [46] 0xcf3:0x15 DW_TAG_subprogram + .byte 32 # DW_AT_linkage_name + .byte 33 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 76 # DW_AT_decl_line - .long 4511 # DW_AT_type + .byte 78 # DW_AT_decl_line + .long 3903 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 54 # Abbrev [54] 0xf5c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xcfc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - # DW_AT_default_value - .byte 19 # Abbrev [19] 0xf62:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd02:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf68:0x16 DW_TAG_subprogram - .byte 89 # DW_AT_linkage_name - .byte 90 # DW_AT_name + .byte 17 # Abbrev [17] 0xd08:0x16 DW_TAG_subprogram + .byte 37 # DW_AT_linkage_name + .byte 38 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line + .byte 82 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf6d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd0d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf73:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd13:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf78:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd18:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf7e:0x16 DW_TAG_subprogram - .byte 91 # DW_AT_linkage_name - .byte 92 # DW_AT_name + .byte 17 # Abbrev [17] 0xd1e:0x16 DW_TAG_subprogram + .byte 39 # DW_AT_linkage_name + .byte 40 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 83 # DW_AT_decl_line + .byte 85 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf83:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd23:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf89:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd29:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf8e:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd2e:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf94:0x16 DW_TAG_subprogram - .byte 93 # DW_AT_linkage_name - .byte 94 # DW_AT_name + .byte 17 # Abbrev [17] 0xd34:0x16 DW_TAG_subprogram + .byte 41 # DW_AT_linkage_name + .byte 42 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 86 # DW_AT_decl_line + .byte 88 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf99:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd39:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf9f:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd3f:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfa4:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd44:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfaa:0x16 DW_TAG_subprogram - .byte 95 # DW_AT_linkage_name - .byte 96 # DW_AT_name + .byte 17 # Abbrev [17] 0xd4a:0x16 DW_TAG_subprogram + .byte 43 # DW_AT_linkage_name + .byte 44 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 89 # DW_AT_decl_line + .byte 91 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfaf:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd4f:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfb5:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd55:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfba:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd5a:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfc0:0x16 DW_TAG_subprogram - .byte 97 # DW_AT_linkage_name - .byte 98 # DW_AT_name + .byte 17 # Abbrev [17] 0xd60:0x16 DW_TAG_subprogram + .byte 45 # DW_AT_linkage_name + .byte 46 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 92 # DW_AT_decl_line + .byte 94 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfc5:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd65:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfcb:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd6b:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfd0:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd70:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfd6:0x16 DW_TAG_subprogram - .byte 99 # DW_AT_linkage_name - .byte 100 # DW_AT_name + .byte 17 # Abbrev [17] 0xd76:0x16 DW_TAG_subprogram + .byte 47 # DW_AT_linkage_name + .byte 48 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 95 # DW_AT_decl_line + .byte 97 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfdb:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd7b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfe1:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd81:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfe6:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd86:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfec:0x16 DW_TAG_subprogram - .byte 101 # DW_AT_linkage_name - .byte 102 # DW_AT_name + .byte 17 # Abbrev [17] 0xd8c:0x16 DW_TAG_subprogram + .byte 49 # DW_AT_linkage_name + .byte 50 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 98 # DW_AT_decl_line + .byte 100 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xff1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd91:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xff7:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd97:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xffc:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd9c:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1002:0x11 DW_TAG_subprogram - .byte 103 # DW_AT_linkage_name - .byte 104 # DW_AT_name + .byte 17 # Abbrev [17] 0xda2:0x11 DW_TAG_subprogram + .byte 51 # DW_AT_linkage_name + .byte 52 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 101 # DW_AT_decl_line + .byte 103 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1007:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xda7:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x100d:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdad:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1013:0x11 DW_TAG_subprogram - .byte 105 # DW_AT_linkage_name - .byte 106 # DW_AT_name + .byte 17 # Abbrev [17] 0xdb3:0x11 DW_TAG_subprogram + .byte 53 # DW_AT_linkage_name + .byte 54 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 104 # DW_AT_decl_line + .byte 106 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1018:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdb8:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x101e:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdbe:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1024:0x16 DW_TAG_subprogram - .byte 107 # DW_AT_linkage_name - .byte 108 # DW_AT_name + .byte 17 # Abbrev [17] 0xdc4:0x16 DW_TAG_subprogram + .byte 55 # DW_AT_linkage_name + .byte 56 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 107 # DW_AT_decl_line + .byte 109 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1029:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdc9:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x102f:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdcf:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1034:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xdd4:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x103a:0x16 DW_TAG_subprogram - .byte 109 # DW_AT_linkage_name - .byte 110 # DW_AT_name + .byte 17 # Abbrev [17] 0xdda:0x16 DW_TAG_subprogram + .byte 57 # DW_AT_linkage_name + .byte 58 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 110 # DW_AT_decl_line + .byte 112 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x103f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xddf:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1045:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xde5:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x104a:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xdea:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1050:0x16 DW_TAG_subprogram - .byte 111 # DW_AT_linkage_name - .byte 112 # DW_AT_name + .byte 17 # Abbrev [17] 0xdf0:0x16 DW_TAG_subprogram + .byte 59 # DW_AT_linkage_name + .byte 60 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 113 # DW_AT_decl_line + .byte 115 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1055:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdf5:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x105b:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdfb:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1060:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe00:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1066:0x11 DW_TAG_subprogram - .byte 113 # DW_AT_linkage_name - .byte 114 # DW_AT_name + .byte 17 # Abbrev [17] 0xe06:0x11 DW_TAG_subprogram + .byte 61 # DW_AT_linkage_name + .byte 62 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 116 # DW_AT_decl_line + .byte 118 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x106b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe0b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1071:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe11:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1077:0x16 DW_TAG_subprogram - .byte 115 # DW_AT_linkage_name - .byte 116 # DW_AT_name + .byte 17 # Abbrev [17] 0xe17:0x16 DW_TAG_subprogram + .byte 63 # DW_AT_linkage_name + .byte 64 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 119 # DW_AT_decl_line + .byte 121 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x107c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe1c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1082:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe22:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1087:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe27:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x108d:0x16 DW_TAG_subprogram - .byte 117 # DW_AT_linkage_name - .byte 118 # DW_AT_name + .byte 17 # Abbrev [17] 0xe2d:0x16 DW_TAG_subprogram + .byte 65 # DW_AT_linkage_name + .byte 66 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 122 # DW_AT_decl_line + .byte 124 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1092:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe32:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1098:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe38:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x109d:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe3d:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x10a3:0x1a DW_TAG_subprogram - .byte 119 # DW_AT_linkage_name - .byte 120 # DW_AT_name + .byte 46 # Abbrev [46] 0xe43:0x1a DW_TAG_subprogram + .byte 67 # DW_AT_linkage_name + .byte 68 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 125 # DW_AT_decl_line - .long 5183 # DW_AT_type + .byte 127 # DW_AT_decl_line + .long 4575 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10ac:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe4c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10b2:0x5 DW_TAG_formal_parameter - .long 423 # DW_AT_type - .byte 52 # Abbrev [52] 0x10b7:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe52:0x5 DW_TAG_formal_parameter + .long 4580 # DW_AT_type + .byte 45 # Abbrev [45] 0xe57:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x10bd:0x1a DW_TAG_subprogram - .byte 122 # DW_AT_linkage_name - .byte 123 # DW_AT_name + .byte 46 # Abbrev [46] 0xe5d:0x1a DW_TAG_subprogram + .byte 73 # DW_AT_linkage_name + .byte 74 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 132 # DW_AT_decl_line - .long 5183 # DW_AT_type + .byte 134 # DW_AT_decl_line + .long 4575 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10c6:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe66:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10cc:0x5 DW_TAG_formal_parameter - .long 423 # DW_AT_type - .byte 52 # Abbrev [52] 0x10d1:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe6c:0x5 DW_TAG_formal_parameter + .long 4580 # DW_AT_type + .byte 45 # Abbrev [45] 0xe71:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x10d7:0x16 DW_TAG_subprogram - .byte 124 # DW_AT_linkage_name - .byte 125 # DW_AT_name + .byte 17 # Abbrev [17] 0xe77:0x16 DW_TAG_subprogram + .byte 75 # DW_AT_linkage_name + .byte 76 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line + .byte 131 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10dc:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe7c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10e2:0x5 DW_TAG_formal_parameter - .long 5183 # DW_AT_type - .byte 52 # Abbrev [52] 0x10e7:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe82:0x5 DW_TAG_formal_parameter + .long 4575 # DW_AT_type + .byte 45 # Abbrev [45] 0xe87:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x10ed:0x16 DW_TAG_subprogram - .byte 126 # DW_AT_linkage_name - .byte 127 # DW_AT_name + .byte 17 # Abbrev [17] 0xe8d:0x16 DW_TAG_subprogram + .byte 77 # DW_AT_linkage_name + .byte 78 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line + .byte 138 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10f2:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe92:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10f8:0x5 DW_TAG_formal_parameter - .long 5183 # DW_AT_type - .byte 52 # Abbrev [52] 0x10fd:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe98:0x5 DW_TAG_formal_parameter + .long 4575 # DW_AT_type + .byte 45 # Abbrev [45] 0xe9d:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x1103:0x15 DW_TAG_subprogram - .byte 128 # DW_AT_linkage_name - .byte 129 # DW_AT_name + .byte 46 # Abbrev [46] 0xea3:0x15 DW_TAG_subprogram + .byte 79 # DW_AT_linkage_name + .byte 80 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 139 # DW_AT_decl_line + .byte 141 # DW_AT_decl_line .long 54 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x110c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xeac:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1112:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xeb2:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1119:0x5 DW_TAG_pointer_type - .long 3851 # DW_AT_type - .byte 56 # Abbrev [56] 0x111e:0x2b DW_TAG_subprogram + .byte 47 # Abbrev [47] 0xeb9:0x5 DW_TAG_pointer_type + .long 3243 # DW_AT_type + .byte 48 # Abbrev [48] 0xebe:0x2b DW_TAG_subprogram .byte 72 # DW_AT_low_pc .long .Lfunc_end71-.Lfunc_begin71 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4398 # DW_AT_object_pointer - .long 3857 # DW_AT_specification - .byte 57 # Abbrev [57] 0x112e:0xa DW_TAG_formal_parameter + .long 3790 # DW_AT_object_pointer + .long 3249 # DW_AT_specification + .byte 49 # Abbrev [49] 0xece:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1138:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xed8:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 67 # DW_AT_decl_line + .byte 69 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1142:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xee2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1149:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xee9:0x2b DW_TAG_subprogram .byte 73 # DW_AT_low_pc .long .Lfunc_end72-.Lfunc_begin72 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4441 # DW_AT_object_pointer - .long 3879 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1159:0xa DW_TAG_formal_parameter + .long 3833 # DW_AT_object_pointer + .long 3271 # DW_AT_specification + .byte 49 # Abbrev [49] 0xef9:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1163:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf03:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line + .byte 72 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x116d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf0d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1174:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf14:0x2b DW_TAG_subprogram .byte 74 # DW_AT_low_pc .long .Lfunc_end73-.Lfunc_begin73 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4484 # DW_AT_object_pointer - .long 3901 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1184:0xa DW_TAG_formal_parameter + .long 3876 # DW_AT_object_pointer + .long 3293 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf24:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x118e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf2e:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line + .byte 75 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1198:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf38:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x119f:0x5 DW_TAG_pointer_type - .long 4516 # DW_AT_type - .byte 14 # Abbrev [14] 0x11a4:0xf DW_TAG_structure_type + .byte 47 # Abbrev [47] 0xf3f:0x5 DW_TAG_pointer_type + .long 3908 # DW_AT_type + .byte 14 # Abbrev [14] 0xf44:0xf DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 88 # DW_AT_name + .byte 36 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x11aa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x11ac:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0xf4a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xf4c:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x11b3:0x4 DW_TAG_base_type - .byte 87 # DW_AT_name + .byte 3 # Abbrev [3] 0xf53:0x4 DW_TAG_base_type + .byte 35 # DW_AT_name .byte 4 # DW_AT_encoding .byte 4 # DW_AT_byte_size - .byte 56 # Abbrev [56] 0x11b7:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf57:0x21 DW_TAG_subprogram .byte 75 # DW_AT_low_pc .long .Lfunc_end74-.Lfunc_begin74 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4551 # DW_AT_object_pointer - .long 3923 # DW_AT_specification - .byte 57 # Abbrev [57] 0x11c7:0xa DW_TAG_formal_parameter + .long 3943 # DW_AT_object_pointer + .long 3315 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf67:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 54 # Abbrev [54] 0x11d1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf71:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - # DW_AT_default_value .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x11d8:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf78:0x2b DW_TAG_subprogram .byte 76 # DW_AT_low_pc .long .Lfunc_end75-.Lfunc_begin75 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4584 # DW_AT_object_pointer - .long 3944 # DW_AT_specification - .byte 57 # Abbrev [57] 0x11e8:0xa DW_TAG_formal_parameter + .long 3976 # DW_AT_object_pointer + .long 3336 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf88:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x11f2:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf92:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line + .byte 82 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x11fc:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf9c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1203:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xfa3:0x2b DW_TAG_subprogram .byte 77 # DW_AT_low_pc .long .Lfunc_end76-.Lfunc_begin76 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4627 # DW_AT_object_pointer - .long 3966 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1213:0xa DW_TAG_formal_parameter + .long 4019 # DW_AT_object_pointer + .long 3358 # DW_AT_specification + .byte 49 # Abbrev [49] 0xfb3:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x121d:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xfbd:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 83 # DW_AT_decl_line + .byte 85 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1227:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xfc7:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x122e:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xfce:0x2b DW_TAG_subprogram .byte 78 # DW_AT_low_pc .long .Lfunc_end77-.Lfunc_begin77 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4670 # DW_AT_object_pointer - .long 3988 # DW_AT_specification - .byte 57 # Abbrev [57] 0x123e:0xa DW_TAG_formal_parameter + .long 4062 # DW_AT_object_pointer + .long 3380 # DW_AT_specification + .byte 49 # Abbrev [49] 0xfde:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1248:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xfe8:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 86 # DW_AT_decl_line + .byte 88 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1252:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xff2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1259:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xff9:0x2b DW_TAG_subprogram .byte 79 # DW_AT_low_pc .long .Lfunc_end78-.Lfunc_begin78 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4713 # DW_AT_object_pointer - .long 4010 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1269:0xa DW_TAG_formal_parameter + .long 4105 # DW_AT_object_pointer + .long 3402 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1009:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1273:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1013:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 89 # DW_AT_decl_line + .byte 91 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x127d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x101d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1284:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1024:0x2b DW_TAG_subprogram .byte 80 # DW_AT_low_pc .long .Lfunc_end79-.Lfunc_begin79 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4756 # DW_AT_object_pointer - .long 4032 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1294:0xa DW_TAG_formal_parameter + .long 4148 # DW_AT_object_pointer + .long 3424 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1034:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x129e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x103e:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 92 # DW_AT_decl_line + .byte 94 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12a8:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1048:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x12af:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x104f:0x2b DW_TAG_subprogram .byte 81 # DW_AT_low_pc .long .Lfunc_end80-.Lfunc_begin80 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4799 # DW_AT_object_pointer - .long 4054 # DW_AT_specification - .byte 57 # Abbrev [57] 0x12bf:0xa DW_TAG_formal_parameter + .long 4191 # DW_AT_object_pointer + .long 3446 # DW_AT_specification + .byte 49 # Abbrev [49] 0x105f:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x12c9:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1069:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 95 # DW_AT_decl_line + .byte 97 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12d3:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1073:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x12da:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x107a:0x2b DW_TAG_subprogram .byte 82 # DW_AT_low_pc .long .Lfunc_end81-.Lfunc_begin81 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4842 # DW_AT_object_pointer - .long 4076 # DW_AT_specification - .byte 57 # Abbrev [57] 0x12ea:0xa DW_TAG_formal_parameter + .long 4234 # DW_AT_object_pointer + .long 3468 # DW_AT_specification + .byte 49 # Abbrev [49] 0x108a:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x12f4:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1094:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 98 # DW_AT_decl_line + .byte 100 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12fe:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x109e:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1305:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10a5:0x21 DW_TAG_subprogram .byte 83 # DW_AT_low_pc .long .Lfunc_end82-.Lfunc_begin82 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4885 # DW_AT_object_pointer - .long 4098 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1315:0xa DW_TAG_formal_parameter + .long 4277 # DW_AT_object_pointer + .long 3490 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10b5:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x131f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x10bf:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1326:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10c6:0x21 DW_TAG_subprogram .byte 84 # DW_AT_low_pc .long .Lfunc_end83-.Lfunc_begin83 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4918 # DW_AT_object_pointer - .long 4115 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1336:0xa DW_TAG_formal_parameter + .long 4310 # DW_AT_object_pointer + .long 3507 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10d6:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x1340:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x10e0:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1347:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10e7:0x2b DW_TAG_subprogram .byte 85 # DW_AT_low_pc .long .Lfunc_end84-.Lfunc_begin84 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4951 # DW_AT_object_pointer - .long 4132 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1357:0xa DW_TAG_formal_parameter + .long 4343 # DW_AT_object_pointer + .long 3524 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10f7:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1361:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1101:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 107 # DW_AT_decl_line + .byte 109 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x136b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x110b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1372:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1112:0x2b DW_TAG_subprogram .byte 86 # DW_AT_low_pc .long .Lfunc_end85-.Lfunc_begin85 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4994 # DW_AT_object_pointer - .long 4154 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1382:0xa DW_TAG_formal_parameter + .long 4386 # DW_AT_object_pointer + .long 3546 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1122:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x138c:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x112c:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 110 # DW_AT_decl_line + .byte 112 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1396:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1136:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x139d:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x113d:0x2b DW_TAG_subprogram .byte 87 # DW_AT_low_pc .long .Lfunc_end86-.Lfunc_begin86 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5037 # DW_AT_object_pointer - .long 4176 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13ad:0xa DW_TAG_formal_parameter + .long 4429 # DW_AT_object_pointer + .long 3568 # DW_AT_specification + .byte 49 # Abbrev [49] 0x114d:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x13b7:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1157:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 113 # DW_AT_decl_line + .byte 115 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x13c1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1161:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x13c8:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1168:0x21 DW_TAG_subprogram .byte 88 # DW_AT_low_pc .long .Lfunc_end87-.Lfunc_begin87 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5080 # DW_AT_object_pointer - .long 4198 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13d8:0xa DW_TAG_formal_parameter + .long 4472 # DW_AT_object_pointer + .long 3590 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1178:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x13e2:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1182:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x13e9:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1189:0x2b DW_TAG_subprogram .byte 89 # DW_AT_low_pc .long .Lfunc_end88-.Lfunc_begin88 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5113 # DW_AT_object_pointer - .long 4215 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13f9:0xa DW_TAG_formal_parameter + .long 4505 # DW_AT_object_pointer + .long 3607 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1199:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1403:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x11a3:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 119 # DW_AT_decl_line + .byte 121 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x140d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x11ad:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1414:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x11b4:0x2b DW_TAG_subprogram .byte 90 # DW_AT_low_pc .long .Lfunc_end89-.Lfunc_begin89 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5156 # DW_AT_object_pointer - .long 4237 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1424:0xa DW_TAG_formal_parameter + .long 4548 # DW_AT_object_pointer + .long 3629 # DW_AT_specification + .byte 49 # Abbrev [49] 0x11c4:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x142e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x11ce:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 122 # DW_AT_decl_line + .byte 124 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1438:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x11d8:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 58 # Abbrev [58] 0x143f:0x1 DW_TAG_pointer_type - .byte 59 # Abbrev [59] 0x1440:0x13 DW_TAG_subprogram + .byte 50 # Abbrev [50] 0x11df:0x1 DW_TAG_pointer_type + .byte 8 # Abbrev [8] 0x11e0:0xd9 DW_TAG_namespace + .byte 69 # DW_AT_name + .byte 51 # Abbrev [51] 0x11e2:0xd6 DW_TAG_namespace + .byte 70 # DW_AT_name + # DW_AT_export_symbols + .byte 52 # Abbrev [52] 0x11e4:0x8 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 72 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 20 # DW_AT_decl_line + .byte 53 # Abbrev [53] 0x11ec:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 158 # DW_AT_decl_line + .long 7031 # DW_AT_import + .byte 53 # Abbrev [53] 0x11f3:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 159 # DW_AT_decl_line + .long 7044 # DW_AT_import + .byte 53 # Abbrev [53] 0x11fa:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 160 # DW_AT_decl_line + .long 7056 # DW_AT_import + .byte 53 # Abbrev [53] 0x1201:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 161 # DW_AT_decl_line + .long 7064 # DW_AT_import + .byte 53 # Abbrev [53] 0x1208:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 163 # DW_AT_decl_line + .long 7076 # DW_AT_import + .byte 53 # Abbrev [53] 0x120f:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 164 # DW_AT_decl_line + .long 7085 # DW_AT_import + .byte 53 # Abbrev [53] 0x1216:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 165 # DW_AT_decl_line + .long 7097 # DW_AT_import + .byte 53 # Abbrev [53] 0x121d:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 166 # DW_AT_decl_line + .long 7105 # DW_AT_import + .byte 53 # Abbrev [53] 0x1224:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 168 # DW_AT_decl_line + .long 7113 # DW_AT_import + .byte 53 # Abbrev [53] 0x122b:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 169 # DW_AT_decl_line + .long 7122 # DW_AT_import + .byte 53 # Abbrev [53] 0x1232:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 170 # DW_AT_decl_line + .long 7131 # DW_AT_import + .byte 53 # Abbrev [53] 0x1239:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 171 # DW_AT_decl_line + .long 7139 # DW_AT_import + .byte 53 # Abbrev [53] 0x1240:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 173 # DW_AT_decl_line + .long 7147 # DW_AT_import + .byte 53 # Abbrev [53] 0x1247:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 174 # DW_AT_decl_line + .long 7156 # DW_AT_import + .byte 53 # Abbrev [53] 0x124e:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 175 # DW_AT_decl_line + .long 7165 # DW_AT_import + .byte 53 # Abbrev [53] 0x1255:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 176 # DW_AT_decl_line + .long 7173 # DW_AT_import + .byte 53 # Abbrev [53] 0x125c:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 178 # DW_AT_decl_line + .long 7181 # DW_AT_import + .byte 53 # Abbrev [53] 0x1263:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 179 # DW_AT_decl_line + .long 7190 # DW_AT_import + .byte 53 # Abbrev [53] 0x126a:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 180 # DW_AT_decl_line + .long 7199 # DW_AT_import + .byte 53 # Abbrev [53] 0x1271:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 181 # DW_AT_decl_line + .long 7207 # DW_AT_import + .byte 53 # Abbrev [53] 0x1278:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 183 # DW_AT_decl_line + .long 7215 # DW_AT_import + .byte 53 # Abbrev [53] 0x127f:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 184 # DW_AT_decl_line + .long 7224 # DW_AT_import + .byte 53 # Abbrev [53] 0x1286:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 185 # DW_AT_decl_line + .long 7233 # DW_AT_import + .byte 53 # Abbrev [53] 0x128d:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 186 # DW_AT_decl_line + .long 7241 # DW_AT_import + .byte 53 # Abbrev [53] 0x1294:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 188 # DW_AT_decl_line + .long 7249 # DW_AT_import + .byte 53 # Abbrev [53] 0x129b:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 189 # DW_AT_decl_line + .long 7258 # DW_AT_import + .byte 53 # Abbrev [53] 0x12a2:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 191 # DW_AT_decl_line + .long 7267 # DW_AT_import + .byte 53 # Abbrev [53] 0x12a9:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 192 # DW_AT_decl_line + .long 7276 # DW_AT_import + .byte 53 # Abbrev [53] 0x12b0:0x7 DW_TAG_imported_declaration + .byte 5 # DW_AT_decl_file + .byte 22 # DW_AT_decl_line + .long 7285 # DW_AT_import + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 3 # Abbrev [3] 0x12b9:0x4 DW_TAG_base_type + .byte 71 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 8 # DW_AT_byte_size + .byte 54 # Abbrev [54] 0x12bd:0x13 DW_TAG_subprogram .byte 91 # DW_AT_low_pc .long .Lfunc_end90-.Lfunc_begin90 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4259 # DW_AT_specification - .byte 15 # Abbrev [15] 0x144c:0x6 DW_TAG_template_type_parameter + .long 3651 # DW_AT_specification + .byte 15 # Abbrev [15] 0x12c9:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x1453:0x13 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x12d0:0x13 DW_TAG_subprogram .byte 92 # DW_AT_low_pc .long .Lfunc_end91-.Lfunc_begin91 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4285 # DW_AT_specification - .byte 15 # Abbrev [15] 0x145f:0x6 DW_TAG_template_type_parameter + .long 3677 # DW_AT_specification + .byte 15 # Abbrev [15] 0x12dc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x1466:0x27 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x12e3:0x27 DW_TAG_subprogram .byte 93 # DW_AT_low_pc .long .Lfunc_end92-.Lfunc_begin92 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4311 # DW_AT_specification - .byte 24 # Abbrev [24] 0x1472:0xa DW_TAG_formal_parameter + .long 3703 # DW_AT_specification + .byte 21 # Abbrev [21] 0x12ef:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line - .long 5183 # DW_AT_type - .byte 24 # Abbrev [24] 0x147c:0xa DW_TAG_formal_parameter + .byte 131 # DW_AT_decl_line + .long 4575 # DW_AT_type + .byte 21 # Abbrev [21] 0x12f9:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line + .byte 131 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1486:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1303:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x148d:0x27 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x130a:0x27 DW_TAG_subprogram .byte 94 # DW_AT_low_pc .long .Lfunc_end93-.Lfunc_begin93 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4333 # DW_AT_specification - .byte 24 # Abbrev [24] 0x1499:0xa DW_TAG_formal_parameter + .long 3725 # DW_AT_specification + .byte 21 # Abbrev [21] 0x1316:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line - .long 5183 # DW_AT_type - .byte 24 # Abbrev [24] 0x14a3:0xa DW_TAG_formal_parameter + .byte 138 # DW_AT_decl_line + .long 4575 # DW_AT_type + .byte 21 # Abbrev [21] 0x1320:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line + .byte 138 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x14ad:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x132a:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x14b4:0x13 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x1331:0x13 DW_TAG_subprogram .byte 95 # DW_AT_low_pc .long .Lfunc_end94-.Lfunc_begin94 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4355 # DW_AT_specification - .byte 15 # Abbrev [15] 0x14c0:0x6 DW_TAG_template_type_parameter + .long 3747 # DW_AT_specification + .byte 15 # Abbrev [15] 0x133d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x14c7:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1344:0x2f DW_TAG_subprogram .byte 96 # DW_AT_low_pc .long .Lfunc_end95-.Lfunc_begin95 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 296 # DW_AT_linkage_name - .short 297 # DW_AT_name + .short 282 # DW_AT_linkage_name + .short 283 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x14d5:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1352:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9405 # DW_AT_type - .byte 27 # Abbrev [27] 0x14e1:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9531 # DW_AT_type + .byte 24 # Abbrev [24] 0x135e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9421 # DW_AT_type - .byte 33 # Abbrev [33] 0x14ed:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x14ef:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9547 # DW_AT_type + .byte 30 # Abbrev [30] 0x136a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x136c:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x14f6:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1373:0x2f DW_TAG_subprogram .byte 97 # DW_AT_low_pc .long .Lfunc_end96-.Lfunc_begin96 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 298 # DW_AT_linkage_name - .short 299 # DW_AT_name + .short 284 # DW_AT_linkage_name + .short 285 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1504:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1381:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9438 # DW_AT_type - .byte 27 # Abbrev [27] 0x1510:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9564 # DW_AT_type + .byte 24 # Abbrev [24] 0x138d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9454 # DW_AT_type - .byte 33 # Abbrev [33] 0x151c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x151e:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9580 # DW_AT_type + .byte 30 # Abbrev [30] 0x1399:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x139b:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1525:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13a2:0x2f DW_TAG_subprogram .byte 98 # DW_AT_low_pc .long .Lfunc_end97-.Lfunc_begin97 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 300 # DW_AT_linkage_name - .short 301 # DW_AT_name + .short 286 # DW_AT_linkage_name + .short 287 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1533:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x13b0:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9471 # DW_AT_type - .byte 27 # Abbrev [27] 0x153f:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9597 # DW_AT_type + .byte 24 # Abbrev [24] 0x13bc:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9487 # DW_AT_type - .byte 33 # Abbrev [33] 0x154b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x154d:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9613 # DW_AT_type + .byte 30 # Abbrev [30] 0x13c8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x13ca:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1554:0x13 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13d1:0x13 DW_TAG_subprogram .byte 99 # DW_AT_low_pc .long .Lfunc_end98-.Lfunc_begin98 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 303 # DW_AT_linkage_name - .short 304 # DW_AT_name + .short 289 # DW_AT_linkage_name + .short 290 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 143 # DW_AT_decl_line + .byte 145 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x1562:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x13df:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 302 # DW_AT_GNU_template_name + .short 288 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1567:0x1a DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13e4:0x1a DW_TAG_subprogram .byte 100 # DW_AT_low_pc .long .Lfunc_end99-.Lfunc_begin99 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 305 # DW_AT_linkage_name - .short 306 # DW_AT_name + .short 291 # DW_AT_linkage_name + .short 292 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 144 # DW_AT_decl_line + .byte 146 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x1575:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x13f2:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 302 # DW_AT_GNU_template_name - .byte 49 # Abbrev [49] 0x1579:0x7 DW_TAG_template_type_parameter + .short 288 # DW_AT_GNU_template_name + .byte 42 # Abbrev [42] 0x13f6:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1581:0x34 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13fe:0x34 DW_TAG_subprogram .byte 102 # DW_AT_low_pc .long .Lfunc_end101-.Lfunc_begin101 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 310 # DW_AT_linkage_name - .short 311 # DW_AT_name + .short 296 # DW_AT_linkage_name + .short 297 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x158f:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x140c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9504 # DW_AT_type - .byte 27 # Abbrev [27] 0x159b:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9630 # DW_AT_type + .byte 24 # Abbrev [24] 0x1418:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9525 # DW_AT_type - .byte 33 # Abbrev [33] 0x15a7:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x15a9:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x15ae:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9651 # DW_AT_type + .byte 30 # Abbrev [30] 0x1424:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1426:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x142b:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15b5:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1432:0x2f DW_TAG_subprogram .byte 103 # DW_AT_low_pc .long .Lfunc_end102-.Lfunc_begin102 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 313 # DW_AT_linkage_name - .short 314 # DW_AT_name + .short 299 # DW_AT_linkage_name + .short 300 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x15c3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1440:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9547 # DW_AT_type - .byte 27 # Abbrev [27] 0x15cf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9673 # DW_AT_type + .byte 24 # Abbrev [24] 0x144c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9563 # DW_AT_type - .byte 33 # Abbrev [33] 0x15db:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x15dd:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9689 # DW_AT_type + .byte 30 # Abbrev [30] 0x1458:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x145a:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15e4:0x13 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1461:0x13 DW_TAG_subprogram .byte 104 # DW_AT_low_pc .long .Lfunc_end103-.Lfunc_begin103 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 316 # DW_AT_linkage_name - .short 317 # DW_AT_name + .short 302 # DW_AT_linkage_name + .short 303 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 143 # DW_AT_decl_line + .byte 145 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x15f2:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x146f:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 315 # DW_AT_GNU_template_name + .short 301 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15f7:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1474:0x2f DW_TAG_subprogram .byte 105 # DW_AT_low_pc .long .Lfunc_end104-.Lfunc_begin104 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 318 # DW_AT_linkage_name - .short 319 # DW_AT_name + .short 304 # DW_AT_linkage_name + .short 305 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1605:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1482:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9580 # DW_AT_type - .byte 27 # Abbrev [27] 0x1611:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9706 # DW_AT_type + .byte 24 # Abbrev [24] 0x148e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9596 # DW_AT_type - .byte 33 # Abbrev [33] 0x161d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x161f:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9722 # DW_AT_type + .byte 30 # Abbrev [30] 0x149a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x149c:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1626:0x39 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x14a3:0x39 DW_TAG_subprogram .byte 106 # DW_AT_low_pc .long .Lfunc_end105-.Lfunc_begin105 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 320 # DW_AT_linkage_name - .short 321 # DW_AT_name + .short 306 # DW_AT_linkage_name + .short 307 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1634:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x14b1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9613 # DW_AT_type - .byte 27 # Abbrev [27] 0x1640:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9739 # DW_AT_type + .byte 24 # Abbrev [24] 0x14bd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9639 # DW_AT_type - .byte 33 # Abbrev [33] 0x164c:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x164e:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 9765 # DW_AT_type + .byte 30 # Abbrev [30] 0x14c9:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x14cb:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x1653:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x1658:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 31 # Abbrev [31] 0x14d0:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x14d5:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x165f:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x14dc:0x2f DW_TAG_subprogram .byte 107 # DW_AT_low_pc .long .Lfunc_end106-.Lfunc_begin106 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 322 # DW_AT_linkage_name - .short 323 # DW_AT_name + .short 308 # DW_AT_linkage_name + .short 309 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x166d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x14ea:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9666 # DW_AT_type - .byte 27 # Abbrev [27] 0x1679:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9792 # DW_AT_type + .byte 24 # Abbrev [24] 0x14f6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9682 # DW_AT_type - .byte 33 # Abbrev [33] 0x1685:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1687:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9808 # DW_AT_type + .byte 30 # Abbrev [30] 0x1502:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1504:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x168e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x150b:0x2f DW_TAG_subprogram .byte 108 # DW_AT_low_pc .long .Lfunc_end107-.Lfunc_begin107 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 324 # DW_AT_linkage_name - .short 325 # DW_AT_name + .short 310 # DW_AT_linkage_name + .short 311 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x169c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1519:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9699 # DW_AT_type - .byte 27 # Abbrev [27] 0x16a8:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9825 # DW_AT_type + .byte 24 # Abbrev [24] 0x1525:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9715 # DW_AT_type - .byte 33 # Abbrev [33] 0x16b4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x16b6:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9841 # DW_AT_type + .byte 30 # Abbrev [30] 0x1531:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1533:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x16bd:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x153a:0x2f DW_TAG_subprogram .byte 109 # DW_AT_low_pc .long .Lfunc_end108-.Lfunc_begin108 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 326 # DW_AT_linkage_name - .short 327 # DW_AT_name + .short 312 # DW_AT_linkage_name + .short 313 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x16cb:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1548:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9732 # DW_AT_type - .byte 27 # Abbrev [27] 0x16d7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9858 # DW_AT_type + .byte 24 # Abbrev [24] 0x1554:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9748 # DW_AT_type - .byte 33 # Abbrev [33] 0x16e3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x16e5:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9874 # DW_AT_type + .byte 30 # Abbrev [30] 0x1560:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1562:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x16ec:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1569:0x2f DW_TAG_subprogram .byte 110 # DW_AT_low_pc .long .Lfunc_end109-.Lfunc_begin109 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 329 # DW_AT_linkage_name - .short 330 # DW_AT_name + .short 315 # DW_AT_linkage_name + .short 316 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x16fa:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1577:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9765 # DW_AT_type - .byte 27 # Abbrev [27] 0x1706:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9891 # DW_AT_type + .byte 24 # Abbrev [24] 0x1583:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9781 # DW_AT_type - .byte 33 # Abbrev [33] 0x1712:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1714:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9907 # DW_AT_type + .byte 30 # Abbrev [30] 0x158f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1591:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x171b:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1598:0x5 DW_TAG_pointer_type .long 206 # DW_AT_type - .byte 60 # Abbrev [60] 0x1720:0x1f DW_TAG_subprogram + .byte 55 # Abbrev [55] 0x159d:0x1f DW_TAG_subprogram .byte 111 # DW_AT_low_pc .long .Lfunc_end110-.Lfunc_begin110 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5938 # DW_AT_object_pointer - .short 331 # DW_AT_linkage_name + .long 5551 # DW_AT_object_pointer + .short 317 # DW_AT_linkage_name .long 212 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1732:0xa DW_TAG_formal_parameter + .byte 49 # Abbrev [49] 0x15af:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9798 # DW_AT_type + .short 486 # DW_AT_name + .long 9924 # DW_AT_type # DW_AT_artificial - .byte 18 # Abbrev [18] 0x173c:0x2 DW_TAG_template_type_parameter + .byte 18 # Abbrev [18] 0x15b9:0x2 DW_TAG_template_type_parameter .byte 20 # DW_AT_name - # DW_AT_default_value .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x173f:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x15bc:0x2f DW_TAG_subprogram .byte 112 # DW_AT_low_pc .long .Lfunc_end111-.Lfunc_begin111 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 332 # DW_AT_linkage_name - .short 333 # DW_AT_name + .short 318 # DW_AT_linkage_name + .short 319 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x174d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x15ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9803 # DW_AT_type - .byte 27 # Abbrev [27] 0x1759:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9929 # DW_AT_type + .byte 24 # Abbrev [24] 0x15d6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9819 # DW_AT_type - .byte 33 # Abbrev [33] 0x1765:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1767:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9945 # DW_AT_type + .byte 30 # Abbrev [30] 0x15e2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x15e4:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x176e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x15eb:0x2f DW_TAG_subprogram .byte 113 # DW_AT_low_pc .long .Lfunc_end112-.Lfunc_begin112 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 334 # DW_AT_linkage_name - .short 335 # DW_AT_name + .short 320 # DW_AT_linkage_name + .short 321 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x177c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x15f9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9836 # DW_AT_type - .byte 27 # Abbrev [27] 0x1788:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9962 # DW_AT_type + .byte 24 # Abbrev [24] 0x1605:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9852 # DW_AT_type - .byte 33 # Abbrev [33] 0x1794:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1796:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9978 # DW_AT_type + .byte 30 # Abbrev [30] 0x1611:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1613:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x179d:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x161a:0x2f DW_TAG_subprogram .byte 114 # DW_AT_low_pc .long .Lfunc_end113-.Lfunc_begin113 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 336 # DW_AT_linkage_name - .short 337 # DW_AT_name + .short 322 # DW_AT_linkage_name + .short 323 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x17ab:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1628:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9869 # DW_AT_type - .byte 27 # Abbrev [27] 0x17b7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9995 # DW_AT_type + .byte 24 # Abbrev [24] 0x1634:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9885 # DW_AT_type - .byte 33 # Abbrev [33] 0x17c3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x17c5:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10011 # DW_AT_type + .byte 30 # Abbrev [30] 0x1640:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1642:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 61 # Abbrev [61] 0x17cc:0x19 DW_TAG_subprogram + .byte 56 # Abbrev [56] 0x1649:0x19 DW_TAG_subprogram .byte 115 # DW_AT_low_pc .long .Lfunc_end114-.Lfunc_begin114 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 338 # DW_AT_linkage_name - .short 339 # DW_AT_name + .short 324 # DW_AT_linkage_name + .short 325 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 162 # DW_AT_decl_line - .long 7402 # DW_AT_type + .byte 164 # DW_AT_decl_line + .long 7504 # DW_AT_type # DW_AT_external - .byte 15 # Abbrev [15] 0x17de:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x165b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x17e5:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1662:0x2f DW_TAG_subprogram .byte 116 # DW_AT_low_pc .long .Lfunc_end115-.Lfunc_begin115 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 340 # DW_AT_linkage_name - .short 341 # DW_AT_name + .short 326 # DW_AT_linkage_name + .short 327 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x17f3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1670:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9902 # DW_AT_type - .byte 27 # Abbrev [27] 0x17ff:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10028 # DW_AT_type + .byte 24 # Abbrev [24] 0x167c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9918 # DW_AT_type - .byte 33 # Abbrev [33] 0x180b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x180d:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10044 # DW_AT_type + .byte 30 # Abbrev [30] 0x1688:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x168a:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1814:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1691:0x2f DW_TAG_subprogram .byte 117 # DW_AT_low_pc .long .Lfunc_end116-.Lfunc_begin116 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 342 # DW_AT_linkage_name - .short 343 # DW_AT_name + .short 328 # DW_AT_linkage_name + .short 329 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1822:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x169f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9935 # DW_AT_type - .byte 27 # Abbrev [27] 0x182e:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10061 # DW_AT_type + .byte 24 # Abbrev [24] 0x16ab:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9951 # DW_AT_type - .byte 33 # Abbrev [33] 0x183a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x183c:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10077 # DW_AT_type + .byte 30 # Abbrev [30] 0x16b7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x16b9:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1843:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x16c0:0x2f DW_TAG_subprogram .byte 118 # DW_AT_low_pc .long .Lfunc_end117-.Lfunc_begin117 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 344 # DW_AT_linkage_name - .short 345 # DW_AT_name + .short 330 # DW_AT_linkage_name + .short 331 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1851:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x16ce:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9968 # DW_AT_type - .byte 27 # Abbrev [27] 0x185d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10094 # DW_AT_type + .byte 24 # Abbrev [24] 0x16da:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9984 # DW_AT_type - .byte 33 # Abbrev [33] 0x1869:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x186b:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10110 # DW_AT_type + .byte 30 # Abbrev [30] 0x16e6:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x16e8:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1872:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x16ef:0x2f DW_TAG_subprogram .byte 119 # DW_AT_low_pc .long .Lfunc_end118-.Lfunc_begin118 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 346 # DW_AT_linkage_name - .short 347 # DW_AT_name + .short 332 # DW_AT_linkage_name + .short 333 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1880:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x16fd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10001 # DW_AT_type - .byte 27 # Abbrev [27] 0x188c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10127 # DW_AT_type + .byte 24 # Abbrev [24] 0x1709:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10017 # DW_AT_type - .byte 33 # Abbrev [33] 0x1898:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x189a:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10143 # DW_AT_type + .byte 30 # Abbrev [30] 0x1715:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1717:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18a1:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x171e:0x2f DW_TAG_subprogram .byte 120 # DW_AT_low_pc .long .Lfunc_end119-.Lfunc_begin119 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 348 # DW_AT_linkage_name - .short 349 # DW_AT_name + .short 334 # DW_AT_linkage_name + .short 335 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x18af:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x172c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10034 # DW_AT_type - .byte 27 # Abbrev [27] 0x18bb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10160 # DW_AT_type + .byte 24 # Abbrev [24] 0x1738:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10050 # DW_AT_type - .byte 33 # Abbrev [33] 0x18c7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x18c9:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10176 # DW_AT_type + .byte 30 # Abbrev [30] 0x1744:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1746:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18d0:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x174d:0x2f DW_TAG_subprogram .byte 121 # DW_AT_low_pc .long .Lfunc_end120-.Lfunc_begin120 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 350 # DW_AT_linkage_name - .short 351 # DW_AT_name + .short 336 # DW_AT_linkage_name + .short 337 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x18de:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x175b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10067 # DW_AT_type - .byte 27 # Abbrev [27] 0x18ea:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10193 # DW_AT_type + .byte 24 # Abbrev [24] 0x1767:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10083 # DW_AT_type - .byte 33 # Abbrev [33] 0x18f6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x18f8:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10209 # DW_AT_type + .byte 30 # Abbrev [30] 0x1773:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1775:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18ff:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x177c:0x2f DW_TAG_subprogram .byte 122 # DW_AT_low_pc .long .Lfunc_end121-.Lfunc_begin121 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 352 # DW_AT_linkage_name - .short 353 # DW_AT_name + .short 338 # DW_AT_linkage_name + .short 339 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x190d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x178a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10100 # DW_AT_type - .byte 27 # Abbrev [27] 0x1919:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10226 # DW_AT_type + .byte 24 # Abbrev [24] 0x1796:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10116 # DW_AT_type - .byte 33 # Abbrev [33] 0x1925:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1927:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10242 # DW_AT_type + .byte 30 # Abbrev [30] 0x17a2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x17a4:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x192e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x17ab:0x2f DW_TAG_subprogram .byte 123 # DW_AT_low_pc .long .Lfunc_end122-.Lfunc_begin122 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 354 # DW_AT_linkage_name - .short 355 # DW_AT_name + .short 340 # DW_AT_linkage_name + .short 341 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x193c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x17b9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10133 # DW_AT_type - .byte 27 # Abbrev [27] 0x1948:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10259 # DW_AT_type + .byte 24 # Abbrev [24] 0x17c5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10149 # DW_AT_type - .byte 33 # Abbrev [33] 0x1954:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1956:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10275 # DW_AT_type + .byte 30 # Abbrev [30] 0x17d1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x17d3:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x195d:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x17da:0x2f DW_TAG_subprogram .byte 124 # DW_AT_low_pc .long .Lfunc_end123-.Lfunc_begin123 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 356 # DW_AT_linkage_name - .short 357 # DW_AT_name + .short 342 # DW_AT_linkage_name + .short 343 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x196b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x17e8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10166 # DW_AT_type - .byte 27 # Abbrev [27] 0x1977:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10292 # DW_AT_type + .byte 24 # Abbrev [24] 0x17f4:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10182 # DW_AT_type - .byte 33 # Abbrev [33] 0x1983:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1985:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10308 # DW_AT_type + .byte 30 # Abbrev [30] 0x1800:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1802:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x198c:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1809:0x2f DW_TAG_subprogram .byte 125 # DW_AT_low_pc .long .Lfunc_end124-.Lfunc_begin124 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 358 # DW_AT_linkage_name - .short 359 # DW_AT_name + .short 344 # DW_AT_linkage_name + .short 345 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x199a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1817:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10199 # DW_AT_type - .byte 27 # Abbrev [27] 0x19a6:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10325 # DW_AT_type + .byte 24 # Abbrev [24] 0x1823:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10215 # DW_AT_type - .byte 33 # Abbrev [33] 0x19b2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x19b4:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10341 # DW_AT_type + .byte 30 # Abbrev [30] 0x182f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1831:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x19bb:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1838:0x2f DW_TAG_subprogram .byte 126 # DW_AT_low_pc .long .Lfunc_end125-.Lfunc_begin125 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 360 # DW_AT_linkage_name - .short 361 # DW_AT_name + .short 346 # DW_AT_linkage_name + .short 347 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x19c9:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1846:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10232 # DW_AT_type - .byte 27 # Abbrev [27] 0x19d5:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10358 # DW_AT_type + .byte 24 # Abbrev [24] 0x1852:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10248 # DW_AT_type - .byte 33 # Abbrev [33] 0x19e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x19e3:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10374 # DW_AT_type + .byte 30 # Abbrev [30] 0x185e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1860:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x19ea:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1867:0x2f DW_TAG_subprogram .byte 127 # DW_AT_low_pc .long .Lfunc_end126-.Lfunc_begin126 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 362 # DW_AT_linkage_name - .short 363 # DW_AT_name + .short 348 # DW_AT_linkage_name + .short 349 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x19f8:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1875:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10265 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a04:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10391 # DW_AT_type + .byte 24 # Abbrev [24] 0x1881:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10281 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a10:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a12:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10407 # DW_AT_type + .byte 30 # Abbrev [30] 0x188d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x188f:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1a19:0x30 DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1896:0x30 DW_TAG_subprogram .ascii "\200\001" # DW_AT_low_pc .long .Lfunc_end127-.Lfunc_begin127 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 364 # DW_AT_linkage_name - .short 365 # DW_AT_name + .short 350 # DW_AT_linkage_name + .short 351 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1a28:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x18a5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10298 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a34:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10424 # DW_AT_type + .byte 24 # Abbrev [24] 0x18b1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10314 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a40:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a42:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10440 # DW_AT_type + .byte 30 # Abbrev [30] 0x18bd:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x18bf:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1a49:0x30 DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x18c6:0x30 DW_TAG_subprogram .ascii "\201\001" # DW_AT_low_pc .long .Lfunc_end128-.Lfunc_begin128 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 366 # DW_AT_linkage_name - .short 367 # DW_AT_name + .short 352 # DW_AT_linkage_name + .short 353 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1a58:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x18d5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10331 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a64:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10457 # DW_AT_type + .byte 24 # Abbrev [24] 0x18e1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10347 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a70:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a72:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10473 # DW_AT_type + .byte 30 # Abbrev [30] 0x18ed:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x18ef:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1a79:0x16 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x18f6:0x16 DW_TAG_subprogram .ascii "\202\001" # DW_AT_low_pc .long .Lfunc_end129-.Lfunc_begin129 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 368 # DW_AT_linkage_name - .short 369 # DW_AT_name + .short 354 # DW_AT_linkage_name + .short 355 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 171 # DW_AT_decl_line + .byte 173 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x1a88:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1905:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1a8f:0x30 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x190c:0x1e DW_TAG_subprogram .ascii "\203\001" # DW_AT_low_pc .long .Lfunc_end130-.Lfunc_begin130 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 371 # DW_AT_linkage_name - .short 372 # DW_AT_name + .short 358 # DW_AT_linkage_name + .short 359 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 188 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1a9e:0xc DW_TAG_variable - .byte 2 # DW_AT_location - .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 15 # Abbrev [15] 0x191b:0x6 DW_TAG_template_type_parameter + .long 7875 # DW_AT_type + .byte 20 # DW_AT_name + .byte 57 # Abbrev [57] 0x1921:0x8 DW_TAG_template_value_parameter + .long 7875 # DW_AT_type + .short 357 # DW_AT_name + .byte 2 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x192a:0x1e DW_TAG_subprogram + .ascii "\204\001" # DW_AT_low_pc + .long .Lfunc_end131-.Lfunc_begin131 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 361 # DW_AT_linkage_name + .short 362 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10364 # DW_AT_type - .byte 27 # Abbrev [27] 0x1aaa:0xc DW_TAG_variable - .byte 2 # DW_AT_location - .byte 145 - .byte 112 - .short 387 # DW_AT_name + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x1939:0x6 DW_TAG_template_type_parameter + .long 7881 # DW_AT_type + .byte 20 # DW_AT_name + .byte 58 # Abbrev [58] 0x193f:0x8 DW_TAG_template_value_parameter + .long 7886 # DW_AT_type + .short 357 # DW_AT_name + .byte 2 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x1948:0x26 DW_TAG_subprogram + .ascii "\205\001" # DW_AT_low_pc + .long .Lfunc_end132-.Lfunc_begin132 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 364 # DW_AT_linkage_name + .short 365 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10380 # DW_AT_type - .byte 33 # Abbrev [33] 0x1ab6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ab8:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x1957:0x6 DW_TAG_template_type_parameter + .long 7892 # DW_AT_type + .byte 20 # DW_AT_name + .byte 59 # Abbrev [59] 0x195d:0x10 DW_TAG_template_value_parameter + .long 7892 # DW_AT_type + .short 357 # DW_AT_name + .byte 8 # DW_AT_const_value + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x196e:0x26 DW_TAG_subprogram + .ascii "\206\001" # DW_AT_low_pc + .long .Lfunc_end133-.Lfunc_begin133 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 367 # DW_AT_linkage_name + .short 368 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x197d:0x6 DW_TAG_template_type_parameter + .long 7898 # DW_AT_type + .byte 20 # DW_AT_name + .byte 59 # Abbrev [59] 0x1983:0x10 DW_TAG_template_value_parameter + .long 7903 # DW_AT_type + .short 357 # DW_AT_name + .byte 8 # DW_AT_const_value + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1abf:0x30 DW_TAG_subprogram - .ascii "\204\001" # DW_AT_low_pc - .long .Lfunc_end131-.Lfunc_begin131 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1994:0x30 DW_TAG_subprogram + .ascii "\207\001" # DW_AT_low_pc + .long .Lfunc_end134-.Lfunc_begin134 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 374 # DW_AT_linkage_name - .short 375 # DW_AT_name + .short 370 # DW_AT_linkage_name + .short 371 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1ace:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x19a3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10397 # DW_AT_type - .byte 27 # Abbrev [27] 0x1ada:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10490 # DW_AT_type + .byte 24 # Abbrev [24] 0x19af:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10413 # DW_AT_type - .byte 33 # Abbrev [33] 0x1ae6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ae8:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10506 # DW_AT_type + .byte 30 # Abbrev [30] 0x19bb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x19bd:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1aef:0x30 DW_TAG_subprogram - .ascii "\205\001" # DW_AT_low_pc - .long .Lfunc_end132-.Lfunc_begin132 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x19c4:0x30 DW_TAG_subprogram + .ascii "\210\001" # DW_AT_low_pc + .long .Lfunc_end135-.Lfunc_begin135 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 377 # DW_AT_linkage_name - .short 378 # DW_AT_name + .short 372 # DW_AT_linkage_name + .short 373 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1afe:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x19d3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10430 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b0a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10523 # DW_AT_type + .byte 24 # Abbrev [24] 0x19df:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10446 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b16:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b18:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10539 # DW_AT_type + .byte 30 # Abbrev [30] 0x19eb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x19ed:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1b1f:0x30 DW_TAG_subprogram - .ascii "\206\001" # DW_AT_low_pc - .long .Lfunc_end133-.Lfunc_begin133 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x19f4:0x30 DW_TAG_subprogram + .ascii "\211\001" # DW_AT_low_pc + .long .Lfunc_end136-.Lfunc_begin136 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 379 # DW_AT_linkage_name - .short 380 # DW_AT_name + .short 374 # DW_AT_linkage_name + .short 375 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1b2e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1a03:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10463 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b3a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10556 # DW_AT_type + .byte 24 # Abbrev [24] 0x1a0f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10479 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b46:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b48:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10572 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a1b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a1d:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1b4f:0x30 DW_TAG_subprogram - .ascii "\207\001" # DW_AT_low_pc - .long .Lfunc_end134-.Lfunc_begin134 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1a24:0x30 DW_TAG_subprogram + .ascii "\212\001" # DW_AT_low_pc + .long .Lfunc_end137-.Lfunc_begin137 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 381 # DW_AT_linkage_name - .short 382 # DW_AT_name + .short 376 # DW_AT_linkage_name + .short 377 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1b5e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1a33:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10496 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b6a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10589 # DW_AT_type + .byte 24 # Abbrev [24] 0x1a3f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10512 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b76:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b78:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10605 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a4b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a4d:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0x1b7f:0x12 DW_TAG_structure_type + .byte 40 # Abbrev [40] 0x1a54:0x16 DW_TAG_subprogram + .ascii "\213\001" # DW_AT_low_pc + .long .Lfunc_end138-.Lfunc_begin138 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 378 # DW_AT_linkage_name + .short 379 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 185 # DW_AT_decl_line + .byte 35 # Abbrev [35] 0x1a63:0x6 DW_TAG_template_value_parameter + .long 133 # DW_AT_type + .byte 0 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 14 # Abbrev [14] 0x1a6a:0x12 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 133 # DW_AT_name + .byte 85 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 153 # DW_AT_decl_line - .byte 51 # Abbrev [51] 0x1b85:0xb DW_TAG_subprogram - .byte 131 # DW_AT_linkage_name - .byte 132 # DW_AT_name + .byte 155 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0x1a70:0xb DW_TAG_subprogram + .byte 83 # DW_AT_linkage_name + .byte 84 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 154 # DW_AT_decl_line + .byte 156 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 19 # Abbrev [19] 0x1b8a:0x5 DW_TAG_formal_parameter - .long 7057 # DW_AT_type + .byte 19 # Abbrev [19] 0x1a75:0x5 DW_TAG_formal_parameter + .long 6780 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1b91:0x5 DW_TAG_pointer_type - .long 7039 # DW_AT_type - .byte 62 # Abbrev [62] 0x1b96:0x21 DW_TAG_subprogram - .ascii "\210\001" # DW_AT_low_pc - .long .Lfunc_end135-.Lfunc_begin135 # DW_AT_high_pc + .byte 47 # Abbrev [47] 0x1a7c:0x5 DW_TAG_pointer_type + .long 6762 # DW_AT_type + .byte 60 # Abbrev [60] 0x1a81:0x21 DW_TAG_subprogram + .ascii "\214\001" # DW_AT_low_pc + .long .Lfunc_end139-.Lfunc_begin139 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 7081 # DW_AT_object_pointer - .short 329 # DW_AT_decl_line - .long 7045 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1ba9:0xa DW_TAG_formal_parameter + .long 6804 # DW_AT_object_pointer + .short 342 # DW_AT_decl_line + .long 6768 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1a94:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 10529 # DW_AT_type + .short 486 # DW_AT_name + .long 10622 # DW_AT_type # DW_AT_artificial - .byte 32 # Abbrev [32] 0x1bb3:0x3 DW_TAG_structure_type - .short 295 # DW_AT_name + .byte 29 # Abbrev [29] 0x1a9e:0x3 DW_TAG_structure_type + .short 281 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1bb7:0x30 DW_TAG_subprogram - .ascii "\211\001" # DW_AT_low_pc - .long .Lfunc_end136-.Lfunc_begin136 # DW_AT_high_pc + .byte 40 # Abbrev [40] 0x1aa2:0x30 DW_TAG_subprogram + .ascii "\215\001" # DW_AT_low_pc + .long .Lfunc_end140-.Lfunc_begin140 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 383 # DW_AT_linkage_name - .short 297 # DW_AT_name + .short 380 # DW_AT_linkage_name + .short 283 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1bc6:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1ab1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10534 # DW_AT_type - .byte 27 # Abbrev [27] 0x1bd2:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10627 # DW_AT_type + .byte 24 # Abbrev [24] 0x1abd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10550 # DW_AT_type - .byte 33 # Abbrev [33] 0x1bde:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1be0:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10643 # DW_AT_type + .byte 30 # Abbrev [30] 0x1ac9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1acb:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1be7:0x30 DW_TAG_subprogram - .ascii "\212\001" # DW_AT_low_pc - .long .Lfunc_end137-.Lfunc_begin137 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1ad2:0x30 DW_TAG_subprogram + .ascii "\216\001" # DW_AT_low_pc + .long .Lfunc_end141-.Lfunc_begin141 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 384 # DW_AT_linkage_name - .short 385 # DW_AT_name + .short 381 # DW_AT_linkage_name + .short 382 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1bf6:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1ae1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10567 # DW_AT_type - .byte 27 # Abbrev [27] 0x1c02:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10660 # DW_AT_type + .byte 24 # Abbrev [24] 0x1aed:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10583 # DW_AT_type - .byte 33 # Abbrev [33] 0x1c0e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 37 # DW_AT_decl_line + .long 10676 # DW_AT_type + .byte 30 # Abbrev [30] 0x1af9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1afb:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 8 # Abbrev [8] 0x1b02:0x75 DW_TAG_namespace .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1c10:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 61 # Abbrev [61] 0x1b04:0x2b DW_TAG_subprogram + .ascii "\217\001" # DW_AT_low_pc + .long .Lfunc_end142-.Lfunc_begin142 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 383 # DW_AT_linkage_name + .short 384 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 360 # DW_AT_decl_line + # DW_AT_external + .byte 25 # Abbrev [25] 0x1b14:0xd DW_TAG_variable + .byte 2 # DW_AT_location + .byte 145 + .byte 127 + .short 389 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 361 # DW_AT_decl_line + .long 6959 # DW_AT_type + .byte 25 # Abbrev [25] 0x1b21:0xd DW_TAG_variable + .byte 2 # DW_AT_location + .byte 145 + .byte 126 + .short 386 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 362 # DW_AT_decl_line + .long 7002 # DW_AT_type .byte 0 # End Of Children Mark + .byte 62 # Abbrev [62] 0x1b2f:0x13 DW_TAG_structure_type + .byte 5 # DW_AT_calling_convention + .byte 240 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 357 # DW_AT_decl_line + .byte 63 # Abbrev [63] 0x1b36:0xb DW_TAG_member + .short 389 # DW_AT_name + .long 6978 # DW_AT_type + .byte 0 # DW_AT_decl_file + .short 358 # DW_AT_decl_line + .byte 0 # DW_AT_data_member_location .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x1c17:0x4 DW_TAG_base_type - .byte 143 # DW_AT_name + .byte 64 # Abbrev [64] 0x1b42:0x13 DW_TAG_structure_type + .byte 5 # DW_AT_calling_convention + .short 556 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 355 # DW_AT_decl_line + .byte 65 # Abbrev [65] 0x1b4a:0x5 DW_TAG_template_type_parameter + .long 6998 # DW_AT_type + # DW_AT_default_value + .byte 65 # Abbrev [65] 0x1b4f:0x5 DW_TAG_template_type_parameter + .long 7002 # DW_AT_type + # DW_AT_default_value + .byte 0 # End Of Children Mark + .byte 4 # Abbrev [4] 0x1b55:0x5 DW_TAG_namespace + .byte 29 # Abbrev [29] 0x1b56:0x3 DW_TAG_structure_type + .short 553 # DW_AT_name + # DW_AT_declaration + .byte 0 # End Of Children Mark + .byte 66 # Abbrev [66] 0x1b5a:0xe DW_TAG_class_type + .byte 5 # DW_AT_calling_convention + .short 555 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 353 # DW_AT_decl_line + .byte 65 # Abbrev [65] 0x1b62:0x5 DW_TAG_template_type_parameter + .long 7016 # DW_AT_type + # DW_AT_default_value + .byte 0 # End Of Children Mark + .byte 67 # Abbrev [67] 0x1b68:0xe DW_TAG_structure_type + .short 554 # DW_AT_name + # DW_AT_declaration + .byte 68 # Abbrev [68] 0x1b6b:0xa DW_TAG_template_value_parameter + .long 7504 # DW_AT_type + # DW_AT_default_value + .byte 4 # DW_AT_location + .byte 161 + .ascii "\220\001" + .byte 159 + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 69 # Abbrev [69] 0x1b77:0x9 DW_TAG_typedef + .long 7040 # DW_AT_type + .byte 88 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 268 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1b80:0x4 DW_TAG_base_type + .byte 87 # DW_AT_name + .byte 6 # DW_AT_encoding + .byte 1 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1b84:0x8 DW_TAG_typedef + .long 7052 # DW_AT_type + .byte 90 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 245 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1b8c:0x4 DW_TAG_base_type + .byte 89 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 2 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1b90:0x8 DW_TAG_typedef + .long 54 # DW_AT_type + .byte 91 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 197 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1b98:0x8 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 93 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 100 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1ba0:0x4 DW_TAG_base_type + .byte 92 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 8 # DW_AT_byte_size + .byte 69 # Abbrev [69] 0x1ba4:0x9 DW_TAG_typedef + .long 178 # DW_AT_type + .byte 94 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 270 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bad:0x8 DW_TAG_typedef + .long 7093 # DW_AT_type + .byte 96 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 247 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1bb5:0x4 DW_TAG_base_type + .byte 95 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 2 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1bb9:0x8 DW_TAG_typedef + .long 75 # DW_AT_type + .byte 97 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 202 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bc1:0x8 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 98 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 102 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bc9:0x9 DW_TAG_typedef + .long 7031 # DW_AT_type + .byte 99 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 278 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bd2:0x9 DW_TAG_typedef + .long 7044 # DW_AT_type + .byte 100 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 259 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bdb:0x8 DW_TAG_typedef + .long 7056 # DW_AT_type + .byte 101 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 220 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1be3:0x8 DW_TAG_typedef + .long 7064 # DW_AT_type + .byte 102 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 122 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1beb:0x9 DW_TAG_typedef + .long 7076 # DW_AT_type + .byte 103 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 279 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bf4:0x9 DW_TAG_typedef + .long 7085 # DW_AT_type + .byte 104 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 260 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bfd:0x8 DW_TAG_typedef + .long 7097 # DW_AT_type + .byte 105 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 221 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c05:0x8 DW_TAG_typedef + .long 7105 # DW_AT_type + .byte 106 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 123 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c0d:0x9 DW_TAG_typedef + .long 7031 # DW_AT_type + .byte 107 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 280 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c16:0x9 DW_TAG_typedef + .long 7044 # DW_AT_type + .byte 108 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 261 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c1f:0x8 DW_TAG_typedef + .long 7056 # DW_AT_type + .byte 109 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 222 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c27:0x8 DW_TAG_typedef + .long 7064 # DW_AT_type + .byte 110 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 124 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c2f:0x9 DW_TAG_typedef + .long 7076 # DW_AT_type + .byte 111 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 281 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c38:0x9 DW_TAG_typedef + .long 7085 # DW_AT_type + .byte 112 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 262 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c41:0x8 DW_TAG_typedef + .long 7097 # DW_AT_type + .byte 113 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 223 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c49:0x8 DW_TAG_typedef + .long 7105 # DW_AT_type + .byte 114 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 125 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c51:0x9 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 115 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 295 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c5a:0x9 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 116 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 302 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c63:0x9 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 117 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 308 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c6c:0x9 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 118 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 309 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c75:0x8 DW_TAG_typedef + .long 7293 # DW_AT_type + .byte 119 # DW_AT_name + .byte 4 # DW_AT_decl_file + .byte 24 # DW_AT_decl_line + .byte 70 # Abbrev [70] 0x1c7d:0x1 DW_TAG_structure_type + # DW_AT_declaration + .byte 3 # Abbrev [3] 0x1c7e:0x4 DW_TAG_base_type + .byte 129 # DW_AT_name .byte 4 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c1b:0x4 DW_TAG_base_type - .byte 152 # DW_AT_name + .byte 3 # Abbrev [3] 0x1c82:0x4 DW_TAG_base_type + .byte 138 # DW_AT_name .byte 7 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c1f:0x4 DW_TAG_base_type - .byte 155 # DW_AT_name + .byte 3 # Abbrev [3] 0x1c86:0x4 DW_TAG_base_type + .byte 141 # DW_AT_name .byte 5 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 7 # Abbrev [7] 0x1c23:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 7 # Abbrev [7] 0x1c8a:0x2 DW_TAG_structure_type + .byte 144 # DW_AT_name # DW_AT_declaration - .byte 55 # Abbrev [55] 0x1c25:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1c8c:0x5 DW_TAG_pointer_type .long 170 # DW_AT_type - .byte 14 # Abbrev [14] 0x1c2a:0xf DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1c91:0xf DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 168 # DW_AT_name + .byte 154 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1c30:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1c32:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1c97:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1c99:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1c39:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1ca0:0x5 DW_TAG_pointer_type .long 54 # DW_AT_type - .byte 63 # Abbrev [63] 0x1c3e:0x5 DW_TAG_reference_type + .byte 71 # Abbrev [71] 0x1ca5:0x5 DW_TAG_reference_type .long 54 # DW_AT_type - .byte 64 # Abbrev [64] 0x1c43:0x5 DW_TAG_rvalue_reference_type + .byte 72 # Abbrev [72] 0x1caa:0x5 DW_TAG_rvalue_reference_type .long 54 # DW_AT_type - .byte 65 # Abbrev [65] 0x1c48:0x5 DW_TAG_const_type + .byte 73 # Abbrev [73] 0x1caf:0x5 DW_TAG_const_type .long 54 # DW_AT_type - .byte 66 # Abbrev [66] 0x1c4d:0xc DW_TAG_array_type + .byte 74 # Abbrev [74] 0x1cb4:0xc DW_TAG_array_type .long 54 # DW_AT_type - .byte 67 # Abbrev [67] 0x1c52:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 75 # Abbrev [75] 0x1cb9:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 3 # DW_AT_count .byte 0 # End Of Children Mark - .byte 68 # Abbrev [68] 0x1c59:0x4 DW_TAG_base_type - .byte 181 # DW_AT_name + .byte 76 # Abbrev [76] 0x1cc0:0x4 DW_TAG_base_type + .byte 167 # DW_AT_name .byte 8 # DW_AT_byte_size .byte 7 # DW_AT_encoding - .byte 14 # Abbrev [14] 0x1c5d:0x9 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1cc4:0x9 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 186 # DW_AT_name + .byte 172 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .byte 7 # Abbrev [7] 0x1c63:0x2 DW_TAG_structure_type - .byte 187 # DW_AT_name + .byte 52 # DW_AT_decl_line + .byte 7 # Abbrev [7] 0x1cca:0x2 DW_TAG_structure_type + .byte 173 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x1c66:0x4 DW_TAG_base_type - .byte 225 # DW_AT_name + .byte 3 # Abbrev [3] 0x1ccd:0x4 DW_TAG_base_type + .byte 211 # DW_AT_name .byte 6 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c6a:0x4 DW_TAG_base_type - .byte 228 # DW_AT_name + .byte 3 # Abbrev [3] 0x1cd1:0x4 DW_TAG_base_type + .byte 214 # DW_AT_name .byte 5 # DW_AT_encoding .byte 16 # DW_AT_byte_size - .byte 69 # Abbrev [69] 0x1c6e:0x10 DW_TAG_structure_type - .byte 235 # DW_AT_name + .byte 77 # Abbrev [77] 0x1cd5:0x10 DW_TAG_structure_type + .byte 221 # DW_AT_name # DW_AT_declaration - .byte 15 # Abbrev [15] 0x1c70:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1cd7:0x6 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c76:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1cdd:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 69 # Abbrev [69] 0x1c7e:0x10 DW_TAG_structure_type - .byte 241 # DW_AT_name + .byte 77 # Abbrev [77] 0x1ce5:0x10 DW_TAG_structure_type + .byte 227 # DW_AT_name # DW_AT_declaration - .byte 15 # Abbrev [15] 0x1c80:0x6 DW_TAG_template_type_parameter - .long 7310 # DW_AT_type + .byte 15 # Abbrev [15] 0x1ce7:0x6 DW_TAG_template_type_parameter + .long 7413 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c86:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1ced:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0x1c8e:0x14 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1cf5:0x14 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 240 # DW_AT_name + .byte 226 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 47 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1c94:0x6 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 49 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1cfb:0x6 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c9a:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1d01:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 70 # Abbrev [70] 0x1ca2:0xb DW_TAG_subroutine_type + .byte 78 # Abbrev [78] 0x1d09:0xb DW_TAG_subroutine_type .long 54 # DW_AT_type - .byte 52 # Abbrev [52] 0x1ca7:0x5 DW_TAG_formal_parameter - .long 4531 # DW_AT_type + .byte 45 # Abbrev [45] 0x1d0e:0x5 DW_TAG_formal_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1cad:0x3 DW_TAG_subroutine_type - .byte 72 # Abbrev [72] 0x1cae:0x1 DW_TAG_unspecified_parameters + .byte 79 # Abbrev [79] 0x1d14:0x3 DW_TAG_subroutine_type + .byte 80 # Abbrev [80] 0x1d15:0x1 DW_TAG_unspecified_parameters .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1cb0:0x8 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1cb1:0x5 DW_TAG_formal_parameter + .byte 79 # Abbrev [79] 0x1d17:0x8 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1d18:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type - .byte 72 # Abbrev [72] 0x1cb6:0x1 DW_TAG_unspecified_parameters - .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1cb8:0x5 DW_TAG_reference_type - .long 7240 # DW_AT_type - .byte 63 # Abbrev [63] 0x1cbd:0x5 DW_TAG_reference_type - .long 7362 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cc2:0x5 DW_TAG_pointer_type - .long 7240 # DW_AT_type - .byte 73 # Abbrev [73] 0x1cc7:0x3 DW_TAG_unspecified_type - .short 257 # DW_AT_name - .byte 55 # Abbrev [55] 0x1cca:0x5 DW_TAG_pointer_type - .long 505 # DW_AT_type - .byte 55 # Abbrev [55] 0x1ccf:0x5 DW_TAG_pointer_type - .long 7203 # DW_AT_type - .byte 65 # Abbrev [65] 0x1cd4:0x5 DW_TAG_const_type - .long 5183 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cd9:0x5 DW_TAG_pointer_type - .long 7390 # DW_AT_type - .byte 65 # Abbrev [65] 0x1cde:0x5 DW_TAG_const_type - .long 7395 # DW_AT_type - .byte 55 # Abbrev [55] 0x1ce3:0x5 DW_TAG_pointer_type - .long 7400 # DW_AT_type - .byte 74 # Abbrev [74] 0x1ce8:0x1 DW_TAG_const_type - .byte 75 # Abbrev [75] 0x1ce9:0x1 DW_TAG_subroutine_type - .byte 55 # Abbrev [55] 0x1cea:0x5 DW_TAG_pointer_type - .long 7401 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cef:0x5 DW_TAG_pointer_type - .long 966 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cf4:0x5 DW_TAG_pointer_type - .long 971 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cf9:0x5 DW_TAG_pointer_type - .long 7422 # DW_AT_type - .byte 76 # Abbrev [76] 0x1cfe:0x10 DW_TAG_structure_type + .byte 80 # Abbrev [80] 0x1d1d:0x1 DW_TAG_unspecified_parameters + .byte 0 # End Of Children Mark + .byte 71 # Abbrev [71] 0x1d1f:0x5 DW_TAG_reference_type + .long 7343 # DW_AT_type + .byte 71 # Abbrev [71] 0x1d24:0x5 DW_TAG_reference_type + .long 7465 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d29:0x5 DW_TAG_pointer_type + .long 7343 # DW_AT_type + .byte 81 # Abbrev [81] 0x1d2e:0x2 DW_TAG_unspecified_type + .byte 243 # DW_AT_name + .byte 47 # Abbrev [47] 0x1d30:0x5 DW_TAG_pointer_type + .long 7072 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d35:0x5 DW_TAG_pointer_type + .long 7306 # DW_AT_type + .byte 73 # Abbrev [73] 0x1d3a:0x5 DW_TAG_const_type + .long 4575 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d3f:0x5 DW_TAG_pointer_type + .long 7492 # DW_AT_type + .byte 73 # Abbrev [73] 0x1d44:0x5 DW_TAG_const_type + .long 7497 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d49:0x5 DW_TAG_pointer_type + .long 7502 # DW_AT_type + .byte 82 # Abbrev [82] 0x1d4e:0x1 DW_TAG_const_type + .byte 83 # Abbrev [83] 0x1d4f:0x1 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1d50:0x5 DW_TAG_pointer_type + .long 7503 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d55:0x5 DW_TAG_pointer_type + .long 371 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d5a:0x5 DW_TAG_pointer_type + .long 376 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d5f:0x5 DW_TAG_pointer_type + .long 7524 # DW_AT_type + .byte 84 # Abbrev [84] 0x1d64:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 290 # DW_AT_name + .short 276 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1d05:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1d07:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 0 # End Of Children Mark - .byte 66 # Abbrev [66] 0x1d0e:0xb DW_TAG_array_type - .long 7225 # DW_AT_type - .byte 77 # Abbrev [77] 0x1d13:0x5 DW_TAG_subrange_type - .long 7257 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1d19:0x5 DW_TAG_reference_type - .long 7245 # DW_AT_type - .byte 55 # Abbrev [55] 0x1d1e:0x5 DW_TAG_pointer_type - .long 7245 # DW_AT_type - .byte 55 # Abbrev [55] 0x1d23:0x5 DW_TAG_pointer_type - .long 7367 # DW_AT_type - .byte 76 # Abbrev [76] 0x1d28:0xe DW_TAG_structure_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1d6b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1d6d:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 74 # Abbrev [74] 0x1d74:0xb DW_TAG_array_type + .long 7328 # DW_AT_type + .byte 85 # Abbrev [85] 0x1d79:0x5 DW_TAG_subrange_type + .long 7360 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 71 # Abbrev [71] 0x1d7f:0x5 DW_TAG_reference_type + .long 7348 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d84:0x5 DW_TAG_pointer_type + .long 7348 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d89:0x5 DW_TAG_pointer_type + .long 7470 # DW_AT_type + .byte 84 # Abbrev [84] 0x1d8e:0xe DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 312 # DW_AT_name + .short 298 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 151 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1d2f:0x6 DW_TAG_template_type_parameter + .byte 153 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1d95:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 78 # Abbrev [78] 0x1d36:0x5 DW_TAG_atomic_type + .byte 86 # Abbrev [86] 0x1d9c:0x5 DW_TAG_atomic_type .long 54 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d3b:0x5 DW_TAG_volatile_type - .long 7270 # DW_AT_type - .byte 80 # Abbrev [80] 0x1d40:0xc DW_TAG_array_type + .byte 87 # Abbrev [87] 0x1da1:0x5 DW_TAG_volatile_type + .long 7373 # DW_AT_type + .byte 88 # Abbrev [88] 0x1da6:0xc DW_TAG_array_type # DW_AT_GNU_vector .long 54 # DW_AT_type - .byte 67 # Abbrev [67] 0x1d45:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 75 # Abbrev [75] 0x1dab:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 2 # DW_AT_count .byte 0 # End Of Children Mark - .byte 65 # Abbrev [65] 0x1d4c:0x5 DW_TAG_const_type - .long 7505 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d51:0x5 DW_TAG_volatile_type - .long 7225 # DW_AT_type - .byte 65 # Abbrev [65] 0x1d56:0x5 DW_TAG_const_type - .long 7515 # DW_AT_type - .byte 81 # Abbrev [81] 0x1d5b:0x1 DW_TAG_volatile_type - .byte 76 # Abbrev [76] 0x1d5c:0x10 DW_TAG_structure_type + .byte 73 # Abbrev [73] 0x1db2:0x5 DW_TAG_const_type + .long 7607 # DW_AT_type + .byte 87 # Abbrev [87] 0x1db7:0x5 DW_TAG_volatile_type + .long 7328 # DW_AT_type + .byte 73 # Abbrev [73] 0x1dbc:0x5 DW_TAG_const_type + .long 7617 # DW_AT_type + .byte 89 # Abbrev [89] 0x1dc1:0x1 DW_TAG_volatile_type + .byte 84 # Abbrev [84] 0x1dc2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 328 # DW_AT_name + .short 314 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1d63:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1d65:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1dc9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1dcb:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 82 # Abbrev [82] 0x1d6c:0x9 DW_TAG_ptr_to_member_type - .long 7541 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1d75:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1d76:0x5 DW_TAG_formal_parameter - .long 7548 # DW_AT_type + .byte 90 # Abbrev [90] 0x1dd2:0x9 DW_TAG_ptr_to_member_type + .long 7643 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1ddb:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1ddc:0x5 DW_TAG_formal_parameter + .long 7650 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1d7c:0x5 DW_TAG_pointer_type - .long 7553 # DW_AT_type - .byte 65 # Abbrev [65] 0x1d81:0x5 DW_TAG_const_type - .long 7203 # DW_AT_type - .byte 82 # Abbrev [82] 0x1d86:0x9 DW_TAG_ptr_to_member_type - .long 7567 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 83 # Abbrev [83] 0x1d8f:0x7 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1de2:0x5 DW_TAG_pointer_type + .long 7655 # DW_AT_type + .byte 73 # Abbrev [73] 0x1de7:0x5 DW_TAG_const_type + .long 7306 # DW_AT_type + .byte 90 # Abbrev [90] 0x1dec:0x9 DW_TAG_ptr_to_member_type + .long 7669 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 91 # Abbrev [91] 0x1df5:0x7 DW_TAG_subroutine_type # DW_AT_reference - .byte 19 # Abbrev [19] 0x1d90:0x5 DW_TAG_formal_parameter - .long 7574 # DW_AT_type + .byte 19 # Abbrev [19] 0x1df6:0x5 DW_TAG_formal_parameter + .long 7676 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1d96:0x5 DW_TAG_pointer_type - .long 7579 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d9b:0x5 DW_TAG_volatile_type - .long 7203 # DW_AT_type - .byte 82 # Abbrev [82] 0x1da0:0x9 DW_TAG_ptr_to_member_type - .long 7593 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 84 # Abbrev [84] 0x1da9:0x7 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1dfc:0x5 DW_TAG_pointer_type + .long 7681 # DW_AT_type + .byte 87 # Abbrev [87] 0x1e01:0x5 DW_TAG_volatile_type + .long 7306 # DW_AT_type + .byte 90 # Abbrev [90] 0x1e06:0x9 DW_TAG_ptr_to_member_type + .long 7695 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 92 # Abbrev [92] 0x1e0f:0x7 DW_TAG_subroutine_type # DW_AT_rvalue_reference - .byte 19 # Abbrev [19] 0x1daa:0x5 DW_TAG_formal_parameter - .long 7600 # DW_AT_type + .byte 19 # Abbrev [19] 0x1e10:0x5 DW_TAG_formal_parameter + .long 7702 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1db0:0x5 DW_TAG_pointer_type - .long 7605 # DW_AT_type - .byte 65 # Abbrev [65] 0x1db5:0x5 DW_TAG_const_type - .long 7579 # DW_AT_type - .byte 65 # Abbrev [65] 0x1dba:0x5 DW_TAG_const_type - .long 7402 # DW_AT_type - .byte 63 # Abbrev [63] 0x1dbf:0x5 DW_TAG_reference_type - .long 7620 # DW_AT_type - .byte 65 # Abbrev [65] 0x1dc4:0x5 DW_TAG_const_type - .long 7625 # DW_AT_type - .byte 66 # Abbrev [66] 0x1dc9:0xc DW_TAG_array_type - .long 7270 # DW_AT_type - .byte 67 # Abbrev [67] 0x1dce:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 47 # Abbrev [47] 0x1e16:0x5 DW_TAG_pointer_type + .long 7707 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e1b:0x5 DW_TAG_const_type + .long 7681 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e20:0x5 DW_TAG_const_type + .long 7504 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e25:0x5 DW_TAG_reference_type + .long 7722 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e2a:0x5 DW_TAG_const_type + .long 7727 # DW_AT_type + .byte 74 # Abbrev [74] 0x1e2f:0xc DW_TAG_array_type + .long 7373 # DW_AT_type + .byte 75 # Abbrev [75] 0x1e34:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 65 # Abbrev [65] 0x1dd5:0x5 DW_TAG_const_type - .long 7642 # DW_AT_type - .byte 85 # Abbrev [85] 0x1dda:0x1 DW_TAG_subroutine_type + .byte 73 # Abbrev [73] 0x1e3b:0x5 DW_TAG_const_type + .long 7744 # DW_AT_type + .byte 93 # Abbrev [93] 0x1e40:0x1 DW_TAG_subroutine_type # DW_AT_reference - .byte 79 # Abbrev [79] 0x1ddb:0x5 DW_TAG_volatile_type - .long 7648 # DW_AT_type - .byte 86 # Abbrev [86] 0x1de0:0x1 DW_TAG_subroutine_type + .byte 87 # Abbrev [87] 0x1e41:0x5 DW_TAG_volatile_type + .long 7750 # DW_AT_type + .byte 94 # Abbrev [94] 0x1e46:0x1 DW_TAG_subroutine_type # DW_AT_rvalue_reference - .byte 65 # Abbrev [65] 0x1de1:0x5 DW_TAG_const_type - .long 7654 # DW_AT_type - .byte 79 # Abbrev [79] 0x1de6:0x5 DW_TAG_volatile_type - .long 7401 # DW_AT_type - .byte 65 # Abbrev [65] 0x1deb:0x5 DW_TAG_const_type - .long 7664 # DW_AT_type - .byte 66 # Abbrev [66] 0x1df0:0xc DW_TAG_array_type - .long 7225 # DW_AT_type - .byte 67 # Abbrev [67] 0x1df5:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e47:0x5 DW_TAG_const_type + .long 7756 # DW_AT_type + .byte 87 # Abbrev [87] 0x1e4c:0x5 DW_TAG_volatile_type + .long 7503 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e51:0x5 DW_TAG_const_type + .long 7766 # DW_AT_type + .byte 74 # Abbrev [74] 0x1e56:0xc DW_TAG_array_type + .long 7328 # DW_AT_type + .byte 75 # Abbrev [75] 0x1e5b:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1dfc:0x5 DW_TAG_reference_type - .long 7659 # DW_AT_type - .byte 63 # Abbrev [63] 0x1e01:0x5 DW_TAG_reference_type - .long 7686 # DW_AT_type - .byte 65 # Abbrev [65] 0x1e06:0x5 DW_TAG_const_type - .long 7691 # DW_AT_type - .byte 82 # Abbrev [82] 0x1e0b:0x9 DW_TAG_ptr_to_member_type - .long 7700 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1e14:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1e15:0x5 DW_TAG_formal_parameter - .long 7707 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e62:0x5 DW_TAG_reference_type + .long 7761 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e67:0x5 DW_TAG_reference_type + .long 7788 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e6c:0x5 DW_TAG_const_type + .long 7793 # DW_AT_type + .byte 90 # Abbrev [90] 0x1e71:0x9 DW_TAG_ptr_to_member_type + .long 7802 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1e7a:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1e7b:0x5 DW_TAG_formal_parameter + .long 7809 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1e1b:0x5 DW_TAG_pointer_type - .long 7203 # DW_AT_type - .byte 70 # Abbrev [70] 0x1e20:0xb DW_TAG_subroutine_type - .long 7723 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e25:0x5 DW_TAG_formal_parameter + .byte 47 # Abbrev [47] 0x1e81:0x5 DW_TAG_pointer_type + .long 7306 # DW_AT_type + .byte 78 # Abbrev [78] 0x1e86:0xb DW_TAG_subroutine_type + .long 7825 # DW_AT_type + .byte 45 # Abbrev [45] 0x1e8b:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1e2b:0x5 DW_TAG_pointer_type - .long 7728 # DW_AT_type - .byte 71 # Abbrev [71] 0x1e30:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e31:0x5 DW_TAG_formal_parameter - .long 4531 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 66 # Abbrev [66] 0x1e37:0xc DW_TAG_array_type - .long 7210 # DW_AT_type - .byte 67 # Abbrev [67] 0x1e3c:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 47 # Abbrev [47] 0x1e91:0x5 DW_TAG_pointer_type + .long 7830 # DW_AT_type + .byte 79 # Abbrev [79] 0x1e96:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1e97:0x5 DW_TAG_formal_parameter + .long 3923 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 74 # Abbrev [74] 0x1e9d:0xc DW_TAG_array_type + .long 7313 # DW_AT_type + .byte 75 # Abbrev [75] 0x1ea2:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e43:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e44:0x5 DW_TAG_formal_parameter - .long 971 # DW_AT_type + .byte 79 # Abbrev [79] 0x1ea9:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1eaa:0x5 DW_TAG_formal_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e4a:0xc DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e4b:0x5 DW_TAG_formal_parameter - .long 979 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e50:0x5 DW_TAG_formal_parameter - .long 971 # DW_AT_type + .byte 79 # Abbrev [79] 0x1eb0:0xc DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1eb1:0x5 DW_TAG_formal_parameter + .long 384 # DW_AT_type + .byte 45 # Abbrev [45] 0x1eb6:0x5 DW_TAG_formal_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e56:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e57:0x5 DW_TAG_formal_parameter - .long 979 # DW_AT_type + .byte 79 # Abbrev [79] 0x1ebc:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1ebd:0x5 DW_TAG_formal_parameter + .long 384 # DW_AT_type .byte 0 # End Of Children Mark - .byte 87 # Abbrev [87] 0x1e5d:0x5 DW_TAG_base_type - .short 370 # DW_AT_name + .byte 95 # Abbrev [95] 0x1ec3:0x6 DW_TAG_base_type + .short 356 # DW_AT_name .byte 5 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 65 # Abbrev [65] 0x1e62:0x5 DW_TAG_const_type - .long 7783 # DW_AT_type - .byte 87 # Abbrev [87] 0x1e67:0x5 DW_TAG_base_type - .short 373 # DW_AT_name + .byte 3 # DW_AT_bit_size + .byte 73 # Abbrev [73] 0x1ec9:0x5 DW_TAG_const_type + .long 7886 # DW_AT_type + .byte 95 # Abbrev [95] 0x1ece:0x6 DW_TAG_base_type + .short 360 # DW_AT_name .byte 7 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 71 # Abbrev [71] 0x1e6c:0xc DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e6d:0x5 DW_TAG_formal_parameter - .long 7800 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e72:0x5 DW_TAG_formal_parameter - .long 7800 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1e78:0xa DW_TAG_structure_type + .byte 5 # DW_AT_bit_size + .byte 95 # Abbrev [95] 0x1ed4:0x6 DW_TAG_base_type + .short 363 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 16 # DW_AT_byte_size + .byte 65 # DW_AT_bit_size + .byte 73 # Abbrev [73] 0x1eda:0x5 DW_TAG_const_type + .long 7903 # DW_AT_type + .byte 95 # Abbrev [95] 0x1edf:0x6 DW_TAG_base_type + .short 366 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 16 # DW_AT_byte_size + .byte 65 # DW_AT_bit_size + .byte 79 # Abbrev [79] 0x1ee5:0xc DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1ee6:0x5 DW_TAG_formal_parameter + .long 7921 # DW_AT_type + .byte 45 # Abbrev [45] 0x1eeb:0x5 DW_TAG_formal_parameter + .long 7921 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 84 # Abbrev [84] 0x1ef1:0xa DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 376 # DW_AT_name + .short 369 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 50 # Abbrev [50] 0x1e7f:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name + .byte 14 # DW_AT_decl_line + .byte 44 # Abbrev [44] 0x1ef8:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 82 # Abbrev [82] 0x1e82:0x9 DW_TAG_ptr_to_member_type + .byte 90 # Abbrev [90] 0x1efb:0x9 DW_TAG_ptr_to_member_type .long 54 # DW_AT_type - .long 7800 # DW_AT_containing_type - .byte 88 # Abbrev [88] 0x1e8b:0x2 DW_TAG_subroutine_type + .long 7921 # DW_AT_containing_type + .byte 96 # Abbrev [96] 0x1f04:0x2 DW_TAG_subroutine_type .byte 200 # DW_AT_calling_convention - .byte 82 # Abbrev [82] 0x1e8d:0x9 DW_TAG_ptr_to_member_type - .long 7830 # DW_AT_type - .long 7039 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1e96:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1e97:0x5 DW_TAG_formal_parameter - .long 7057 # DW_AT_type + .byte 97 # Abbrev [97] 0x1f06:0x5 DW_TAG_subroutine_type + .long 54 # DW_AT_type + .byte 90 # Abbrev [90] 0x1f0b:0x9 DW_TAG_ptr_to_member_type + .long 7956 # DW_AT_type + .long 6762 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1f14:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1f15:0x5 DW_TAG_formal_parameter + .long 6780 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1e9d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f1b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 389 # DW_AT_name + .short 388 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 56 # DW_AT_decl_line - .byte 89 # Abbrev [89] 0x1ea4:0x8 DW_TAG_template_value_parameter + .byte 58 # DW_AT_decl_line + .byte 58 # Abbrev [58] 0x1f22:0x8 DW_TAG_template_value_parameter .long 75 # DW_AT_type - .short 388 # DW_AT_name + .short 387 # DW_AT_name .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 90 # Abbrev [90] 0x1ead:0x9 DW_TAG_typedef - .long 7464 # DW_AT_type - .short 393 # DW_AT_name + .byte 98 # Abbrev [98] 0x1f2b:0x9 DW_TAG_typedef + .long 7566 # DW_AT_type + .short 392 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 147 # DW_AT_decl_line - .byte 76 # Abbrev [76] 0x1eb6:0x12 DW_TAG_structure_type + .byte 149 # DW_AT_decl_line + .byte 84 # Abbrev [84] 0x1f34:0x12 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 397 # DW_AT_name + .short 396 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 178 # DW_AT_decl_line - .byte 91 # Abbrev [91] 0x1ebd:0xa DW_TAG_member - .short 390 # DW_AT_name - .long 7880 # DW_AT_type + .byte 180 # DW_AT_decl_line + .byte 99 # Abbrev [99] 0x1f3b:0xa DW_TAG_member + .short 389 # DW_AT_name + .long 8006 # DW_AT_type .byte 0 # DW_AT_decl_file - .byte 179 # DW_AT_decl_line + .byte 181 # DW_AT_decl_line .byte 0 # DW_AT_data_member_location .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1ec8:0x17 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f46:0x17 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 396 # DW_AT_name + .short 395 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 175 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1ecf:0x6 DW_TAG_template_type_parameter + .byte 177 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1f4d:0x6 DW_TAG_template_type_parameter .long 59 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x1ed5:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x1ed7:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x1f53:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x1f55:0x6 DW_TAG_template_value_parameter .long 59 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1edf:0x5 DW_TAG_pointer_type - .long 7908 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ee4:0xc DW_TAG_structure_type - .short 398 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f5d:0x5 DW_TAG_pointer_type + .long 8034 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f62:0xc DW_TAG_structure_type + .short 397 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1ee7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ee9:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x1f65:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f67:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1ef0:0x5 DW_TAG_pointer_type - .long 7925 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ef5:0xc DW_TAG_structure_type - .short 399 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f6e:0x5 DW_TAG_pointer_type + .long 8051 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f73:0xc DW_TAG_structure_type + .short 398 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1ef8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1efa:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 30 # Abbrev [30] 0x1f76:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f78:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f01:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f7f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 400 # DW_AT_name + .short 399 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f08:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f0a:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1f86:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f88:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f11:0x5 DW_TAG_pointer_type - .long 7958 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f16:0xc DW_TAG_structure_type - .short 401 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f8f:0x5 DW_TAG_pointer_type + .long 8084 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f94:0xc DW_TAG_structure_type + .short 400 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f19:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f1b:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x1f97:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f99:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f22:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fa0:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 402 # DW_AT_name + .short 401 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f29:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f2b:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fa7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fa9:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f32:0x5 DW_TAG_pointer_type - .long 7991 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f37:0xc DW_TAG_structure_type - .short 403 # DW_AT_name + .byte 47 # Abbrev [47] 0x1fb0:0x5 DW_TAG_pointer_type + .long 8117 # DW_AT_type + .byte 67 # Abbrev [67] 0x1fb5:0xc DW_TAG_structure_type + .short 402 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f3a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f3c:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 30 # Abbrev [30] 0x1fb8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fba:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f43:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fc1:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 404 # DW_AT_name + .short 403 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f4a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f4c:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fc8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fca:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f53:0x5 DW_TAG_pointer_type - .long 8024 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f58:0xc DW_TAG_structure_type - .short 405 # DW_AT_name + .byte 47 # Abbrev [47] 0x1fd1:0x5 DW_TAG_pointer_type + .long 8150 # DW_AT_type + .byte 67 # Abbrev [67] 0x1fd6:0xc DW_TAG_structure_type + .short 404 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f5b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f5d:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 30 # Abbrev [30] 0x1fd9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fdb:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f64:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fe2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 406 # DW_AT_name + .short 405 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f6b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f6d:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fe9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1feb:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f74:0x5 DW_TAG_pointer_type - .long 8057 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f79:0xc DW_TAG_structure_type - .short 407 # DW_AT_name + .byte 47 # Abbrev [47] 0x1ff2:0x5 DW_TAG_pointer_type + .long 8183 # DW_AT_type + .byte 67 # Abbrev [67] 0x1ff7:0xc DW_TAG_structure_type + .short 406 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f7c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f7e:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 30 # Abbrev [30] 0x1ffa:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1ffc:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f85:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2003:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 408 # DW_AT_name + .short 407 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f8c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f8e:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x200a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x200c:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f95:0x5 DW_TAG_pointer_type - .long 8090 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f9a:0xc DW_TAG_structure_type - .short 409 # DW_AT_name + .byte 47 # Abbrev [47] 0x2013:0x5 DW_TAG_pointer_type + .long 8216 # DW_AT_type + .byte 67 # Abbrev [67] 0x2018:0xc DW_TAG_structure_type + .short 408 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f9d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f9f:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x201b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x201d:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fa6:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2024:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 410 # DW_AT_name + .short 409 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1faf:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x202b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x202d:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1fb6:0x5 DW_TAG_pointer_type - .long 8123 # DW_AT_type - .byte 92 # Abbrev [92] 0x1fbb:0xc DW_TAG_structure_type - .short 411 # DW_AT_name + .byte 47 # Abbrev [47] 0x2034:0x5 DW_TAG_pointer_type + .long 8249 # DW_AT_type + .byte 67 # Abbrev [67] 0x2039:0xc DW_TAG_structure_type + .short 410 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1fbe:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fc0:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 30 # Abbrev [30] 0x203c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x203e:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fc7:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2045:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 412 # DW_AT_name + .short 411 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fce:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fd0:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x204c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x204e:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1fd7:0x5 DW_TAG_pointer_type - .long 8156 # DW_AT_type - .byte 92 # Abbrev [92] 0x1fdc:0xc DW_TAG_structure_type - .short 413 # DW_AT_name + .byte 47 # Abbrev [47] 0x2055:0x5 DW_TAG_pointer_type + .long 8282 # DW_AT_type + .byte 67 # Abbrev [67] 0x205a:0xc DW_TAG_structure_type + .short 412 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1fdf:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fe1:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 30 # Abbrev [30] 0x205d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x205f:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fe8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2066:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 414 # DW_AT_name + .short 413 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fef:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ff1:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x206d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x206f:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1ff8:0x5 DW_TAG_pointer_type - .long 8189 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ffd:0xc DW_TAG_structure_type - .short 415 # DW_AT_name + .byte 47 # Abbrev [47] 0x2076:0x5 DW_TAG_pointer_type + .long 8315 # DW_AT_type + .byte 67 # Abbrev [67] 0x207b:0xc DW_TAG_structure_type + .short 414 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2000:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2002:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 30 # Abbrev [30] 0x207e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2080:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2009:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2087:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 416 # DW_AT_name + .short 415 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2010:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2012:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x208e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2090:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2019:0x5 DW_TAG_pointer_type - .long 8222 # DW_AT_type - .byte 92 # Abbrev [92] 0x201e:0xc DW_TAG_structure_type - .short 417 # DW_AT_name + .byte 47 # Abbrev [47] 0x2097:0x5 DW_TAG_pointer_type + .long 8348 # DW_AT_type + .byte 67 # Abbrev [67] 0x209c:0xc DW_TAG_structure_type + .short 416 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2021:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2023:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x209f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20a1:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x202a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20a8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 418 # DW_AT_name + .short 417 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2031:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2033:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20af:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20b1:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x203a:0x5 DW_TAG_pointer_type - .long 8255 # DW_AT_type - .byte 92 # Abbrev [92] 0x203f:0xc DW_TAG_structure_type - .short 419 # DW_AT_name + .byte 47 # Abbrev [47] 0x20b8:0x5 DW_TAG_pointer_type + .long 8381 # DW_AT_type + .byte 67 # Abbrev [67] 0x20bd:0xc DW_TAG_structure_type + .short 418 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2042:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2044:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 30 # Abbrev [30] 0x20c0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20c2:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x204b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 420 # DW_AT_name + .short 419 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2052:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2054:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20d2:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x205b:0x5 DW_TAG_pointer_type - .long 8288 # DW_AT_type - .byte 92 # Abbrev [92] 0x2060:0xc DW_TAG_structure_type - .short 421 # DW_AT_name + .byte 47 # Abbrev [47] 0x20d9:0x5 DW_TAG_pointer_type + .long 8414 # DW_AT_type + .byte 67 # Abbrev [67] 0x20de:0xc DW_TAG_structure_type + .short 420 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2063:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2065:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x20e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20e3:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x206c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 422 # DW_AT_name + .short 421 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2073:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2075:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20f3:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x207c:0x5 DW_TAG_pointer_type - .long 8321 # DW_AT_type - .byte 92 # Abbrev [92] 0x2081:0xc DW_TAG_structure_type - .short 423 # DW_AT_name + .byte 47 # Abbrev [47] 0x20fa:0x5 DW_TAG_pointer_type + .long 8447 # DW_AT_type + .byte 67 # Abbrev [67] 0x20ff:0xc DW_TAG_structure_type + .short 422 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2084:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2086:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 30 # Abbrev [30] 0x2102:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2104:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x208d:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x210b:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 424 # DW_AT_name + .short 423 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2094:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2096:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2112:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2114:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x209b:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x2119:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20a2:0x5 DW_TAG_pointer_type - .long 8359 # DW_AT_type - .byte 92 # Abbrev [92] 0x20a7:0x11 DW_TAG_structure_type - .short 425 # DW_AT_name + .byte 47 # Abbrev [47] 0x2120:0x5 DW_TAG_pointer_type + .long 8485 # DW_AT_type + .byte 67 # Abbrev [67] 0x2125:0x11 DW_TAG_structure_type + .short 424 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20aa:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20ac:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x2128:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x212a:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x20b1:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x212f:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20b8:0x5 DW_TAG_pointer_type - .long 8381 # DW_AT_type - .byte 92 # Abbrev [92] 0x20bd:0xc DW_TAG_structure_type - .short 426 # DW_AT_name + .byte 47 # Abbrev [47] 0x2136:0x5 DW_TAG_pointer_type + .long 8507 # DW_AT_type + .byte 67 # Abbrev [67] 0x213b:0xc DW_TAG_structure_type + .short 425 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20c0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20c2:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x213e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2140:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x20c9:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2147:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 427 # DW_AT_name + .short 426 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x20d0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20d2:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x214e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2150:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20d9:0x5 DW_TAG_pointer_type - .long 8414 # DW_AT_type - .byte 92 # Abbrev [92] 0x20de:0xc DW_TAG_structure_type - .short 428 # DW_AT_name + .byte 47 # Abbrev [47] 0x2157:0x5 DW_TAG_pointer_type + .long 8540 # DW_AT_type + .byte 67 # Abbrev [67] 0x215c:0xc DW_TAG_structure_type + .short 427 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20e3:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 30 # Abbrev [30] 0x215f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2161:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x20ea:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2168:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 429 # DW_AT_name + .short 428 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x20f1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20f3:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x216f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2171:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20fa:0x5 DW_TAG_pointer_type - .long 8447 # DW_AT_type - .byte 92 # Abbrev [92] 0x20ff:0xc DW_TAG_structure_type - .short 430 # DW_AT_name + .byte 47 # Abbrev [47] 0x2178:0x5 DW_TAG_pointer_type + .long 8573 # DW_AT_type + .byte 67 # Abbrev [67] 0x217d:0xc DW_TAG_structure_type + .short 429 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2102:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2104:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 30 # Abbrev [30] 0x2180:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2182:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x210b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2189:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 431 # DW_AT_name + .short 430 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2112:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2114:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2190:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2192:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x211b:0x5 DW_TAG_pointer_type - .long 8480 # DW_AT_type - .byte 92 # Abbrev [92] 0x2120:0xc DW_TAG_structure_type - .short 432 # DW_AT_name + .byte 47 # Abbrev [47] 0x2199:0x5 DW_TAG_pointer_type + .long 8606 # DW_AT_type + .byte 67 # Abbrev [67] 0x219e:0xc DW_TAG_structure_type + .short 431 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2123:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2125:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 30 # Abbrev [30] 0x21a1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21a3:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x212c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21aa:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 433 # DW_AT_name + .short 432 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2133:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2135:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21b1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21b3:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x213c:0x5 DW_TAG_pointer_type - .long 8513 # DW_AT_type - .byte 92 # Abbrev [92] 0x2141:0xc DW_TAG_structure_type - .short 434 # DW_AT_name + .byte 47 # Abbrev [47] 0x21ba:0x5 DW_TAG_pointer_type + .long 8639 # DW_AT_type + .byte 67 # Abbrev [67] 0x21bf:0xc DW_TAG_structure_type + .short 433 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2144:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2146:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 30 # Abbrev [30] 0x21c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21c4:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x214d:0xc DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21cb:0xc DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 435 # DW_AT_name + .short 434 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2154:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x2156:0x1 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21d2:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x21d4:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2159:0x5 DW_TAG_pointer_type - .long 8542 # DW_AT_type - .byte 92 # Abbrev [92] 0x215e:0x8 DW_TAG_structure_type - .short 436 # DW_AT_name + .byte 47 # Abbrev [47] 0x21d7:0x5 DW_TAG_pointer_type + .long 8668 # DW_AT_type + .byte 67 # Abbrev [67] 0x21dc:0x8 DW_TAG_structure_type + .short 435 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2161:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x2163:0x1 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x21df:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x21e1:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2166:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21e4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 437 # DW_AT_name + .short 436 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x216d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x216f:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21eb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21ed:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2176:0x5 DW_TAG_pointer_type - .long 8571 # DW_AT_type - .byte 92 # Abbrev [92] 0x217b:0xc DW_TAG_structure_type - .short 438 # DW_AT_name + .byte 47 # Abbrev [47] 0x21f4:0x5 DW_TAG_pointer_type + .long 8697 # DW_AT_type + .byte 67 # Abbrev [67] 0x21f9:0xc DW_TAG_structure_type + .short 437 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x217e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2180:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 30 # Abbrev [30] 0x21fc:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21fe:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2187:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2205:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 439 # DW_AT_name + .short 438 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x218e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2190:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x220c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x220e:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2197:0x5 DW_TAG_pointer_type - .long 8604 # DW_AT_type - .byte 92 # Abbrev [92] 0x219c:0xc DW_TAG_structure_type - .short 440 # DW_AT_name + .byte 47 # Abbrev [47] 0x2215:0x5 DW_TAG_pointer_type + .long 8730 # DW_AT_type + .byte 67 # Abbrev [67] 0x221a:0xc DW_TAG_structure_type + .short 439 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x219f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21a1:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 30 # Abbrev [30] 0x221d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x221f:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21a8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2226:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 441 # DW_AT_name + .short 440 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x21af:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21b1:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x222d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x222f:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21b8:0x5 DW_TAG_pointer_type - .long 8637 # DW_AT_type - .byte 92 # Abbrev [92] 0x21bd:0xc DW_TAG_structure_type - .short 442 # DW_AT_name + .byte 47 # Abbrev [47] 0x2236:0x5 DW_TAG_pointer_type + .long 8763 # DW_AT_type + .byte 67 # Abbrev [67] 0x223b:0xc DW_TAG_structure_type + .short 441 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21c0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21c2:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x223e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2240:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21c9:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2247:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 443 # DW_AT_name + .short 442 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x21d0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21d2:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x224e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2250:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21d9:0x5 DW_TAG_pointer_type - .long 8670 # DW_AT_type - .byte 92 # Abbrev [92] 0x21de:0xc DW_TAG_structure_type - .short 444 # DW_AT_name + .byte 47 # Abbrev [47] 0x2257:0x5 DW_TAG_pointer_type + .long 8796 # DW_AT_type + .byte 67 # Abbrev [67] 0x225c:0xc DW_TAG_structure_type + .short 443 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21e3:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 30 # Abbrev [30] 0x225f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2261:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21ea:0x5 DW_TAG_pointer_type - .long 8687 # DW_AT_type - .byte 92 # Abbrev [92] 0x21ef:0xc DW_TAG_structure_type - .short 445 # DW_AT_name + .byte 47 # Abbrev [47] 0x2268:0x5 DW_TAG_pointer_type + .long 8813 # DW_AT_type + .byte 67 # Abbrev [67] 0x226d:0xc DW_TAG_structure_type + .short 444 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21f2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21f4:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 30 # Abbrev [30] 0x2270:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2272:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21fb:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2279:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 446 # DW_AT_name + .short 445 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2202:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2204:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2280:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2282:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x220b:0x5 DW_TAG_pointer_type - .long 8720 # DW_AT_type - .byte 92 # Abbrev [92] 0x2210:0xc DW_TAG_structure_type - .short 447 # DW_AT_name + .byte 47 # Abbrev [47] 0x2289:0x5 DW_TAG_pointer_type + .long 8846 # DW_AT_type + .byte 67 # Abbrev [67] 0x228e:0xc DW_TAG_structure_type + .short 446 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2213:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2215:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 30 # Abbrev [30] 0x2291:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2293:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x221c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x229a:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 448 # DW_AT_name + .short 447 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2223:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2225:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22a1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22a3:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x222c:0x5 DW_TAG_pointer_type - .long 8753 # DW_AT_type - .byte 92 # Abbrev [92] 0x2231:0xc DW_TAG_structure_type - .short 449 # DW_AT_name + .byte 47 # Abbrev [47] 0x22aa:0x5 DW_TAG_pointer_type + .long 8879 # DW_AT_type + .byte 67 # Abbrev [67] 0x22af:0xc DW_TAG_structure_type + .short 448 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2234:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2236:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 30 # Abbrev [30] 0x22b2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22b4:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x223d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22bb:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 450 # DW_AT_name + .short 449 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2244:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2246:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22c4:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x224d:0x5 DW_TAG_pointer_type - .long 8786 # DW_AT_type - .byte 92 # Abbrev [92] 0x2252:0xc DW_TAG_structure_type - .short 451 # DW_AT_name + .byte 47 # Abbrev [47] 0x22cb:0x5 DW_TAG_pointer_type + .long 8912 # DW_AT_type + .byte 67 # Abbrev [67] 0x22d0:0xc DW_TAG_structure_type + .short 450 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2255:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2257:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 30 # Abbrev [30] 0x22d3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22d5:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x225e:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22dc:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 452 # DW_AT_name + .short 451 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2265:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2267:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22e3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22e5:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x226e:0x5 DW_TAG_pointer_type - .long 8819 # DW_AT_type - .byte 92 # Abbrev [92] 0x2273:0xc DW_TAG_structure_type - .short 453 # DW_AT_name + .byte 47 # Abbrev [47] 0x22ec:0x5 DW_TAG_pointer_type + .long 8945 # DW_AT_type + .byte 67 # Abbrev [67] 0x22f1:0xc DW_TAG_structure_type + .short 452 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2276:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2278:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 30 # Abbrev [30] 0x22f4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22f6:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x227f:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22fd:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 454 # DW_AT_name + .short 453 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2286:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2288:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2304:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2306:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x228f:0x5 DW_TAG_pointer_type - .long 8852 # DW_AT_type - .byte 92 # Abbrev [92] 0x2294:0xc DW_TAG_structure_type - .short 455 # DW_AT_name + .byte 47 # Abbrev [47] 0x230d:0x5 DW_TAG_pointer_type + .long 8978 # DW_AT_type + .byte 67 # Abbrev [67] 0x2312:0xc DW_TAG_structure_type + .short 454 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2297:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2299:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 30 # Abbrev [30] 0x2315:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2317:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22a0:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x231e:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 456 # DW_AT_name + .short 455 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22a7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22a9:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2325:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2327:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22b0:0x5 DW_TAG_pointer_type - .long 8885 # DW_AT_type - .byte 92 # Abbrev [92] 0x22b5:0xc DW_TAG_structure_type - .short 457 # DW_AT_name + .byte 47 # Abbrev [47] 0x232e:0x5 DW_TAG_pointer_type + .long 9011 # DW_AT_type + .byte 67 # Abbrev [67] 0x2333:0xc DW_TAG_structure_type + .short 456 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22b8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22ba:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 30 # Abbrev [30] 0x2336:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2338:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22c1:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x233f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 458 # DW_AT_name + .short 457 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22c8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22ca:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2346:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2348:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22d1:0x5 DW_TAG_pointer_type - .long 8918 # DW_AT_type - .byte 92 # Abbrev [92] 0x22d6:0xc DW_TAG_structure_type - .short 459 # DW_AT_name + .byte 47 # Abbrev [47] 0x234f:0x5 DW_TAG_pointer_type + .long 9044 # DW_AT_type + .byte 67 # Abbrev [67] 0x2354:0xc DW_TAG_structure_type + .short 458 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22d9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22db:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x2357:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2359:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22e2:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2360:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 460 # DW_AT_name + .short 459 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22e9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22eb:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2367:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2369:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22f2:0x5 DW_TAG_pointer_type - .long 8951 # DW_AT_type - .byte 92 # Abbrev [92] 0x22f7:0xc DW_TAG_structure_type - .short 461 # DW_AT_name + .byte 47 # Abbrev [47] 0x2370:0x5 DW_TAG_pointer_type + .long 9077 # DW_AT_type + .byte 67 # Abbrev [67] 0x2375:0xc DW_TAG_structure_type + .short 460 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22fa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22fc:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 30 # Abbrev [30] 0x2378:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x237a:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2303:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2381:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 462 # DW_AT_name + .short 461 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x230a:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x230c:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2311:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2388:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x238a:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x238f:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2318:0x5 DW_TAG_pointer_type - .long 8989 # DW_AT_type - .byte 92 # Abbrev [92] 0x231d:0x11 DW_TAG_structure_type - .short 463 # DW_AT_name + .byte 47 # Abbrev [47] 0x2396:0x5 DW_TAG_pointer_type + .long 9115 # DW_AT_type + .byte 67 # Abbrev [67] 0x239b:0x11 DW_TAG_structure_type + .short 462 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2320:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2322:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2327:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 30 # Abbrev [30] 0x239e:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23a0:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23a5:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x232e:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23ac:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 464 # DW_AT_name + .short 463 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2335:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2337:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x233c:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23b3:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23b5:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23ba:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2343:0x5 DW_TAG_pointer_type - .long 9032 # DW_AT_type - .byte 92 # Abbrev [92] 0x2348:0x11 DW_TAG_structure_type - .short 465 # DW_AT_name + .byte 47 # Abbrev [47] 0x23c1:0x5 DW_TAG_pointer_type + .long 9158 # DW_AT_type + .byte 67 # Abbrev [67] 0x23c6:0x11 DW_TAG_structure_type + .short 464 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x234b:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x234d:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2352:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 30 # Abbrev [30] 0x23c9:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23cb:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23d0:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2359:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23d7:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 466 # DW_AT_name + .short 465 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2360:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2362:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23de:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23e0:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2369:0x5 DW_TAG_pointer_type - .long 9070 # DW_AT_type - .byte 92 # Abbrev [92] 0x236e:0xc DW_TAG_structure_type - .short 467 # DW_AT_name + .byte 47 # Abbrev [47] 0x23e7:0x5 DW_TAG_pointer_type + .long 9196 # DW_AT_type + .byte 67 # Abbrev [67] 0x23ec:0xc DW_TAG_structure_type + .short 466 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2371:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2373:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 30 # Abbrev [30] 0x23ef:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23f1:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x237a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23f8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 468 # DW_AT_name + .short 467 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2381:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2383:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23ff:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2401:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x238a:0x5 DW_TAG_pointer_type - .long 9103 # DW_AT_type - .byte 92 # Abbrev [92] 0x238f:0xc DW_TAG_structure_type - .short 469 # DW_AT_name + .byte 47 # Abbrev [47] 0x2408:0x5 DW_TAG_pointer_type + .long 9229 # DW_AT_type + .byte 67 # Abbrev [67] 0x240d:0xc DW_TAG_structure_type + .short 468 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2392:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2394:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 30 # Abbrev [30] 0x2410:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2412:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x239b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2419:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 470 # DW_AT_name + .short 469 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23a2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23a4:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2420:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2422:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23ab:0x5 DW_TAG_pointer_type - .long 9136 # DW_AT_type - .byte 92 # Abbrev [92] 0x23b0:0xc DW_TAG_structure_type - .short 471 # DW_AT_name + .byte 47 # Abbrev [47] 0x2429:0x5 DW_TAG_pointer_type + .long 9262 # DW_AT_type + .byte 67 # Abbrev [67] 0x242e:0xc DW_TAG_structure_type + .short 470 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23b3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23b5:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 30 # Abbrev [30] 0x2431:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2433:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23bc:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x243a:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 472 # DW_AT_name + .short 471 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23c3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23c5:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2441:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2443:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23cc:0x5 DW_TAG_pointer_type - .long 9169 # DW_AT_type - .byte 92 # Abbrev [92] 0x23d1:0xc DW_TAG_structure_type - .short 473 # DW_AT_name + .byte 47 # Abbrev [47] 0x244a:0x5 DW_TAG_pointer_type + .long 9295 # DW_AT_type + .byte 67 # Abbrev [67] 0x244f:0xc DW_TAG_structure_type + .short 472 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23d4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23d6:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 30 # Abbrev [30] 0x2452:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2454:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23dd:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x245b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 474 # DW_AT_name + .short 473 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23e4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23e6:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2462:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2464:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23ed:0x5 DW_TAG_pointer_type - .long 9202 # DW_AT_type - .byte 92 # Abbrev [92] 0x23f2:0xc DW_TAG_structure_type - .short 475 # DW_AT_name + .byte 47 # Abbrev [47] 0x246b:0x5 DW_TAG_pointer_type + .long 9328 # DW_AT_type + .byte 67 # Abbrev [67] 0x2470:0xc DW_TAG_structure_type + .short 474 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23f5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23f7:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 30 # Abbrev [30] 0x2473:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2475:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23fe:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x247c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 476 # DW_AT_name + .short 475 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2405:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2407:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2483:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2485:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x240e:0x5 DW_TAG_pointer_type - .long 9235 # DW_AT_type - .byte 92 # Abbrev [92] 0x2413:0xc DW_TAG_structure_type - .short 477 # DW_AT_name + .byte 47 # Abbrev [47] 0x248c:0x5 DW_TAG_pointer_type + .long 9361 # DW_AT_type + .byte 67 # Abbrev [67] 0x2491:0xc DW_TAG_structure_type + .short 476 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2416:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2418:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 30 # Abbrev [30] 0x2494:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2496:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x241f:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x249d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 478 # DW_AT_name + .short 477 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2426:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2428:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x242f:0x5 DW_TAG_pointer_type - .long 9268 # DW_AT_type - .byte 92 # Abbrev [92] 0x2434:0xc DW_TAG_structure_type - .short 479 # DW_AT_name - # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2437:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2439:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24a4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24a6:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2440:0x5 DW_TAG_pointer_type - .long 9285 # DW_AT_type - .byte 92 # Abbrev [92] 0x2445:0x6 DW_TAG_structure_type - .short 480 # DW_AT_name + .byte 47 # Abbrev [47] 0x24ad:0x5 DW_TAG_pointer_type + .long 9394 # DW_AT_type + .byte 67 # Abbrev [67] 0x24b2:0xc DW_TAG_structure_type + .short 478 # DW_AT_name # DW_AT_declaration - .byte 50 # Abbrev [50] 0x2448:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x244b:0x15 DW_TAG_structure_type - .byte 5 # DW_AT_calling_convention - .short 481 # DW_AT_name - .byte 1 # DW_AT_byte_size - .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2452:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2454:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0x2459:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type + .byte 30 # Abbrev [30] 0x24b5:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24b7:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2460:0x5 DW_TAG_pointer_type - .long 9317 # DW_AT_type - .byte 92 # Abbrev [92] 0x2465:0x11 DW_TAG_structure_type - .short 482 # DW_AT_name + .byte 47 # Abbrev [47] 0x24be:0x5 DW_TAG_pointer_type + .long 9411 # DW_AT_type + .byte 67 # Abbrev [67] 0x24c3:0x6 DW_TAG_structure_type + .short 479 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2468:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x246a:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0x246f:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 0 # End Of Children Mark + .byte 44 # Abbrev [44] 0x24c6:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2476:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x24c9:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 483 # DW_AT_name + .short 480 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x247d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x247f:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24d0:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24d2:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0x24d7:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2486:0x5 DW_TAG_pointer_type - .long 9355 # DW_AT_type - .byte 92 # Abbrev [92] 0x248b:0xc DW_TAG_structure_type - .short 484 # DW_AT_name + .byte 47 # Abbrev [47] 0x24de:0x5 DW_TAG_pointer_type + .long 9443 # DW_AT_type + .byte 67 # Abbrev [67] 0x24e3:0x11 DW_TAG_structure_type + .short 481 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x248e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2490:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 30 # Abbrev [30] 0x24e6:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24e8:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0x24ed:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2497:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x24f4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 485 # DW_AT_name + .short 482 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x249e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24a0:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24fb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24fd:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24a7:0x5 DW_TAG_pointer_type - .long 9388 # DW_AT_type - .byte 92 # Abbrev [92] 0x24ac:0xc DW_TAG_structure_type - .short 486 # DW_AT_name + .byte 47 # Abbrev [47] 0x2504:0x5 DW_TAG_pointer_type + .long 9481 # DW_AT_type + .byte 67 # Abbrev [67] 0x2509:0xc DW_TAG_structure_type + .short 483 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24af:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24b1:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 30 # Abbrev [30] 0x250c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x250e:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24b8:0x5 DW_TAG_pointer_type - .long 3851 # DW_AT_type - .byte 76 # Abbrev [76] 0x24bd:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2515:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 488 # DW_AT_name + .short 484 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x24c4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24c6:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x251c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x251e:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24cd:0x5 DW_TAG_pointer_type - .long 9426 # DW_AT_type - .byte 92 # Abbrev [92] 0x24d2:0xc DW_TAG_structure_type - .short 489 # DW_AT_name + .byte 47 # Abbrev [47] 0x2525:0x5 DW_TAG_pointer_type + .long 9514 # DW_AT_type + .byte 67 # Abbrev [67] 0x252a:0xc DW_TAG_structure_type + .short 485 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24d5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24d7:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 30 # Abbrev [30] 0x252d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x252f:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x24de:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x2536:0x5 DW_TAG_pointer_type + .long 3243 # DW_AT_type + .byte 84 # Abbrev [84] 0x253b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 490 # DW_AT_name + .short 487 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x24e5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24e7:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2542:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2544:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24ee:0x5 DW_TAG_pointer_type - .long 9459 # DW_AT_type - .byte 92 # Abbrev [92] 0x24f3:0xc DW_TAG_structure_type - .short 491 # DW_AT_name + .byte 47 # Abbrev [47] 0x254b:0x5 DW_TAG_pointer_type + .long 9552 # DW_AT_type + .byte 67 # Abbrev [67] 0x2550:0xc DW_TAG_structure_type + .short 488 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24f6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24f8:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 30 # Abbrev [30] 0x2553:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2555:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x24ff:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x255c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 492 # DW_AT_name + .short 489 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2506:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2508:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2563:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2565:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x250f:0x5 DW_TAG_pointer_type - .long 9492 # DW_AT_type - .byte 92 # Abbrev [92] 0x2514:0xc DW_TAG_structure_type - .short 493 # DW_AT_name + .byte 47 # Abbrev [47] 0x256c:0x5 DW_TAG_pointer_type + .long 9585 # DW_AT_type + .byte 67 # Abbrev [67] 0x2571:0xc DW_TAG_structure_type + .short 490 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2517:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2519:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 30 # Abbrev [30] 0x2574:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2576:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2520:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x257d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 494 # DW_AT_name + .short 491 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2527:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2529:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x252e:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2584:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2586:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2535:0x5 DW_TAG_pointer_type - .long 9530 # DW_AT_type - .byte 92 # Abbrev [92] 0x253a:0x11 DW_TAG_structure_type - .short 495 # DW_AT_name + .byte 47 # Abbrev [47] 0x258d:0x5 DW_TAG_pointer_type + .long 9618 # DW_AT_type + .byte 67 # Abbrev [67] 0x2592:0xc DW_TAG_structure_type + .short 492 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x253d:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x253f:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x2544:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 30 # Abbrev [30] 0x2595:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2597:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x254b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x259e:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 496 # DW_AT_name + .short 493 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2552:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2554:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25a5:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25a7:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x25ac:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x255b:0x5 DW_TAG_pointer_type - .long 9568 # DW_AT_type - .byte 92 # Abbrev [92] 0x2560:0xc DW_TAG_structure_type - .short 497 # DW_AT_name + .byte 47 # Abbrev [47] 0x25b3:0x5 DW_TAG_pointer_type + .long 9656 # DW_AT_type + .byte 67 # Abbrev [67] 0x25b8:0x11 DW_TAG_structure_type + .short 494 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2563:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2565:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 30 # Abbrev [30] 0x25bb:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25bd:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x25c2:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x256c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x25c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 498 # DW_AT_name + .short 495 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2573:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2575:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25d2:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x257c:0x5 DW_TAG_pointer_type - .long 9601 # DW_AT_type - .byte 92 # Abbrev [92] 0x2581:0xc DW_TAG_structure_type - .short 499 # DW_AT_name + .byte 47 # Abbrev [47] 0x25d9:0x5 DW_TAG_pointer_type + .long 9694 # DW_AT_type + .byte 67 # Abbrev [67] 0x25de:0xc DW_TAG_structure_type + .short 496 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2584:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2586:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 30 # Abbrev [30] 0x25e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25e3:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x258d:0x1a DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x25ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 500 # DW_AT_name + .short 497 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2594:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2596:0x5 DW_TAG_template_type_parameter - .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x259b:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x25a0:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25f3:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25a7:0x5 DW_TAG_pointer_type - .long 9644 # DW_AT_type - .byte 92 # Abbrev [92] 0x25ac:0x16 DW_TAG_structure_type - .short 501 # DW_AT_name + .byte 47 # Abbrev [47] 0x25fa:0x5 DW_TAG_pointer_type + .long 9727 # DW_AT_type + .byte 67 # Abbrev [67] 0x25ff:0xc DW_TAG_structure_type + .short 498 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25af:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25b1:0x5 DW_TAG_template_type_parameter - .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x25b6:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x25bb:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 30 # Abbrev [30] 0x2602:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2604:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x25c2:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x260b:0x1a DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 502 # DW_AT_name + .short 499 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x25c9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25cb:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2612:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2614:0x5 DW_TAG_template_type_parameter + .long 54 # DW_AT_type + .byte 31 # Abbrev [31] 0x2619:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x261e:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25d2:0x5 DW_TAG_pointer_type - .long 9687 # DW_AT_type - .byte 92 # Abbrev [92] 0x25d7:0xc DW_TAG_structure_type - .short 503 # DW_AT_name + .byte 47 # Abbrev [47] 0x2625:0x5 DW_TAG_pointer_type + .long 9770 # DW_AT_type + .byte 67 # Abbrev [67] 0x262a:0x16 DW_TAG_structure_type + .short 500 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25da:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25dc:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 30 # Abbrev [30] 0x262d:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x262f:0x5 DW_TAG_template_type_parameter + .long 54 # DW_AT_type + .byte 31 # Abbrev [31] 0x2634:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x2639:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x25e3:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2640:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 504 # DW_AT_name + .short 501 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x25ea:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25ec:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2647:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2649:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25f3:0x5 DW_TAG_pointer_type - .long 9720 # DW_AT_type - .byte 92 # Abbrev [92] 0x25f8:0xc DW_TAG_structure_type - .short 505 # DW_AT_name + .byte 47 # Abbrev [47] 0x2650:0x5 DW_TAG_pointer_type + .long 9813 # DW_AT_type + .byte 67 # Abbrev [67] 0x2655:0xc DW_TAG_structure_type + .short 502 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25fb:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25fd:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 30 # Abbrev [30] 0x2658:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x265a:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2604:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2661:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 506 # DW_AT_name + .short 503 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x260b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x260d:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2668:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x266a:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2614:0x5 DW_TAG_pointer_type - .long 9753 # DW_AT_type - .byte 92 # Abbrev [92] 0x2619:0xc DW_TAG_structure_type - .short 507 # DW_AT_name + .byte 47 # Abbrev [47] 0x2671:0x5 DW_TAG_pointer_type + .long 9846 # DW_AT_type + .byte 67 # Abbrev [67] 0x2676:0xc DW_TAG_structure_type + .short 504 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x261c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x261e:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 30 # Abbrev [30] 0x2679:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x267b:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2625:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2682:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 508 # DW_AT_name + .short 505 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x262c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x262e:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2689:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x268b:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2635:0x5 DW_TAG_pointer_type - .long 9786 # DW_AT_type - .byte 92 # Abbrev [92] 0x263a:0xc DW_TAG_structure_type - .short 509 # DW_AT_name + .byte 47 # Abbrev [47] 0x2692:0x5 DW_TAG_pointer_type + .long 9879 # DW_AT_type + .byte 67 # Abbrev [67] 0x2697:0xc DW_TAG_structure_type + .short 506 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x263d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x263f:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 30 # Abbrev [30] 0x269a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x269c:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2646:0x5 DW_TAG_pointer_type - .long 206 # DW_AT_type - .byte 76 # Abbrev [76] 0x264b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x26a3:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 510 # DW_AT_name + .short 507 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2652:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2654:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26aa:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26ac:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x265b:0x5 DW_TAG_pointer_type - .long 9824 # DW_AT_type - .byte 92 # Abbrev [92] 0x2660:0xc DW_TAG_structure_type - .short 511 # DW_AT_name + .byte 47 # Abbrev [47] 0x26b3:0x5 DW_TAG_pointer_type + .long 9912 # DW_AT_type + .byte 67 # Abbrev [67] 0x26b8:0xc DW_TAG_structure_type + .short 508 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2663:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2665:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 30 # Abbrev [30] 0x26bb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26bd:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x266c:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x26c4:0x5 DW_TAG_pointer_type + .long 206 # DW_AT_type + .byte 84 # Abbrev [84] 0x26c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 512 # DW_AT_name + .short 509 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2673:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2675:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26d2:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x267c:0x5 DW_TAG_pointer_type - .long 9857 # DW_AT_type - .byte 92 # Abbrev [92] 0x2681:0xc DW_TAG_structure_type - .short 513 # DW_AT_name + .byte 47 # Abbrev [47] 0x26d9:0x5 DW_TAG_pointer_type + .long 9950 # DW_AT_type + .byte 67 # Abbrev [67] 0x26de:0xc DW_TAG_structure_type + .short 510 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2684:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2686:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 30 # Abbrev [30] 0x26e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26e3:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x268d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x26ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 514 # DW_AT_name + .short 511 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2694:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2696:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26f3:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x269d:0x5 DW_TAG_pointer_type - .long 9890 # DW_AT_type - .byte 92 # Abbrev [92] 0x26a2:0xc DW_TAG_structure_type - .short 515 # DW_AT_name + .byte 47 # Abbrev [47] 0x26fa:0x5 DW_TAG_pointer_type + .long 9983 # DW_AT_type + .byte 67 # Abbrev [67] 0x26ff:0xc DW_TAG_structure_type + .short 512 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26a5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26a7:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 30 # Abbrev [30] 0x2702:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2704:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26ae:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x270b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 516 # DW_AT_name + .short 513 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26b5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26b7:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2712:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2714:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x26be:0x5 DW_TAG_pointer_type - .long 9923 # DW_AT_type - .byte 92 # Abbrev [92] 0x26c3:0xc DW_TAG_structure_type - .short 517 # DW_AT_name + .byte 47 # Abbrev [47] 0x271b:0x5 DW_TAG_pointer_type + .long 10016 # DW_AT_type + .byte 67 # Abbrev [67] 0x2720:0xc DW_TAG_structure_type + .short 514 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26c6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26c8:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 30 # Abbrev [30] 0x2723:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2725:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26cf:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x272c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 518 # DW_AT_name + .short 515 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26d6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26d8:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2733:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2735:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x26df:0x5 DW_TAG_pointer_type - .long 9956 # DW_AT_type - .byte 92 # Abbrev [92] 0x26e4:0xc DW_TAG_structure_type - .short 519 # DW_AT_name + .byte 47 # Abbrev [47] 0x273c:0x5 DW_TAG_pointer_type + .long 10049 # DW_AT_type + .byte 67 # Abbrev [67] 0x2741:0xc DW_TAG_structure_type + .short 516 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26e7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26e9:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 30 # Abbrev [30] 0x2744:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2746:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26f0:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x274d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 520 # DW_AT_name + .short 517 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26f7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26f9:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2754:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2756:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2700:0x5 DW_TAG_pointer_type - .long 9989 # DW_AT_type - .byte 92 # Abbrev [92] 0x2705:0xc DW_TAG_structure_type - .short 521 # DW_AT_name + .byte 47 # Abbrev [47] 0x275d:0x5 DW_TAG_pointer_type + .long 10082 # DW_AT_type + .byte 67 # Abbrev [67] 0x2762:0xc DW_TAG_structure_type + .short 518 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2708:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x270a:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 30 # Abbrev [30] 0x2765:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2767:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2711:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x276e:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 522 # DW_AT_name + .short 519 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2718:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x271a:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2775:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2777:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2721:0x5 DW_TAG_pointer_type - .long 10022 # DW_AT_type - .byte 92 # Abbrev [92] 0x2726:0xc DW_TAG_structure_type - .short 523 # DW_AT_name + .byte 47 # Abbrev [47] 0x277e:0x5 DW_TAG_pointer_type + .long 10115 # DW_AT_type + .byte 67 # Abbrev [67] 0x2783:0xc DW_TAG_structure_type + .short 520 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2729:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x272b:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 30 # Abbrev [30] 0x2786:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2788:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2732:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x278f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 524 # DW_AT_name + .short 521 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2739:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x273b:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2796:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2798:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2742:0x5 DW_TAG_pointer_type - .long 10055 # DW_AT_type - .byte 92 # Abbrev [92] 0x2747:0xc DW_TAG_structure_type - .short 525 # DW_AT_name + .byte 47 # Abbrev [47] 0x279f:0x5 DW_TAG_pointer_type + .long 10148 # DW_AT_type + .byte 67 # Abbrev [67] 0x27a4:0xc DW_TAG_structure_type + .short 522 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x274a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x274c:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 30 # Abbrev [30] 0x27a7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27a9:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2753:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27b0:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 526 # DW_AT_name + .short 523 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x275a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x275c:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27b7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27b9:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2763:0x5 DW_TAG_pointer_type - .long 10088 # DW_AT_type - .byte 92 # Abbrev [92] 0x2768:0xc DW_TAG_structure_type - .short 527 # DW_AT_name + .byte 47 # Abbrev [47] 0x27c0:0x5 DW_TAG_pointer_type + .long 10181 # DW_AT_type + .byte 67 # Abbrev [67] 0x27c5:0xc DW_TAG_structure_type + .short 524 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x276b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x276d:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 30 # Abbrev [30] 0x27c8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27ca:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2774:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27d1:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 528 # DW_AT_name + .short 525 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x277b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x277d:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27d8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27da:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2784:0x5 DW_TAG_pointer_type - .long 10121 # DW_AT_type - .byte 92 # Abbrev [92] 0x2789:0xc DW_TAG_structure_type - .short 529 # DW_AT_name + .byte 47 # Abbrev [47] 0x27e1:0x5 DW_TAG_pointer_type + .long 10214 # DW_AT_type + .byte 67 # Abbrev [67] 0x27e6:0xc DW_TAG_structure_type + .short 526 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x278c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x278e:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 30 # Abbrev [30] 0x27e9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27eb:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2795:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27f2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 530 # DW_AT_name + .short 527 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x279c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x279e:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27f9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27fb:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27a5:0x5 DW_TAG_pointer_type - .long 10154 # DW_AT_type - .byte 92 # Abbrev [92] 0x27aa:0xc DW_TAG_structure_type - .short 531 # DW_AT_name + .byte 47 # Abbrev [47] 0x2802:0x5 DW_TAG_pointer_type + .long 10247 # DW_AT_type + .byte 67 # Abbrev [67] 0x2807:0xc DW_TAG_structure_type + .short 528 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27af:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 30 # Abbrev [30] 0x280a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x280c:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27b6:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2813:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 532 # DW_AT_name + .short 529 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27bd:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27bf:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x281a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x281c:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27c6:0x5 DW_TAG_pointer_type - .long 10187 # DW_AT_type - .byte 92 # Abbrev [92] 0x27cb:0xc DW_TAG_structure_type - .short 533 # DW_AT_name + .byte 47 # Abbrev [47] 0x2823:0x5 DW_TAG_pointer_type + .long 10280 # DW_AT_type + .byte 67 # Abbrev [67] 0x2828:0xc DW_TAG_structure_type + .short 530 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ce:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27d0:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 30 # Abbrev [30] 0x282b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x282d:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27d7:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2834:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 534 # DW_AT_name + .short 531 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27de:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27e0:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x283b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x283d:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27e7:0x5 DW_TAG_pointer_type - .long 10220 # DW_AT_type - .byte 92 # Abbrev [92] 0x27ec:0xc DW_TAG_structure_type - .short 535 # DW_AT_name + .byte 47 # Abbrev [47] 0x2844:0x5 DW_TAG_pointer_type + .long 10313 # DW_AT_type + .byte 67 # Abbrev [67] 0x2849:0xc DW_TAG_structure_type + .short 532 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ef:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27f1:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 30 # Abbrev [30] 0x284c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x284e:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27f8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2855:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 536 # DW_AT_name + .short 533 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27ff:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2801:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x285c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x285e:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2808:0x5 DW_TAG_pointer_type - .long 10253 # DW_AT_type - .byte 92 # Abbrev [92] 0x280d:0xc DW_TAG_structure_type - .short 537 # DW_AT_name + .byte 47 # Abbrev [47] 0x2865:0x5 DW_TAG_pointer_type + .long 10346 # DW_AT_type + .byte 67 # Abbrev [67] 0x286a:0xc DW_TAG_structure_type + .short 534 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2810:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2812:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 30 # Abbrev [30] 0x286d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x286f:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2819:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2876:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 538 # DW_AT_name + .short 535 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2820:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2822:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x287d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x287f:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2829:0x5 DW_TAG_pointer_type - .long 10286 # DW_AT_type - .byte 92 # Abbrev [92] 0x282e:0xc DW_TAG_structure_type - .short 539 # DW_AT_name + .byte 47 # Abbrev [47] 0x2886:0x5 DW_TAG_pointer_type + .long 10379 # DW_AT_type + .byte 67 # Abbrev [67] 0x288b:0xc DW_TAG_structure_type + .short 536 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2831:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2833:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 30 # Abbrev [30] 0x288e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2890:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x283a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2897:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 540 # DW_AT_name + .short 537 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2841:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2843:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x289e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28a0:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x284a:0x5 DW_TAG_pointer_type - .long 10319 # DW_AT_type - .byte 92 # Abbrev [92] 0x284f:0xc DW_TAG_structure_type - .short 541 # DW_AT_name + .byte 47 # Abbrev [47] 0x28a7:0x5 DW_TAG_pointer_type + .long 10412 # DW_AT_type + .byte 67 # Abbrev [67] 0x28ac:0xc DW_TAG_structure_type + .short 538 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2852:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2854:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 30 # Abbrev [30] 0x28af:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28b1:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x285b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28b8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 542 # DW_AT_name + .short 539 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2862:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2864:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x28bf:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28c1:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x286b:0x5 DW_TAG_pointer_type - .long 10352 # DW_AT_type - .byte 92 # Abbrev [92] 0x2870:0xc DW_TAG_structure_type - .short 543 # DW_AT_name + .byte 47 # Abbrev [47] 0x28c8:0x5 DW_TAG_pointer_type + .long 10445 # DW_AT_type + .byte 67 # Abbrev [67] 0x28cd:0xc DW_TAG_structure_type + .short 540 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2873:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2875:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 30 # Abbrev [30] 0x28d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28d2:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x287c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28d9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 544 # DW_AT_name + .short 541 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2883:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2885:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x28e0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28e2:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x288c:0x5 DW_TAG_pointer_type - .long 10385 # DW_AT_type - .byte 92 # Abbrev [92] 0x2891:0xc DW_TAG_structure_type - .short 545 # DW_AT_name + .byte 47 # Abbrev [47] 0x28e9:0x5 DW_TAG_pointer_type + .long 10478 # DW_AT_type + .byte 67 # Abbrev [67] 0x28ee:0xc DW_TAG_structure_type + .short 542 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2894:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2896:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 30 # Abbrev [30] 0x28f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28f3:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x289d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28fa:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 546 # DW_AT_name + .short 543 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28a4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28a6:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2901:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2903:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ad:0x5 DW_TAG_pointer_type - .long 10418 # DW_AT_type - .byte 92 # Abbrev [92] 0x28b2:0xc DW_TAG_structure_type - .short 547 # DW_AT_name + .byte 47 # Abbrev [47] 0x290a:0x5 DW_TAG_pointer_type + .long 10511 # DW_AT_type + .byte 67 # Abbrev [67] 0x290f:0xc DW_TAG_structure_type + .short 544 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28b5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28b7:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 30 # Abbrev [30] 0x2912:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2914:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x28be:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x291b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 548 # DW_AT_name + .short 545 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28c5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28c7:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2922:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2924:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ce:0x5 DW_TAG_pointer_type - .long 10451 # DW_AT_type - .byte 92 # Abbrev [92] 0x28d3:0xc DW_TAG_structure_type - .short 549 # DW_AT_name + .byte 47 # Abbrev [47] 0x292b:0x5 DW_TAG_pointer_type + .long 10544 # DW_AT_type + .byte 67 # Abbrev [67] 0x2930:0xc DW_TAG_structure_type + .short 546 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28d6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28d8:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 30 # Abbrev [30] 0x2933:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2935:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x28df:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x293c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 550 # DW_AT_name + .short 547 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28e6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28e8:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2943:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2945:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ef:0x5 DW_TAG_pointer_type - .long 10484 # DW_AT_type - .byte 92 # Abbrev [92] 0x28f4:0xc DW_TAG_structure_type - .short 551 # DW_AT_name + .byte 47 # Abbrev [47] 0x294c:0x5 DW_TAG_pointer_type + .long 10577 # DW_AT_type + .byte 67 # Abbrev [67] 0x2951:0xc DW_TAG_structure_type + .short 548 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28f7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28f9:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 30 # Abbrev [30] 0x2954:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2956:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2900:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x295d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 552 # DW_AT_name + .short 549 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2907:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2909:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2964:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2966:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2910:0x5 DW_TAG_pointer_type - .long 10517 # DW_AT_type - .byte 92 # Abbrev [92] 0x2915:0xc DW_TAG_structure_type - .short 553 # DW_AT_name + .byte 47 # Abbrev [47] 0x296d:0x5 DW_TAG_pointer_type + .long 10610 # DW_AT_type + .byte 67 # Abbrev [67] 0x2972:0xc DW_TAG_structure_type + .short 550 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2918:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x291a:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 30 # Abbrev [30] 0x2975:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2977:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2921:0x5 DW_TAG_pointer_type - .long 7039 # DW_AT_type - .byte 76 # Abbrev [76] 0x2926:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x297e:0x5 DW_TAG_pointer_type + .long 6762 # DW_AT_type + .byte 84 # Abbrev [84] 0x2983:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 488 # DW_AT_name + .short 487 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x292d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x292f:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x298a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x298c:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2936:0x5 DW_TAG_pointer_type - .long 10555 # DW_AT_type - .byte 92 # Abbrev [92] 0x293b:0xc DW_TAG_structure_type - .short 489 # DW_AT_name + .byte 47 # Abbrev [47] 0x2993:0x5 DW_TAG_pointer_type + .long 10648 # DW_AT_type + .byte 67 # Abbrev [67] 0x2998:0xc DW_TAG_structure_type + .short 488 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x293e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2940:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 30 # Abbrev [30] 0x299b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x299d:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2947:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x29a4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 554 # DW_AT_name + .short 551 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x294e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2950:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x29ab:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x29ad:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2957:0x5 DW_TAG_pointer_type - .long 10588 # DW_AT_type - .byte 92 # Abbrev [92] 0x295c:0xc DW_TAG_structure_type - .short 555 # DW_AT_name + .byte 47 # Abbrev [47] 0x29b4:0x5 DW_TAG_pointer_type + .long 10681 # DW_AT_type + .byte 67 # Abbrev [67] 0x29b9:0xc DW_TAG_structure_type + .short 552 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x295f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2961:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 30 # Abbrev [30] 0x29bc:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x29be:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark @@ -11834,8 +12109,11 @@ i: .uleb128 .Lfunc_begin126-.Lfunc_begin0 # starting offset .uleb128 .Lfunc_end128-.Lfunc_begin0 # ending offset .byte 4 # DW_RLE_offset_pair - .uleb128 .Lfunc_begin135-.Lfunc_begin0 # starting offset - .uleb128 .Lfunc_end136-.Lfunc_begin0 # ending offset + .uleb128 .Lfunc_begin138-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end140-.Lfunc_begin0 # ending offset + .byte 4 # DW_RLE_offset_pair + .uleb128 .Lfunc_begin142-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end142-.Lfunc_begin0 # ending offset .byte 3 # DW_RLE_startx_length .byte 3 # start index .uleb128 .Lfunc_end2-.Lfunc_begin2 # length @@ -12197,1128 +12475,1139 @@ i: .ascii "\207\001" # start index .uleb128 .Lfunc_end134-.Lfunc_begin134 # length .byte 3 # DW_RLE_startx_length + .ascii "\210\001" # start index + .uleb128 .Lfunc_end135-.Lfunc_begin135 # length + .byte 3 # DW_RLE_startx_length + .ascii "\211\001" # start index + .uleb128 .Lfunc_end136-.Lfunc_begin136 # length + .byte 3 # DW_RLE_startx_length .ascii "\212\001" # start index .uleb128 .Lfunc_end137-.Lfunc_begin137 # length + .byte 3 # DW_RLE_startx_length + .ascii "\216\001" # start index + .uleb128 .Lfunc_end141-.Lfunc_begin141 # length .byte 0 # DW_RLE_end_of_list .Ldebug_list_header_end0: .section .debug_str_offsets,"",@progbits - .long 2228 # Length of String Offsets Set + .long 2232 # Length of String Offsets Set .short 5 .short 0 .Lstr_offsets_base0: .section .debug_str,"MS",@progbits,1 .Linfo_string0: - .asciz "clang version 15.0.0 (git@github.com:llvm/llvm-project.git 4e115b7d881136947c083e12f62010bc6b1d3f00)" # string offset=0 + .asciz "clang version 22.0.0git (git@github.com:Michael137/llvm-project.git f45bb984e6f21e702b4d65f1eeea1429f43c800e)" # string offset=0 .Linfo_string1: - .asciz "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" # string offset=101 + .asciz "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" # string offset=110 .Linfo_string2: - .asciz "/usr/local/google/home/blaikie/dev/llvm/src" # string offset=188 + .asciz "/Users/michaelbuch/Git/llvm-worktrees/main" # string offset=197 .Linfo_string3: - .asciz "i" # string offset=232 + .asciz "i" # string offset=240 .Linfo_string4: - .asciz "int" # string offset=234 + .asciz "int" # string offset=242 .Linfo_string5: - .asciz "unsigned int" # string offset=238 + .asciz "unsigned int" # string offset=246 .Linfo_string6: - .asciz "LocalEnum1" # string offset=251 + .asciz "LocalEnum1" # string offset=259 .Linfo_string7: - .asciz "LocalEnum" # string offset=262 + .asciz "LocalEnum" # string offset=270 .Linfo_string8: - .asciz "ns" # string offset=272 + .asciz "ns" # string offset=280 .Linfo_string9: - .asciz "Enumerator1" # string offset=275 + .asciz "Enumerator1" # string offset=283 .Linfo_string10: - .asciz "Enumerator2" # string offset=287 + .asciz "Enumerator2" # string offset=295 .Linfo_string11: - .asciz "Enumerator3" # string offset=299 + .asciz "Enumerator3" # string offset=307 .Linfo_string12: - .asciz "Enumeration" # string offset=311 + .asciz "Enumeration" # string offset=319 .Linfo_string13: - .asciz "EnumerationClass" # string offset=323 + .asciz "EnumerationClass" # string offset=331 .Linfo_string14: - .asciz "unsigned char" # string offset=340 + .asciz "unsigned char" # string offset=348 .Linfo_string15: - .asciz "kNeg" # string offset=354 + .asciz "kNeg" # string offset=362 .Linfo_string16: - .asciz "EnumerationSmall" # string offset=359 + .asciz "EnumerationSmall" # string offset=367 .Linfo_string17: - .asciz "AnonEnum1" # string offset=376 + .asciz "AnonEnum1" # string offset=384 .Linfo_string18: - .asciz "AnonEnum2" # string offset=386 + .asciz "AnonEnum2" # string offset=394 .Linfo_string19: - .asciz "AnonEnum3" # string offset=396 + .asciz "AnonEnum3" # string offset=404 .Linfo_string20: - .asciz "T" # string offset=406 + .asciz "T" # string offset=414 .Linfo_string21: - .asciz "bool" # string offset=408 + .asciz "bool" # string offset=416 .Linfo_string22: - .asciz "b" # string offset=413 + .asciz "b" # string offset=421 .Linfo_string23: - .asciz "_STN|t3|" # string offset=415 + .asciz "_STN|t3|" # string offset=423 .Linfo_string24: - .asciz "t10" # string offset=435 + .asciz "t10" # string offset=444 .Linfo_string25: - .asciz "std" # string offset=439 + .asciz "t6" # string offset=448 .Linfo_string26: - .asciz "signed char" # string offset=443 + .asciz "_ZN2t6lsIiEEvi" # string offset=451 .Linfo_string27: - .asciz "__int8_t" # string offset=455 + .asciz "operator<<" # string offset=466 .Linfo_string28: - .asciz "int8_t" # string offset=464 + .asciz "_ZN2t6ltIiEEvi" # string offset=482 .Linfo_string29: - .asciz "short" # string offset=471 + .asciz "operator<" # string offset=497 .Linfo_string30: - .asciz "__int16_t" # string offset=477 + .asciz "_ZN2t6leIiEEvi" # string offset=512 .Linfo_string31: - .asciz "int16_t" # string offset=487 + .asciz "operator<=" # string offset=527 .Linfo_string32: - .asciz "__int32_t" # string offset=495 + .asciz "_ZN2t6cvP2t1IJfEEIiEEv" # string offset=543 .Linfo_string33: - .asciz "int32_t" # string offset=505 + .asciz "operator t1 *" # string offset=566 .Linfo_string34: - .asciz "long" # string offset=513 + .asciz "Ts" # string offset=592 .Linfo_string35: - .asciz "__int64_t" # string offset=518 + .asciz "float" # string offset=595 .Linfo_string36: - .asciz "int64_t" # string offset=528 + .asciz "_STN|t1|" # string offset=601 .Linfo_string37: - .asciz "int_fast8_t" # string offset=536 + .asciz "_ZN2t6miIiEEvi" # string offset=617 .Linfo_string38: - .asciz "int_fast16_t" # string offset=548 + .asciz "operator-" # string offset=632 .Linfo_string39: - .asciz "int_fast32_t" # string offset=561 + .asciz "_ZN2t6mlIiEEvi" # string offset=647 .Linfo_string40: - .asciz "int_fast64_t" # string offset=574 + .asciz "operator*" # string offset=662 .Linfo_string41: - .asciz "__int_least8_t" # string offset=587 + .asciz "_ZN2t6dvIiEEvi" # string offset=677 .Linfo_string42: - .asciz "int_least8_t" # string offset=602 + .asciz "operator/" # string offset=692 .Linfo_string43: - .asciz "__int_least16_t" # string offset=615 + .asciz "_ZN2t6rmIiEEvi" # string offset=707 .Linfo_string44: - .asciz "int_least16_t" # string offset=631 + .asciz "operator%" # string offset=722 .Linfo_string45: - .asciz "__int_least32_t" # string offset=645 + .asciz "_ZN2t6eoIiEEvi" # string offset=737 .Linfo_string46: - .asciz "int_least32_t" # string offset=661 + .asciz "operator^" # string offset=752 .Linfo_string47: - .asciz "__int_least64_t" # string offset=675 + .asciz "_ZN2t6anIiEEvi" # string offset=767 .Linfo_string48: - .asciz "int_least64_t" # string offset=691 + .asciz "operator&" # string offset=782 .Linfo_string49: - .asciz "__intmax_t" # string offset=705 + .asciz "_ZN2t6orIiEEvi" # string offset=797 .Linfo_string50: - .asciz "intmax_t" # string offset=716 + .asciz "operator|" # string offset=812 .Linfo_string51: - .asciz "intptr_t" # string offset=725 + .asciz "_ZN2t6coIiEEvv" # string offset=827 .Linfo_string52: - .asciz "__uint8_t" # string offset=734 + .asciz "operator~" # string offset=842 .Linfo_string53: - .asciz "uint8_t" # string offset=744 + .asciz "_ZN2t6ntIiEEvv" # string offset=857 .Linfo_string54: - .asciz "unsigned short" # string offset=752 + .asciz "operator!" # string offset=872 .Linfo_string55: - .asciz "__uint16_t" # string offset=767 + .asciz "_ZN2t6aSIiEEvi" # string offset=887 .Linfo_string56: - .asciz "uint16_t" # string offset=778 + .asciz "operator=" # string offset=902 .Linfo_string57: - .asciz "__uint32_t" # string offset=787 + .asciz "_ZN2t6gtIiEEvi" # string offset=917 .Linfo_string58: - .asciz "uint32_t" # string offset=798 + .asciz "operator>" # string offset=932 .Linfo_string59: - .asciz "unsigned long" # string offset=807 + .asciz "_ZN2t6cmIiEEvi" # string offset=947 .Linfo_string60: - .asciz "__uint64_t" # string offset=821 + .asciz "operator," # string offset=962 .Linfo_string61: - .asciz "uint64_t" # string offset=832 + .asciz "_ZN2t6clIiEEvv" # string offset=977 .Linfo_string62: - .asciz "uint_fast8_t" # string offset=841 + .asciz "operator()" # string offset=992 .Linfo_string63: - .asciz "uint_fast16_t" # string offset=854 + .asciz "_ZN2t6ixIiEEvi" # string offset=1008 .Linfo_string64: - .asciz "uint_fast32_t" # string offset=868 + .asciz "operator[]" # string offset=1023 .Linfo_string65: - .asciz "uint_fast64_t" # string offset=882 + .asciz "_ZN2t6ssIiEEvi" # string offset=1039 .Linfo_string66: - .asciz "__uint_least8_t" # string offset=896 + .asciz "operator<=>" # string offset=1054 .Linfo_string67: - .asciz "uint_least8_t" # string offset=912 + .asciz "_ZN2t6nwIiEEPvmT_" # string offset=1071 .Linfo_string68: - .asciz "__uint_least16_t" # string offset=926 + .asciz "operator new" # string offset=1089 .Linfo_string69: - .asciz "uint_least16_t" # string offset=943 + .asciz "std" # string offset=1107 .Linfo_string70: - .asciz "__uint_least32_t" # string offset=958 + .asciz "__1" # string offset=1111 .Linfo_string71: - .asciz "uint_least32_t" # string offset=975 + .asciz "unsigned long" # string offset=1115 .Linfo_string72: - .asciz "__uint_least64_t" # string offset=990 + .asciz "size_t" # string offset=1129 .Linfo_string73: - .asciz "uint_least64_t" # string offset=1007 + .asciz "_ZN2t6naIiEEPvmT_" # string offset=1136 .Linfo_string74: - .asciz "__uintmax_t" # string offset=1022 + .asciz "operator new[]" # string offset=1154 .Linfo_string75: - .asciz "uintmax_t" # string offset=1034 + .asciz "_ZN2t6dlIiEEvPvT_" # string offset=1174 .Linfo_string76: - .asciz "uintptr_t" # string offset=1044 + .asciz "operator delete" # string offset=1192 .Linfo_string77: - .asciz "t6" # string offset=1054 + .asciz "_ZN2t6daIiEEvPvT_" # string offset=1213 .Linfo_string78: - .asciz "_ZN2t6lsIiEEvi" # string offset=1057 + .asciz "operator delete[]" # string offset=1231 .Linfo_string79: - .asciz "operator<<" # string offset=1072 + .asciz "_ZN2t6awIiEEiv" # string offset=1254 .Linfo_string80: - .asciz "_ZN2t6ltIiEEvi" # string offset=1088 + .asciz "operator co_await" # string offset=1269 .Linfo_string81: - .asciz "operator<" # string offset=1103 + .asciz "_ZN3t10C4IvEEv" # string offset=1292 .Linfo_string82: - .asciz "_ZN2t6leIiEEvi" # string offset=1118 + .asciz "_STN|t10|" # string offset=1307 .Linfo_string83: - .asciz "operator<=" # string offset=1133 + .asciz "_ZN2t83memEv" # string offset=1323 .Linfo_string84: - .asciz "_ZN2t6cvP2t1IJfEEIiEEv" # string offset=1149 + .asciz "mem" # string offset=1336 .Linfo_string85: - .asciz "operator t1 *" # string offset=1172 + .asciz "t8" # string offset=1340 .Linfo_string86: - .asciz "Ts" # string offset=1198 + .asciz "complex_type_units" # string offset=1343 .Linfo_string87: - .asciz "float" # string offset=1201 + .asciz "signed char" # string offset=1362 .Linfo_string88: - .asciz "_STN|t1|" # string offset=1207 + .asciz "int8_t" # string offset=1374 .Linfo_string89: - .asciz "_ZN2t6miIiEEvi" # string offset=1222 + .asciz "short" # string offset=1381 .Linfo_string90: - .asciz "operator-" # string offset=1237 + .asciz "int16_t" # string offset=1387 .Linfo_string91: - .asciz "_ZN2t6mlIiEEvi" # string offset=1252 + .asciz "int32_t" # string offset=1395 .Linfo_string92: - .asciz "operator*" # string offset=1267 + .asciz "long" # string offset=1403 .Linfo_string93: - .asciz "_ZN2t6dvIiEEvi" # string offset=1282 + .asciz "int64_t" # string offset=1408 .Linfo_string94: - .asciz "operator/" # string offset=1297 + .asciz "uint8_t" # string offset=1416 .Linfo_string95: - .asciz "_ZN2t6rmIiEEvi" # string offset=1312 + .asciz "unsigned short" # string offset=1424 .Linfo_string96: - .asciz "operator%" # string offset=1327 + .asciz "uint16_t" # string offset=1439 .Linfo_string97: - .asciz "_ZN2t6eoIiEEvi" # string offset=1342 + .asciz "uint32_t" # string offset=1448 .Linfo_string98: - .asciz "operator^" # string offset=1357 + .asciz "uint64_t" # string offset=1457 .Linfo_string99: - .asciz "_ZN2t6anIiEEvi" # string offset=1372 + .asciz "int_least8_t" # string offset=1466 .Linfo_string100: - .asciz "operator&" # string offset=1387 + .asciz "int_least16_t" # string offset=1479 .Linfo_string101: - .asciz "_ZN2t6orIiEEvi" # string offset=1402 + .asciz "int_least32_t" # string offset=1493 .Linfo_string102: - .asciz "operator|" # string offset=1417 + .asciz "int_least64_t" # string offset=1507 .Linfo_string103: - .asciz "_ZN2t6coIiEEvv" # string offset=1432 + .asciz "uint_least8_t" # string offset=1521 .Linfo_string104: - .asciz "operator~" # string offset=1447 + .asciz "uint_least16_t" # string offset=1535 .Linfo_string105: - .asciz "_ZN2t6ntIiEEvv" # string offset=1462 + .asciz "uint_least32_t" # string offset=1550 .Linfo_string106: - .asciz "operator!" # string offset=1477 + .asciz "uint_least64_t" # string offset=1565 .Linfo_string107: - .asciz "_ZN2t6aSIiEEvi" # string offset=1492 + .asciz "int_fast8_t" # string offset=1580 .Linfo_string108: - .asciz "operator=" # string offset=1507 + .asciz "int_fast16_t" # string offset=1592 .Linfo_string109: - .asciz "_ZN2t6gtIiEEvi" # string offset=1522 + .asciz "int_fast32_t" # string offset=1605 .Linfo_string110: - .asciz "operator>" # string offset=1537 + .asciz "int_fast64_t" # string offset=1618 .Linfo_string111: - .asciz "_ZN2t6cmIiEEvi" # string offset=1552 + .asciz "uint_fast8_t" # string offset=1631 .Linfo_string112: - .asciz "operator," # string offset=1567 + .asciz "uint_fast16_t" # string offset=1644 .Linfo_string113: - .asciz "_ZN2t6clIiEEvv" # string offset=1582 + .asciz "uint_fast32_t" # string offset=1658 .Linfo_string114: - .asciz "operator()" # string offset=1597 + .asciz "uint_fast64_t" # string offset=1672 .Linfo_string115: - .asciz "_ZN2t6ixIiEEvi" # string offset=1613 + .asciz "intptr_t" # string offset=1686 .Linfo_string116: - .asciz "operator[]" # string offset=1628 + .asciz "uintptr_t" # string offset=1695 .Linfo_string117: - .asciz "_ZN2t6ssIiEEvi" # string offset=1644 + .asciz "intmax_t" # string offset=1705 .Linfo_string118: - .asciz "operator<=>" # string offset=1659 + .asciz "uintmax_t" # string offset=1714 .Linfo_string119: - .asciz "_ZN2t6nwIiEEPvmT_" # string offset=1676 + .asciz "max_align_t" # string offset=1724 .Linfo_string120: - .asciz "operator new" # string offset=1694 + .asciz "_Zli5_suffy" # string offset=1736 .Linfo_string121: - .asciz "size_t" # string offset=1712 + .asciz "operator\"\"_suff" # string offset=1748 .Linfo_string122: - .asciz "_ZN2t6naIiEEPvmT_" # string offset=1719 + .asciz "main" # string offset=1764 .Linfo_string123: - .asciz "operator new[]" # string offset=1737 + .asciz "_Z2f1IJiEEvv" # string offset=1769 .Linfo_string124: - .asciz "_ZN2t6dlIiEEvPvT_" # string offset=1757 + .asciz "_STN|f1|" # string offset=1782 .Linfo_string125: - .asciz "operator delete" # string offset=1775 + .asciz "_Z2f1IJfEEvv" # string offset=1796 .Linfo_string126: - .asciz "_ZN2t6daIiEEvPvT_" # string offset=1796 + .asciz "_STN|f1|" # string offset=1809 .Linfo_string127: - .asciz "operator delete[]" # string offset=1814 + .asciz "_Z2f1IJbEEvv" # string offset=1825 .Linfo_string128: - .asciz "_ZN2t6awIiEEiv" # string offset=1837 + .asciz "_STN|f1|" # string offset=1838 .Linfo_string129: - .asciz "operator co_await" # string offset=1852 + .asciz "double" # string offset=1853 .Linfo_string130: - .asciz "_STN|t10|" # string offset=1875 + .asciz "_Z2f1IJdEEvv" # string offset=1860 .Linfo_string131: - .asciz "_ZN2t83memEv" # string offset=1890 + .asciz "_STN|f1|" # string offset=1873 .Linfo_string132: - .asciz "mem" # string offset=1903 + .asciz "_Z2f1IJlEEvv" # string offset=1890 .Linfo_string133: - .asciz "t8" # string offset=1907 + .asciz "_STN|f1|" # string offset=1903 .Linfo_string134: - .asciz "_Zli5_suffy" # string offset=1910 + .asciz "_Z2f1IJsEEvv" # string offset=1918 .Linfo_string135: - .asciz "operator\"\"_suff" # string offset=1922 + .asciz "_STN|f1|" # string offset=1931 .Linfo_string136: - .asciz "main" # string offset=1938 + .asciz "_Z2f1IJjEEvv" # string offset=1947 .Linfo_string137: - .asciz "_Z2f1IJiEEvv" # string offset=1943 + .asciz "_STN|f1|" # string offset=1960 .Linfo_string138: - .asciz "_STN|f1|" # string offset=1956 + .asciz "unsigned long long" # string offset=1983 .Linfo_string139: - .asciz "_Z2f1IJfEEvv" # string offset=1969 + .asciz "_Z2f1IJyEEvv" # string offset=2002 .Linfo_string140: - .asciz "_STN|f1|" # string offset=1982 + .asciz "_STN|f1|" # string offset=2015 .Linfo_string141: - .asciz "_Z2f1IJbEEvv" # string offset=1997 + .asciz "long long" # string offset=2044 .Linfo_string142: - .asciz "_STN|f1|" # string offset=2010 + .asciz "_Z2f1IJxEEvv" # string offset=2054 .Linfo_string143: - .asciz "double" # string offset=2024 + .asciz "_STN|f1|" # string offset=2067 .Linfo_string144: - .asciz "_Z2f1IJdEEvv" # string offset=2031 + .asciz "udt" # string offset=2087 .Linfo_string145: - .asciz "_STN|f1|" # string offset=2044 + .asciz "_Z2f1IJ3udtEEvv" # string offset=2091 .Linfo_string146: - .asciz "_Z2f1IJlEEvv" # string offset=2060 + .asciz "_STN|f1|" # string offset=2107 .Linfo_string147: - .asciz "_STN|f1|" # string offset=2073 + .asciz "_Z2f1IJN2ns3udtEEEvv" # string offset=2121 .Linfo_string148: - .asciz "_Z2f1IJsEEvv" # string offset=2087 + .asciz "_STN|f1|" # string offset=2142 .Linfo_string149: - .asciz "_STN|f1|" # string offset=2100 + .asciz "_Z2f1IJPN2ns3udtEEEvv" # string offset=2160 .Linfo_string150: - .asciz "_Z2f1IJjEEvv" # string offset=2115 + .asciz "_STN|f1|" # string offset=2182 .Linfo_string151: - .asciz "_STN|f1|" # string offset=2128 + .asciz "inner" # string offset=2202 .Linfo_string152: - .asciz "unsigned long long" # string offset=2150 + .asciz "_Z2f1IJN2ns5inner3udtEEEvv" # string offset=2208 .Linfo_string153: - .asciz "_Z2f1IJyEEvv" # string offset=2169 + .asciz "_STN|f1|" # string offset=2235 .Linfo_string154: - .asciz "_STN|f1|" # string offset=2182 + .asciz "_STN|t1|" # string offset=2260 .Linfo_string155: - .asciz "long long" # string offset=2210 + .asciz "_Z2f1IJ2t1IJiEEEEvv" # string offset=2274 .Linfo_string156: - .asciz "_Z2f1IJxEEvv" # string offset=2220 + .asciz "_STN|f1| >" # string offset=2294 .Linfo_string157: - .asciz "_STN|f1|" # string offset=2233 + .asciz "_Z2f1IJifEEvv" # string offset=2313 .Linfo_string158: - .asciz "udt" # string offset=2252 + .asciz "_STN|f1|" # string offset=2327 .Linfo_string159: - .asciz "_Z2f1IJ3udtEEvv" # string offset=2256 + .asciz "_Z2f1IJPiEEvv" # string offset=2348 .Linfo_string160: - .asciz "_STN|f1|" # string offset=2272 + .asciz "_STN|f1|" # string offset=2362 .Linfo_string161: - .asciz "_Z2f1IJN2ns3udtEEEvv" # string offset=2285 + .asciz "_Z2f1IJRiEEvv" # string offset=2378 .Linfo_string162: - .asciz "_STN|f1|" # string offset=2306 + .asciz "_STN|f1|" # string offset=2392 .Linfo_string163: - .asciz "_Z2f1IJPN2ns3udtEEEvv" # string offset=2323 + .asciz "_Z2f1IJOiEEvv" # string offset=2408 .Linfo_string164: - .asciz "_STN|f1|" # string offset=2345 + .asciz "_STN|f1|" # string offset=2422 .Linfo_string165: - .asciz "inner" # string offset=2364 + .asciz "_Z2f1IJKiEEvv" # string offset=2439 .Linfo_string166: - .asciz "_Z2f1IJN2ns5inner3udtEEEvv" # string offset=2370 + .asciz "_STN|f1|" # string offset=2453 .Linfo_string167: - .asciz "_STN|f1|" # string offset=2397 + .asciz "__ARRAY_SIZE_TYPE__" # string offset=2473 .Linfo_string168: - .asciz "_STN|t1|" # string offset=2421 + .asciz "_Z2f1IJA3_iEEvv" # string offset=2493 .Linfo_string169: - .asciz "_Z2f1IJ2t1IJiEEEEvv" # string offset=2434 + .asciz "_STN|f1|" # string offset=2509 .Linfo_string170: - .asciz "_STN|f1| >" # string offset=2454 + .asciz "_Z2f1IJvEEvv" # string offset=2526 .Linfo_string171: - .asciz "_Z2f1IJifEEvv" # string offset=2472 + .asciz "_STN|f1|" # string offset=2539 .Linfo_string172: - .asciz "_STN|f1|" # string offset=2486 + .asciz "outer_class" # string offset=2554 .Linfo_string173: - .asciz "_Z2f1IJPiEEvv" # string offset=2506 + .asciz "inner_class" # string offset=2566 .Linfo_string174: - .asciz "_STN|f1|" # string offset=2520 + .asciz "_Z2f1IJN11outer_class11inner_classEEEvv" # string offset=2578 .Linfo_string175: - .asciz "_Z2f1IJRiEEvv" # string offset=2535 + .asciz "_STN|f1|" # string offset=2618 .Linfo_string176: - .asciz "_STN|f1|" # string offset=2549 + .asciz "_Z2f1IJmEEvv" # string offset=2653 .Linfo_string177: - .asciz "_Z2f1IJOiEEvv" # string offset=2564 + .asciz "_STN|f1|" # string offset=2666 .Linfo_string178: - .asciz "_STN|f1|" # string offset=2578 + .asciz "_Z2f2ILb1ELi3EEvv" # string offset=2690 .Linfo_string179: - .asciz "_Z2f1IJKiEEvv" # string offset=2594 + .asciz "_STN|f2|" # string offset=2708 .Linfo_string180: - .asciz "_STN|f1|" # string offset=2608 + .asciz "A" # string offset=2726 .Linfo_string181: - .asciz "__ARRAY_SIZE_TYPE__" # string offset=2627 + .asciz "_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv" # string offset=2728 .Linfo_string182: - .asciz "_Z2f1IJA3_iEEvv" # string offset=2647 + .asciz "_STN|f3|" # string offset=2776 .Linfo_string183: - .asciz "_STN|f1|" # string offset=2663 + .asciz "_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv" # string offset=2842 .Linfo_string184: - .asciz "_Z2f1IJvEEvv" # string offset=2679 + .asciz "_STN|f3|" # string offset=2895 .Linfo_string185: - .asciz "_STN|f1|" # string offset=2692 + .asciz "_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv" # string offset=2976 .Linfo_string186: - .asciz "outer_class" # string offset=2706 + .asciz "_STN|f3|" # string offset=3025 .Linfo_string187: - .asciz "inner_class" # string offset=2718 + .asciz "_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv" # string offset=3083 .Linfo_string188: - .asciz "_Z2f1IJN11outer_class11inner_classEEEvv" # string offset=2730 + .asciz "f3" # string offset=3122 .Linfo_string189: - .asciz "_STN|f1|" # string offset=2770 + .asciz "_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv" # string offset=3476 .Linfo_string190: - .asciz "_Z2f1IJmEEvv" # string offset=2804 + .asciz "f3<(anonymous namespace)::LocalEnum, ((anonymous namespace)::LocalEnum)0>" # string offset=3526 .Linfo_string191: - .asciz "_STN|f1|" # string offset=2817 + .asciz "_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv" # string offset=3600 .Linfo_string192: - .asciz "_Z2f2ILb1ELi3EEvv" # string offset=2840 + .asciz "f3" # string offset=3630 .Linfo_string193: - .asciz "_STN|f2|" # string offset=2858 + .asciz "_Z2f3IPiTpTnT_JLS0_0EEEvv" # string offset=3644 .Linfo_string194: - .asciz "A" # string offset=2875 + .asciz "f3" # string offset=3670 .Linfo_string195: - .asciz "_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv" # string offset=2877 + .asciz "_Z2f3ImTpTnT_JLm1EEEvv" # string offset=3689 .Linfo_string196: - .asciz "_STN|f3|" # string offset=2919 + .asciz "_STN|f3|" # string offset=3712 .Linfo_string197: - .asciz "_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv" # string offset=2981 + .asciz "_Z2f3IyTpTnT_JLy1EEEvv" # string offset=3741 .Linfo_string198: - .asciz "_STN|f3|" # string offset=3028 + .asciz "_STN|f3|" # string offset=3764 .Linfo_string199: - .asciz "_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv" # string offset=3118 + .asciz "_Z2f3IlTpTnT_JLl1EEEvv" # string offset=3799 .Linfo_string200: - .asciz "_STN|f3|" # string offset=3161 + .asciz "_STN|f3|" # string offset=3822 .Linfo_string201: - .asciz "_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv" # string offset=3201 + .asciz "_Z2f3IjTpTnT_JLj1EEEvv" # string offset=3841 .Linfo_string202: - .asciz "f3" # string offset=3234 + .asciz "_STN|f3|" # string offset=3864 .Linfo_string203: - .asciz "_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv" # string offset=3485 + .asciz "_Z2f3IsTpTnT_JLs1EEEvv" # string offset=3891 .Linfo_string204: - .asciz "f3<(anonymous namespace)::LocalEnum, (anonymous namespace)::LocalEnum1>" # string offset=3529 + .asciz "_STN|f3|" # string offset=3914 .Linfo_string205: - .asciz "_Z2f3IPiJXadL_Z1iEEEEvv" # string offset=3601 + .asciz "_Z2f3IhTpTnT_JLh0EEEvv" # string offset=3940 .Linfo_string206: - .asciz "f3" # string offset=3625 + .asciz "_STN|f3|" # string offset=3963 .Linfo_string207: - .asciz "_Z2f3IPiJLS0_0EEEvv" # string offset=3639 + .asciz "_Z2f3IaTpTnT_JLa0EEEvv" # string offset=4010 .Linfo_string208: - .asciz "f3" # string offset=3659 + .asciz "_STN|f3|" # string offset=4033 .Linfo_string209: - .asciz "_Z2f3ImJLm1EEEvv" # string offset=3678 + .asciz "_Z2f3ItTpTnT_JLt1ELt2EEEvv" # string offset=4076 .Linfo_string210: - .asciz "_STN|f3|" # string offset=3695 + .asciz "_STN|f3|" # string offset=4103 .Linfo_string211: - .asciz "_Z2f3IyJLy1EEEvv" # string offset=3723 + .asciz "char" # string offset=4166 .Linfo_string212: - .asciz "_STN|f3|" # string offset=3740 + .asciz "_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv" # string offset=4171 .Linfo_string213: - .asciz "_Z2f3IlJLl1EEEvv" # string offset=3774 + .asciz "_STN|f3|" # string offset=4244 .Linfo_string214: - .asciz "_STN|f3|" # string offset=3791 + .asciz "__int128" # string offset=4337 .Linfo_string215: - .asciz "_Z2f3IjJLj1EEEvv" # string offset=3809 + .asciz "_Z2f3InTpTnT_JLn18446744073709551614EEEvv" # string offset=4346 .Linfo_string216: - .asciz "_STN|f3|" # string offset=3826 + .asciz "f3<__int128, (__int128)18446744073709551614>" # string offset=4388 .Linfo_string217: - .asciz "_Z2f3IsJLs1EEEvv" # string offset=3852 + .asciz "_Z2f4IjLj3EEvv" # string offset=4433 .Linfo_string218: - .asciz "_STN|f3|" # string offset=3869 + .asciz "_STN|f4|" # string offset=4448 .Linfo_string219: - .asciz "_Z2f3IhJLh0EEEvv" # string offset=3894 + .asciz "_Z2f1IJ2t3IiLb0EEEEvv" # string offset=4475 .Linfo_string220: - .asciz "_STN|f3|" # string offset=3911 + .asciz "_STN|f1| >" # string offset=4497 .Linfo_string221: - .asciz "_Z2f3IaJLa0EEEvv" # string offset=3957 + .asciz "_STN|t3|, false>" # string offset=4523 .Linfo_string222: - .asciz "_STN|f3|" # string offset=3974 + .asciz "_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv" # string offset=4555 .Linfo_string223: - .asciz "_Z2f3ItJLt1ELt2EEEvv" # string offset=4016 + .asciz "_STN|f1|, false> >" # string offset=4586 .Linfo_string224: - .asciz "_STN|f3|" # string offset=4037 + .asciz "_Z2f1IJZ4mainE3$_0EEvv" # string offset=4623 .Linfo_string225: - .asciz "char" # string offset=4099 + .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=4646 .Linfo_string226: - .asciz "_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv" # string offset=4104 + .asciz "t3<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12), false>" # string offset=4756 .Linfo_string227: - .asciz "_STN|f3|" # string offset=4171 + .asciz "t3, false>" # string offset=4873 .Linfo_string228: - .asciz "__int128" # string offset=4263 + .asciz "_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv" # string offset=5001 .Linfo_string229: - .asciz "_Z2f3InJLn18446744073709551614EEEvv" # string offset=4272 + .asciz "f1, false> >" # string offset=5042 .Linfo_string230: - .asciz "f3<__int128, (__int128)18446744073709551614>" # string offset=4308 + .asciz "_Z2f1IJFifEEEvv" # string offset=5175 .Linfo_string231: - .asciz "_Z2f4IjLj3EEvv" # string offset=4353 + .asciz "_STN|f1|" # string offset=5191 .Linfo_string232: - .asciz "_STN|f4|" # string offset=4368 + .asciz "_Z2f1IJFvzEEEvv" # string offset=5213 .Linfo_string233: - .asciz "_Z2f1IJ2t3IiLb0EEEEvv" # string offset=4394 + .asciz "_STN|f1|" # string offset=5229 .Linfo_string234: - .asciz "_STN|f1| >" # string offset=4416 + .asciz "_Z2f1IJFvizEEEvv" # string offset=5250 .Linfo_string235: - .asciz "_STN|t3|, false>" # string offset=4441 + .asciz "_STN|f1|" # string offset=5267 .Linfo_string236: - .asciz "_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv" # string offset=4472 + .asciz "_Z2f1IJRKiEEvv" # string offset=5293 .Linfo_string237: - .asciz "_STN|f1|, false> >" # string offset=4503 + .asciz "_STN|f1|" # string offset=5308 .Linfo_string238: - .asciz "_Z2f1IJZ4mainE3$_1EEvv" # string offset=4539 + .asciz "_Z2f1IJRPKiEEvv" # string offset=5330 .Linfo_string239: - .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=4562 + .asciz "_STN|f1|" # string offset=5346 .Linfo_string240: - .asciz "t3<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12), false>" # string offset=4672 + .asciz "t5" # string offset=5369 .Linfo_string241: - .asciz "t3, false>" # string offset=4789 + .asciz "_Z2f1IJN12_GLOBAL__N_12t5EEEvv" # string offset=5372 .Linfo_string242: - .asciz "_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv" # string offset=4917 + .asciz "_STN|f1|<(anonymous namespace)::t5>" # string offset=5403 .Linfo_string243: - .asciz "f1, false> >" # string offset=4958 + .asciz "decltype(nullptr)" # string offset=5439 .Linfo_string244: - .asciz "_Z2f1IJFifEEEvv" # string offset=5091 + .asciz "_Z2f1IJDnEEvv" # string offset=5457 .Linfo_string245: - .asciz "_STN|f1|" # string offset=5107 + .asciz "_STN|f1|" # string offset=5471 .Linfo_string246: - .asciz "_Z2f1IJFvzEEEvv" # string offset=5128 + .asciz "_Z2f1IJPlS0_EEvv" # string offset=5496 .Linfo_string247: - .asciz "_STN|f1|" # string offset=5144 + .asciz "_STN|f1|" # string offset=5513 .Linfo_string248: - .asciz "_Z2f1IJFvizEEEvv" # string offset=5164 + .asciz "_Z2f1IJPlP3udtEEvv" # string offset=5538 .Linfo_string249: - .asciz "_STN|f1|" # string offset=5181 + .asciz "_STN|f1|" # string offset=5557 .Linfo_string250: - .asciz "_Z2f1IJRKiEEvv" # string offset=5206 + .asciz "_Z2f1IJKPvEEvv" # string offset=5581 .Linfo_string251: - .asciz "_STN|f1|" # string offset=5221 + .asciz "_STN|f1|" # string offset=5596 .Linfo_string252: - .asciz "_Z2f1IJRPKiEEvv" # string offset=5242 + .asciz "_Z2f1IJPKPKvEEvv" # string offset=5618 .Linfo_string253: - .asciz "_STN|f1|" # string offset=5258 + .asciz "_STN|f1|" # string offset=5635 .Linfo_string254: - .asciz "t5" # string offset=5280 + .asciz "_Z2f1IJFvvEEEvv" # string offset=5665 .Linfo_string255: - .asciz "_Z2f1IJN12_GLOBAL__N_12t5EEEvv" # string offset=5283 + .asciz "_STN|f1|" # string offset=5681 .Linfo_string256: - .asciz "_STN|f1|<(anonymous namespace)::t5>" # string offset=5314 + .asciz "_Z2f1IJPFvvEEEvv" # string offset=5699 .Linfo_string257: - .asciz "decltype(nullptr)" # string offset=5349 + .asciz "_STN|f1|" # string offset=5716 .Linfo_string258: - .asciz "_Z2f1IJDnEEvv" # string offset=5367 + .asciz "_Z2f1IJPZ4mainE3$_0EEvv" # string offset=5737 .Linfo_string259: - .asciz "_STN|f1|" # string offset=5381 + .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=5761 .Linfo_string260: - .asciz "_Z2f1IJPlS0_EEvv" # string offset=5405 + .asciz "_Z2f1IJZ4mainE3$_1EEvv" # string offset=5873 .Linfo_string261: - .asciz "_STN|f1|" # string offset=5422 + .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=5896 .Linfo_string262: - .asciz "_Z2f1IJPlP3udtEEvv" # string offset=5446 + .asciz "_Z2f1IJPZ4mainE3$_1EEvv" # string offset=6013 .Linfo_string263: - .asciz "_STN|f1|" # string offset=5465 + .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=6037 .Linfo_string264: - .asciz "_Z2f1IJKPvEEvv" # string offset=5488 + .asciz "T1" # string offset=6156 .Linfo_string265: - .asciz "_STN|f1|" # string offset=5503 + .asciz "T2" # string offset=6159 .Linfo_string266: - .asciz "_Z2f1IJPKPKvEEvv" # string offset=5524 + .asciz "_Z2f5IJ2t1IJiEEEiEvv" # string offset=6162 .Linfo_string267: - .asciz "_STN|f1|" # string offset=5541 + .asciz "_STN|f5|, int>" # string offset=6183 .Linfo_string268: - .asciz "_Z2f1IJFvvEEEvv" # string offset=5570 + .asciz "_Z2f5IJEiEvv" # string offset=6206 .Linfo_string269: - .asciz "_STN|f1|" # string offset=5586 + .asciz "_STN|f5|" # string offset=6219 .Linfo_string270: - .asciz "_Z2f1IJPFvvEEEvv" # string offset=5603 + .asciz "_Z2f6I2t1IJiEEJEEvv" # string offset=6233 .Linfo_string271: - .asciz "_STN|f1|" # string offset=5620 + .asciz "_STN|f6| >" # string offset=6253 .Linfo_string272: - .asciz "_Z2f1IJPZ4mainE3$_1EEvv" # string offset=5640 + .asciz "_Z2f1IJEEvv" # string offset=6272 .Linfo_string273: - .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=5664 + .asciz "_STN|f1|<>" # string offset=6284 .Linfo_string274: - .asciz "_Z2f1IJZ4mainE3$_2EEvv" # string offset=5776 + .asciz "_Z2f1IJPKvS1_EEvv" # string offset=6295 .Linfo_string275: - .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=5799 + .asciz "_STN|f1|" # string offset=6313 .Linfo_string276: - .asciz "_Z2f1IJPZ4mainE3$_2EEvv" # string offset=5916 + .asciz "_STN|t1|" # string offset=6350 .Linfo_string277: - .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=5940 + .asciz "_Z2f1IJP2t1IJPiEEEEvv" # string offset=6366 .Linfo_string278: - .asciz "T1" # string offset=6059 + .asciz "_STN|f1| *>" # string offset=6388 .Linfo_string279: - .asciz "T2" # string offset=6062 + .asciz "_Z2f1IJA_PiEEvv" # string offset=6410 .Linfo_string280: - .asciz "_Z2f5IJ2t1IJiEEEiEvv" # string offset=6065 + .asciz "_STN|f1|" # string offset=6426 .Linfo_string281: - .asciz "_STN|f5|, int>" # string offset=6086 + .asciz "t7" # string offset=6444 .Linfo_string282: - .asciz "_Z2f5IJEiEvv" # string offset=6108 + .asciz "_Z2f1IJZ4mainE2t7EEvv" # string offset=6447 .Linfo_string283: - .asciz "_STN|f5|" # string offset=6121 + .asciz "_STN|f1|" # string offset=6469 .Linfo_string284: - .asciz "_Z2f6I2t1IJiEEJEEvv" # string offset=6134 + .asciz "_Z2f1IJRA3_iEEvv" # string offset=6482 .Linfo_string285: - .asciz "_STN|f6| >" # string offset=6154 + .asciz "_STN|f1|" # string offset=6499 .Linfo_string286: - .asciz "_Z2f1IJEEvv" # string offset=6172 + .asciz "_Z2f1IJPA3_iEEvv" # string offset=6520 .Linfo_string287: - .asciz "_STN|f1|<>" # string offset=6184 + .asciz "_STN|f1|" # string offset=6537 .Linfo_string288: - .asciz "_Z2f1IJPKvS1_EEvv" # string offset=6194 + .asciz "t1" # string offset=6558 .Linfo_string289: - .asciz "_STN|f1|" # string offset=6212 + .asciz "_Z2f7I2t1Evv" # string offset=6561 .Linfo_string290: - .asciz "_STN|t1|" # string offset=6248 + .asciz "_STN|f7|" # string offset=6574 .Linfo_string291: - .asciz "_Z2f1IJP2t1IJPiEEEEvv" # string offset=6263 + .asciz "_Z2f8I2t1iEvv" # string offset=6587 .Linfo_string292: - .asciz "_STN|f1| *>" # string offset=6285 + .asciz "_STN|f8|" # string offset=6601 .Linfo_string293: - .asciz "_Z2f1IJA_PiEEvv" # string offset=6306 + .asciz "ns::inner::ttp" # string offset=6619 .Linfo_string294: - .asciz "_STN|f1|" # string offset=6322 + .asciz "_ZN2ns8ttp_userINS_5inner3ttpEEEvv" # string offset=6634 .Linfo_string295: - .asciz "t7" # string offset=6339 + .asciz "_STN|ttp_user|" # string offset=6669 .Linfo_string296: - .asciz "_Z2f1IJZ4mainE2t7EEvv" # string offset=6342 + .asciz "_Z2f1IJPiPDnEEvv" # string offset=6700 .Linfo_string297: - .asciz "_STN|f1|" # string offset=6364 + .asciz "_STN|f1|" # string offset=6717 .Linfo_string298: - .asciz "_Z2f1IJRA3_iEEvv" # string offset=6376 + .asciz "_STN|t7|" # string offset=6751 .Linfo_string299: - .asciz "_STN|f1|" # string offset=6393 + .asciz "_Z2f1IJ2t7IiEEEvv" # string offset=6765 .Linfo_string300: - .asciz "_Z2f1IJPA3_iEEvv" # string offset=6413 + .asciz "_STN|f1| >" # string offset=6783 .Linfo_string301: - .asciz "_STN|f1|" # string offset=6430 + .asciz "ns::inl::t9" # string offset=6802 .Linfo_string302: - .asciz "t1" # string offset=6450 + .asciz "_Z2f7ITtTpTyEN2ns3inl2t9EEvv" # string offset=6814 .Linfo_string303: - .asciz "_Z2f7I2t1Evv" # string offset=6453 + .asciz "_STN|f7|" # string offset=6843 .Linfo_string304: - .asciz "_STN|f7|" # string offset=6466 + .asciz "_Z2f1IJU7_AtomiciEEvv" # string offset=6865 .Linfo_string305: - .asciz "_Z2f8I2t1iEvv" # string offset=6478 + .asciz "f1<_Atomic(int)>" # string offset=6887 .Linfo_string306: - .asciz "_STN|f8|" # string offset=6492 + .asciz "_Z2f1IJilVcEEvv" # string offset=6904 .Linfo_string307: - .asciz "ns::inner::ttp" # string offset=6509 + .asciz "_STN|f1|" # string offset=6920 .Linfo_string308: - .asciz "_ZN2ns8ttp_userINS_5inner3ttpEEEvv" # string offset=6524 + .asciz "_Z2f1IJDv2_iEEvv" # string offset=6955 .Linfo_string309: - .asciz "_STN|ttp_user|" # string offset=6559 + .asciz "f1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=6972 .Linfo_string310: - .asciz "_Z2f1IJPiPDnEEvv" # string offset=6589 + .asciz "_Z2f1IJVKPiEEvv" # string offset=7030 .Linfo_string311: - .asciz "_STN|f1|" # string offset=6606 + .asciz "_STN|f1|" # string offset=7046 .Linfo_string312: - .asciz "_STN|t7|" # string offset=6639 + .asciz "_Z2f1IJVKvEEvv" # string offset=7076 .Linfo_string313: - .asciz "_Z2f1IJ2t7IiEEEvv" # string offset=6652 + .asciz "_STN|f1|" # string offset=7091 .Linfo_string314: - .asciz "_STN|f1| >" # string offset=6670 + .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=7121 .Linfo_string315: - .asciz "ns::inl::t9" # string offset=6688 + .asciz "_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv" # string offset=7231 .Linfo_string316: - .asciz "_Z2f7IN2ns3inl2t9EEvv" # string offset=6700 + .asciz "f1 >" # string offset=7261 .Linfo_string317: - .asciz "_STN|f7|" # string offset=6722 + .asciz "_ZN3t10C2IvEEv" # string offset=7376 .Linfo_string318: - .asciz "_Z2f1IJU7_AtomiciEEvv" # string offset=6743 + .asciz "_Z2f1IJM3udtKFvvEEEvv" # string offset=7391 .Linfo_string319: - .asciz "f1<_Atomic(int)>" # string offset=6765 + .asciz "_STN|f1|" # string offset=7413 .Linfo_string320: - .asciz "_Z2f1IJilVcEEvv" # string offset=6782 + .asciz "_Z2f1IJM3udtVFvvREEEvv" # string offset=7445 .Linfo_string321: - .asciz "_STN|f1|" # string offset=6798 + .asciz "_STN|f1|" # string offset=7468 .Linfo_string322: - .asciz "_Z2f1IJDv2_iEEvv" # string offset=6832 + .asciz "_Z2f1IJM3udtVKFvvOEEEvv" # string offset=7505 .Linfo_string323: - .asciz "f1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=6849 + .asciz "_STN|f1|" # string offset=7529 .Linfo_string324: - .asciz "_Z2f1IJVKPiEEvv" # string offset=6907 + .asciz "_Z2f9IiEPFvvEv" # string offset=7573 .Linfo_string325: - .asciz "_STN|f1|" # string offset=6923 + .asciz "_STN|f9|" # string offset=7588 .Linfo_string326: - .asciz "_Z2f1IJVKvEEvv" # string offset=6952 + .asciz "_Z2f1IJKPFvvEEEvv" # string offset=7602 .Linfo_string327: - .asciz "_STN|f1|" # string offset=6967 + .asciz "_STN|f1|" # string offset=7620 .Linfo_string328: - .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=6996 + .asciz "_Z2f1IJRA1_KcEEvv" # string offset=7646 .Linfo_string329: - .asciz "_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv" # string offset=7106 + .asciz "_STN|f1|" # string offset=7664 .Linfo_string330: - .asciz "f1 >" # string offset=7136 + .asciz "_Z2f1IJKFvvREEEvv" # string offset=7692 .Linfo_string331: - .asciz "_ZN3t10C2IvEEv" # string offset=7251 + .asciz "_STN|f1|" # string offset=7710 .Linfo_string332: - .asciz "_Z2f1IJM3udtKFvvEEEvv" # string offset=7266 + .asciz "_Z2f1IJVFvvOEEEvv" # string offset=7736 .Linfo_string333: - .asciz "_STN|f1|" # string offset=7288 + .asciz "_STN|f1|" # string offset=7754 .Linfo_string334: - .asciz "_Z2f1IJM3udtVFvvREEEvv" # string offset=7319 + .asciz "_Z2f1IJVKFvvEEEvv" # string offset=7784 .Linfo_string335: - .asciz "_STN|f1|" # string offset=7342 + .asciz "_STN|f1|" # string offset=7802 .Linfo_string336: - .asciz "_Z2f1IJM3udtVKFvvOEEEvv" # string offset=7378 + .asciz "_Z2f1IJA1_KPiEEvv" # string offset=7835 .Linfo_string337: - .asciz "_STN|f1|" # string offset=7402 + .asciz "_STN|f1|" # string offset=7853 .Linfo_string338: - .asciz "_Z2f9IiEPFvvEv" # string offset=7445 + .asciz "_Z2f1IJRA1_KPiEEvv" # string offset=7877 .Linfo_string339: - .asciz "_STN|f9|" # string offset=7460 + .asciz "_STN|f1|" # string offset=7896 .Linfo_string340: - .asciz "_Z2f1IJKPFvvEEEvv" # string offset=7473 + .asciz "_Z2f1IJRKM3udtFvvEEEvv" # string offset=7924 .Linfo_string341: - .asciz "_STN|f1|" # string offset=7491 + .asciz "_STN|f1|" # string offset=7947 .Linfo_string342: - .asciz "_Z2f1IJRA1_KcEEvv" # string offset=7516 + .asciz "_Z2f1IJFPFvfEiEEEvv" # string offset=7980 .Linfo_string343: - .asciz "_STN|f1|" # string offset=7534 + .asciz "_STN|f1|" # string offset=8000 .Linfo_string344: - .asciz "_Z2f1IJKFvvREEEvv" # string offset=7561 + .asciz "_Z2f1IJA1_2t1IJiEEEEvv" # string offset=8031 .Linfo_string345: - .asciz "_STN|f1|" # string offset=7579 + .asciz "_STN|f1|[1]>" # string offset=8054 .Linfo_string346: - .asciz "_Z2f1IJVFvvOEEEvv" # string offset=7604 + .asciz "_Z2f1IJPDoFvvEEEvv" # string offset=8075 .Linfo_string347: - .asciz "_STN|f1|" # string offset=7622 + .asciz "f1" # string offset=8094 .Linfo_string348: - .asciz "_Z2f1IJVKFvvEEEvv" # string offset=7651 + .asciz "_Z2f1IJFvZ4mainE3$_1EEEvv" # string offset=8118 .Linfo_string349: - .asciz "_STN|f1|" # string offset=7669 + .asciz "f1" # string offset=8144 .Linfo_string350: - .asciz "_Z2f1IJA1_KPiEEvv" # string offset=7701 + .asciz "_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv" # string offset=8268 .Linfo_string351: - .asciz "_STN|f1|" # string offset=7719 + .asciz "f1" # string offset=8304 .Linfo_string352: - .asciz "_Z2f1IJRA1_KPiEEvv" # string offset=7742 + .asciz "_Z2f1IJFvZ4mainE2t8EEEvv" # string offset=8432 .Linfo_string353: - .asciz "_STN|f1|" # string offset=7761 + .asciz "_STN|f1|" # string offset=8457 .Linfo_string354: - .asciz "_Z2f1IJRKM3udtFvvEEEvv" # string offset=7788 + .asciz "_Z19operator_not_reallyIiEvv" # string offset=8477 .Linfo_string355: - .asciz "_STN|f1|" # string offset=7811 + .asciz "_STN|operator_not_really|" # string offset=8506 .Linfo_string356: - .asciz "_Z2f1IJFPFvfEiEEEvv" # string offset=7843 + .asciz "_BitInt(3)" # string offset=8537 .Linfo_string357: - .asciz "_STN|f1|" # string offset=7863 + .asciz "V" # string offset=8548 .Linfo_string358: - .asciz "_Z2f1IJA1_2t1IJiEEEEvv" # string offset=7893 + .asciz "_Z3f11IDB3_TnT_LS0_2EEvv" # string offset=8550 .Linfo_string359: - .asciz "_STN|f1|[1]>" # string offset=7916 + .asciz "_STN|f11|<_BitInt(3), (_BitInt(3))2>" # string offset=8575 .Linfo_string360: - .asciz "_Z2f1IJPDoFvvEEEvv" # string offset=7936 + .asciz "unsigned _BitInt(5)" # string offset=8612 .Linfo_string361: - .asciz "f1" # string offset=7955 + .asciz "_Z3f11IKDU5_TnT_LS0_2EEvv" # string offset=8632 .Linfo_string362: - .asciz "_Z2f1IJFvZ4mainE3$_2EEEvv" # string offset=7979 + .asciz "_STN|f11|" # string offset=8658 .Linfo_string363: - .asciz "f1" # string offset=8005 + .asciz "_BitInt(65)" # string offset=8719 .Linfo_string364: - .asciz "_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv" # string offset=8129 + .asciz "_Z3f11IDB65_TnT_LS0_2EEvv" # string offset=8731 .Linfo_string365: - .asciz "f1" # string offset=8165 + .asciz "f11<_BitInt(65), (_BitInt(65))2>" # string offset=8757 .Linfo_string366: - .asciz "_Z2f1IJFvZ4mainE2t8EEEvv" # string offset=8293 + .asciz "unsigned _BitInt(65)" # string offset=8790 .Linfo_string367: - .asciz "_STN|f1|" # string offset=8318 + .asciz "_Z3f11IKDU65_TnT_LS0_2EEvv" # string offset=8811 .Linfo_string368: - .asciz "_Z19operator_not_reallyIiEvv" # string offset=8337 + .asciz "f11" # string offset=8838 .Linfo_string369: - .asciz "_STN|operator_not_really|" # string offset=8366 + .asciz "_STN|t1|<>" # string offset=8895 .Linfo_string370: - .asciz "_BitInt" # string offset=8396 + .asciz "_Z2f1IJFv2t1IJEES1_EEEvv" # string offset=8906 .Linfo_string371: - .asciz "_Z2f1IJDB3_EEvv" # string offset=8404 + .asciz "_STN|f1|, t1<>)>" # string offset=8931 .Linfo_string372: - .asciz "f1<_BitInt(3)>" # string offset=8420 + .asciz "_Z2f1IJM2t1IJEEiEEvv" # string offset=8959 .Linfo_string373: - .asciz "unsigned _BitInt" # string offset=8435 + .asciz "_STN|f1|::*>" # string offset=8980 .Linfo_string374: - .asciz "_Z2f1IJKDU5_EEvv" # string offset=8452 + .asciz "_Z2f1IJU9swiftcallFvvEEEvv" # string offset=9002 .Linfo_string375: - .asciz "f1" # string offset=8469 + .asciz "_STN|f1|" # string offset=9029 .Linfo_string376: - .asciz "_STN|t1|<>" # string offset=8499 + .asciz "_Z2f1IJFivEEEvv" # string offset=9074 .Linfo_string377: - .asciz "_Z2f1IJFv2t1IJEES1_EEEvv" # string offset=8509 + .asciz "f1" # string offset=9090 .Linfo_string378: - .asciz "_STN|f1|, t1<>)>" # string offset=8534 + .asciz "_Z3f10ILN2ns3$_0E0EEvv" # string offset=9127 .Linfo_string379: - .asciz "_Z2f1IJM2t1IJEEiEEvv" # string offset=8561 + .asciz "f10<(ns::(unnamed enum at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:31:1))0>" # string offset=9150 .Linfo_string380: - .asciz "_STN|f1|::*>" # string offset=8582 + .asciz "_Z2f1IJZN2t83memEvE2t7EEvv" # string offset=9272 .Linfo_string381: - .asciz "_Z2f1IJU9swiftcallFvvEEEvv" # string offset=8603 + .asciz "_Z2f1IJM2t8FvvEEEvv" # string offset=9299 .Linfo_string382: - .asciz "_STN|f1|" # string offset=8630 + .asciz "_STN|f1|" # string offset=9319 .Linfo_string383: - .asciz "_Z2f1IJZN2t83memEvE2t7EEvv" # string offset=8674 + .asciz "_ZN18complex_type_units2f1Ev" # string offset=9344 .Linfo_string384: - .asciz "_Z2f1IJM2t8FvvEEEvv" # string offset=8701 + .asciz "f1" # string offset=9373 .Linfo_string385: - .asciz "_STN|f1|" # string offset=8721 + .asciz "L" # string offset=9376 .Linfo_string386: - .asciz "L" # string offset=8745 + .asciz "v2" # string offset=9378 .Linfo_string387: - .asciz "v2" # string offset=8747 + .asciz "N" # string offset=9381 .Linfo_string388: - .asciz "N" # string offset=8750 + .asciz "_STN|t4|<3U>" # string offset=9383 .Linfo_string389: - .asciz "_STN|t4|<3U>" # string offset=8752 + .asciz "v1" # string offset=9396 .Linfo_string390: - .asciz "v1" # string offset=8764 + .asciz "v6" # string offset=9399 .Linfo_string391: - .asciz "v6" # string offset=8767 + .asciz "x" # string offset=9402 .Linfo_string392: - .asciz "x" # string offset=8770 + .asciz "t7i" # string offset=9404 .Linfo_string393: - .asciz "t7i" # string offset=8772 + .asciz "v3" # string offset=9408 .Linfo_string394: - .asciz "v3" # string offset=8776 + .asciz "v4" # string offset=9411 .Linfo_string395: - .asciz "v4" # string offset=8779 + .asciz "t11<(anonymous namespace)::LocalEnum, ((anonymous namespace)::LocalEnum)0>" # string offset=9414 .Linfo_string396: - .asciz "t11<(anonymous namespace)::LocalEnum, (anonymous namespace)::LocalEnum1>" # string offset=8782 + .asciz "t12" # string offset=9489 .Linfo_string397: - .asciz "t12" # string offset=8855 + .asciz "_STN|t2|" # string offset=9493 .Linfo_string398: - .asciz "_STN|t2|" # string offset=8859 + .asciz "_STN|t2|" # string offset=9507 .Linfo_string399: - .asciz "_STN|t2|" # string offset=8872 + .asciz "_STN|t1|" # string offset=9523 .Linfo_string400: - .asciz "_STN|t1|" # string offset=8887 + .asciz "_STN|t2|" # string offset=9538 .Linfo_string401: - .asciz "_STN|t2|" # string offset=8901 + .asciz "_STN|t1|" # string offset=9553 .Linfo_string402: - .asciz "_STN|t1|" # string offset=8915 + .asciz "_STN|t2|" # string offset=9570 .Linfo_string403: - .asciz "_STN|t2|" # string offset=8931 + .asciz "_STN|t1|" # string offset=9587 .Linfo_string404: - .asciz "_STN|t1|" # string offset=8947 + .asciz "_STN|t2|" # string offset=9602 .Linfo_string405: - .asciz "_STN|t2|" # string offset=8961 + .asciz "_STN|t1|" # string offset=9617 .Linfo_string406: - .asciz "_STN|t1|" # string offset=8975 + .asciz "_STN|t2|" # string offset=9633 .Linfo_string407: - .asciz "_STN|t2|" # string offset=8990 + .asciz "_STN|t1|" # string offset=9649 .Linfo_string408: - .asciz "_STN|t1|" # string offset=9005 + .asciz "_STN|t2|" # string offset=9672 .Linfo_string409: - .asciz "_STN|t2|" # string offset=9027 + .asciz "_STN|t1|" # string offset=9695 .Linfo_string410: - .asciz "_STN|t1|" # string offset=9049 + .asciz "_STN|t2|" # string offset=9724 .Linfo_string411: - .asciz "_STN|t2|" # string offset=9077 + .asciz "_STN|t1|" # string offset=9753 .Linfo_string412: - .asciz "_STN|t1|" # string offset=9105 + .asciz "_STN|t2|" # string offset=9773 .Linfo_string413: - .asciz "_STN|t2|" # string offset=9124 + .asciz "_STN|t1|" # string offset=9793 .Linfo_string414: - .asciz "_STN|t1|" # string offset=9143 + .asciz "_STN|t2|" # string offset=9807 .Linfo_string415: - .asciz "_STN|t2|" # string offset=9156 + .asciz "_STN|t1|" # string offset=9821 .Linfo_string416: - .asciz "_STN|t1|" # string offset=9169 + .asciz "_STN|t2|" # string offset=9839 .Linfo_string417: - .asciz "_STN|t2|" # string offset=9186 + .asciz "_STN|t1|" # string offset=9857 .Linfo_string418: - .asciz "_STN|t1|" # string offset=9203 + .asciz "_STN|t2|" # string offset=9877 .Linfo_string419: - .asciz "_STN|t2|" # string offset=9222 + .asciz "_STN|t1|" # string offset=9897 .Linfo_string420: - .asciz "_STN|t1|" # string offset=9241 + .asciz "_STN|t2|" # string offset=9922 .Linfo_string421: - .asciz "_STN|t2|" # string offset=9265 + .asciz "_STN|t1| >" # string offset=9947 .Linfo_string422: - .asciz "_STN|t1| >" # string offset=9289 + .asciz "_STN|t2| >" # string offset=9966 .Linfo_string423: - .asciz "_STN|t2| >" # string offset=9307 + .asciz "_STN|t1|" # string offset=9985 .Linfo_string424: - .asciz "_STN|t1|" # string offset=9325 + .asciz "_STN|t2|" # string offset=10006 .Linfo_string425: - .asciz "_STN|t2|" # string offset=9345 + .asciz "_STN|t2|" # string offset=10027 .Linfo_string426: - .asciz "_STN|t2|" # string offset=9365 + .asciz "_STN|t1|" # string offset=10043 .Linfo_string427: - .asciz "_STN|t1|" # string offset=9380 + .asciz "_STN|t2|" # string offset=10059 .Linfo_string428: - .asciz "_STN|t2|" # string offset=9395 + .asciz "_STN|t1|" # string offset=10075 .Linfo_string429: - .asciz "_STN|t1|" # string offset=9410 + .asciz "_STN|t2|" # string offset=10092 .Linfo_string430: - .asciz "_STN|t2|" # string offset=9426 + .asciz "_STN|t1|" # string offset=10109 .Linfo_string431: - .asciz "_STN|t1|" # string offset=9442 + .asciz "_STN|t2|" # string offset=10129 .Linfo_string432: - .asciz "_STN|t2|" # string offset=9461 + .asciz "_STN|t1|" # string offset=10149 .Linfo_string433: - .asciz "_STN|t1|" # string offset=9480 + .asciz "_STN|t2|" # string offset=10166 .Linfo_string434: - .asciz "_STN|t2|" # string offset=9496 + .asciz "_STN|t1|" # string offset=10183 .Linfo_string435: - .asciz "_STN|t1|" # string offset=9512 + .asciz "_STN|t2|" # string offset=10198 .Linfo_string436: - .asciz "_STN|t2|" # string offset=9526 + .asciz "_STN|t1|" # string offset=10213 .Linfo_string437: - .asciz "_STN|t1|" # string offset=9540 + .asciz "_STN|t2|" # string offset=10248 .Linfo_string438: - .asciz "_STN|t2|" # string offset=9574 + .asciz "_STN|t1|" # string offset=10283 .Linfo_string439: - .asciz "_STN|t1|" # string offset=9608 + .asciz "_STN|t2|" # string offset=10307 .Linfo_string440: - .asciz "_STN|t2|" # string offset=9631 + .asciz "_STN|t1| >" # string offset=10331 .Linfo_string441: - .asciz "_STN|t1| >" # string offset=9654 + .asciz "_STN|t2| >" # string offset=10357 .Linfo_string442: - .asciz "_STN|t2| >" # string offset=9679 + .asciz "_STN|t1|, false> >" # string offset=10383 .Linfo_string443: - .asciz "_STN|t1|, false> >" # string offset=9704 + .asciz "_STN|t2|, false> >" # string offset=10420 .Linfo_string444: - .asciz "_STN|t2|, false> >" # string offset=9740 + .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=10457 .Linfo_string445: - .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=9776 + .asciz "t1, false> >" # string offset=10567 .Linfo_string446: - .asciz "t1, false> >" # string offset=9886 + .asciz "t2, false> >" # string offset=10700 .Linfo_string447: - .asciz "t2, false> >" # string offset=10019 + .asciz "_STN|t1|" # string offset=10833 .Linfo_string448: - .asciz "_STN|t1|" # string offset=10152 + .asciz "_STN|t2|" # string offset=10855 .Linfo_string449: - .asciz "_STN|t2|" # string offset=10173 + .asciz "_STN|t1|" # string offset=10877 .Linfo_string450: - .asciz "_STN|t1|" # string offset=10194 + .asciz "_STN|t2|" # string offset=10898 .Linfo_string451: - .asciz "_STN|t2|" # string offset=10214 + .asciz "_STN|t1|" # string offset=10919 .Linfo_string452: - .asciz "_STN|t1|" # string offset=10234 + .asciz "_STN|t2|" # string offset=10945 .Linfo_string453: - .asciz "_STN|t2|" # string offset=10259 + .asciz "_STN|t1|" # string offset=10971 .Linfo_string454: - .asciz "_STN|t1|" # string offset=10284 + .asciz "_STN|t2|" # string offset=10993 .Linfo_string455: - .asciz "_STN|t2|" # string offset=10305 + .asciz "_STN|t1|" # string offset=11015 .Linfo_string456: - .asciz "_STN|t1|" # string offset=10326 + .asciz "_STN|t2|" # string offset=11038 .Linfo_string457: - .asciz "_STN|t2|" # string offset=10348 + .asciz "_STN|t1|<(anonymous namespace)::t5>" # string offset=11061 .Linfo_string458: - .asciz "_STN|t1|<(anonymous namespace)::t5>" # string offset=10370 + .asciz "_STN|t2|<(anonymous namespace)::t5>" # string offset=11097 .Linfo_string459: - .asciz "_STN|t2|<(anonymous namespace)::t5>" # string offset=10405 + .asciz "_STN|t1|" # string offset=11133 .Linfo_string460: - .asciz "_STN|t1|" # string offset=10440 + .asciz "_STN|t2|" # string offset=11158 .Linfo_string461: - .asciz "_STN|t2|" # string offset=10464 + .asciz "_STN|t1|" # string offset=11183 .Linfo_string462: - .asciz "_STN|t1|" # string offset=10488 + .asciz "_STN|t2|" # string offset=11208 .Linfo_string463: - .asciz "_STN|t2|" # string offset=10512 + .asciz "_STN|t1|" # string offset=11233 .Linfo_string464: - .asciz "_STN|t1|" # string offset=10536 + .asciz "_STN|t2|" # string offset=11257 .Linfo_string465: - .asciz "_STN|t2|" # string offset=10559 + .asciz "_STN|t1|" # string offset=11281 .Linfo_string466: - .asciz "_STN|t1|" # string offset=10582 + .asciz "_STN|t2|" # string offset=11303 .Linfo_string467: - .asciz "_STN|t2|" # string offset=10603 + .asciz "_STN|t1|" # string offset=11325 .Linfo_string468: - .asciz "_STN|t1|" # string offset=10624 + .asciz "_STN|t2|" # string offset=11355 .Linfo_string469: - .asciz "_STN|t2|" # string offset=10653 + .asciz "_STN|t1|" # string offset=11385 .Linfo_string470: - .asciz "_STN|t1|" # string offset=10682 + .asciz "_STN|t2|" # string offset=11403 .Linfo_string471: - .asciz "_STN|t2|" # string offset=10699 + .asciz "_STN|t1|" # string offset=11421 .Linfo_string472: - .asciz "_STN|t1|" # string offset=10716 + .asciz "_STN|t2|" # string offset=11442 .Linfo_string473: - .asciz "_STN|t2|" # string offset=10736 + .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=11463 .Linfo_string474: - .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=10756 + .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=11575 .Linfo_string475: - .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=10868 + .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=11687 .Linfo_string476: - .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=10980 + .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=11804 .Linfo_string477: - .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=11097 + .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=11921 .Linfo_string478: - .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=11214 + .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=12040 .Linfo_string479: - .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=11333 + .asciz "_STN|t2|<>" # string offset=12159 .Linfo_string480: - .asciz "_STN|t2|<>" # string offset=11452 + .asciz "_STN|t1|" # string offset=12170 .Linfo_string481: - .asciz "_STN|t1|" # string offset=11462 + .asciz "_STN|t2|" # string offset=12207 .Linfo_string482: - .asciz "_STN|t2|" # string offset=11498 + .asciz "_STN|t1| *>" # string offset=12244 .Linfo_string483: - .asciz "_STN|t1| *>" # string offset=11534 + .asciz "_STN|t2| *>" # string offset=12266 .Linfo_string484: - .asciz "_STN|t2| *>" # string offset=11555 + .asciz "_STN|t1|" # string offset=12288 .Linfo_string485: - .asciz "_STN|t1|" # string offset=11576 + .asciz "_STN|t2|" # string offset=12306 .Linfo_string486: - .asciz "_STN|t2|" # string offset=11593 + .asciz "this" # string offset=12324 .Linfo_string487: - .asciz "this" # string offset=11610 + .asciz "_STN|t1|" # string offset=12329 .Linfo_string488: - .asciz "_STN|t1|" # string offset=11615 + .asciz "_STN|t2|" # string offset=12342 .Linfo_string489: - .asciz "_STN|t2|" # string offset=11627 + .asciz "_STN|t1|" # string offset=12355 .Linfo_string490: - .asciz "_STN|t1|" # string offset=11639 + .asciz "_STN|t2|" # string offset=12376 .Linfo_string491: - .asciz "_STN|t2|" # string offset=11659 + .asciz "_STN|t1|" # string offset=12397 .Linfo_string492: - .asciz "_STN|t1|" # string offset=11679 + .asciz "_STN|t2|" # string offset=12418 .Linfo_string493: - .asciz "_STN|t2|" # string offset=11699 + .asciz "_STN|t1|" # string offset=12439 .Linfo_string494: - .asciz "_STN|t1|" # string offset=11719 + .asciz "_STN|t2|" # string offset=12473 .Linfo_string495: - .asciz "_STN|t2|" # string offset=11752 + .asciz "_STN|t1| >" # string offset=12507 .Linfo_string496: - .asciz "_STN|t1| >" # string offset=11785 + .asciz "_STN|t2| >" # string offset=12526 .Linfo_string497: - .asciz "_STN|t2| >" # string offset=11803 + .asciz "t1<_Atomic(int)>" # string offset=12545 .Linfo_string498: - .asciz "t1<_Atomic(int)>" # string offset=11821 + .asciz "t2<_Atomic(int)>" # string offset=12562 .Linfo_string499: - .asciz "t2<_Atomic(int)>" # string offset=11838 + .asciz "_STN|t1|" # string offset=12579 .Linfo_string500: - .asciz "_STN|t1|" # string offset=11855 + .asciz "_STN|t2|" # string offset=12614 .Linfo_string501: - .asciz "_STN|t2|" # string offset=11889 + .asciz "t1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=12649 .Linfo_string502: - .asciz "t1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=11923 + .asciz "t2<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=12707 .Linfo_string503: - .asciz "t2<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=11981 + .asciz "_STN|t1|" # string offset=12765 .Linfo_string504: - .asciz "_STN|t1|" # string offset=12039 + .asciz "_STN|t2|" # string offset=12795 .Linfo_string505: - .asciz "_STN|t2|" # string offset=12068 + .asciz "_STN|t1|" # string offset=12825 .Linfo_string506: - .asciz "_STN|t1|" # string offset=12097 + .asciz "_STN|t2|" # string offset=12855 .Linfo_string507: - .asciz "_STN|t2|" # string offset=12126 + .asciz "t1 >" # string offset=12885 .Linfo_string508: - .asciz "t1 >" # string offset=12155 + .asciz "t2 >" # string offset=13000 .Linfo_string509: - .asciz "t2 >" # string offset=12270 + .asciz "_STN|t1|" # string offset=13115 .Linfo_string510: - .asciz "_STN|t1|" # string offset=12385 + .asciz "_STN|t2|" # string offset=13147 .Linfo_string511: - .asciz "_STN|t2|" # string offset=12416 + .asciz "_STN|t1|" # string offset=13179 .Linfo_string512: - .asciz "_STN|t1|" # string offset=12447 + .asciz "_STN|t2|" # string offset=13216 .Linfo_string513: - .asciz "_STN|t2|" # string offset=12483 + .asciz "_STN|t1|" # string offset=13253 .Linfo_string514: - .asciz "_STN|t1|" # string offset=12519 + .asciz "_STN|t2|" # string offset=13297 .Linfo_string515: - .asciz "_STN|t2|" # string offset=12562 + .asciz "_STN|t1|" # string offset=13341 .Linfo_string516: - .asciz "_STN|t1|" # string offset=12605 + .asciz "_STN|t2|" # string offset=13367 .Linfo_string517: - .asciz "_STN|t2|" # string offset=12630 + .asciz "_STN|t1|" # string offset=13393 .Linfo_string518: - .asciz "_STN|t1|" # string offset=12655 + .asciz "_STN|t2|" # string offset=13421 .Linfo_string519: - .asciz "_STN|t2|" # string offset=12682 + .asciz "_STN|t1|" # string offset=13449 .Linfo_string520: - .asciz "_STN|t1|" # string offset=12709 + .asciz "_STN|t2|" # string offset=13475 .Linfo_string521: - .asciz "_STN|t2|" # string offset=12734 + .asciz "_STN|t1|" # string offset=13501 .Linfo_string522: - .asciz "_STN|t1|" # string offset=12759 + .asciz "_STN|t2|" # string offset=13531 .Linfo_string523: - .asciz "_STN|t2|" # string offset=12788 + .asciz "_STN|t1|" # string offset=13561 .Linfo_string524: - .asciz "_STN|t1|" # string offset=12817 + .asciz "_STN|t2|" # string offset=13594 .Linfo_string525: - .asciz "_STN|t2|" # string offset=12849 + .asciz "_STN|t1|" # string offset=13627 .Linfo_string526: - .asciz "_STN|t1|" # string offset=12881 + .asciz "_STN|t2|" # string offset=13651 .Linfo_string527: - .asciz "_STN|t2|" # string offset=12904 + .asciz "_STN|t1|" # string offset=13675 .Linfo_string528: - .asciz "_STN|t1|" # string offset=12927 + .asciz "_STN|t2|" # string offset=13703 .Linfo_string529: - .asciz "_STN|t2|" # string offset=12954 + .asciz "_STN|t1|" # string offset=13731 .Linfo_string530: - .asciz "_STN|t1|" # string offset=12981 + .asciz "_STN|t2|" # string offset=13764 .Linfo_string531: - .asciz "_STN|t2|" # string offset=13013 + .asciz "_STN|t1|" # string offset=13797 .Linfo_string532: - .asciz "_STN|t1|" # string offset=13045 + .asciz "_STN|t2|" # string offset=13828 .Linfo_string533: - .asciz "_STN|t2|" # string offset=13075 + .asciz "_STN|t1|[1]>" # string offset=13859 .Linfo_string534: - .asciz "_STN|t1|[1]>" # string offset=13105 + .asciz "_STN|t2|[1]>" # string offset=13880 .Linfo_string535: - .asciz "_STN|t2|[1]>" # string offset=13125 + .asciz "t1" # string offset=13901 .Linfo_string536: - .asciz "t1" # string offset=13145 + .asciz "t2" # string offset=13925 .Linfo_string537: - .asciz "t2" # string offset=13169 + .asciz "t1" # string offset=13949 .Linfo_string538: - .asciz "t1" # string offset=13193 + .asciz "t2" # string offset=14073 .Linfo_string539: - .asciz "t2" # string offset=13317 + .asciz "t1" # string offset=14197 .Linfo_string540: - .asciz "t1" # string offset=13441 + .asciz "t2" # string offset=14325 .Linfo_string541: - .asciz "t2" # string offset=13569 + .asciz "_STN|t1|" # string offset=14453 .Linfo_string542: - .asciz "_STN|t1|" # string offset=13697 + .asciz "_STN|t2|" # string offset=14473 .Linfo_string543: - .asciz "_STN|t2|" # string offset=13716 + .asciz "_STN|t1|, t1<>)>" # string offset=14493 .Linfo_string544: - .asciz "t1<_BitInt(3)>" # string offset=13735 + .asciz "_STN|t2|, t1<>)>" # string offset=14521 .Linfo_string545: - .asciz "t2<_BitInt(3)>" # string offset=13750 + .asciz "_STN|t1|::*>" # string offset=14549 .Linfo_string546: - .asciz "t1" # string offset=13765 + .asciz "_STN|t2|::*>" # string offset=14571 .Linfo_string547: - .asciz "t2" # string offset=13795 + .asciz "_STN|t1|" # string offset=14593 .Linfo_string548: - .asciz "_STN|t1|, t1<>)>" # string offset=13825 + .asciz "_STN|t2|" # string offset=14638 .Linfo_string549: - .asciz "_STN|t2|, t1<>)>" # string offset=13852 + .asciz "t1" # string offset=14683 .Linfo_string550: - .asciz "_STN|t1|::*>" # string offset=13879 + .asciz "t2" # string offset=14720 .Linfo_string551: - .asciz "_STN|t2|::*>" # string offset=13900 + .asciz "_STN|t1|" # string offset=14757 .Linfo_string552: - .asciz "_STN|t1|" # string offset=13921 + .asciz "_STN|t2|" # string offset=14782 .Linfo_string553: - .asciz "_STN|t2|" # string offset=13965 + .asciz "internal_type" # string offset=14807 .Linfo_string554: - .asciz "_STN|t1|" # string offset=14009 + .asciz "t2<&complex_type_units::external_function>" # string offset=14821 .Linfo_string555: - .asciz "_STN|t2|" # string offset=14033 + .asciz "_STN|t3| >" # string offset=14864 +.Linfo_string556: + .asciz "_STN|t4| > >" # string offset=14938 .section .debug_str_offsets,"",@progbits .long .Linfo_string0 .long .Linfo_string1 @@ -13876,6 +14165,7 @@ i: .long .Linfo_string553 .long .Linfo_string554 .long .Linfo_string555 + .long .Linfo_string556 .section .debug_addr,"",@progbits .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution .Ldebug_addr_start0: @@ -14022,8 +14312,14 @@ i: .quad .Lfunc_begin135 .quad .Lfunc_begin136 .quad .Lfunc_begin137 + .quad .Lfunc_begin138 + .quad .Lfunc_begin139 + .quad .Lfunc_begin140 + .quad .Lfunc_begin141 + .quad .Lfunc_begin142 + .quad _ZN18complex_type_units17external_functionEv .Ldebug_addr_end0: - .ident "clang version 15.0.0 (git@github.com:llvm/llvm-project.git 4e115b7d881136947c083e12f62010bc6b1d3f00)" + .ident "clang version 22.0.0git (git@github.com:Michael137/llvm-project.git f45bb984e6f21e702b4d65f1eeea1429f43c800e)" .section ".note.GNU-stack","",@progbits .addrsig .addrsig_sym _Zli5_suffy @@ -14051,28 +14347,28 @@ i: .addrsig_sym _Z2f1IJN11outer_class11inner_classEEEvv .addrsig_sym _Z2f1IJmEEvv .addrsig_sym _Z2f2ILb1ELi3EEvv - .addrsig_sym _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .addrsig_sym _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .addrsig_sym _Z2f3IPiJXadL_Z1iEEEEvv - .addrsig_sym _Z2f3IPiJLS0_0EEEvv - .addrsig_sym _Z2f3ImJLm1EEEvv - .addrsig_sym _Z2f3IyJLy1EEEvv - .addrsig_sym _Z2f3IlJLl1EEEvv - .addrsig_sym _Z2f3IjJLj1EEEvv - .addrsig_sym _Z2f3IsJLs1EEEvv - .addrsig_sym _Z2f3IhJLh0EEEvv - .addrsig_sym _Z2f3IaJLa0EEEvv - .addrsig_sym _Z2f3ItJLt1ELt2EEEvv - .addrsig_sym _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv - .addrsig_sym _Z2f3InJLn18446744073709551614EEEvv + .addrsig_sym _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv + .addrsig_sym _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv + .addrsig_sym _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv + .addrsig_sym _Z2f3IPiTpTnT_JLS0_0EEEvv + .addrsig_sym _Z2f3ImTpTnT_JLm1EEEvv + .addrsig_sym _Z2f3IyTpTnT_JLy1EEEvv + .addrsig_sym _Z2f3IlTpTnT_JLl1EEEvv + .addrsig_sym _Z2f3IjTpTnT_JLj1EEEvv + .addrsig_sym _Z2f3IsTpTnT_JLs1EEEvv + .addrsig_sym _Z2f3IhTpTnT_JLh0EEEvv + .addrsig_sym _Z2f3IaTpTnT_JLa0EEEvv + .addrsig_sym _Z2f3ItTpTnT_JLt1ELt2EEEvv + .addrsig_sym _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .addrsig_sym _Z2f3InTpTnT_JLn18446744073709551614EEEvv .addrsig_sym _Z2f4IjLj3EEvv .addrsig_sym _Z2f1IJ2t3IiLb0EEEEvv .addrsig_sym _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv - .addrsig_sym _Z2f1IJZ4mainE3$_1EEvv - .addrsig_sym _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + .addrsig_sym _Z2f1IJZ4mainE3$_0EEvv + .addrsig_sym _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .addrsig_sym _Z2f1IJFifEEEvv .addrsig_sym _Z2f1IJFvzEEEvv .addrsig_sym _Z2f1IJFvizEEEvv @@ -14086,9 +14382,9 @@ i: .addrsig_sym _Z2f1IJPKPKvEEvv .addrsig_sym _Z2f1IJFvvEEEvv .addrsig_sym _Z2f1IJPFvvEEEvv + .addrsig_sym _Z2f1IJPZ4mainE3$_0EEvv + .addrsig_sym _Z2f1IJZ4mainE3$_1EEvv .addrsig_sym _Z2f1IJPZ4mainE3$_1EEvv - .addrsig_sym _Z2f1IJZ4mainE3$_2EEvv - .addrsig_sym _Z2f1IJPZ4mainE3$_2EEvv .addrsig_sym _Z2f5IJ2t1IJiEEEiEvv .addrsig_sym _Z2f5IJEiEvv .addrsig_sym _Z2f6I2t1IJiEEJEEvv @@ -14128,13 +14424,13 @@ i: .addrsig_sym _ZN2ns8ttp_userINS_5inner3ttpEEEvv .addrsig_sym _Z2f1IJPiPDnEEvv .addrsig_sym _Z2f1IJ2t7IiEEEvv - .addrsig_sym _Z2f7IN2ns3inl2t9EEvv + .addrsig_sym _Z2f7ITtTpTyEN2ns3inl2t9EEvv .addrsig_sym _Z2f1IJU7_AtomiciEEvv .addrsig_sym _Z2f1IJilVcEEvv .addrsig_sym _Z2f1IJDv2_iEEvv .addrsig_sym _Z2f1IJVKPiEEvv .addrsig_sym _Z2f1IJVKvEEvv - .addrsig_sym _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv + .addrsig_sym _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv .addrsig_sym _Z2f1IJM3udtKFvvEEEvv .addrsig_sym _Z2f1IJM3udtVFvvREEEvv .addrsig_sym _Z2f1IJM3udtVKFvvOEEEvv @@ -14150,15 +14446,19 @@ i: .addrsig_sym _Z2f1IJFPFvfEiEEEvv .addrsig_sym _Z2f1IJA1_2t1IJiEEEEvv .addrsig_sym _Z2f1IJPDoFvvEEEvv - .addrsig_sym _Z2f1IJFvZ4mainE3$_2EEEvv - .addrsig_sym _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv + .addrsig_sym _Z2f1IJFvZ4mainE3$_1EEEvv + .addrsig_sym _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv .addrsig_sym _Z2f1IJFvZ4mainE2t8EEEvv .addrsig_sym _Z19operator_not_reallyIiEvv - .addrsig_sym _Z2f1IJDB3_EEvv - .addrsig_sym _Z2f1IJKDU5_EEvv + .addrsig_sym _Z3f11IDB3_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IKDU5_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IDB65_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IKDU65_TnT_LS0_2EEvv .addrsig_sym _Z2f1IJFv2t1IJEES1_EEEvv .addrsig_sym _Z2f1IJM2t1IJEEiEEvv .addrsig_sym _Z2f1IJU9swiftcallFvvEEEvv + .addrsig_sym _Z2f1IJFivEEEvv + .addrsig_sym _Z3f10ILN2ns3$_0E0EEvv .addrsig_sym _Z2f1IJZN2t83memEvE2t7EEvv .addrsig_sym _Z2f1IJM2t8FvvEEEvv .section .debug_line,"",@progbits diff --git a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp index 0cf8c5c63bef2..0b606afb44cb9 100644 --- a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp +++ b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp @@ -113,19 +113,20 @@ static void reportNumberOfEntries(const TargetLibraryInfo &TLI, // Assume this gets called after initialize(), so we have the above line of // output as a header. So, for example, no need to repeat the triple. - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { if (TLI.has(static_cast(FI))) ++NumAvailable; } - outs() << "TLI knows " << LibFunc::NumLibFuncs << " symbols, " << NumAvailable - << " available for '" << TargetTriple << "'\n"; + outs() << "TLI knows " << (LibFunc::End_LibFunc - LibFunc::Begin_LibFunc) + << " symbols, " << NumAvailable << " available for '" << TargetTriple + << "'\n"; } static void dumpTLIEntries(const TargetLibraryInfo &TLI) { // Assume this gets called after initialize(), so we have the above line of // output as a header. So, for example, no need to repeat the triple. - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = static_cast(FI); bool IsAvailable = TLI.has(LF); StringRef FuncName = TargetLibraryInfo::getStandardName(LF); @@ -316,7 +317,8 @@ int main(int argc, char *argv[]) { unsigned TLIandSDKboth = 0; unsigned TLIandSDKneither = 0; - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; + ++FI) { LibFunc LF = static_cast(FI); StringRef TLIName = TLI.getStandardName(LF); @@ -344,7 +346,7 @@ int main(int argc, char *argv[]) { assert(TLIandSDKboth + TLIandSDKneither + TLIdoesSDKdoesnt + TLIdoesntSDKdoes == - LibFunc::NumLibFuncs); + LibFunc::End_LibFunc - LibFunc::Begin_LibFunc); (void) TLIandSDKneither; outs() << "<< Total TLI yes SDK no: " << TLIdoesSDKdoesnt << "\n>> Total TLI no SDK yes: " << TLIdoesntSDKdoes diff --git a/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp b/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp index 787a32407ad95..3029f10b1bb29 100644 --- a/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp +++ b/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp @@ -64,7 +64,7 @@ TEST_F(TargetLibraryInfoTest, InvalidProto) { auto *StructTy = StructType::getTypeByName(Context, "foo"); auto *InvalidFTy = FunctionType::get(StructTy, /*isVarArg=*/false); - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = (LibFunc)FI; auto *F = cast( M->getOrInsertFunction(TLI.getName(LF), InvalidFTy).getCallee()); @@ -694,7 +694,7 @@ TEST_F(TargetLibraryInfoTest, ValidProto) { "declare i8* @__kmpc_alloc_shared(i64)\n" "declare void @__kmpc_free_shared(i8*, i64)\n"); - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = (LibFunc)FI; // Make sure everything is available; we're not testing target defaults. TLII.setAvailable(LF); diff --git a/llvm/unittests/CodeGen/MFCommon.inc b/llvm/unittests/CodeGen/MFCommon.inc index 3ea51de751fad..c5e1c747bce32 100644 --- a/llvm/unittests/CodeGen/MFCommon.inc +++ b/llvm/unittests/CodeGen/MFCommon.inc @@ -2,7 +2,8 @@ // depending on a real target. class BogusTargetLowering : public TargetLowering { public: - BogusTargetLowering(TargetMachine &TM) : TargetLowering(TM) {} + BogusTargetLowering(const TargetMachine &TM, const TargetSubtargetInfo &STI) + : TargetLowering(TM, STI) {} }; class BogusFrameLowering : public TargetFrameLowering { @@ -87,7 +88,7 @@ public: BogusSubtarget(TargetMachine &TM) : TargetSubtargetInfo(Triple(""), "", "", "", {}, {}, {}, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr), - FL(), TL(TM) {} + FL(), TL(TM, *this) {} ~BogusSubtarget() override = default; const TargetFrameLowering *getFrameLowering() const override { return &FL; } diff --git a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp index 809960d368e4e..14e1efaf65c8f 100644 --- a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp +++ b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp @@ -25,6 +25,8 @@ namespace llvm { class AArch64SelectionDAGTest : public testing::Test { protected: + const TargetSubtargetInfo *STI; + static void SetUpTestCase() { LLVMInitializeAArch64TargetInfo(); LLVMInitializeAArch64Target(); @@ -55,8 +57,8 @@ class AArch64SelectionDAGTest : public testing::Test { MachineModuleInfo MMI(TM.get()); - MF = std::make_unique(*F, *TM, *TM->getSubtargetImpl(*F), - MMI.getContext(), 0); + STI = TM->getSubtargetImpl(*F); + MF = std::make_unique(*F, *TM, *STI, MMI.getContext(), 0); DAG = std::make_unique(*TM, CodeGenOptLevel::None); if (!DAG) @@ -337,7 +339,7 @@ TEST_F(AArch64SelectionDAGTest, ComputeNumSignBits_ADDC) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedVectorElts_EXTRACT_SUBVECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -356,7 +358,7 @@ TEST_F(AArch64SelectionDAGTest, SimplifyDemandedVectorElts_EXTRACT_SUBVECTOR) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsNEON) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto Int8VT = EVT::getIntegerVT(Context, 8); @@ -382,7 +384,7 @@ TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsNEON) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsSVE) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto Int8VT = EVT::getIntegerVT(Context, 8); @@ -784,7 +786,7 @@ TEST_F(AArch64SelectionDAGTest, ComputeKnownBits_VSHL) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -804,7 +806,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_ADD_of_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -828,7 +830,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_ADD_of_BUILD_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -844,7 +846,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_SPLAT_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_ADD_of_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -864,7 +866,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_ADD_of_SPLAT_VECTOR) { } TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -880,7 +882,7 @@ TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_BUILD_VECTOR) { TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_ADD_of_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -898,7 +900,7 @@ TEST_F(AArch64SelectionDAGTest, } TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -914,7 +916,7 @@ TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_SPLAT_VECTOR) { TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_ADD_of_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -932,7 +934,7 @@ TEST_F(AArch64SelectionDAGTest, } TEST_F(AArch64SelectionDAGTest, getRepeatedSequence_Patterns) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; unsigned NumElts = 16; diff --git a/llvm/utils/TableGen/Basic/CMakeLists.txt b/llvm/utils/TableGen/Basic/CMakeLists.txt index 2030e9add7f30..01ab8a0ef2250 100644 --- a/llvm/utils/TableGen/Basic/CMakeLists.txt +++ b/llvm/utils/TableGen/Basic/CMakeLists.txt @@ -20,6 +20,7 @@ add_llvm_library(LLVMTableGenBasic OBJECT EXCLUDE_FROM_ALL DISABLE_LLVM_LINK_LLV SDNodeProperties.cpp TableGen.cpp TargetFeaturesEmitter.cpp + TargetLibraryInfoEmitter.cpp VTEmitter.cpp ) diff --git a/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp b/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp new file mode 100644 index 0000000000000..f7364e0298d89 --- /dev/null +++ b/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp @@ -0,0 +1,186 @@ +//===- TargetLibraryInfoEmitter.cpp - Properties from TargetLibraryInfo.td ===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "SequenceToOffsetTable.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/TableGen/Error.h" +#include "llvm/TableGen/Record.h" +#include "llvm/TableGen/SetTheory.h" +#include "llvm/TableGen/StringToOffsetTable.h" +#include "llvm/TableGen/TableGenBackend.h" +#include + +#define DEBUG_TYPE "target-library-info-emitter" + +using namespace llvm; + +namespace { +class TargetLibraryInfoEmitter { +private: + const RecordKeeper &Records; + SmallVector AllTargetLibcalls; + +private: + void emitTargetLibraryInfoEnum(raw_ostream &OS) const; + void emitTargetLibraryInfoStringTable(raw_ostream &OS) const; + void emitTargetLibraryInfoSignatureTable(raw_ostream &OS) const; + +public: + TargetLibraryInfoEmitter(const RecordKeeper &R); + + void run(raw_ostream &OS); +}; + +} // End anonymous namespace. + +TargetLibraryInfoEmitter::TargetLibraryInfoEmitter(const RecordKeeper &R) + : Records(R) { + ArrayRef All = + Records.getAllDerivedDefinitions("TargetLibCall"); + AllTargetLibcalls.append(All.begin(), All.end()); + // Make sure that the records are in the same order as the input. + // TODO Find a better sorting order when all is migrated. + sort(AllTargetLibcalls, [](const Record *A, const Record *B) { + return A->getID() < B->getID(); + }); +} + +// Emits the LibFunc enumeration, which is an abstract name for each library +// function. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoEnum( + raw_ostream &OS) const { + OS << "#ifdef GET_TARGET_LIBRARY_INFO_ENUM\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_ENUM\n"; + OS << "enum LibFunc : unsigned {\n"; + OS.indent(2) << "NotLibFunc = 0,\n"; + for (const auto *R : AllTargetLibcalls) { + OS.indent(2) << "LibFunc_" << R->getName() << ",\n"; + } + OS.indent(2) << "NumLibFuncs,\n"; + OS.indent(2) << "End_LibFunc = NumLibFuncs,\n"; + if (AllTargetLibcalls.size()) { + OS.indent(2) << "Begin_LibFunc = LibFunc_" + << AllTargetLibcalls[0]->getName() << ",\n"; + } else { + OS.indent(2) << "Begin_LibFunc = NotLibFunc,\n"; + } + OS << "};\n"; + OS << "#endif\n\n"; +} + +// The names of the functions are stored in a long string, along with support +// tables for accessing the offsets of the function names from the beginning of +// the string. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoStringTable( + raw_ostream &OS) const { + llvm::StringToOffsetTable Table( + /*AppendZero=*/true, + "TargetLibraryInfoImpl::", /*UsePrefixForStorageMember=*/false); + for (const auto *R : AllTargetLibcalls) + Table.GetOrAddStringOffset(R->getValueAsString("String")); + + OS << "#ifdef GET_TARGET_LIBRARY_INFO_STRING_TABLE\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_STRING_TABLE\n"; + Table.EmitStringTableDef(OS, "StandardNamesStrTable"); + OS << "\n"; + size_t NumEl = AllTargetLibcalls.size() + 1; + OS << "const llvm::StringTable::Offset " + "TargetLibraryInfoImpl::StandardNamesOffsets[" + << NumEl + << "] = " + "{\n"; + OS.indent(2) << "0, //\n"; + for (const auto *R : AllTargetLibcalls) { + StringRef Str = R->getValueAsString("String"); + OS.indent(2) << Table.GetStringOffset(Str) << ", // " << Str << "\n"; + } + OS << "};\n"; + OS << "const uint8_t TargetLibraryInfoImpl::StandardNamesSizeTable[" << NumEl + << "] = {\n"; + OS << " 0,\n"; + for (const auto *R : AllTargetLibcalls) + OS.indent(2) << R->getValueAsString("String").size() << ",\n"; + OS << "};\n"; + OS << "#endif\n\n"; + OS << "#ifdef GET_TARGET_LIBRARY_INFO_IMPL_DECL\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_IMPL_DECL\n"; + OS << "LLVM_ABI static const llvm::StringTable StandardNamesStrTable;\n"; + OS << "LLVM_ABI static const llvm::StringTable::Offset StandardNamesOffsets[" + << NumEl << "];\n"; + OS << "LLVM_ABI static const uint8_t StandardNamesSizeTable[" << NumEl + << "];\n"; + OS << "#endif\n\n"; +} + +// Since there are much less type signatures then library functions, the type +// signatures are stored reusing existing entries. To access a table entry, an +// offset table is used. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoSignatureTable( + raw_ostream &OS) const { + SmallVector FuncTypeArgs( + Records.getAllDerivedDefinitions("FuncArgType")); + + // Sort the records by ID. + sort(FuncTypeArgs, [](const Record *A, const Record *B) { + return A->getID() < B->getID(); + }); + + using Signature = std::vector; + SequenceToOffsetTable SignatureTable("NoFuncArgType"); + auto GetSignature = [](const Record *R) -> Signature { + const auto *Tys = R->getValueAsListInit("ArgumentTypes"); + Signature Sig; + Sig.reserve(Tys->size() + 1); + const Record *RetType = R->getValueAsOptionalDef("ReturnType"); + if (RetType) + Sig.push_back(RetType->getName()); + for (unsigned I = 0, E = Tys->size(); I < E; ++I) { + Sig.push_back(Tys->getElementAsRecord(I)->getName()); + } + return Sig; + }; + DenseMap SignatureMap; + Signature NoFuncSig({StringRef("Void")}); + SignatureTable.add(NoFuncSig); + for (const auto *R : AllTargetLibcalls) + SignatureTable.add(GetSignature(R)); + SignatureTable.layout(); + + OS << "#ifdef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE\n"; + OS << "enum FuncArgTypeID : char {\n"; + OS.indent(2) << "NoFuncArgType = 0,\n"; + for (const auto *R : FuncTypeArgs) { + OS.indent(2) << R->getName() << ",\n"; + } + OS << "};\n"; + OS << "static const FuncArgTypeID SignatureTable[] = {\n"; + SignatureTable.emit(OS, [](raw_ostream &OS, StringRef E) { OS << E; }); + OS << "};\n"; + OS << "static const uint16_t SignatureOffset[] = {\n"; + OS.indent(2) << SignatureTable.get(NoFuncSig) << ", //\n"; + for (const auto *R : AllTargetLibcalls) { + OS.indent(2) << SignatureTable.get(GetSignature(R)) << ", // " + << R->getName() << "\n"; + } + OS << "};\n"; + OS << "#endif\n\n"; +} + +void TargetLibraryInfoEmitter::run(raw_ostream &OS) { + emitSourceFileHeader("Target Library Info Source Fragment", OS, Records); + + emitTargetLibraryInfoEnum(OS); + emitTargetLibraryInfoStringTable(OS); + emitTargetLibraryInfoSignatureTable(OS); +} + +static TableGen::Emitter::OptClass + X("gen-target-library-info", "Generate TargetLibraryInfo"); diff --git a/llvm/utils/TableGen/CallingConvEmitter.cpp b/llvm/utils/TableGen/CallingConvEmitter.cpp index e0d933723ad66..2b20b854a9b1a 100644 --- a/llvm/utils/TableGen/CallingConvEmitter.cpp +++ b/llvm/utils/TableGen/CallingConvEmitter.cpp @@ -15,6 +15,7 @@ #include "Common/CodeGenTarget.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/InterleavedRange.h" +#include "llvm/TableGen/CodeGenHelpers.h" #include "llvm/TableGen/Error.h" #include "llvm/TableGen/Record.h" #include "llvm/TableGen/TGTimer.h" @@ -54,6 +55,21 @@ class CallingConvEmitter { }; } // End anonymous namespace +static void emitCCHeader(raw_ostream &O, const Record *CC, StringRef Suffix) { + unsigned Pad = CC->getName().size(); + if (CC->getValueAsBit("Entry")) { + O << "bool llvm::"; + Pad += 12; + } else { + O << "static bool "; + Pad += 13; + } + O << CC->getName() << "(unsigned ValNo, MVT ValVT,\n" + << indent(Pad) << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" + << indent(Pad) << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, CCState &State)" + << Suffix; +} + void CallingConvEmitter::run(raw_ostream &O) { emitSourceFileHeader("Calling Convention Implementation Fragment", O); @@ -63,35 +79,20 @@ void CallingConvEmitter::run(raw_ostream &O) { // Emit prototypes for all of the non-custom CC's so that they can forward ref // each other. Records.getTimer().startTimer("Emit prototypes"); - O << "#ifndef GET_CC_REGISTER_LISTS\n\n"; + IfGuardEmitter IfGuard(O, "!defined(GET_CC_REGISTER_LISTS)"); for (const Record *CC : CCs) { - if (!CC->getValueAsBit("Custom")) { - unsigned Pad = CC->getName().size(); - if (CC->getValueAsBit("Entry")) { - O << "bool llvm::"; - Pad += 12; - } else { - O << "static bool "; - Pad += 13; - } - O << CC->getName() << "(unsigned ValNo, MVT ValVT,\n" - << std::string(Pad, ' ') << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" - << std::string(Pad, ' ') - << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, CCState &State);\n"; - } + if (!CC->getValueAsBit("Custom")) + emitCCHeader(O, CC, ";\n"); } // Emit each non-custom calling convention description in full. Records.getTimer().startTimer("Emit full descriptions"); for (const Record *CC : CCs) { - if (!CC->getValueAsBit("Custom")) { + if (!CC->getValueAsBit("Custom")) emitCallingConv(CC, O); - } } emitArgRegisterLists(O); - - O << "\n#endif // CC_REGISTER_LIST\n"; } void CallingConvEmitter::emitCallingConv(const Record *CC, raw_ostream &O) { @@ -105,18 +106,7 @@ void CallingConvEmitter::emitCallingConv(const Record *CC, raw_ostream &O) { AssignedRegsMap[CurrentAction] = {}; O << "\n\n"; - unsigned Pad = CurrentAction.size(); - if (CC->getValueAsBit("Entry")) { - O << "bool llvm::"; - Pad += 12; - } else { - O << "static bool "; - Pad += 13; - } - O << CurrentAction << "(unsigned ValNo, MVT ValVT,\n" - << std::string(Pad, ' ') << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" - << std::string(Pad, ' ') << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, " - << "CCState &State) {\n"; + emitCCHeader(O, CC, " {\n"); // Emit all of the actions, in order. for (unsigned I = 0, E = CCActions->size(); I != E; ++I) { const Record *Action = CCActions->getElementAsRecord(I); diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index e8c4a1a08e4ed..19eb32a9623dc 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -703,7 +703,7 @@ void RegisterInfoEmitter::emitComposeSubRegIndices(raw_ostream &OS, SmallVector RowMap; SmallVector, 4> Rows; - auto SubRegIndicesSize = llvm::size(SubRegIndices); + size_t SubRegIndicesSize = llvm::size(SubRegIndices); for (const auto &Idx : SubRegIndices) { unsigned Found = ~0u; for (unsigned r = 0, re = Rows.size(); r != re; ++r) { @@ -1526,7 +1526,7 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, raw_ostream &MainOS, std::string ClassName = Target.getName().str() + "GenRegisterInfo"; - auto SubRegIndicesSize = llvm::size(SubRegIndices); + size_t SubRegIndicesSize = llvm::size(SubRegIndices); if (!SubRegIndices.empty()) { emitComposeSubRegIndices(OS, ClassName); diff --git a/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn b/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn index 65517976ff63d..64804c7f707f7 100644 --- a/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn +++ b/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn @@ -6,6 +6,11 @@ tablegen("LLGSOptions") { args = [ "-gen-opt-parser-defs" ] } +tablegen("PlatformOptions") { + visibility = [ ":lldb-server" ] + args = [ "-gen-opt-parser-defs" ] +} + executable("lldb-server") { configs += [ "//llvm/utils/gn/build:clang_code", @@ -13,6 +18,7 @@ executable("lldb-server") { ] deps = [ ":LLGSOptions", + ":PlatformOptions", #"//lldb/include/lldb/Host:Config", "//lldb/source/Host", diff --git a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn index df9ddf91f2c49..bc4047cb3be52 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn @@ -190,6 +190,7 @@ static_library("Support") { "regfree.c", "regstrlcpy.c", "xxhash.cpp", + "zOSLibFunctions.cpp", # System "Atomic.cpp", diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn index 84f079a211cd4..42c6163263cff 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn @@ -36,6 +36,15 @@ tablegen("ARMGenRegisterBank") { td_file = "ARM.td" } +tablegen("ARMGenSDNodeInfo") { + visibility = [ + ":LLVMARMCodeGen", + "//llvm/unittests/Target/ARM:ARMTests", + ] + args = [ "-gen-sd-node-info" ] + td_file = "ARM.td" +} + static_library("LLVMARMCodeGen") { deps = [ ":ARMGenCallingConv", @@ -44,6 +53,7 @@ static_library("LLVMARMCodeGen") { ":ARMGenGlobalISel", ":ARMGenMCPseudoLowering", ":ARMGenRegisterBank", + ":ARMGenSDNodeInfo", "MCTargetDesc", "TargetInfo", "Utils", diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn index 0ec70162c71f5..7b0db8863c6f0 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn @@ -6,9 +6,16 @@ tablegen("NVPTXGenDAGISel") { td_file = "NVPTX.td" } +tablegen("NVPTXGenSDNodeInfo") { + visibility = [ ":LLVMNVPTXCodeGen" ] + args = [ "-gen-sd-node-info" ] + td_file = "NVPTX.td" +} + static_library("LLVMNVPTXCodeGen") { deps = [ ":NVPTXGenDAGISel", + ":NVPTXGenSDNodeInfo", "MCTargetDesc", "TargetInfo", "//llvm/include/llvm/Config:llvm-config", diff --git a/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn index 354b03a2640fa..9097c106ed1fc 100644 --- a/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn @@ -6,6 +6,7 @@ unittest("ARMTests") { "//llvm/lib/MC", "//llvm/lib/Support", "//llvm/lib/Target", + "//llvm/lib/Target/ARM:ARMGenSDNodeInfo", "//llvm/lib/Target/ARM:LLVMARMCodeGen", "//llvm/lib/Target/ARM/MCTargetDesc", "//llvm/lib/Target/ARM/TargetInfo", diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index 64148c6098327..9525320f133c6 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -1226,6 +1226,8 @@ def executeScriptInternal( results = [] timeoutInfo = None shenv = ShellEnvironment(cwd, test.config.environment) + shenv.env["LIT_CURRENT_TESTCASE"] = test.getFullName() + exitCode, timeoutInfo = executeShCmd( cmd, shenv, results, timeout=litConfig.maxIndividualTestTime ) @@ -1425,11 +1427,13 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): # run on clang with no real loss. command = litConfig.valgrindArgs + command + env = dict(test.config.environment) + env["LIT_CURRENT_TESTCASE"] = test.getFullName() try: out, err, exitCode = lit.util.executeCommand( command, cwd=cwd, - env=test.config.environment, + env=env, timeout=litConfig.maxIndividualTestTime, ) return (out, err, exitCode, None) diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt new file mode 100644 index 0000000000000..37c36814ccbbb --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt @@ -0,0 +1,6 @@ +## Tests that the LIT_CURRENT_TESTCASE variable is set to the name of the currently executing testcase + +## Check default environment. +# RUN: bash -c 'echo $LIT_CURRENT_TESTCASE' | FileCheck --match-full-lines %s +# +# CHECK: shtest-env :: env-current-testcase.txt diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt index 761a8061a0b0d..dded9069c44f2 100644 --- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt +++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt @@ -1,4 +1,5 @@ ## Tests the env command in various scenarios: without arguments, setting, unsetting, and mixing envrionment variables. +# FIXME: All of these tests are broken and will not even call FileCheck. ## Check default environment. # RUN: env | FileCheck -check-prefix=NO-ARGS %s diff --git a/llvm/utils/lit/tests/shtest-env-positive.py b/llvm/utils/lit/tests/shtest-env-positive.py index 089acd308c5c5..62e15dd9ad492 100644 --- a/llvm/utils/lit/tests/shtest-env-positive.py +++ b/llvm/utils/lit/tests/shtest-env-positive.py @@ -7,7 +7,7 @@ ## Test the env command's successful executions. -# CHECK: -- Testing: 10 tests{{.*}} +# CHECK: -- Testing: 11 tests{{.*}} # CHECK: PASS: shtest-env :: env-args-last-is-assign.txt ({{[^)]*}}) # CHECK: env FOO=1 @@ -39,6 +39,11 @@ # CHECK-NOT: # error: # CHECK: -- +# CHECK: PASS: shtest-env :: env-current-testcase.txt ({{[^)]*}}) +# CHECK: # executed command: bash -c 'echo $LIT_CURRENT_TESTCASE' +# CHECK-NOT: # error: +# CHECK: -- + # CHECK: PASS: shtest-env :: env-i.txt ({{[^)]*}}) # CHECK: env -i | {{.*}} # CHECK: # executed command: env -i @@ -71,6 +76,6 @@ # CHECK-NOT: # error: # CHECK: -- -# CHECK: Total Discovered Tests: 10 -# CHECK: Passed: 10 {{\([0-9]*\.[0-9]*%\)}} +# CHECK: Total Discovered Tests: 11 +# CHECK: Passed: 11 {{\([0-9]*\.[0-9]*%\)}} # CHECK-NOT: {{.}} diff --git a/mlir/docs/Dialects/NVVMDialect.md b/mlir/docs/Dialects/NVVMDialect.md index b50980258593d..12ec2b3fd989e 100644 --- a/mlir/docs/Dialects/NVVMDialect.md +++ b/mlir/docs/Dialects/NVVMDialect.md @@ -1,4 +1,4 @@ -# NVVM Dialect +# 'nvvm' Dialect The NVVM dialect is MLIR's LLVM-IR-based, NVIDIA-specific backend dialect. It models NVVM intrinsics and public ISA functionality and introduces NVIDIA @@ -93,8 +93,3 @@ of an operation is that used in LLVM IR prefixed with "`nvvm.`". [include "Dialects/NVVMOps.md"] - -## Op Interfaces - -[include "Dialects/NVVMRequiresSMTraits.md"] - diff --git a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt index c301e0b40e8fe..25b56cc9e5594 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt +++ b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt @@ -63,7 +63,7 @@ mlir_tablegen(NVVMRequiresSMTraits.cpp.inc -gen-op-interface-defs) add_mlir_dialect_tablegen_target(MLIRNVVMRequiresSMTraitsIncGen) add_mlir_dialect(NVVMOps nvvm) -add_mlir_doc(NVVMOps NVVMDialect Dialects/ -gen-dialect-doc -dialect=nvvm) +add_mlir_doc(NVVMOps NVVMOps Dialects/ -gen-op-doc) set(LLVM_TARGET_DEFINITIONS NVVMOps.td) mlir_tablegen(NVVMConversions.inc -gen-llvmir-conversions) mlir_tablegen(NVVMFromLLVMIRConversions.inc -gen-intr-from-llvmir-conversions) diff --git a/offload/plugins-nextgen/common/src/RPC.cpp b/offload/plugins-nextgen/common/src/RPC.cpp index 9462aa2828dbf..37e483495d795 100644 --- a/offload/plugins-nextgen/common/src/RPC.cpp +++ b/offload/plugins-nextgen/common/src/RPC.cpp @@ -144,7 +144,8 @@ static rpc::Status handleOffloadOpcodes(plugin::GenericDeviceTy &Device, return rpc::RPC_ERROR; } -static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { +static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer, + bool &ClientInUse) { uint64_t NumPorts = std::min(Device.requestedRPCPortCount(), rpc::MAX_PORT_COUNT); rpc::Server Server(NumPorts, Buffer); @@ -153,6 +154,7 @@ static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { if (!Port) return rpc::RPC_SUCCESS; + ClientInUse = true; rpc::Status Status = handleOffloadOpcodes(Device, *Port, Device.getWarpSize()); @@ -160,7 +162,6 @@ static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { if (Status == rpc::RPC_UNHANDLED_OPCODE) Status = LIBC_NAMESPACE::shared::handle_libc_opcodes(*Port, Device.getWarpSize()); - Port->close(); return Status; @@ -183,7 +184,11 @@ void RPCServerTy::ServerThread::shutDown() { } void RPCServerTy::ServerThread::run() { + static constexpr auto IdleTime = std::chrono::microseconds(25); + static constexpr auto IdleSleep = std::chrono::microseconds(250); std::unique_lock Lock(Mutex); + + auto LastUse = std::chrono::steady_clock::now(); for (;;) { CV.wait(Lock, [&]() { return NumUsers.load(std::memory_order_acquire) > 0 || @@ -194,15 +199,25 @@ void RPCServerTy::ServerThread::run() { return; Lock.unlock(); + bool ClientInUse = false; while (NumUsers.load(std::memory_order_relaxed) > 0 && Running.load(std::memory_order_relaxed)) { + + // Suspend this thread briefly if there is no current work. + auto Now = std::chrono::steady_clock::now(); + if (!ClientInUse && Now - LastUse >= IdleTime) + std::this_thread::sleep_for(IdleSleep); + else if (ClientInUse) + LastUse = Now; + + ClientInUse = false; std::lock_guard Lock(BufferMutex); for (const auto &[Buffer, Device] : llvm::zip_equal(Buffers, Devices)) { if (!Buffer || !Device) continue; // If running the server failed, print a message but keep running. - if (runServer(*Device, Buffer) != rpc::RPC_SUCCESS) + if (runServer(*Device, Buffer, ClientInUse) != rpc::RPC_SUCCESS) FAILURE_MESSAGE("Unhandled or invalid RPC opcode!"); } } diff --git a/utils/bazel/MODULE.bazel b/utils/bazel/MODULE.bazel index d061487acf4d7..e99ddfcb8ad2e 100644 --- a/utils/bazel/MODULE.bazel +++ b/utils/bazel/MODULE.bazel @@ -21,7 +21,7 @@ use_repo( "llvm-raw", "llvm_zlib", "vulkan_headers", - "vulkan_sdk_setup", + "vulkan_sdk", "gmp", "mpfr", "mpc", diff --git a/utils/bazel/MODULE.bazel.lock b/utils/bazel/MODULE.bazel.lock index 77c157ee9605f..4715d52a10545 100644 --- a/utils/bazel/MODULE.bazel.lock +++ b/utils/bazel/MODULE.bazel.lock @@ -229,7 +229,7 @@ "moduleExtensions": { "//:extensions.bzl%llvm_repos_extension": { "general": { - "bzlTransitiveDigest": "3NCQtHwwkFzbdvEprZ+u9gQlcf+2PKpoinmAHZTL35o=", + "bzlTransitiveDigest": "5Uc5D84crjXhrcQgNCOOeRsxLkibVlz4ACrhXJCSO2Q=", "usagesDigest": "X0yUkkWyxQ2Y5oZVDkRSE/K4YkDWo1IjhHsL+1weKyU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -264,7 +264,7 @@ ] } }, - "vulkan_sdk_setup": { + "vulkan_sdk": { "repoRuleId": "@@//:vulkan_sdk.bzl%vulkan_sdk_setup", "attributes": {} }, diff --git a/utils/bazel/extensions.bzl b/utils/bazel/extensions.bzl index b0d5871b722a7..bb5ce1955f916 100644 --- a/utils/bazel/extensions.bzl +++ b/utils/bazel/extensions.bzl @@ -36,7 +36,7 @@ def _llvm_repos_extension_impl(module_ctx): ], ) - vulkan_sdk_setup(name = "vulkan_sdk_setup") + vulkan_sdk_setup(name = "vulkan_sdk") http_archive( name = "gmp",