mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Change inferred getCast into specific getCast. Passes all tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a30fc5ed04
commit
4da49122f3
@ -1566,7 +1566,9 @@ SCEVHandle ScalarEvolutionsImpl::ComputeIterationCount(const Loop *L) {
|
||||
// comparison.
|
||||
ConstantInt *CompVal = RHSC->getValue();
|
||||
const Type *RealTy = ExitCond->getOperand(0)->getType();
|
||||
CompVal = dyn_cast<ConstantInt>(ConstantExpr::getCast(CompVal, RealTy));
|
||||
CompVal = dyn_cast<ConstantInt>(
|
||||
ConstantExpr::getIntegerCast(CompVal, RealTy,
|
||||
CompVal->getType()->isSigned()));
|
||||
if (CompVal) {
|
||||
// Form the constant range.
|
||||
ConstantRange CompRange(Cond, CompVal);
|
||||
@ -1575,8 +1577,12 @@ SCEVHandle ScalarEvolutionsImpl::ComputeIterationCount(const Loop *L) {
|
||||
// range.
|
||||
if (CompRange.getLower()->getType()->isSigned()) {
|
||||
const Type *NewTy = RHSC->getValue()->getType();
|
||||
Constant *NewL = ConstantExpr::getCast(CompRange.getLower(), NewTy);
|
||||
Constant *NewU = ConstantExpr::getCast(CompRange.getUpper(), NewTy);
|
||||
Constant *NewL =
|
||||
ConstantExpr::getIntegerCast(CompRange.getLower(), NewTy,
|
||||
CompRange.getLower()->getType()->isSigned());
|
||||
Constant *NewU =
|
||||
ConstantExpr::getIntegerCast(CompRange.getUpper(), NewTy,
|
||||
CompRange.getUpper()->getType()->isSigned());
|
||||
CompRange = ConstantRange(NewL, NewU);
|
||||
}
|
||||
|
||||
|
@ -508,7 +508,8 @@ static bool LinkGlobals(Module *Dest, Module *Src,
|
||||
DGV->isConstant(), DGV->getLinkage());
|
||||
NewDGV->setAlignment(DGV->getAlignment());
|
||||
Dest->getGlobalList().insert(DGV, NewDGV);
|
||||
DGV->replaceAllUsesWith(ConstantExpr::getCast(NewDGV, DGV->getType()));
|
||||
DGV->replaceAllUsesWith(
|
||||
ConstantExpr::getBitCast(NewDGV, DGV->getType()));
|
||||
DGV->eraseFromParent();
|
||||
NewDGV->setName(SGV->getName());
|
||||
DGV = NewDGV;
|
||||
@ -529,9 +530,8 @@ static bool LinkGlobals(Module *Dest, Module *Src,
|
||||
SGV->setInitializer(0);
|
||||
}
|
||||
|
||||
ValueMap.insert(std::make_pair(SGV,
|
||||
ConstantExpr::getCast(DGV,
|
||||
SGV->getType())));
|
||||
ValueMap.insert(
|
||||
std::make_pair(SGV, ConstantExpr::getBitCast(DGV, SGV->getType())));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -807,8 +807,8 @@ static bool LinkAppendingVars(Module *M,
|
||||
|
||||
// FIXME: This should rewrite simple/straight-forward uses such as
|
||||
// getelementptr instructions to not use the Cast!
|
||||
G1->replaceAllUsesWith(ConstantExpr::getCast(NG, G1->getType()));
|
||||
G2->replaceAllUsesWith(ConstantExpr::getCast(NG, G2->getType()));
|
||||
G1->replaceAllUsesWith(ConstantExpr::getBitCast(NG, G1->getType()));
|
||||
G2->replaceAllUsesWith(ConstantExpr::getBitCast(NG, G2->getType()));
|
||||
|
||||
// Remove the two globals from the module now...
|
||||
M->getGlobalList().erase(G1);
|
||||
|
@ -296,7 +296,7 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
if (!X.second) {
|
||||
// Found a conflict, replace this global with the previous one.
|
||||
GlobalValue *OldGV = X.first->second;
|
||||
GV->replaceAllUsesWith(ConstantExpr::getCast(OldGV, GV->getType()));
|
||||
GV->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV, GV->getType()));
|
||||
GV->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
@ -312,7 +312,7 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
if (!X.second) {
|
||||
// Found a conflict, replace this global with the previous one.
|
||||
GlobalValue *OldGV = X.first->second;
|
||||
GV->replaceAllUsesWith(ConstantExpr::getCast(OldGV, GV->getType()));
|
||||
GV->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV, GV->getType()));
|
||||
GV->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
if (!X.second) {
|
||||
// Found a conflict, replace this global with the previous one.
|
||||
GlobalValue *OldGV = X.first->second;
|
||||
GV->replaceAllUsesWith(ConstantExpr::getCast(OldGV, GV->getType()));
|
||||
GV->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV, GV->getType()));
|
||||
GV->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
@ -312,7 +312,7 @@ bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module &M) {
|
||||
if (!X.second) {
|
||||
// Found a conflict, replace this global with the previous one.
|
||||
GlobalValue *OldGV = X.first->second;
|
||||
GV->replaceAllUsesWith(ConstantExpr::getCast(OldGV, GV->getType()));
|
||||
GV->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV, GV->getType()));
|
||||
GV->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
|
||||
if (!Old->use_empty()) {
|
||||
Value *Replacement = Concrete;
|
||||
if (Concrete->getType() != Old->getType())
|
||||
Replacement = ConstantExpr::getCast(Concrete, Old->getType());
|
||||
Replacement = ConstantExpr::getBitCast(Concrete, Old->getType());
|
||||
NumResolved += Old->getNumUses();
|
||||
Old->replaceAllUsesWith(Replacement);
|
||||
}
|
||||
@ -122,7 +122,7 @@ static bool ResolveGlobalVariables(Module &M,
|
||||
|
||||
for (unsigned i = 0; i != Globals.size(); ++i)
|
||||
if (Globals[i] != Concrete) {
|
||||
Constant *Cast = ConstantExpr::getCast(Concrete, Globals[i]->getType());
|
||||
Constant *Cast = ConstantExpr::getBitCast(Concrete,Globals[i]->getType());
|
||||
Globals[i]->replaceAllUsesWith(Cast);
|
||||
|
||||
// Since there are no uses of Old anymore, remove it from the module.
|
||||
|
@ -200,12 +200,17 @@ FunctionPass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {
|
||||
return new LoopStrengthReduce(TLI);
|
||||
}
|
||||
|
||||
/// getCastedVersionOf - Return the specified value casted to uintptr_t.
|
||||
/// getCastedVersionOf - Return the specified value casted to uintptr_t. This
|
||||
/// assumes that the Value* V is of integer or pointer type only.
|
||||
///
|
||||
Value *LoopStrengthReduce::getCastedVersionOf(Value *V) {
|
||||
if (V->getType() == UIntPtrTy) return V;
|
||||
if (Constant *CB = dyn_cast<Constant>(V))
|
||||
return ConstantExpr::getCast(CB, UIntPtrTy);
|
||||
if (CB->getType()->isInteger())
|
||||
return ConstantExpr::getIntegerCast(CB, UIntPtrTy,
|
||||
CB->getType()->isSigned());
|
||||
else
|
||||
return ConstantExpr::getPtrToInt(CB, UIntPtrTy);
|
||||
|
||||
Value *&New = CastedPointers[V];
|
||||
if (New) return New;
|
||||
|
@ -589,7 +589,8 @@ void SCCPSolver::visitCastInst(CastInst &I) {
|
||||
if (VState.isOverdefined()) // Inherit overdefinedness of operand
|
||||
markOverdefined(&I);
|
||||
else if (VState.isConstant()) // Propagate constant value
|
||||
markConstant(&I, ConstantExpr::getCast(VState.getConstant(), I.getType()));
|
||||
markConstant(&I, ConstantExpr::getCast(I.getOpcode(),
|
||||
VState.getConstant(), I.getType()));
|
||||
}
|
||||
|
||||
void SCCPSolver::visitSelectInst(SelectInst &I) {
|
||||
|
@ -122,14 +122,15 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
|
||||
MallocArg = ConstantInt::get(Type::ULongTy, TD.getTypeSize(AllocTy));
|
||||
else
|
||||
MallocArg = ConstantExpr::getSizeOf(AllocTy);
|
||||
MallocArg = ConstantExpr::getCast(cast<Constant>(MallocArg), IntPtrTy);
|
||||
MallocArg = ConstantExpr::getIntegerCast(cast<Constant>(MallocArg),
|
||||
IntPtrTy, true /*SExt*/);
|
||||
|
||||
if (MI->isArrayAllocation()) {
|
||||
if (isa<ConstantInt>(MallocArg) &&
|
||||
cast<ConstantInt>(MallocArg)->getZExtValue() == 1) {
|
||||
MallocArg = MI->getOperand(0); // Operand * 1 = Operand
|
||||
} else if (Constant *CO = dyn_cast<Constant>(MI->getOperand(0))) {
|
||||
CO = ConstantExpr::getCast(CO, IntPtrTy);
|
||||
CO = ConstantExpr::getIntegerCast(CO, IntPtrTy, true /*SExt*/);
|
||||
MallocArg = ConstantExpr::getMul(CO, cast<Constant>(MallocArg));
|
||||
} else {
|
||||
Value *Scale = MI->getOperand(0);
|
||||
|
@ -215,8 +215,12 @@ void LowerInvoke::writeAbortMessage(Instruction *IB) {
|
||||
unsigned NumArgs = FT->getNumParams();
|
||||
for (unsigned i = 0; i != 3; ++i)
|
||||
if (i < NumArgs && FT->getParamType(i) != Args[i]->getType())
|
||||
Args[i] = ConstantExpr::getCast(cast<Constant>(Args[i]),
|
||||
FT->getParamType(i));
|
||||
if (Args[i]->getType()->isInteger())
|
||||
Args[i] = ConstantExpr::getIntegerCast(cast<Constant>(Args[i]),
|
||||
FT->getParamType(i), true);
|
||||
else
|
||||
Args[i] = ConstantExpr::getBitCast(cast<Constant>(Args[i]),
|
||||
FT->getParamType(i));
|
||||
|
||||
(new CallInst(WriteFn, Args, "", IB))->setTailCall();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user