<div dir="ltr"><div dir="ltr">On Wed, Sep 1, 2021 at 5:49 PM Philip Reames via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <p>All of the above is a really involved way of saving that I think
      you need to change your spelling on the attribute a bit.  I think
      we need to be able to support fairly arbitrary restrictions on the
      relative range, and then leave it up to the code generator which
      option it actually picks.  As a strawman, how about the following
      syntax:</p>
    <p>call void @foo() target-address-relative-bound<a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">(-2147483648</a>,
      <a href="tel:(214)%20748-3647" value="+12147483647" target="_blank">2147483647</a>)</p>
    <p>OR</p>
    <p>declare void @foo() address-absolute-bound(X, X + 100MB)</p>
    <p></p></div></blockquote><div>I agree, this makes sense to me. My bikeshedding suggestion is to store the offsets in log2 form. Something like "target-pc-rel"(32) , "target-pc-rel"(12), "target-pc-abs"(32). This should generalize from X86 to ARM/AArch64 and other ISAs with shorter displacements. Later you could imagine throwing in other relocation variants like "tocrel", "gotrel", or anything you need for your particular architecture.</div></div></div>