[PATCH] D101746: [ModuleUtils] NFC: Add unit tests for appendToUsedList

Reshabh Sharma via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 3 01:04:00 PDT 2021


rksharma created this revision.
rksharma added reviewers: dblaikie, vitalybuka.
Herald added a subscriber: mgorny.
rksharma requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

This patch adds initial unit tests for appendToUsedList in the ModuleUtils.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101746

Files:
  llvm/unittests/Transforms/Utils/CMakeLists.txt
  llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp


Index: llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp
===================================================================
--- /dev/null
+++ llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp
@@ -0,0 +1,72 @@
+//===- ModuleUtilsTest.cpp - Unit tests for Module utility ----===//
+//
+// 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/Transforms/Utils/ModuleUtils.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/AsmParser/Parser.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/SourceMgr.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+static std::unique_ptr<Module> parseIR(LLVMContext &C, const char *IR) {
+  SMDiagnostic Err;
+  std::unique_ptr<Module> Mod = parseAssemblyString(IR, Err, C);
+  if (!Mod)
+    Err.print("ModuleUtilsTest", errs());
+  return Mod;
+}
+
+static int getUsedListSize(Module &M, StringRef Name) {
+  auto *UsedList = M.getGlobalVariable(Name);
+  if (!UsedList)
+    return 0;
+  auto *UsedListBaseArrayType =
+      cast<ArrayType>(UsedList->getType()->getElementType());
+  return UsedListBaseArrayType->getNumElements();
+}
+
+TEST(ModuleUtils, AppendToUsedList1) {
+  LLVMContext C;
+
+  std::unique_ptr<Module> M =
+      parseIR(C,
+              R"(@x = addrspace(4) global [2 x i32] zeroinitializer, align 4)");
+  SmallVector<GlobalValue *, 2> Globals;
+  for (auto &G : M->globals()) {
+    Globals.push_back(&G);
+  }
+  EXPECT_EQ(0, getUsedListSize(*M, "llvm.compiler.used"));
+  appendToCompilerUsed(*M, Globals);
+  EXPECT_EQ(1, getUsedListSize(*M, "llvm.compiler.used"));
+
+  EXPECT_EQ(0, getUsedListSize(*M, "llvm.used"));
+  appendToUsed(*M, Globals);
+  EXPECT_EQ(1, getUsedListSize(*M, "llvm.used"));
+}
+
+TEST(ModuleUtils, AppendToUsedList2) {
+  LLVMContext C;
+
+  std::unique_ptr<Module> M =
+      parseIR(C,
+              R"(@x = global [2 x i32] zeroinitializer, align 4)");
+  SmallVector<GlobalValue *, 2> Globals;
+  for (auto &G : M->globals()) {
+    Globals.push_back(&G);
+  }
+  EXPECT_EQ(0, getUsedListSize(*M, "llvm.compiler.used"));
+  appendToCompilerUsed(*M, Globals);
+  EXPECT_EQ(1, getUsedListSize(*M, "llvm.compiler.used"));
+
+  EXPECT_EQ(0, getUsedListSize(*M, "llvm.used"));
+  appendToUsed(*M, Globals);
+  EXPECT_EQ(1, getUsedListSize(*M, "llvm.used"));
+}
Index: llvm/unittests/Transforms/Utils/CMakeLists.txt
===================================================================
--- llvm/unittests/Transforms/Utils/CMakeLists.txt
+++ llvm/unittests/Transforms/Utils/CMakeLists.txt
@@ -20,6 +20,7 @@
   LocalTest.cpp
   LoopRotationUtilsTest.cpp
   LoopUtilsTest.cpp
+  ModuleUtilsTest.cpp
   ScalarEvolutionExpanderTest.cpp
   SizeOptsTest.cpp
   SSAUpdaterBulkTest.cpp


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101746.342323.patch
Type: text/x-patch
Size: 2968 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210503/1ab45aca/attachment.bin>


More information about the llvm-commits mailing list