[BOLT] Fix instrumenting conditional tail calls
We identify instructions to be instrumented based on Offset annotation. BOLT "expands" conditional tail calls into a conditional jump to a basic block with unconditional tail call. Move Offset annotation from former CTC to the tail call. For expanded CTC we keep Offset attached to the original instruction which is converted into a regular conditional jump, while leaving the newly created tail call without an Offset annotation. This leads to attempting the instrumentation of the conditional jump which points to the basic block with an inherited input offset thus creating an invalid edge description. At the same time, the newly created tail call is skipped entirely which means we're not creating a call description for it. If we instead reassign Offset annotation from the conditional jump to the tail call we fix both issues. The conditional jump will be skipped not creating an invalid edge description, while tail call will be handled properly (unformly with regular calls). Reviewed By: #bolt, maksfb Differential Revision: https://reviews.llvm.org/D156389
Loading
Please sign in to comment