delete some obviously dead vector operations, which deletes a few thousand
authorChris Lattner <sabre@nondot.org>
Fri, 15 Jun 2007 05:26:55 +0000 (05:26 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 15 Jun 2007 05:26:55 +0000 (05:26 +0000)
operations from Duraids example.

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

lib/Transforms/Scalar/InstructionCombining.cpp

index 01fcfabeba462f31a11d02929f24ac35c74a2136..bab6616deda58d775af603dfac58b6f1ca40aeed 100644 (file)
@@ -3245,8 +3245,10 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) {
       return &I;
   } else {
     if (ConstantVector *CP = dyn_cast<ConstantVector>(Op1)) {
-      if (CP->isAllOnesValue())
+      if (CP->isAllOnesValue())            // X & <-1,-1> -> X
         return ReplaceInstUsesWith(I, I.getOperand(0));
+    } else if (isa<ConstantAggregateZero>(Op1)) {
+      return ReplaceInstUsesWith(I, Op1);  // X & <0,0> -> <0,0>
     }
   }
   
@@ -3714,7 +3716,14 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) {
     if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
                              KnownZero, KnownOne))
       return &I;
+  } else if (isa<ConstantAggregateZero>(Op1)) {
+    return ReplaceInstUsesWith(I, Op0);  // X | <0,0> -> X
+  } else if (ConstantVector *CP = dyn_cast<ConstantVector>(Op1)) {
+    if (CP->isAllOnesValue())            // X | <-1,-1> -> <-1,-1>
+      return ReplaceInstUsesWith(I, I.getOperand(1));
   }
+    
+
   
   // or X, -1 == -1
   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {
@@ -4107,6 +4116,8 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) {
     if (SimplifyDemandedBits(&I, APInt::getAllOnesValue(BitWidth),
                              KnownZero, KnownOne))
       return &I;
+  } else if (isa<ConstantAggregateZero>(Op1)) {
+    return ReplaceInstUsesWith(I, Op0);  // X ^ <0,0> -> X
   }
 
   if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) {