Fix problems in the PartSet lowering having to do with incorrect bit width.
authorReid Spencer <rspencer@reidspencer.com>
Mon, 16 Apr 2007 22:21:14 +0000 (22:21 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 16 Apr 2007 22:21:14 +0000 (22:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36180 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/IntrinsicLowering.cpp

index 501c12c6fe42b5f5cda6f76a81c2be5d1270589e..72c0f3b084aa3a8df5fe2bdd174f9c6061586aee 100644 (file)
@@ -538,8 +538,10 @@ static Instruction *LowerPartSet(CallInst *CI) {
     new BranchInst(large, small, is_large, entry);
 
     // Block "large"
-    BinaryOperator* MaskBits = 
+    Instruction* MaskBits = 
       BinaryOperator::createSub(RepBitWidth, NumBits, "", large);
+    MaskBits = CastInst::createIntegerCast(MaskBits, RepMask->getType(), 
+                                           false, "", large);
     BinaryOperator* Mask1 = 
       BinaryOperator::createLShr(RepMask, MaskBits, "", large);
     BinaryOperator* Rep2 = BinaryOperator::createAnd(Mask1, Rep, "", large);
@@ -575,10 +577,10 @@ static Instruction *LowerPartSet(CallInst *CI) {
     Value* t8    = BinaryOperator::createXor(t7, ValMask, "", reverse);
     Value* t9    = BinaryOperator::createAnd(t8, Val, "", reverse);
     Value* t10   = BinaryOperator::createShl(Rep4, Lo, "", reverse);
-    if (RepBits < ValBits)
+    if (32 < ValBits)
       RepBitWidth = 
         cast<ConstantInt>(ConstantExpr::getZExt(RepBitWidth, ValTy));
-    else if (RepBits > ValBits)
+    else if (32 > ValBits)
       RepBitWidth = 
         cast<ConstantInt>(ConstantExpr::getTrunc(RepBitWidth, ValTy));
     Value* t11   = BinaryOperator::createSub(RepBitWidth, Hi, "", reverse);