-
Notifications
You must be signed in to change notification settings - Fork 13.7k
IR: Make Module::getOrInsertGlobal() return a GlobalVariable. #141323
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IR: Make Module::getOrInsertGlobal() return a GlobalVariable. #141323
Conversation
Created using spr 1.3.6-beta.1
@llvm/pr-subscribers-llvm-ir @llvm/pr-subscribers-llvm-transforms Author: Peter Collingbourne (pcc) ChangesAfter pointer element types were removed this function can only return Full diff: https://github.com/llvm/llvm-project/pull/141323.diff 13 Files Affected:
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index 53d1005333ee1..0dc8164b9c950 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -471,15 +471,14 @@ class LLVM_ABI Module {
/// Look up the specified global in the module symbol table.
/// If it does not exist, invoke a callback to create a declaration of the
- /// global and return it. The global is constantexpr casted to the expected
- /// type if necessary.
- Constant *
+ /// global and return it.
+ GlobalVariable *
getOrInsertGlobal(StringRef Name, Type *Ty,
function_ref<GlobalVariable *()> CreateGlobalCallback);
/// Look up the specified global in the module symbol table. If required, this
/// overload constructs the global variable using its constructor's defaults.
- Constant *getOrInsertGlobal(StringRef Name, Type *Ty);
+ GlobalVariable *getOrInsertGlobal(StringRef Name, Type *Ty);
/// @}
/// @name Global Alias Accessors
diff --git a/llvm/lib/CodeGen/LowerEmuTLS.cpp b/llvm/lib/CodeGen/LowerEmuTLS.cpp
index ec36b669ac018..c81f0184cf213 100644
--- a/llvm/lib/CodeGen/LowerEmuTLS.cpp
+++ b/llvm/lib/CodeGen/LowerEmuTLS.cpp
@@ -140,8 +140,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
PointerType *InitPtrType = PointerType::getUnqual(C);
Type *ElementTypes[4] = {WordType, WordType, VoidPtrType, InitPtrType};
StructType *EmuTlsVarType = StructType::create(ElementTypes);
- EmuTlsVar = cast<GlobalVariable>(
- M.getOrInsertGlobal(EmuTlsVarName, EmuTlsVarType));
+ EmuTlsVar = M.getOrInsertGlobal(EmuTlsVarName, EmuTlsVarType);
copyLinkageVisibility(M, GV, EmuTlsVar);
// Define "__emutls_t.*" and "__emutls_v.*" only if GV is defined.
@@ -155,8 +154,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
GlobalVariable *EmuTlsTmplVar = nullptr;
if (InitValue) {
std::string EmuTlsTmplName = ("__emutls_t." + GV->getName()).str();
- EmuTlsTmplVar = dyn_cast_or_null<GlobalVariable>(
- M.getOrInsertGlobal(EmuTlsTmplName, GVType));
+ EmuTlsTmplVar = M.getOrInsertGlobal(EmuTlsTmplName, GVType);
assert(EmuTlsTmplVar && "Failed to create emualted TLS initializer");
EmuTlsTmplVar->setConstant(true);
EmuTlsTmplVar->setInitializer(const_cast<Constant*>(InitValue));
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index c85f0c71ef25f..935afaf9dd550 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1975,10 +1975,9 @@ Value *TargetLoweringBase::getIRStackGuard(IRBuilderBase &IRB) const {
if (getTargetMachine().getTargetTriple().isOSOpenBSD()) {
Module &M = *IRB.GetInsertBlock()->getParent()->getParent();
PointerType *PtrTy = PointerType::getUnqual(M.getContext());
- Constant *C = M.getOrInsertGlobal("__guard_local", PtrTy);
- if (GlobalVariable *G = dyn_cast_or_null<GlobalVariable>(C))
- G->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GlobalVariable *G = M.getOrInsertGlobal("__guard_local", PtrTy);
+ G->setVisibility(GlobalValue::HiddenVisibility);
+ return G;
}
return nullptr;
}
diff --git a/llvm/lib/CodeGen/WasmEHPrepare.cpp b/llvm/lib/CodeGen/WasmEHPrepare.cpp
index fc98f594660bb..1ea3e6bcb15ce 100644
--- a/llvm/lib/CodeGen/WasmEHPrepare.cpp
+++ b/llvm/lib/CodeGen/WasmEHPrepare.cpp
@@ -247,8 +247,7 @@ bool WasmEHPrepareImpl::prepareEHPads(Function &F) {
// we depend on CoalesceFeaturesAndStripAtomics to downgrade it to
// non-thread-local ones, in which case we don't allow this object to be
// linked with other objects using shared memory.
- LPadContextGV = cast<GlobalVariable>(
- M.getOrInsertGlobal("__wasm_lpad_context", LPadContextTy));
+ LPadContextGV = M.getOrInsertGlobal("__wasm_lpad_context", LPadContextTy);
LPadContextGV->setThreadLocalMode(GlobalValue::GeneralDynamicTLSModel);
LPadIndexField = LPadContextGV;
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index c7daaafe13e3f..eb635dc29aeeb 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -250,12 +250,9 @@ GlobalVariable *Module::getGlobalVariable(StringRef Name,
}
/// getOrInsertGlobal - Look up the specified global in the module symbol table.
-/// 1. If it does not exist, add a declaration of the global and return it.
-/// 2. Else, the global exists but has the wrong type: return the function
-/// with a constantexpr cast to the right type.
-/// 3. Finally, if the existing global is the correct declaration, return the
-/// existing global.
-Constant *Module::getOrInsertGlobal(
+/// If it does not exist, add a declaration of the global and return it.
+/// Otherwise, return the existing global.
+GlobalVariable *Module::getOrInsertGlobal(
StringRef Name, Type *Ty,
function_ref<GlobalVariable *()> CreateGlobalCallback) {
// See if we have a definition for the specified global already.
@@ -269,7 +266,7 @@ Constant *Module::getOrInsertGlobal(
}
// Overload to construct a global variable using its constructor's defaults.
-Constant *Module::getOrInsertGlobal(StringRef Name, Type *Ty) {
+GlobalVariable *Module::getOrInsertGlobal(StringRef Name, Type *Ty) {
return getOrInsertGlobal(Name, Ty, [&] {
return new GlobalVariable(*this, Ty, false, GlobalVariable::ExternalLinkage,
nullptr, Name);
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index ebabece067db2..51667038575cc 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -983,11 +983,10 @@ LowerTypeTestsModule::importTypeId(StringRef TypeId) {
auto ImportGlobal = [&](StringRef Name) {
// Give the global a type of length 0 so that it is not assumed not to alias
// with any other global.
- Constant *C = M.getOrInsertGlobal(("__typeid_" + TypeId + "_" + Name).str(),
- Int8Arr0Ty);
- if (auto *GV = dyn_cast<GlobalVariable>(C))
- GV->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GlobalVariable *GV = M.getOrInsertGlobal(
+ ("__typeid_" + TypeId + "_" + Name).str(), Int8Arr0Ty);
+ GV->setVisibility(GlobalValue::HiddenVisibility);
+ return GV;
};
auto ImportConstant = [&](StringRef Name, uint64_t Const, unsigned AbsWidth,
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index aa527aec622bf..3a25255d0a4c8 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -1689,12 +1689,10 @@ void DevirtModule::exportConstant(VTableSlot Slot, ArrayRef<uint64_t> Args,
Constant *DevirtModule::importGlobal(VTableSlot Slot, ArrayRef<uint64_t> Args,
StringRef Name) {
- Constant *C =
+ GlobalVariable *GV =
M.getOrInsertGlobal(getGlobalName(Slot, Args, Name), Int8Arr0Ty);
- auto *GV = dyn_cast<GlobalVariable>(C);
- if (GV)
- GV->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GV->setVisibility(GlobalValue::HiddenVisibility);
+ return GV;
}
Constant *DevirtModule::importConstant(VTableSlot Slot, ArrayRef<uint64_t> Args,
diff --git a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
index 090e7cf7345f7..d94a2fbb23d23 100644
--- a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
@@ -1506,12 +1506,10 @@ bool DataFlowSanitizer::runImpl(
auto GetOrInsertGlobal = [this, &Changed](StringRef Name,
Type *Ty) -> Constant * {
- Constant *C = Mod->getOrInsertGlobal(Name, Ty);
- if (GlobalVariable *G = dyn_cast<GlobalVariable>(C)) {
- Changed |= G->getThreadLocalMode() != GlobalVariable::InitialExecTLSModel;
- G->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
- }
- return C;
+ GlobalVariable *G = Mod->getOrInsertGlobal(Name, Ty);
+ Changed |= G->getThreadLocalMode() != GlobalVariable::InitialExecTLSModel;
+ G->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
+ return G;
};
// These globals must be kept in sync with the ones in dfsan.cpp.
diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
index 2f7712171bab2..e81a725c62ead 100644
--- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
@@ -692,7 +692,7 @@ void HWAddressSanitizer::initializeModule() {
}
if (!TargetTriple.isAndroid()) {
- Constant *C = M.getOrInsertGlobal("__hwasan_tls", IntptrTy, [&] {
+ ThreadPtrGlobal = M.getOrInsertGlobal("__hwasan_tls", IntptrTy, [&] {
auto *GV = new GlobalVariable(M, IntptrTy, /*isConstant=*/false,
GlobalValue::ExternalLinkage, nullptr,
"__hwasan_tls", nullptr,
@@ -700,7 +700,6 @@ void HWAddressSanitizer::initializeModule() {
appendToCompilerUsed(M, GV);
return GV;
});
- ThreadPtrGlobal = cast<GlobalVariable>(C);
}
}
diff --git a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
index 6bbf99cd8d510..fa1db288fbb2e 100644
--- a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
@@ -642,11 +642,11 @@ NumericalStabilitySanitizerPass::run(Module &M, ModuleAnalysisManager &MAM) {
}
static GlobalValue *createThreadLocalGV(const char *Name, Module &M, Type *Ty) {
- return dyn_cast<GlobalValue>(M.getOrInsertGlobal(Name, Ty, [&M, Ty, Name] {
+ return M.getOrInsertGlobal(Name, Ty, [&M, Ty, Name] {
return new GlobalVariable(M, Ty, false, GlobalVariable::ExternalLinkage,
nullptr, Name, nullptr,
GlobalVariable::InitialExecTLSModel);
- }));
+ });
}
NumericalStabilitySanitizer::NumericalStabilitySanitizer(Module &M)
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 9c6660d79322a..5b8ea1547ca2f 100644
--- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -486,10 +486,8 @@ bool ModuleSanitizerCoverage::instrumentModule() {
SanCovTraceSwitchFunction =
M.getOrInsertFunction(SanCovTraceSwitchName, VoidTy, Int64Ty, PtrTy);
- Constant *SanCovLowestStackConstant =
- M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
- SanCovLowestStack = dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
- if (!SanCovLowestStack || SanCovLowestStack->getValueType() != IntptrTy) {
+ SanCovLowestStack = M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
+ if (SanCovLowestStack->getValueType() != IntptrTy) {
C->emitError(StringRef("'") + SanCovLowestStackName +
"' should not be declared by the user");
return true;
diff --git a/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp b/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
index 4e96b66776617..f5c73ff63934e 100644
--- a/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
+++ b/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
@@ -81,8 +81,7 @@ TEST_F(BasicAATest, AliasInstWithObjectOfImpreciseSize) {
Value *IncomingI32Ptr = F->arg_begin();
- auto *GlobalPtr =
- cast<GlobalVariable>(M.getOrInsertGlobal("some_global", B.getInt8Ty()));
+ auto *GlobalPtr = M.getOrInsertGlobal("some_global", B.getInt8Ty());
// Without sufficiently restricted linkage/an init, some of the object size
// checking bits get more conservative.
diff --git a/llvm/unittests/IR/ConstantsTest.cpp b/llvm/unittests/IR/ConstantsTest.cpp
index 41cc212f00de6..54c7ddd003fc6 100644
--- a/llvm/unittests/IR/ConstantsTest.cpp
+++ b/llvm/unittests/IR/ConstantsTest.cpp
@@ -774,12 +774,12 @@ TEST(ConstantsTest, ComdatUserTracking) {
EXPECT_TRUE(Users.size() == 0);
Type *Ty = Type::getInt8Ty(Context);
- GlobalVariable *GV1 = cast<GlobalVariable>(M.getOrInsertGlobal("gv1", Ty));
+ GlobalVariable *GV1 = M.getOrInsertGlobal("gv1", Ty);
GV1->setComdat(C);
EXPECT_TRUE(Users.size() == 1);
EXPECT_TRUE(Users.contains(GV1));
- GlobalVariable *GV2 = cast<GlobalVariable>(M.getOrInsertGlobal("gv2", Ty));
+ GlobalVariable *GV2 = M.getOrInsertGlobal("gv2", Ty);
GV2->setComdat(C);
EXPECT_TRUE(Users.size() == 2);
EXPECT_TRUE(Users.contains(GV2));
|
@llvm/pr-subscribers-backend-webassembly Author: Peter Collingbourne (pcc) ChangesAfter pointer element types were removed this function can only return Full diff: https://github.com/llvm/llvm-project/pull/141323.diff 13 Files Affected:
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index 53d1005333ee1..0dc8164b9c950 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -471,15 +471,14 @@ class LLVM_ABI Module {
/// Look up the specified global in the module symbol table.
/// If it does not exist, invoke a callback to create a declaration of the
- /// global and return it. The global is constantexpr casted to the expected
- /// type if necessary.
- Constant *
+ /// global and return it.
+ GlobalVariable *
getOrInsertGlobal(StringRef Name, Type *Ty,
function_ref<GlobalVariable *()> CreateGlobalCallback);
/// Look up the specified global in the module symbol table. If required, this
/// overload constructs the global variable using its constructor's defaults.
- Constant *getOrInsertGlobal(StringRef Name, Type *Ty);
+ GlobalVariable *getOrInsertGlobal(StringRef Name, Type *Ty);
/// @}
/// @name Global Alias Accessors
diff --git a/llvm/lib/CodeGen/LowerEmuTLS.cpp b/llvm/lib/CodeGen/LowerEmuTLS.cpp
index ec36b669ac018..c81f0184cf213 100644
--- a/llvm/lib/CodeGen/LowerEmuTLS.cpp
+++ b/llvm/lib/CodeGen/LowerEmuTLS.cpp
@@ -140,8 +140,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
PointerType *InitPtrType = PointerType::getUnqual(C);
Type *ElementTypes[4] = {WordType, WordType, VoidPtrType, InitPtrType};
StructType *EmuTlsVarType = StructType::create(ElementTypes);
- EmuTlsVar = cast<GlobalVariable>(
- M.getOrInsertGlobal(EmuTlsVarName, EmuTlsVarType));
+ EmuTlsVar = M.getOrInsertGlobal(EmuTlsVarName, EmuTlsVarType);
copyLinkageVisibility(M, GV, EmuTlsVar);
// Define "__emutls_t.*" and "__emutls_v.*" only if GV is defined.
@@ -155,8 +154,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
GlobalVariable *EmuTlsTmplVar = nullptr;
if (InitValue) {
std::string EmuTlsTmplName = ("__emutls_t." + GV->getName()).str();
- EmuTlsTmplVar = dyn_cast_or_null<GlobalVariable>(
- M.getOrInsertGlobal(EmuTlsTmplName, GVType));
+ EmuTlsTmplVar = M.getOrInsertGlobal(EmuTlsTmplName, GVType);
assert(EmuTlsTmplVar && "Failed to create emualted TLS initializer");
EmuTlsTmplVar->setConstant(true);
EmuTlsTmplVar->setInitializer(const_cast<Constant*>(InitValue));
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index c85f0c71ef25f..935afaf9dd550 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1975,10 +1975,9 @@ Value *TargetLoweringBase::getIRStackGuard(IRBuilderBase &IRB) const {
if (getTargetMachine().getTargetTriple().isOSOpenBSD()) {
Module &M = *IRB.GetInsertBlock()->getParent()->getParent();
PointerType *PtrTy = PointerType::getUnqual(M.getContext());
- Constant *C = M.getOrInsertGlobal("__guard_local", PtrTy);
- if (GlobalVariable *G = dyn_cast_or_null<GlobalVariable>(C))
- G->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GlobalVariable *G = M.getOrInsertGlobal("__guard_local", PtrTy);
+ G->setVisibility(GlobalValue::HiddenVisibility);
+ return G;
}
return nullptr;
}
diff --git a/llvm/lib/CodeGen/WasmEHPrepare.cpp b/llvm/lib/CodeGen/WasmEHPrepare.cpp
index fc98f594660bb..1ea3e6bcb15ce 100644
--- a/llvm/lib/CodeGen/WasmEHPrepare.cpp
+++ b/llvm/lib/CodeGen/WasmEHPrepare.cpp
@@ -247,8 +247,7 @@ bool WasmEHPrepareImpl::prepareEHPads(Function &F) {
// we depend on CoalesceFeaturesAndStripAtomics to downgrade it to
// non-thread-local ones, in which case we don't allow this object to be
// linked with other objects using shared memory.
- LPadContextGV = cast<GlobalVariable>(
- M.getOrInsertGlobal("__wasm_lpad_context", LPadContextTy));
+ LPadContextGV = M.getOrInsertGlobal("__wasm_lpad_context", LPadContextTy);
LPadContextGV->setThreadLocalMode(GlobalValue::GeneralDynamicTLSModel);
LPadIndexField = LPadContextGV;
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index c7daaafe13e3f..eb635dc29aeeb 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -250,12 +250,9 @@ GlobalVariable *Module::getGlobalVariable(StringRef Name,
}
/// getOrInsertGlobal - Look up the specified global in the module symbol table.
-/// 1. If it does not exist, add a declaration of the global and return it.
-/// 2. Else, the global exists but has the wrong type: return the function
-/// with a constantexpr cast to the right type.
-/// 3. Finally, if the existing global is the correct declaration, return the
-/// existing global.
-Constant *Module::getOrInsertGlobal(
+/// If it does not exist, add a declaration of the global and return it.
+/// Otherwise, return the existing global.
+GlobalVariable *Module::getOrInsertGlobal(
StringRef Name, Type *Ty,
function_ref<GlobalVariable *()> CreateGlobalCallback) {
// See if we have a definition for the specified global already.
@@ -269,7 +266,7 @@ Constant *Module::getOrInsertGlobal(
}
// Overload to construct a global variable using its constructor's defaults.
-Constant *Module::getOrInsertGlobal(StringRef Name, Type *Ty) {
+GlobalVariable *Module::getOrInsertGlobal(StringRef Name, Type *Ty) {
return getOrInsertGlobal(Name, Ty, [&] {
return new GlobalVariable(*this, Ty, false, GlobalVariable::ExternalLinkage,
nullptr, Name);
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index ebabece067db2..51667038575cc 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -983,11 +983,10 @@ LowerTypeTestsModule::importTypeId(StringRef TypeId) {
auto ImportGlobal = [&](StringRef Name) {
// Give the global a type of length 0 so that it is not assumed not to alias
// with any other global.
- Constant *C = M.getOrInsertGlobal(("__typeid_" + TypeId + "_" + Name).str(),
- Int8Arr0Ty);
- if (auto *GV = dyn_cast<GlobalVariable>(C))
- GV->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GlobalVariable *GV = M.getOrInsertGlobal(
+ ("__typeid_" + TypeId + "_" + Name).str(), Int8Arr0Ty);
+ GV->setVisibility(GlobalValue::HiddenVisibility);
+ return GV;
};
auto ImportConstant = [&](StringRef Name, uint64_t Const, unsigned AbsWidth,
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index aa527aec622bf..3a25255d0a4c8 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -1689,12 +1689,10 @@ void DevirtModule::exportConstant(VTableSlot Slot, ArrayRef<uint64_t> Args,
Constant *DevirtModule::importGlobal(VTableSlot Slot, ArrayRef<uint64_t> Args,
StringRef Name) {
- Constant *C =
+ GlobalVariable *GV =
M.getOrInsertGlobal(getGlobalName(Slot, Args, Name), Int8Arr0Ty);
- auto *GV = dyn_cast<GlobalVariable>(C);
- if (GV)
- GV->setVisibility(GlobalValue::HiddenVisibility);
- return C;
+ GV->setVisibility(GlobalValue::HiddenVisibility);
+ return GV;
}
Constant *DevirtModule::importConstant(VTableSlot Slot, ArrayRef<uint64_t> Args,
diff --git a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
index 090e7cf7345f7..d94a2fbb23d23 100644
--- a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
@@ -1506,12 +1506,10 @@ bool DataFlowSanitizer::runImpl(
auto GetOrInsertGlobal = [this, &Changed](StringRef Name,
Type *Ty) -> Constant * {
- Constant *C = Mod->getOrInsertGlobal(Name, Ty);
- if (GlobalVariable *G = dyn_cast<GlobalVariable>(C)) {
- Changed |= G->getThreadLocalMode() != GlobalVariable::InitialExecTLSModel;
- G->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
- }
- return C;
+ GlobalVariable *G = Mod->getOrInsertGlobal(Name, Ty);
+ Changed |= G->getThreadLocalMode() != GlobalVariable::InitialExecTLSModel;
+ G->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
+ return G;
};
// These globals must be kept in sync with the ones in dfsan.cpp.
diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
index 2f7712171bab2..e81a725c62ead 100644
--- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
@@ -692,7 +692,7 @@ void HWAddressSanitizer::initializeModule() {
}
if (!TargetTriple.isAndroid()) {
- Constant *C = M.getOrInsertGlobal("__hwasan_tls", IntptrTy, [&] {
+ ThreadPtrGlobal = M.getOrInsertGlobal("__hwasan_tls", IntptrTy, [&] {
auto *GV = new GlobalVariable(M, IntptrTy, /*isConstant=*/false,
GlobalValue::ExternalLinkage, nullptr,
"__hwasan_tls", nullptr,
@@ -700,7 +700,6 @@ void HWAddressSanitizer::initializeModule() {
appendToCompilerUsed(M, GV);
return GV;
});
- ThreadPtrGlobal = cast<GlobalVariable>(C);
}
}
diff --git a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
index 6bbf99cd8d510..fa1db288fbb2e 100644
--- a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp
@@ -642,11 +642,11 @@ NumericalStabilitySanitizerPass::run(Module &M, ModuleAnalysisManager &MAM) {
}
static GlobalValue *createThreadLocalGV(const char *Name, Module &M, Type *Ty) {
- return dyn_cast<GlobalValue>(M.getOrInsertGlobal(Name, Ty, [&M, Ty, Name] {
+ return M.getOrInsertGlobal(Name, Ty, [&M, Ty, Name] {
return new GlobalVariable(M, Ty, false, GlobalVariable::ExternalLinkage,
nullptr, Name, nullptr,
GlobalVariable::InitialExecTLSModel);
- }));
+ });
}
NumericalStabilitySanitizer::NumericalStabilitySanitizer(Module &M)
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 9c6660d79322a..5b8ea1547ca2f 100644
--- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -486,10 +486,8 @@ bool ModuleSanitizerCoverage::instrumentModule() {
SanCovTraceSwitchFunction =
M.getOrInsertFunction(SanCovTraceSwitchName, VoidTy, Int64Ty, PtrTy);
- Constant *SanCovLowestStackConstant =
- M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
- SanCovLowestStack = dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
- if (!SanCovLowestStack || SanCovLowestStack->getValueType() != IntptrTy) {
+ SanCovLowestStack = M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
+ if (SanCovLowestStack->getValueType() != IntptrTy) {
C->emitError(StringRef("'") + SanCovLowestStackName +
"' should not be declared by the user");
return true;
diff --git a/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp b/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
index 4e96b66776617..f5c73ff63934e 100644
--- a/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
+++ b/llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp
@@ -81,8 +81,7 @@ TEST_F(BasicAATest, AliasInstWithObjectOfImpreciseSize) {
Value *IncomingI32Ptr = F->arg_begin();
- auto *GlobalPtr =
- cast<GlobalVariable>(M.getOrInsertGlobal("some_global", B.getInt8Ty()));
+ auto *GlobalPtr = M.getOrInsertGlobal("some_global", B.getInt8Ty());
// Without sufficiently restricted linkage/an init, some of the object size
// checking bits get more conservative.
diff --git a/llvm/unittests/IR/ConstantsTest.cpp b/llvm/unittests/IR/ConstantsTest.cpp
index 41cc212f00de6..54c7ddd003fc6 100644
--- a/llvm/unittests/IR/ConstantsTest.cpp
+++ b/llvm/unittests/IR/ConstantsTest.cpp
@@ -774,12 +774,12 @@ TEST(ConstantsTest, ComdatUserTracking) {
EXPECT_TRUE(Users.size() == 0);
Type *Ty = Type::getInt8Ty(Context);
- GlobalVariable *GV1 = cast<GlobalVariable>(M.getOrInsertGlobal("gv1", Ty));
+ GlobalVariable *GV1 = M.getOrInsertGlobal("gv1", Ty);
GV1->setComdat(C);
EXPECT_TRUE(Users.size() == 1);
EXPECT_TRUE(Users.contains(GV1));
- GlobalVariable *GV2 = cast<GlobalVariable>(M.getOrInsertGlobal("gv2", Ty));
+ GlobalVariable *GV2 = M.getOrInsertGlobal("gv2", Ty);
GV2->setComdat(C);
EXPECT_TRUE(Users.size() == 2);
EXPECT_TRUE(Users.contains(GV2));
|
You can test this locally with the following command:git-clang-format --diff HEAD~1 HEAD --extensions h,cpp -- llvm/include/llvm/IR/Module.h llvm/lib/CodeGen/LowerEmuTLS.cpp llvm/lib/CodeGen/TargetLoweringBase.cpp llvm/lib/CodeGen/WasmEHPrepare.cpp llvm/lib/IR/Module.cpp llvm/lib/Transforms/IPO/LowerTypeTests.cpp llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/unittests/Analysis/BasicAliasAnalysisTest.cpp llvm/unittests/IR/ConstantsTest.cpp View the diff from clang-format here.diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index 0dc8164b9..31320507a 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -480,9 +480,9 @@ public:
/// overload constructs the global variable using its constructor's defaults.
GlobalVariable *getOrInsertGlobal(StringRef Name, Type *Ty);
-/// @}
-/// @name Global Alias Accessors
-/// @{
+ /// @}
+ /// @name Global Alias Accessors
+ /// @{
/// Return the global alias in the module with the specified name, of
/// arbitrary type. This method returns null if a global with the specified
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
After pointer element types were removed this function can only return a GlobalVariable, so reflect that in the type and comments and clean up callers. Reviewers: nikic Reviewed By: nikic Pull Request: llvm/llvm-project#141323
After pointer element types were removed this function can only return a GlobalVariable, so reflect that in the type and comments and clean up callers. Reviewers: nikic Reviewed By: nikic Pull Request: llvm#141323
After pointer element types were removed this function can only return
a GlobalVariable, so reflect that in the type and comments and clean
up callers.