[llvm-commits] CVS: llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp

Reid Spencer reid at x10sys.com
Tue Apr 26 17:05:56 PDT 2005



Changes in directory llvm/lib/Transforms/IPO:

SimplifyLibCalls.cpp updated: 1.14 -> 1.15
---
Log message:

In debug builds, make a statistic for each kind of call optimization. This
helps track down what gets triggered in the pass so its easier to identify
good test cases.


---
Diffs of the changes:  (+35 -21)

 SimplifyLibCalls.cpp |   56 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 35 insertions(+), 21 deletions(-)


Index: llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp
diff -u llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.14 llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.15
--- llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.14	Tue Apr 26 18:07:08 2005
+++ llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp	Tue Apr 26 19:05:45 2005
@@ -96,8 +96,16 @@
     ) = 0;
 
     const char * getFunctionName() const { return func_name; }
+
+#ifndef NDEBUG
+    void activate() { ++activations; }
+#endif
+
   private:
     const char* func_name;
+#ifndef NDEBUG
+    Statistic<> activations; 
+#endif
   };
 
   /// @brief The list of optimizations deriving from CallOptimizer
@@ -106,6 +114,9 @@
 
   CallOptimizer::CallOptimizer(const char* fname)
     : func_name(fname)
+#ifndef NDEBUG
+    , activations(fname,"Number of calls simplified") 
+#endif
   {
     // Register this call optimizer
     optlist[func_name] = this;
@@ -149,30 +160,33 @@
       // because they live in a runtime library somewhere and were (probably) 
       // not compiled by LLVM.  So, we only act on external functions that have 
       // external linkage and non-empty uses.
-      if (FI->isExternal() && FI->hasExternalLinkage() && !FI->use_empty())
+      if (!FI->isExternal() || !FI->hasExternalLinkage() || FI->use_empty())
+        continue;
+
+      // Get the optimization class that pertains to this function
+      CallOptimizer* CO = optlist[FI->getName().c_str()];
+      if (!CO)
+        continue;
+
+      // Make sure the called function is suitable for the optimization
+      if (!CO->ValidateCalledFunction(FI,TD))
+        continue;
+
+      // Loop over each of the uses of the function
+      for (Value::use_iterator UI = FI->use_begin(), UE = FI->use_end(); 
+           UI != UE ; )
       {
-        // Get the optimization class that pertains to this function
-        if (CallOptimizer* CO = optlist[FI->getName().c_str()] )
+        // If the use of the function is a call instruction
+        if (CallInst* CI = dyn_cast<CallInst>(*UI++))
         {
-          // Make sure the called function is suitable for the optimization
-          if (CO->ValidateCalledFunction(FI,TD))
+          // Do the optimization on the CallOptimizer.
+          if (CO->OptimizeCall(CI,TD))
           {
-            // Loop over each of the uses of the function
-            for (Value::use_iterator UI = FI->use_begin(), UE = FI->use_end(); 
-                 UI != UE ; )
-            {
-              // If the use of the function is a call instruction
-              if (CallInst* CI = dyn_cast<CallInst>(*UI++))
-              {
-                // Do the optimization on the CallOptimizer.
-                if (CO->OptimizeCall(CI,TD))
-                {
-                  ++SimplifiedLibCalls;
-                  found_optimization = result = true;
-                  DEBUG(std::cerr << "simplify-libcall: " << CO->getFunctionName() << "\n");
-                }
-              }
-            }
+            ++SimplifiedLibCalls;
+            found_optimization = result = true;
+#ifndef NDEBUG
+            CO->activate();
+#endif
           }
         }
       }






More information about the llvm-commits mailing list