echristo added inline comments. ================ Comment at: lib/CodeGen/CodeGenModule.cpp:2758 @@ +2757,3 @@ + GA->setIFunc(true); + GA->setLinkage(llvm::GlobalValue::LinkOnceAnyLinkage); + } ---------------- rjmccall wrote: > DmitryPolukhin wrote: > > rjmccall wrote: > > > Can you explain the purpose of this line? > > I need it don't allow optimization that use resolver function directly > > instead of alias. I could patch checks or I can make special linkage in > > LLVM for ifunc. > Okay, this ties into the previous comment. The problem I have with ifuncs > just being represented as global aliases with a special flag set is that now > every LLVM analysis that sees a global alias has to check the flag before it > can correctly interpret it. It doesn't promote maintainable, > conservatively-correct code. You're working around that by setting a > particular kind of linkage, but that's just going to cause other problems. > > A much better fix is to make a new kind of llvm::GlobalValue that represents > a dynamically resolved global. This is a lot less work than you probably > think it is — there are very few exhaustive switches over all value kinds in > LLVM, and frankly most of those are places you need to be updating for ifuncs > anyway. It might make sense for this to share a common base class with > llvm::GlobalAlias, but it shouldn't be a *subclass* of llvm::GlobalAlias. FWIW I completely agree with this. :)
http://reviews.llvm.org/D15524 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits