diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-01-27 22:42:48 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-01-27 22:42:48 +0000 |
commit | 41cedd740d3cd66e12cb0f0a4a08f3365ca90df8 (patch) | |
tree | 3196ade83f57b35eabfefad08f87828424c41f34 /lib/Analysis/ConstantFolding.cpp | |
parent | 907cc8f38df212a87a6028682d91df01ba923f4f (diff) |
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.cpp | 38 |
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) |