Skip to content

Commit

Permalink
[ModuleUtils] NFC: Add unit tests for appendToUsedList
Browse files Browse the repository at this point in the history
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
  • Loading branch information
rksharma-yymd committed May 4, 2021
1 parent 27b426b commit ed51156
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
1 change: 1 addition & 0 deletions llvm/unittests/Transforms/Utils/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ add_llvm_unittest(UtilsTests
LocalTest.cpp
LoopRotationUtilsTest.cpp
LoopUtilsTest.cpp
ModuleUtilsTest.cpp
ScalarEvolutionExpanderTest.cpp
SizeOptsTest.cpp
SSAUpdaterBulkTest.cpp
Expand Down
70 changes: 70 additions & 0 deletions llvm/unittests/Transforms/Utils/ModuleUtilsTest.cpp
Original file line number Diff line number Diff line change
@@ -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"));
}

0 comments on commit ed51156

Please sign in to comment.