summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-12-12 05:05:00 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-12-12 05:05:00 +0000
commit4da49122f3f3c8da68a52723d846b88c72166a68 (patch)
treea7cb69a70439f795df63c88c5d56200e3ae17be6 /lib
parenta30fc5ed0430081f6495b33e027b7655ca2a66e5 (diff)
downloadllvm-4da49122f3f3c8da68a52723d846b88c72166a68.tar.gz
llvm-4da49122f3f3c8da68a52723d846b88c72166a68.tar.bz2
llvm-4da49122f3f3c8da68a52723d846b88c72166a68.tar.xz
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
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/ScalarEvolution.cpp12
-rw-r--r--lib/Linker/LinkModules.cpp12
-rw-r--r--lib/Target/CBackend/CBackend.cpp4
-rw-r--r--lib/Target/CBackend/Writer.cpp4
-rw-r--r--lib/Transforms/IPO/FunctionResolution.cpp4
-rw-r--r--lib/Transforms/Scalar/LoopStrengthReduce.cpp9
-rw-r--r--lib/Transforms/Scalar/SCCP.cpp3
-rw-r--r--lib/Transforms/Utils/LowerAllocations.cpp5
-rw-r--r--lib/Transforms/Utils/LowerInvoke.cpp8
9 files changed, 39 insertions, 22 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index 6d449d0d92..703a1c46e9 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<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);
}
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 8f8aec1abd..433dfa682d 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 96fc53948b..46c8bf1bd7 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 96fc53948b..46c8bf1bd7 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 f6e8cf5913..6f1eea0276 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -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.
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
index 66b595fd7f..c132aaef92 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<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;
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 5d928c145d..4f0607ef29 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 75a4c704c9..40a4dc0d30 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<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);
diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp
index dfeb8349f4..4fbd43c6f4 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<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();
}