Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion llvm/include/llvm/Transforms/Utils/ValueMapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ class ValueMapper {
LLVM_ABI void scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init,
unsigned MappingContextID = 0);
LLVM_ABI void scheduleMapAppendingVariable(GlobalVariable &GV,
Constant *InitPrefix,
GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers,
unsigned MappingContextID = 0);
Expand Down
5 changes: 1 addition & 4 deletions llvm/lib/Linker/IRMover.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -882,10 +882,7 @@ IRLinker::linkAppendingVarProto(GlobalVariable *DstGV,
NG->copyAttributesFrom(SrcGV);
forceRenaming(NG, SrcGV->getName());

Mapper.scheduleMapAppendingVariable(
*NG,
(DstGV && !DstGV->isDeclaration()) ? DstGV->getInitializer() : nullptr,
IsOldStructor, SrcElements);
Mapper.scheduleMapAppendingVariable(*NG, DstGV, IsOldStructor, SrcElements);

// Replace any uses of the two global variables with uses of the new
// global.
Expand Down
24 changes: 15 additions & 9 deletions llvm/lib/Transforms/Utils/ValueMapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ struct WorklistEntry {
};
struct AppendingGVTy {
GlobalVariable *GV;
Constant *InitPrefix;
GlobalVariable *OldGV;
};
struct AliasOrIFuncTy {
GlobalValue *GV;
Expand Down Expand Up @@ -162,7 +162,7 @@ class Mapper {

void scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init,
unsigned MCID);
void scheduleMapAppendingVariable(GlobalVariable &GV, Constant *InitPrefix,
void scheduleMapAppendingVariable(GlobalVariable &GV, GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers,
unsigned MCID);
Expand All @@ -173,7 +173,7 @@ class Mapper {
void flush();

private:
void mapAppendingVariable(GlobalVariable &GV, Constant *InitPrefix,
void mapAppendingVariable(GlobalVariable &GV, GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers);

Expand Down Expand Up @@ -944,7 +944,7 @@ void Mapper::flush() {
drop_begin(AppendingInits, PrefixSize));
AppendingInits.resize(PrefixSize);
mapAppendingVariable(*E.Data.AppendingGV.GV,
E.Data.AppendingGV.InitPrefix,
E.Data.AppendingGV.OldGV,
E.AppendingGVIsOldCtorDtor, ArrayRef(NewInits));
break;
}
Expand Down Expand Up @@ -1094,15 +1094,21 @@ void Mapper::remapFunction(Function &F) {
}
}

void Mapper::mapAppendingVariable(GlobalVariable &GV, Constant *InitPrefix,
void Mapper::mapAppendingVariable(GlobalVariable &GV, GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers) {
Constant *InitPrefix =
(OldGV && !OldGV->isDeclaration()) ? OldGV->getInitializer() : nullptr;

SmallVector<Constant *, 16> Elements;
if (InitPrefix) {
unsigned NumElements =
cast<ArrayType>(InitPrefix->getType())->getNumElements();
for (unsigned I = 0; I != NumElements; ++I)
Elements.push_back(InitPrefix->getAggregateElement(I));
OldGV->setInitializer(nullptr);
if (InitPrefix->hasUseList() && InitPrefix->use_empty())
InitPrefix->destroyConstant();
}

PointerType *VoidPtrTy;
Expand Down Expand Up @@ -1148,7 +1154,7 @@ void Mapper::scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init,
}

void Mapper::scheduleMapAppendingVariable(GlobalVariable &GV,
Constant *InitPrefix,
GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers,
unsigned MCID) {
Expand All @@ -1159,7 +1165,7 @@ void Mapper::scheduleMapAppendingVariable(GlobalVariable &GV,
WE.Kind = WorklistEntry::MapAppendingVar;
WE.MCID = MCID;
WE.Data.AppendingGV.GV = &GV;
WE.Data.AppendingGV.InitPrefix = InitPrefix;
WE.Data.AppendingGV.OldGV = OldGV;
WE.AppendingGVIsOldCtorDtor = IsOldCtorDtor;
WE.AppendingGVNumNewMembers = NewMembers.size();
Worklist.push_back(WE);
Expand Down Expand Up @@ -1282,12 +1288,12 @@ void ValueMapper::scheduleMapGlobalInitializer(GlobalVariable &GV,
}

void ValueMapper::scheduleMapAppendingVariable(GlobalVariable &GV,
Constant *InitPrefix,
GlobalVariable *OldGV,
bool IsOldCtorDtor,
ArrayRef<Constant *> NewMembers,
unsigned MCID) {
getAsMapper(pImpl)->scheduleMapAppendingVariable(
GV, InitPrefix, IsOldCtorDtor, NewMembers, MCID);
GV, OldGV, IsOldCtorDtor, NewMembers, MCID);
}

void ValueMapper::scheduleMapGlobalAlias(GlobalAlias &GA, Constant &Aliasee,
Expand Down
Loading