Use APInt operation instead of ConstantExpr::getXX.
authorZhou Sheng <zhousheng00@gmail.com>
Fri, 30 Mar 2007 05:45:18 +0000 (05:45 +0000)
committerZhou Sheng <zhousheng00@gmail.com>
Fri, 30 Mar 2007 05:45:18 +0000 (05:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35503 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 94f4cf2c1727d293744344032ce0d3cda1393151..82b3f8cca6f27f31e3b66cae7546763a2bceda73 100644 (file)
@@ -5658,9 +5658,9 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
               BinaryOperator::create(Op0BO->getOpcode(), YS, V1,
                                      Op0BO->getOperand(1)->getName());
             InsertNewInstBefore(X, I);  // (X + (Y << C))
-            Constant *C2 = ConstantInt::getAllOnesValue(X->getType());
-            C2 = ConstantExpr::getShl(C2, Op1);
-            return BinaryOperator::createAnd(X, C2);
+            uint32_t Op1Val = Op1->getZExtValue();
+            return BinaryOperator::createAnd(X, ConstantInt::get(
+                       APInt::getHighBitsSet(TypeBits, TypeBits-Op1Val)));
           }
           
           // Turn (Y + ((X >> C) & CC)) << C  ->  ((X & (CC << C)) + (Y << C))
@@ -5697,9 +5697,9 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
               BinaryOperator::create(Op0BO->getOpcode(), V1, YS,
                                      Op0BO->getOperand(0)->getName());
             InsertNewInstBefore(X, I);  // (X + (Y << C))
-            Constant *C2 = ConstantInt::getAllOnesValue(X->getType());
-            C2 = ConstantExpr::getShl(C2, Op1);
-            return BinaryOperator::createAnd(X, C2);
+            uint32_t Op1Val = Op1->getZExtValue();
+            return BinaryOperator::createAnd(X, ConstantInt::get(
+                       APInt::getHighBitsSet(TypeBits, TypeBits-Op1Val)));
           }
           
           // Turn (((X >> C)&CC) + Y) << C  ->  (X + (Y << C)) & (CC << C)