[llvm] [Analysis] Add DebugInfoCache analysis (PR #118629)
Artem Pianykh via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 29 13:44:35 PST 2025
================
@@ -0,0 +1,211 @@
+//===- DebugInfoCacheTest.cpp - DebugInfoCache unit tests -----------------===//
+//
+// 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/DebugInfoCache.h"
+#include "llvm/AsmParser/Parser.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/Verifier.h"
+#include "llvm/Support/SourceMgr.h"
+#include "llvm/Support/raw_ostream.h"
+#include "gtest/gtest.h"
+
+namespace llvm {
+namespace {
+
+// Forward declare the assembly
+extern StringRef MultiCUModule;
+
+const DICompileUnit *findCU(const Module &M, StringRef FileName) {
+ for (const auto CU : M.debug_compile_units()) {
+ if (CU->getFilename() == FileName)
+ return CU;
+ }
+
+ return nullptr;
+}
+
+class DebugInfoCacheTest : public testing::Test {
+protected:
+ LLVMContext C;
+
+ std::unique_ptr<Module> makeModule(StringRef Assembly) {
+ SMDiagnostic Err;
+ auto M = parseAssemblyString(Assembly, Err, C);
+ if (!M)
+ Err.print("DebugInfoCacheTest", errs());
+
+ verifyModule(*M, &errs());
+ return M;
+ }
+};
+
+TEST_F(DebugInfoCacheTest, TestEmpty) {
+ auto M = makeModule("");
+ DebugInfoCache DIC{*M};
+ EXPECT_EQ(DIC.Result.size(), 0u);
+}
+
+TEST_F(DebugInfoCacheTest, TestMultiCU) {
+ auto M = makeModule(MultiCUModule);
+ DebugInfoCache DIC{*M};
+ EXPECT_EQ(DIC.Result.size(), 2u);
+
+ auto *File1CU = findCU(*M, "file1.cpp");
+ EXPECT_NE(File1CU, nullptr);
+
+ auto File1DIFinder = DIC.Result.find(File1CU);
+ EXPECT_NE(File1DIFinder, DIC.Result.end());
+
+ EXPECT_EQ(File1DIFinder->getSecond().compile_unit_count(), 1u);
+ EXPECT_EQ(File1DIFinder->getSecond().type_count(), 6u);
+ EXPECT_EQ(File1DIFinder->getSecond().subprogram_count(), 0u);
+ EXPECT_EQ(File1DIFinder->getSecond().scope_count(), 1u);
----------------
artempyanykh wrote:
Thanks, great suggestion! Updated the test accordingly.
https://github.com/llvm/llvm-project/pull/118629
More information about the llvm-commits
mailing list