* Finegrainify namespacification
authorChris Lattner <sabre@nondot.org>
Sun, 7 Dec 2003 01:24:23 +0000 (01:24 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 7 Dec 2003 01:24:23 +0000 (01:24 +0000)
* Transform: free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X

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

lib/Transforms/Scalar/InstructionCombining.cpp

index db178b3d1fdbc808ba95453858ccecbe3925c9c2..80ae224f5d9729f5571575a9d9d090d74da7376b 100644 (file)
@@ -48,8 +48,7 @@
 #include "llvm/Support/CallSite.h"
 #include "Support/Statistic.h"
 #include <algorithm>
-
-namespace llvm {
+using namespace llvm;
 
 namespace {
   Statistic<> NumCombined ("instcombine", "Number of insts combined");
@@ -104,6 +103,7 @@ namespace {
     Instruction *visitPHINode(PHINode &PN);
     Instruction *visitGetElementPtrInst(GetElementPtrInst &GEP);
     Instruction *visitAllocationInst(AllocationInst &AI);
+    Instruction *visitFreeInst(FreeInst &FI);
     Instruction *visitLoadInst(LoadInst &LI);
     Instruction *visitBranchInst(BranchInst &BI);
 
@@ -2044,6 +2044,20 @@ Instruction *InstCombiner::visitAllocationInst(AllocationInst &AI) {
   return 0;
 }
 
+Instruction *InstCombiner::visitFreeInst(FreeInst &FI) {
+  Value *Op = FI.getOperand(0);
+
+  // Change free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X
+  if (CastInst *CI = dyn_cast<CastInst>(Op))
+    if (isa<PointerType>(CI->getOperand(0)->getType())) {
+      FI.setOperand(0, CI->getOperand(0));
+      return &FI;
+    }
+
+  return 0;
+}
+
+
 /// GetGEPGlobalInitializer - Given a constant, and a getelementptr
 /// constantexpr, return the constant value being addressed by the constant
 /// expression, or null if something is funny.
@@ -2196,8 +2210,7 @@ bool InstCombiner::runOnFunction(Function &F) {
   return Changed;
 }
 
-Pass *createInstructionCombiningPass() {
+Pass *llvm::createInstructionCombiningPass() {
   return new InstCombiner();
 }
 
-} // End llvm namespace