[llvm-commits] [poolalloc] r40545 - /poolalloc/branches/SVA/lib/DSA/Devirt.cpp

Andrew Lenharth alenhar2 at cs.uiuc.edu
Thu Jul 26 13:07:56 PDT 2007


Author: alenhar2
Date: Thu Jul 26 15:07:56 2007
New Revision: 40545

URL: http://llvm.org/viewvc/llvm-project?rev=40545&view=rev
Log:
minor improvements

Modified:
    poolalloc/branches/SVA/lib/DSA/Devirt.cpp

Modified: poolalloc/branches/SVA/lib/DSA/Devirt.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/branches/SVA/lib/DSA/Devirt.cpp?rev=40545&r1=40544&r2=40545&view=diff

==============================================================================
--- poolalloc/branches/SVA/lib/DSA/Devirt.cpp (original)
+++ poolalloc/branches/SVA/lib/DSA/Devirt.cpp Thu Jul 26 15:07:56 2007
@@ -95,11 +95,11 @@
   public:
     virtual bool runOnModule(Module &M) {
       CallTargetFinder* CTF = &getAnalysis<CallTargetFinder>();
-      bool changed = false;
 
       Function* ams = M.getNamedFunction("llva_assert_match_sig");
       
       std::set<Value*> safecalls;
+      std::vector<Instruction*> toDelete;
 
       for (Value::use_iterator ii = ams->use_begin(), ee = ams->use_end();
            ii != ee; ++ii) {
@@ -107,8 +107,9 @@
           std::cerr << "Found safe call site in " 
                     << CI->getParent()->getParent()->getName() << "\n";
           Value* V = CI->getOperand(1);
-          CI->eraseFromParent();
+          toDelete.push_back(CI);
           do {
+            //V->dump();
             safecalls.insert(V);
             if (CastInst* CV = dyn_cast<CastInst>(V))
               V = CV->getOperand(0);
@@ -117,13 +118,11 @@
         }
       }
 
-      std::vector<Instruction*> toDelete;
-
       for(std::set<Value*>::iterator i = safecalls.begin(), e = safecalls.end();
           i != e; ++i) {
-        for (Value::use_iterator ii = (*i)->use_begin(), ie = (*i)->use_end();
-             ii != ie; ++ii) {
-          CallSite cs = CallSite::get(*ii);
+        for (Value::use_iterator uii = (*i)->use_begin(), uie = (*i)->use_end();
+             uii != uie; ++uii) {
+          CallSite cs = CallSite::get(*uii);
           bool isSafeCall = cs.getInstruction() && 
             safecalls.find(cs.getCalledValue()) != safecalls.end();
           if (cs.getInstruction() && !cs.getCalledFunction() &&
@@ -135,9 +134,8 @@
                 Targets.push_back(*ii);
             
             if (Targets.size() > 0) {
-              std::cerr << "Target count: " << Targets.size() << "\n";
+              std::cerr << "Target count: " << Targets.size() << " in " << cs.getInstruction()->getParent()->getParent()->getName() << "\n";
               Function* NF = buildBounce(cs, Targets, M);
-              changed = true;
               if (CallInst* ci = dyn_cast<CallInst>(cs.getInstruction())) {
                 ++CSConvert;
                 std::vector<Value*> Par(ci->op_begin(), ci->op_end());
@@ -155,13 +153,18 @@
                 ci->replaceAllUsesWith(cn);
                 toDelete.push_back(ci);
               }
-            }
+            } else //Target size == 0
+              std::cerr << "Call site found, but no Targets\n";
           }
         }
       }
+
+      bool changed = false;
       for (std::vector<Instruction*>::iterator ii = toDelete.begin(), ee = toDelete.end();
-           ii != ee; ++ii)
+           ii != ee; ++ii) {
+        changed = true;
         (*ii)->eraseFromParent();
+      }
       return changed;
     }
 





More information about the llvm-commits mailing list