[llvm] ed51156 - [ModuleUtils] NFC: Add unit tests for appendToUsedList

Reshabh Sharma via llvm-commits llvm-commits at lists.llvm.org
Mon May 3 23:39:41 PDT 2021


Author: Reshabh Sharma
Date: 2021-05-04T12:05:50+05:30
New Revision: ed51156084dd84aa10d78eac14a66b36663069bc

URL: https://github.com/llvm/llvm-project/commit/ed51156084dd84aa10d78eac14a66b36663069bc
DIFF: https://github.com/llvm/llvm-project/commit/ed51156084dd84aa10d78eac14a66b36663069bc.diff

LOG: [ModuleUtils] NFC: Add unit tests for appendToUsedList

This patch adds initial unit tests for appendToUsedList
in the ModuleUtils. It specifically tests changes from
https://reviews.llvm.org/D101363 which intent to allow
insertion of globals in non-zero address spaces into the
llvm used lists.

Reviewed by: dblaikie

Differential Revision: https://reviews.llvm.org/D101746

Added: 
    llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp

Modified: 
    llvm/unittests/Transforms/Utils/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/unittests/Transforms/Utils/CMakeLists.txt b/llvm/unittests/Transforms/Utils/CMakeLists.txt
index c27af27bbf6f9..af26c24b40d86 100644
--- a/llvm/unittests/Transforms/Utils/CMakeLists.txt
+++ b/llvm/unittests/Transforms/Utils/CMakeLists.txt
@@ -20,6 +20,7 @@ add_llvm_unittest(UtilsTests
   LocalTest.cpp
   LoopRotationUtilsTest.cpp
   LoopUtilsTest.cpp
+  ModuleUtilsTest.cpp
   ScalarEvolutionExpanderTest.cpp
   SizeOptsTest.cpp
   SSAUpdaterBulkTest.cpp

diff  --git a/llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp b/llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp
new file mode 100644
index 0000000000000..5a1d9245f1595
--- /dev/null
+++ b/llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp
@@ -0,0 +1,70 @@
+//===- 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"));
+}


        


More information about the llvm-commits mailing list