[PATCH] D38343: [X86] Provide the LSDA pointer with RIP relative addressing if necessary

Saleem Abdulrasool via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 1 14:13:23 PDT 2017


compnerd added inline comments.


================
Comment at: lib/Target/X86/X86ISelLowering.cpp:20108
                                             Twine(MF.getFunctionNumber()));
-    return DAG.getNode(X86ISD::Wrapper, dl, VT, DAG.getMCSymbol(S, PtrVT));
+    // getGlobalWrapperKind isn't usable here.
+    return DAG.getNode(Subtarget.isPICStyleRIPRel() ? X86ISD::WrapperRIP
----------------
mstorsjo wrote:
> compnerd wrote:
> > Im not particularly fond of this comment.  Adding a comment that `getGlobalWrapperKind` is not suitable here is fine.  But please explain //why// it is unsuitable.  Also, it took me a moment to figure out that this is not actually dependent on the PIC mode of compilation, but rather to ensure that the generated code is PIC.  A comment to that effect would be nice.
> So, something like this?
> ```
> // getGlobalWrapperKind can't be used here since we're in a static function and that requires an instance of X86TargetLowering.
> // If we can use RIPRel addressing, prefer that since it doesn't cost anything extra, even if the build isn't required to be PIC.
> ```
Well, just because this function is static doesnt mean that we couldnt pass it a TLI.  It does technically cost a bit in code size.  I was thinking something like:

    // We use RIP relative addressing to generate PIC code as that is compatible across PIC and non-PIC code.  We would need to wire
    // the X86TargetLowering to this function to use getGlobalWrapperKind.

Actually, how difficult would that be anyways?


https://reviews.llvm.org/D38343





More information about the llvm-commits mailing list