mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-13 15:11:39 +00:00
Fix linking of inline asm objects.
llvm-svn: 28640
This commit is contained in:
parent
b41365509f
commit
609f7e070d
@ -262,20 +262,19 @@ static void PrintMap(const std::map<const Value*, Value*> &M) {
|
|||||||
|
|
||||||
// RemapOperand - Use ValueMap to convert references from one module to another.
|
// RemapOperand - Use ValueMap to convert references from one module to another.
|
||||||
// This is somewhat sophisticated in that it can automatically handle constant
|
// This is somewhat sophisticated in that it can automatically handle constant
|
||||||
// references correctly as well...
|
// references correctly as well.
|
||||||
static Value *RemapOperand(const Value *In,
|
static Value *RemapOperand(const Value *In,
|
||||||
std::map<const Value*, Value*> &ValueMap) {
|
std::map<const Value*, Value*> &ValueMap) {
|
||||||
std::map<const Value*,Value*>::const_iterator I = ValueMap.find(In);
|
std::map<const Value*,Value*>::const_iterator I = ValueMap.find(In);
|
||||||
if (I != ValueMap.end()) return I->second;
|
if (I != ValueMap.end()) return I->second;
|
||||||
|
|
||||||
// Check to see if it's a constant that we are interesting in transforming.
|
// Check to see if it's a constant that we are interesting in transforming.
|
||||||
|
Value *Result = 0;
|
||||||
if (const Constant *CPV = dyn_cast<Constant>(In)) {
|
if (const Constant *CPV = dyn_cast<Constant>(In)) {
|
||||||
if ((!isa<DerivedType>(CPV->getType()) && !isa<ConstantExpr>(CPV)) ||
|
if ((!isa<DerivedType>(CPV->getType()) && !isa<ConstantExpr>(CPV)) ||
|
||||||
isa<ConstantAggregateZero>(CPV))
|
isa<ConstantAggregateZero>(CPV))
|
||||||
return const_cast<Constant*>(CPV); // Simple constants stay identical.
|
return const_cast<Constant*>(CPV); // Simple constants stay identical.
|
||||||
|
|
||||||
Constant *Result = 0;
|
|
||||||
|
|
||||||
if (const ConstantArray *CPA = dyn_cast<ConstantArray>(CPV)) {
|
if (const ConstantArray *CPA = dyn_cast<ConstantArray>(CPV)) {
|
||||||
std::vector<Constant*> Operands(CPA->getNumOperands());
|
std::vector<Constant*> Operands(CPA->getNumOperands());
|
||||||
for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i)
|
for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i)
|
||||||
@ -350,11 +349,16 @@ static Value *RemapOperand(const Value *In,
|
|||||||
} else {
|
} else {
|
||||||
assert(0 && "Unknown type of derived type constant value!");
|
assert(0 && "Unknown type of derived type constant value!");
|
||||||
}
|
}
|
||||||
|
} else if (isa<InlineAsm>(In)) {
|
||||||
// Cache the mapping in our local map structure...
|
Result = const_cast<Value*>(In);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cache the mapping in our local map structure...
|
||||||
|
if (Result) {
|
||||||
ValueMap.insert(std::make_pair(In, Result));
|
ValueMap.insert(std::make_pair(In, Result));
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::cerr << "LinkModules ValueMap: \n";
|
std::cerr << "LinkModules ValueMap: \n";
|
||||||
PrintMap(ValueMap);
|
PrintMap(ValueMap);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user