From ad4a70ad3e25be09cc31187188db122e774ecdcf Mon Sep 17 00:00:00 2001 From: Nadav Rotem Date: Sat, 20 Aug 2011 14:02:29 +0000 Subject: Add constant folding support for bitcasts of splat vectors to integers. llvm-svn: 138206 --- llvm/lib/Analysis/ConstantFolding.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Analysis/ConstantFolding.cpp') diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index d74d7e806e6..7a8c703040c 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -46,7 +46,16 @@ using namespace llvm; static Constant *FoldBitCast(Constant *C, Type *DestTy, const TargetData &TD) { - // This only handles casts to vectors currently. + ConstantVector *CV = dyn_cast(C); + IntegerType *IntVTy = dyn_cast(DestTy); + // When casting vectors to scalar integers, catch the + // obvious splat cases. + if (IntVTy && CV) { + if (CV->isNullValue()) return ConstantInt::getNullValue(IntVTy); + if (CV->isAllOnesValue()) return ConstantInt::getAllOnesValue(IntVTy); + } + + // The code below only handles casts to vectors currently. VectorType *DestVTy = dyn_cast(DestTy); if (DestVTy == 0) return ConstantExpr::getBitCast(C, DestTy); @@ -59,7 +68,6 @@ static Constant *FoldBitCast(Constant *C, Type *DestTy, } // If this is a bitcast from constant vector -> vector, fold it. - ConstantVector *CV = dyn_cast(C); if (CV == 0) return ConstantExpr::getBitCast(C, DestTy); -- cgit v1.2.3