From c8b3fce5c5f0785b05df9cf93772a67f56bc3640 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 8 Jan 2010 19:28:47 +0000 Subject: [PATCH] mplement a theoretical fixme. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93024 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/InstCombine/InstCombineCasts.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/InstCombine/InstCombineCasts.cpp b/lib/Transforms/InstCombine/InstCombineCasts.cpp index a1d6d29ecd4..be18311846c 100644 --- a/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/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);