[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Chris Lattner sabre at nondot.org
Fri Apr 6 11:57:51 PDT 2007



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.731 -> 1.732
---
Log message:

implement Transforms/InstCombine/malloc2.ll and PR1313: http://llvm.org/PR1313 


---
Diffs of the changes:  (+11 -1)

 InstructionCombining.cpp |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletion(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.731 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.732
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.731	Wed Apr  4 14:16:42 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Fri Apr  6 13:57:34 2007
@@ -4744,7 +4744,7 @@
         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 @@
           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.






More information about the llvm-commits mailing list