mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-20 21:14:28 +00:00
Add back removed code. It still causes LLVM to miscompile. But not having it breaks other things.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151594 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e879cbae7c
commit
348e5e763e
@ -581,6 +581,36 @@ void ModuleLinker::computeTypeMapping() {
|
||||
TypeMap.addTypeMapping(DGV->getType(), I->getType());
|
||||
}
|
||||
|
||||
// Incorporate types by name, scanning all the types in the source module.
|
||||
// At this point, the destination module may have a type "%foo = { i32 }" for
|
||||
// example. When the source module got loaded into the same LLVMContext, if
|
||||
// it had the same type, it would have been renamed to "%foo.42 = { i32 }".
|
||||
// Though it isn't required for correctness, attempt to link these up to clean
|
||||
// up the IR.
|
||||
std::vector<StructType*> SrcStructTypes;
|
||||
SrcM->findUsedStructTypes(SrcStructTypes);
|
||||
|
||||
SmallPtrSet<StructType*, 32> SrcStructTypesSet(SrcStructTypes.begin(),
|
||||
SrcStructTypes.end());
|
||||
|
||||
for (unsigned i = 0, e = SrcStructTypes.size(); i != e; ++i) {
|
||||
StructType *ST = SrcStructTypes[i];
|
||||
if (!ST->hasName()) continue;
|
||||
|
||||
// Check to see if there is a dot in the name followed by a digit.
|
||||
size_t DotPos = ST->getName().rfind('.');
|
||||
if (DotPos == 0 || DotPos == StringRef::npos ||
|
||||
ST->getName().back() == '.' || !isdigit(ST->getName()[DotPos+1]))
|
||||
continue;
|
||||
|
||||
// Check to see if the destination module has a struct with the prefix name.
|
||||
if (StructType *DST = DstM->getTypeByName(ST->getName().substr(0, DotPos)))
|
||||
// Don't use it if this actually came from the source module. They're in
|
||||
// the same LLVMContext after all.
|
||||
if (!SrcStructTypesSet.count(DST))
|
||||
TypeMap.addTypeMapping(DST, ST);
|
||||
}
|
||||
|
||||
// Don't bother incorporating aliases, they aren't generally typed well.
|
||||
|
||||
// Now that we have discovered all of the type equivalences, get a body for
|
||||
|
@ -1,10 +1,7 @@
|
||||
; RUN: echo "%X = type { i32 } @G2 = global %X { i32 4 }" > %t.ll
|
||||
; RUN: llvm-link %s %t.ll -S | FileCheck %s
|
||||
; XFAIL: *
|
||||
; PR11464
|
||||
|
||||
; FIXME: XFAIL until <rdar://problem/10913281> is addressed.
|
||||
|
||||
%X = type { i32 }
|
||||
@G = global %X { i32 4 }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user