[llvm] r299018 - Add ifunc support to ModuleSymbolTable.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 29 12:26:26 PDT 2017


Author: rafael
Date: Wed Mar 29 14:26:26 2017
New Revision: 299018

URL: http://llvm.org/viewvc/llvm-project?rev=299018&view=rev
Log:
Add ifunc support to ModuleSymbolTable.

Do that by creating a global_values, which is similar to
global_objects, but also iterates over aliases and ifuncs.

Modified:
    llvm/trunk/include/llvm/IR/Module.h
    llvm/trunk/lib/Object/ModuleSymbolTable.cpp
    llvm/trunk/test/Object/X86/nm-ir.ll

Modified: llvm/trunk/include/llvm/IR/Module.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=299018&r1=299017&r2=299018&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Module.h (original)
+++ llvm/trunk/include/llvm/IR/Module.h Wed Mar 29 14:26:26 2017
@@ -617,6 +617,32 @@ public:
     return global_objects().end();
   }
 
+  typedef concat_iterator<GlobalValue, iterator, global_iterator,
+                          alias_iterator, ifunc_iterator>
+      global_value_iterator;
+  typedef concat_iterator<const GlobalValue, const_iterator,
+                          const_global_iterator, const_alias_iterator,
+                          const_ifunc_iterator>
+      const_global_value_iterator;
+
+  iterator_range<global_value_iterator> global_values() {
+    return concat<GlobalValue>(functions(), globals(), aliases(), ifuncs());
+  }
+  iterator_range<const_global_value_iterator> global_values() const {
+    return concat<const GlobalValue>(functions(), globals(), aliases(),
+                                     ifuncs());
+  }
+
+  global_value_iterator global_value_begin() { return global_values().begin(); }
+  global_value_iterator global_value_end() { return global_values().end(); }
+
+  const_global_value_iterator global_value_begin() const {
+    return global_values().begin();
+  }
+  const_global_value_iterator global_value_end() const {
+    return global_values().end();
+  }
+
   /// @}
   /// @name Named Metadata Iteration
   /// @{

Modified: llvm/trunk/lib/Object/ModuleSymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ModuleSymbolTable.cpp?rev=299018&r1=299017&r2=299018&view=diff
==============================================================================
--- llvm/trunk/lib/Object/ModuleSymbolTable.cpp (original)
+++ llvm/trunk/lib/Object/ModuleSymbolTable.cpp Wed Mar 29 14:26:26 2017
@@ -43,12 +43,8 @@ void ModuleSymbolTable::addModule(Module
   else
     FirstMod = M;
 
-  for (Function &F : *M)
-    SymTab.push_back(&F);
-  for (GlobalVariable &GV : M->globals())
+  for (GlobalValue &GV : M->global_values())
     SymTab.push_back(&GV);
-  for (GlobalAlias &GA : M->aliases())
-    SymTab.push_back(&GA);
 
   CollectAsmSymbols(*M, [this](StringRef Name, BasicSymbolRef::Flags Flags) {
     SymTab.push_back(new (AsmSymbols.Allocate()) AsmSymbol(Name, Flags));

Modified: llvm/trunk/test/Object/X86/nm-ir.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/nm-ir.ll?rev=299018&r1=299017&r2=299018&view=diff
==============================================================================
--- llvm/trunk/test/Object/X86/nm-ir.ll (original)
+++ llvm/trunk/test/Object/X86/nm-ir.ll Wed Mar 29 14:26:26 2017
@@ -12,6 +12,7 @@
 ; CHECK-NEXT: C g3
 ; CHECK-NOT: g4
 ; CHECK-NEXT: T global_asm_sym
+; CHECK-NEXT: D ifunc_f1
 ; CHECK-NEXT: t local_asm_sym
 ; CHECK-NEXT: U undef_asm_sy
 
@@ -36,6 +37,8 @@ define void @f1() {
   ret void
 }
 
+ at ifunc_f1 = ifunc void (), void ()* @f1
+
 define internal void @f2() {
   ret void
 }




More information about the llvm-commits mailing list