[PATCH] D108872: [IR] Refactor GlobalIFunc to inherit from GlobalObject, Remove GlobalIndirectSymbol

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 7 11:25:16 PDT 2021


MaskRay accepted this revision.
MaskRay added a comment.
This revision is now accepted and ready to land.

Thanks. This makes sense. In the inheritance hierachy, `GlobalIndirectSymbol` does nothing useful now and can just be removed.

I'll wait a few days and commit on your behalf.



================
Comment at: llvm/docs/LangRef.rst:910
 
-    @<Name> = [Linkage] [Visibility] ifunc <IFuncTy>, <ResolverTy>* @<Resolver>
+    @<Name> = [Linkage] [PreemptionSpecifier] [Visibility] ifunc <IFuncTy>, <ResolverTy>* @<Resolver>
 
----------------
ibookstein wrote:
> MaskRay wrote:
> > Drop the change?
> > 
> > An ifunc definition can be interposed/preempted.
> The change only documents the existing situation, though, as far as I can tell.
> There are tests which check/specify a [PreemptionSpecifier]; If I remember correctly, if you'd drop the PrintDSOLocation/maybeSetDSOLocal you'd get test failures.
> I searched for "dso_local ifunc" and got some hits from the tests.
If that's the case. The documentation change can be pushed separately to reflect the fact that it is unrelated to this change.

Pushed f66b1b2717e84edef8a9e132638de6d866d01eab


================
Comment at: llvm/lib/AsmParser/LLParser.cpp:1067
-  // The module owns this now
-  GA.release();
 
----------------
Is this unneeded now?


================
Comment at: llvm/lib/Transforms/IPO/LowerTypeTests.cpp:373
+
+    for (auto &GI : M.ifuncs()) {
+      if (auto *F = dyn_cast<Function>(GI.getResolver()->stripPointerCasts()))
----------------
drop braces according to https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108872/new/

https://reviews.llvm.org/D108872



More information about the llvm-commits mailing list