<div dir="ltr">Hi Everyone,<div><br></div><div>Introduction:</div><div>On Intel x86_64 architecture you can make a call using either relative 32 bits offset or absolute address. Currently LLVM uses a notion of "code model" that defines which version will be generated. In other words, for small and medium code models 32 bits relative calls are generated, for large code model calls via an absolute address are generated. The thing is that a single lowering scheme is used for the entire compilation unit and there is no way to specialize for a particular call. In managed environments (JIT compilers) we have control where specific functions are loaded in memory and can guarantee that particular call site is within 32-bits offset. We would like to use  relative calls for such functions while the global code model is set to 'large'.</div><div><br></div><div>Proposal:</div><div>Introduce 'fits-32bits' call site attribute. For calls marked with the attribute compiler may assume the target address is within 32-bits offset from the end of the generated call. Program semantics is not changed if it is ignored by the compiler.The attribute overrides the current code model for the specific call site.</div><div><br></div><div>Thanks</div><div>Evgeniy</div><div><br></div><div><div><br></div><div><br></div></div></div>