================
@@ -188,12 +220,32 @@ void ModuleSymbolTable::CollectAsmSymbols(
 }
 
 void ModuleSymbolTable::CollectAsmSymvers(
-    const Module &M, function_ref<void(StringRef, StringRef)> AsmSymver) {
-  initializeRecordStreamer(M, [&](RecordStreamer &Streamer) {
-    for (auto &KV : Streamer.symverAliases())
-      for (auto &Alias : KV.second)
-        AsmSymver(KV.first->getName(), Alias);
-  });
+    const Module &M, function_ref<void(StringRef, StringRef)> AsmSymver,
+    function_ref<void(const DiagnosticInfo &DI)> DiagHandler, StringRef CPU,
+    StringRef Features) {
+
+  MDTuple *SymversMD =
+      dyn_cast_if_present<MDTuple>(M.getModuleFlag("global-asm-symvers"));
+
+  if (SymversMD) {
+    for (const Metadata *MD : SymversMD->operands()) {
+      const MDTuple *SymverMD = cast<MDTuple>(MD);
+      StringRef Name = cast<MDString>(SymverMD->getOperand(0))->getString();
+      for (unsigned i = 1; i < SymverMD->getNumOperands(); ++i) {
----------------
ilovepi wrote:

```suggestion
      for (size_t i = 1, End = SymverMD->getNumOperands(); i < End; ++i) {
```
you can cache the size, since the optimizer doesn't always figure that bit out, 
and you're not mutating the MD.

https://github.com/llvm/llvm-project/pull/174995
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to