Remove redundant getAnalysis<> calls in GlobalOpt. Add a few Itanium ABI calls
authorNick Lewycky <nicholas@mxc.ca>
Sun, 12 Feb 2012 02:15:20 +0000 (02:15 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sun, 12 Feb 2012 02:15:20 +0000 (02:15 +0000)
to TargetLibraryInfo and use one of them in GlobalOpt.

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

include/llvm/Target/TargetLibraryInfo.h
lib/Target/TargetLibraryInfo.cpp
lib/Transforms/IPO/GlobalOpt.cpp

index 3fe22b94a04e46f7b4928de239241e9d8673f96c..70e26bf3c5a4c474996aa81d217ad576c7095090 100644 (file)
@@ -199,6 +199,15 @@ namespace llvm {
       truncf,
       /// long double truncl(long double x);
       truncl,
+      /// int __cxa_atexit(void (*f)(void *), void *p, void *d);
+      cxa_atexit,
+      /// void __cxa_guard_abort(guard_t *guard);
+      /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi.
+      cxa_guard_abort,      
+      /// int __cxa_guard_acquire(guard_t *guard);
+      cxa_guard_acquire,
+      /// void __cxa_guard_release(guard_t *guard);
+      cxa_guard_release,
 
       NumLibFuncs
     };
index 2119c4ee3a2ae5aa3c391b04712735c8882d8d30..269958fd7f17bfd3e092aac6a42df297b03cf54f 100644 (file)
@@ -113,7 +113,11 @@ const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
     "tanhf",
     "trunc",
     "truncf",
-    "truncl"
+    "truncl",
+    "__cxa_atexit",
+    "__cxa_guard_abort",
+    "__cxa_guard_acquire",
+    "__cxa_guard_release"
   };
 
 /// initialize - Initialize the set of available library functions based on the
index 175d0d046f7ee373dee8a0c0d080a727b40975d5..60a8b1cbb14a6876e6edea045306c5bd7646afc1 100644 (file)
@@ -1938,8 +1938,6 @@ bool GlobalOpt::OptimizeGlobalVars(Module &M) {
     // Simplify the initializer.
     if (GV->hasInitializer())
       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GV->getInitializer())) {
-        TargetData *TD = getAnalysisIfAvailable<TargetData>();
-        TargetLibraryInfo *TLI = &getAnalysis<TargetLibraryInfo>();
         Constant *New = ConstantFoldConstantExpression(CE, TD, TLI);
         if (New && New != CE)
           GV->setInitializer(New);
@@ -2645,9 +2643,6 @@ bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) {
   bool MadeChange = false;
   if (Ctors.empty()) return false;
 
-  const TargetData *TD = getAnalysisIfAvailable<TargetData>();
-  const TargetLibraryInfo *TLI = &getAnalysis<TargetLibraryInfo>();
-
   // Loop over global ctors, optimizing them when we can.
   for (unsigned i = 0; i != Ctors.size(); ++i) {
     Function *F = Ctors[i];
@@ -2737,12 +2732,15 @@ bool GlobalOpt::OptimizeGlobalAliases(Module &M) {
   return Changed;
 }
 
-static Function *FindCXAAtExit(Module &M) {
-  Function *Fn = M.getFunction("__cxa_atexit");
+static Function *FindCXAAtExit(Module &M, TargetLibraryInfo *TLI) {
+  if (!TLI->has(LibFunc::cxa_atexit))
+    return false;
+
+  Function *Fn = M.getFunction(TLI->getName(LibFunc::cxa_atexit));
   
   if (!Fn)
     return 0;
-  
+
   FunctionType *FTy = Fn->getFunctionType();
   
   // Checking that the function has the right return type, the right number of 
@@ -2854,12 +2852,12 @@ bool GlobalOpt::runOnModule(Module &M) {
   bool Changed = false;
 
   TD = getAnalysisIfAvailable<TargetData>();
-  TLI = getAnalysisIfAvailable<TargetLibraryInfo>();
+  TLI = &getAnalysis<TargetLibraryInfo>();
 
   // Try to find the llvm.globalctors list.
   GlobalVariable *GlobalCtors = FindGlobalCtors(M);
 
-  Function *CXAAtExitFn = FindCXAAtExit(M);
+  Function *CXAAtExitFn = FindCXAAtExit(M, TLI);
 
   bool LocalChange = true;
   while (LocalChange) {