From 4da49122f3f3c8da68a52723d846b88c72166a68 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Tue, 12 Dec 2006 05:05:00 +0000 Subject: [PATCH] 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 --- lib/Analysis/ScalarEvolution.cpp | 12 +++++++++--- lib/Linker/LinkModules.cpp | 12 ++++++------ lib/Target/CBackend/CBackend.cpp | 4 ++-- lib/Target/CBackend/Writer.cpp | 4 ++-- lib/Transforms/IPO/FunctionResolution.cpp | 4 ++-- lib/Transforms/Scalar/LoopStrengthReduce.cpp | 9 +++++++-- lib/Transforms/Scalar/SCCP.cpp | 3 ++- lib/Transforms/Utils/LowerAllocations.cpp | 5 +++-- lib/Transforms/Utils/LowerInvoke.cpp | 8 ++++++-- 9 files changed, 39 insertions(+), 22 deletions(-) diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 6d449d0d92b..703a1c46e9a 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -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(ConstantExpr::getCast(CompVal, RealTy)); + CompVal = dyn_cast( + 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); } diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 8f8aec1abd9..433dfa682d6 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -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); diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 96fc53948b3..46c8bf1bd75 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -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; } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 96fc53948b3..46c8bf1bd75 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -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; } diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp index f6e8cf59134..6f1eea02767 100644 --- a/lib/Transforms/IPO/FunctionResolution.cpp +++ b/lib/Transforms/IPO/FunctionResolution.cpp @@ -103,7 +103,7 @@ static bool ResolveFunctions(Module &M, std::vector &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. diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 66b595fd7f7..c132aaef927 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -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(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; diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp index 5d928c145df..4f0607ef294 100644 --- a/lib/Transforms/Scalar/SCCP.cpp +++ b/lib/Transforms/Scalar/SCCP.cpp @@ -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) { diff --git a/lib/Transforms/Utils/LowerAllocations.cpp b/lib/Transforms/Utils/LowerAllocations.cpp index 75a4c704c91..40a4dc0d305 100644 --- a/lib/Transforms/Utils/LowerAllocations.cpp +++ b/lib/Transforms/Utils/LowerAllocations.cpp @@ -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(MallocArg), IntPtrTy); + MallocArg = ConstantExpr::getIntegerCast(cast(MallocArg), + IntPtrTy, true /*SExt*/); if (MI->isArrayAllocation()) { if (isa(MallocArg) && cast(MallocArg)->getZExtValue() == 1) { MallocArg = MI->getOperand(0); // Operand * 1 = Operand } else if (Constant *CO = dyn_cast(MI->getOperand(0))) { - CO = ConstantExpr::getCast(CO, IntPtrTy); + CO = ConstantExpr::getIntegerCast(CO, IntPtrTy, true /*SExt*/); MallocArg = ConstantExpr::getMul(CO, cast(MallocArg)); } else { Value *Scale = MI->getOperand(0); diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp index dfeb8349f4a..4fbd43c6f4d 100644 --- a/lib/Transforms/Utils/LowerInvoke.cpp +++ b/lib/Transforms/Utils/LowerInvoke.cpp @@ -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(Args[i]), - FT->getParamType(i)); + if (Args[i]->getType()->isInteger()) + Args[i] = ConstantExpr::getIntegerCast(cast(Args[i]), + FT->getParamType(i), true); + else + Args[i] = ConstantExpr::getBitCast(cast(Args[i]), + FT->getParamType(i)); (new CallInst(WriteFn, Args, "", IB))->setTailCall(); }