summaryrefslogtreecommitdiff
path: root/lib/Analysis/ConstantFolding.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-01-27 22:42:48 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-01-27 22:42:48 +0000
commit41cedd740d3cd66e12cb0f0a4a08f3365ca90df8 (patch)
tree3196ade83f57b35eabfefad08f87828424c41f34 /lib/Analysis/ConstantFolding.cpp
parent907cc8f38df212a87a6028682d91df01ba923f4f (diff)
downloadllvm-41cedd740d3cd66e12cb0f0a4a08f3365ca90df8.tar.gz
llvm-41cedd740d3cd66e12cb0f0a4a08f3365ca90df8.tar.bz2
llvm-41cedd740d3cd66e12cb0f0a4a08f3365ca90df8.tar.xz
Revert r149110 and add a testcase that was crashing since that revision.
Unfortunately I also had to disable constant-pool-sharing.ll the code it tests has been updated to use the IL logic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149148 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ConstantFolding.cpp')
-rw-r--r--lib/Analysis/ConstantFolding.cpp38
1 files changed, 0 insertions, 38 deletions
diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp
index 6fbb1fe94d..fe28926f1b 100644
--- a/lib/Analysis/ConstantFolding.cpp
+++ b/lib/Analysis/ConstantFolding.cpp
@@ -52,44 +52,6 @@ static Constant *FoldBitCast(Constant *C, Type *DestTy,
if (C->isAllOnesValue() && !DestTy->isX86_MMXTy())
return Constant::getAllOnesValue(DestTy);
- // Handle a vector->integer cast.
- if (IntegerType *IT = dyn_cast<IntegerType>(DestTy)) {
- // FIXME: Remove ConstantVector support.
- if ((!isa<ConstantDataVector>(C) && !isa<ConstantVector>(C)) ||
- // TODO: Handle big endian someday.
- !TD.isLittleEndian())
- return ConstantExpr::getBitCast(C, DestTy);
-
- unsigned NumSrcElts = C->getType()->getVectorNumElements();
-
- // If the vector is a vector of floating point, convert it to vector of int
- // to simplify things.
- if (C->getType()->getVectorElementType()->isFloatingPointTy()) {
- unsigned FPWidth =
- C->getType()->getVectorElementType()->getPrimitiveSizeInBits();
- Type *SrcIVTy =
- VectorType::get(IntegerType::get(C->getContext(), FPWidth), NumSrcElts);
- // Ask VMCore to do the conversion now that #elts line up.
- C = ConstantExpr::getBitCast(C, SrcIVTy);
- }
-
- // Now that we know that the input value is a vector of integers, just shift
- // and insert them into our result.
- unsigned BitShift =
- TD.getTypeAllocSizeInBits(C->getType()->getVectorElementType());
- APInt Result(IT->getBitWidth(), 0);
- for (unsigned i = 0; i != NumSrcElts; ++i) {
- // FIXME: Rework when we have ConstantDataVector.
- ConstantInt *Elt=dyn_cast_or_null<ConstantInt>(C->getAggregateElement(i));
- if (Elt == 0) // Elt must be a constant expr or something.
- return ConstantExpr::getBitCast(C, DestTy);
-
- Result |= Elt->getValue().zext(IT->getBitWidth()) << i*BitShift;
- }
-
- return ConstantInt::get(IT, Result);
- }
-
// The code below only handles casts to vectors currently.
VectorType *DestVTy = dyn_cast<VectorType>(DestTy);
if (DestVTy == 0)