forked from OSchip/llvm-project
Revert "[IRMover] Implement name based structure type mapping"
This reverts commit r325686. There was a misunderstanding and this has not been approved yet. llvm-svn: 325715
This commit is contained in:
parent
9060b57e70
commit
9a2bf413a0
|
@ -49,23 +49,17 @@ public:
|
|||
// The set of opaque types is the composite module.
|
||||
DenseSet<StructType *> OpaqueStructTypes;
|
||||
|
||||
// The set of identified but non opaque structures in the composite module.
|
||||
DenseSet<StructType *, StructTypeKeyInfo> NonOpaqueStructTypes;
|
||||
|
||||
// Map between structure type name and instance. Used in findNonOpaque
|
||||
// to correctly map imported global variable type during ThinLTO import
|
||||
// phase.
|
||||
DenseMap<StringRef, StructType *> NonOpaqueStructNameMap;
|
||||
|
||||
public:
|
||||
void addNonOpaque(StructType *Ty);
|
||||
void switchToNonOpaque(StructType *Ty);
|
||||
void addOpaque(StructType *Ty);
|
||||
StructType *findNonOpaque(ArrayRef<Type *> ETypes, bool IsPacked,
|
||||
StringRef Name);
|
||||
bool hasType(StructType *Ty);
|
||||
};
|
||||
|
||||
// The set of identified but non opaque structures in the composite module.
|
||||
DenseSet<StructType *, StructTypeKeyInfo> NonOpaqueStructTypes;
|
||||
|
||||
public:
|
||||
void addNonOpaque(StructType *Ty);
|
||||
void switchToNonOpaque(StructType *Ty);
|
||||
void addOpaque(StructType *Ty);
|
||||
StructType *findNonOpaque(ArrayRef<Type *> ETypes, bool IsPacked);
|
||||
bool hasType(StructType *Ty);
|
||||
};
|
||||
|
||||
IRMover(Module &M);
|
||||
|
||||
typedef std::function<void(GlobalValue &)> ValueAdder;
|
||||
|
|
|
@ -318,8 +318,8 @@ Type *TypeMapTy::get(Type *Ty, SmallPtrSet<StructType *, 8> &Visited) {
|
|||
return *Entry = Ty;
|
||||
}
|
||||
|
||||
if (StructType *OldT = DstStructTypesSet.findNonOpaque(
|
||||
ElementTypes, IsPacked, STy->getName())) {
|
||||
if (StructType *OldT =
|
||||
DstStructTypesSet.findNonOpaque(ElementTypes, IsPacked)) {
|
||||
STy->setName("");
|
||||
return *Entry = OldT;
|
||||
}
|
||||
|
@ -906,6 +906,7 @@ bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) {
|
|||
Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
|
||||
bool ForAlias) {
|
||||
GlobalValue *DGV = getLinkedToGlobal(SGV);
|
||||
|
||||
bool ShouldLink = shouldLink(DGV, *SGV);
|
||||
|
||||
// just missing from map
|
||||
|
@ -1409,14 +1410,12 @@ bool IRMover::StructTypeKeyInfo::isEqual(const StructType *LHS,
|
|||
|
||||
void IRMover::IdentifiedStructTypeSet::addNonOpaque(StructType *Ty) {
|
||||
assert(!Ty->isOpaque());
|
||||
if (Ty->hasName())
|
||||
NonOpaqueStructNameMap.insert({getTypeNamePrefix(Ty->getName()), Ty});
|
||||
|
||||
NonOpaqueStructTypes.insert(Ty);
|
||||
}
|
||||
|
||||
void IRMover::IdentifiedStructTypeSet::switchToNonOpaque(StructType *Ty) {
|
||||
addNonOpaque(Ty);
|
||||
assert(!Ty->isOpaque());
|
||||
NonOpaqueStructTypes.insert(Ty);
|
||||
bool Removed = OpaqueStructTypes.erase(Ty);
|
||||
(void)Removed;
|
||||
assert(Removed);
|
||||
|
@ -1429,16 +1428,10 @@ void IRMover::IdentifiedStructTypeSet::addOpaque(StructType *Ty) {
|
|||
|
||||
StructType *
|
||||
IRMover::IdentifiedStructTypeSet::findNonOpaque(ArrayRef<Type *> ETypes,
|
||||
bool IsPacked, StringRef Name) {
|
||||
bool IsPacked) {
|
||||
IRMover::StructTypeKeyInfo::KeyTy Key(ETypes, IsPacked);
|
||||
auto I = NonOpaqueStructTypes.find_as(Key);
|
||||
if (I == NonOpaqueStructTypes.end())
|
||||
return nullptr;
|
||||
auto NI = NonOpaqueStructNameMap.find(getTypeNamePrefix(Name));
|
||||
if (NI != NonOpaqueStructNameMap.end() &&
|
||||
IRMover::StructTypeKeyInfo::KeyTy((*NI).second) == Key)
|
||||
return (*NI).second;
|
||||
return *I;
|
||||
return I == NonOpaqueStructTypes.end() ? nullptr : *I;
|
||||
}
|
||||
|
||||
bool IRMover::IdentifiedStructTypeSet::hasType(StructType *Ty) {
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
%struct.Baz = type { i64, i64, %struct.Foo }
|
||||
%struct.Foo = type { i64, i64 }
|
||||
|
||||
@baz = global %struct.Baz zeroinitializer
|
|
@ -1,12 +0,0 @@
|
|||
; RUN: llvm-link --initial-module=%s %p/Inputs/struct-mapping.ll -S -o - | FileCheck %s
|
||||
|
||||
; Here we check that new type mapping algorithm correctly mapped type of internal
|
||||
; member of struct.Baz to struct.Foo. Without it we'd map that type to struct.Bar, because
|
||||
; it is recursively isomorphic to struct.Foo and is defined first in source file.
|
||||
; CHECK: %struct.Baz = type { i64, i64, %struct.Foo }
|
||||
|
||||
%struct.Bar = type { i64, i64 }
|
||||
%struct.Foo = type { i64, i64 }
|
||||
|
||||
@bar = global %struct.Bar zeroinitializer
|
||||
@foo = global %struct.Foo zeroinitializer
|
|
@ -70,11 +70,6 @@ static cl::opt<std::string>
|
|||
OutputFilename("o", cl::desc("Override output filename"), cl::init("-"),
|
||||
cl::value_desc("filename"));
|
||||
|
||||
static cl::opt<std::string>
|
||||
InitialModule("initial-module",
|
||||
cl::desc("Link to existing destination module"), cl::init(""),
|
||||
cl::value_desc("filename"));
|
||||
|
||||
static cl::opt<bool>
|
||||
Internalize("internalize", cl::desc("Internalize linked symbols"));
|
||||
|
||||
|
@ -365,9 +360,7 @@ int main(int argc, char **argv) {
|
|||
if (!DisableDITypeMap)
|
||||
Context.enableDebugTypeODRUniquing();
|
||||
|
||||
auto Composite = InitialModule.empty()
|
||||
? make_unique<Module>("llvm-link", Context)
|
||||
: loadFile(argv[0], InitialModule, Context);
|
||||
auto Composite = make_unique<Module>("llvm-link", Context);
|
||||
Linker L(*Composite);
|
||||
|
||||
unsigned Flags = Linker::Flags::None;
|
||||
|
|
Loading…
Reference in New Issue