fixed bug: test/Regression/Linker/2002-08-20-ConstantExpr.ll

llvm-svn: 3412
This commit is contained in:
Chris Lattner 2002-08-20 19:35:11 +00:00
parent a2d5b4d68c
commit 325398c6a4
1 changed files with 11 additions and 11 deletions

View File

@ -118,7 +118,16 @@ static Value *RemapOperand(const Value *In, map<const Value*, Value*> &LocalMap,
Value *V = RemapOperand(CPR->getValue(), LocalMap, GlobalMap); Value *V = RemapOperand(CPR->getValue(), LocalMap, GlobalMap);
Result = ConstantPointerRef::get(cast<GlobalValue>(V)); Result = ConstantPointerRef::get(cast<GlobalValue>(V));
} else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) { } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
if (CE->getNumOperands() == 1) { if (CE->getOpcode() == Instruction::GetElementPtr) {
Value *Ptr = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
std::vector<Constant*> Indices;
Indices.reserve(CE->getNumOperands()-1);
for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
Indices.push_back(cast<Constant>(RemapOperand(CE->getOperand(i),
LocalMap, GlobalMap)));
Result = ConstantExpr::getGetElementPtr(cast<Constant>(Ptr), Indices);
} else if (CE->getNumOperands() == 1) {
// Cast instruction // Cast instruction
assert(CE->getOpcode() == Instruction::Cast); assert(CE->getOpcode() == Instruction::Cast);
Value *V = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap); Value *V = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
@ -131,16 +140,7 @@ static Value *RemapOperand(const Value *In, map<const Value*, Value*> &LocalMap,
Result = ConstantExpr::get(CE->getOpcode(), cast<Constant>(V1), Result = ConstantExpr::get(CE->getOpcode(), cast<Constant>(V1),
cast<Constant>(V2)); cast<Constant>(V2));
} else { } else {
// GetElementPtr Expression assert(0 && "Unknown constant expr type!");
assert(CE->getOpcode() == Instruction::GetElementPtr);
Value *Ptr = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
std::vector<Constant*> Indices;
Indices.reserve(CE->getNumOperands()-1);
for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
Indices.push_back(cast<Constant>(RemapOperand(CE->getOperand(i),
LocalMap, GlobalMap)));
Result = ConstantExpr::getGetElementPtr(cast<Constant>(Ptr), Indices);
} }
} else { } else {