<div dir="ltr">Hi llvm-dev,<div><br></div><div>In the review of the LLVM-side changes to support XRay (which is now upstream asĀ <a href="http://reviews.llvm.org/rL275367">http://reviews.llvm.org/rL275367</a>) we hit one particular case where we had to hack around the fact that we have no way to force the emission of a short relative jump. It's even come up that jump relaxation can come in and (at least with clang -O0) relax jumps to use the longer version of the jump instruction rather than the shorter version that XRay requires.</div><div><br></div><div>One suggestion that came up was to introduce a new instruction which forces the emission of a short relative jump with an 8-bit operand, which will fail if at assembly time the offset is outside the bounds of the relative jump.</div><div><br></div><div>I mentioned that I liked this idea in the review, but I'm opening it up to the list before actually introducing a new instruction and potentially change some parts of the lower levels of the assembler (MC lowering?) for X86. Some questions before I get stuck in and make this happen:</div><div><br></div><div>- Is the documentation in "Extending LLVM", in particular the SelectionDAG node addition (<a href="http://llvm.org/docs/ExtendingLLVM.html#adding-a-new-selectiondag-node">http://llvm.org/docs/ExtendingLLVM.html#adding-a-new-selectiondag-node</a>) the right guide to follow?</div><div>- Is there an example of how to enforce some assertions when assembling on say the computed operands for a given instruction? For example, if the MachineInstr for the JUMPB instruction was computed as an offset between the current instruction and a label, and the distance was out-of-bounds indicating a bad MachineInstr was used, is there a way to error out? Is this purely implemented in the legalisation of the instruction?</div><div>- I've recently heard about and listened to the talk on the ongoing developments for global instruction selection -- is there something there that I'd need to worry about?</div><div>- If I'd like to make the instruction be recognised in FastISel, will the SelectionDAG changes suffice for the instruction or will I need to be making changes there too? How about in other ISel passes for X86 (if any)?</div><div><br></div><div>Looking forward to your thoughts on this!</div><div><br></div><div>Cheers</div></div>