From 9242ae047c4c061c0501d626e5e372f11b5877bc Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 8 Jan 2010 19:28:47 +0000 Subject: mplement a theoretical fixme. llvm-svn: 93024 --- llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp index a1d6d29ecd4..be18311846c 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp @@ -476,9 +476,13 @@ static unsigned CanEvaluateSExtd(Value *V, const Type *Ty, /// insert the code to evaluate the expression. Value *InstCombiner::EvaluateInDifferentType(Value *V, const Type *Ty, bool isSigned) { - // FIXME: use libanalysis constant folding. - if (Constant *C = dyn_cast(V)) - return ConstantExpr::getIntegerCast(C, Ty, isSigned /*Sext or ZExt*/); + if (Constant *C = dyn_cast(V)) { + C = ConstantExpr::getIntegerCast(C, Ty, isSigned /*Sext or ZExt*/); + // If we got a constantexpr back, try to simplify it with TD info. + if (ConstantExpr *CE = dyn_cast(C)) + C = ConstantFoldConstantExpression(CE, TD); + return C; + } // Otherwise, it must be an instruction. Instruction *I = cast(V); -- cgit v1.2.3