implement Transforms/InstCombine/malloc2.ll and PR1313
authorChris Lattner <sabre@nondot.org>
Fri, 6 Apr 2007 18:57:34 +0000 (18:57 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 6 Apr 2007 18:57:34 +0000 (18:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35700 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index d9b15de1afbcfd0f7523c225820a42174895df72..2167144fc181fe64c6f47758e47162e0cca5f620 100644 (file)
@@ -4744,7 +4744,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
         if (Instruction *NV = FoldOpIntoPhi(I))
           return NV;
         break;
-      case Instruction::Select:
+      case Instruction::Select: {
         // If either operand of the select is a constant, we can fold the
         // comparison into the select arms, which will cause one to be
         // constant folded and the select turned into a bitwise or.
@@ -4771,6 +4771,16 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
           return new SelectInst(LHSI->getOperand(0), Op1, Op2);
         break;
       }
+      case Instruction::Malloc:
+        // If we have (malloc != null), and if the malloc has a single use, we
+        // can assume it is successful and remove the malloc.
+        if (LHSI->hasOneUse() && isa<ConstantPointerNull>(RHSC)) {
+          AddToWorkList(LHSI);
+          return ReplaceInstUsesWith(I, ConstantInt::get(Type::Int1Ty,
+                                                         !isTrueWhenEqual(I)));
+        }
+        break;
+      }
   }
 
   // If we can optimize a 'icmp GEP, P' or 'icmp P, GEP', do so now.