These should be rewritten to fold without using the 'Rules' mechanism, but
authorChris Lattner <sabre@nondot.org>
Fri, 1 Dec 2006 19:50:54 +0000 (19:50 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 1 Dec 2006 19:50:54 +0000 (19:50 +0000)
until this happens at least make sext from bool and sitofp from bool do the
right thing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32087 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/ConstantFold.cpp

index 48d84e5ac542053bf2ca16f8c9af3eb201a3fae6..49bdca2c5e7ad32c5fd25d55135731773a6d9e75 100644 (file)
@@ -890,6 +890,9 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
     if (isa<ConstantInt>(V))
       V = ConstantInt::get(SrcTy->getSignedVersion(), 
                            cast<ConstantIntegral>(V)->getSExtValue());
+    else if (const ConstantBool *CB = dyn_cast<ConstantBool>(V))
+      V = ConstantInt::get(Type::SByteTy, CB->getValue() ? -1 : 0);
+      
     break;
   case Instruction::Trunc:
     // We just handle trunc directly here.  The code below doesn't work for