[llvm] 4a780aa - [LLVM] Resolve layer violation in BitcodeWriter
Joseph Huber via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 31 16:01:32 PST 2022
Author: Joseph Huber
Date: 2022-01-31T19:01:08-05:00
New Revision: 4a780aa13ee5e1c8268de54ef946200a270127b9
URL: https://github.com/llvm/llvm-project/commit/4a780aa13ee5e1c8268de54ef946200a270127b9
DIFF: https://github.com/llvm/llvm-project/commit/4a780aa13ee5e1c8268de54ef946200a270127b9.diff
LOG: [LLVM] Resolve layer violation in BitcodeWriter
Summary:
The changes introduced in D116542 added a dependency on TransformUtils
to use the `appendToCompilerUsed` method. This created a circular
dependency. This patch simply copies the needed function locally to
remove the dependency.
Added:
Modified:
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/lib/Bitcode/Writer/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index fafccb4d42547..7ebe10e9b4455 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -69,7 +69,6 @@
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/SHA1.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
@@ -4975,6 +4974,39 @@ void llvm::EmbedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
NewUsed->setSection("llvm.metadata");
}
+static void appendToCompilerUsed(Module &M, ArrayRef<GlobalValue *> Values) {
+ GlobalVariable *GV = M.getGlobalVariable("llvm.compiler.used");
+ SmallPtrSet<Constant *, 16> InitAsSet;
+ SmallVector<Constant *, 16> Init;
+ if (GV) {
+ if (GV->hasInitializer()) {
+ auto *CA = cast<ConstantArray>(GV->getInitializer());
+ for (auto &Op : CA->operands()) {
+ Constant *C = cast_or_null<Constant>(Op);
+ if (InitAsSet.insert(C).second)
+ Init.push_back(C);
+ }
+ }
+ GV->eraseFromParent();
+ }
+
+ Type *Int8PtrTy = llvm::Type::getInt8PtrTy(M.getContext());
+ for (auto *V : Values) {
+ Constant *C = ConstantExpr::getPointerBitCastOrAddrSpaceCast(V, Int8PtrTy);
+ if (InitAsSet.insert(C).second)
+ Init.push_back(C);
+ }
+
+ if (Init.empty())
+ return;
+
+ ArrayType *ATy = ArrayType::get(Int8PtrTy, Init.size());
+ GV = new llvm::GlobalVariable(M, ATy, false, GlobalValue::AppendingLinkage,
+ ConstantArray::get(ATy, Init),
+ "llvm.compiler.used");
+ GV->setSection("llvm.metadata");
+}
+
void llvm::EmbedBufferInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
StringRef SectionName) {
ArrayRef<char> ModuleData =
diff --git a/llvm/lib/Bitcode/Writer/CMakeLists.txt b/llvm/lib/Bitcode/Writer/CMakeLists.txt
index dcdb73b854d4c..36808c8ae28f7 100644
--- a/llvm/lib/Bitcode/Writer/CMakeLists.txt
+++ b/llvm/lib/Bitcode/Writer/CMakeLists.txt
@@ -11,7 +11,6 @@ add_llvm_component_library(LLVMBitWriter
Analysis
Core
MC
- TransformUtils
Object
Support
)
More information about the llvm-commits
mailing list