<div dir="ltr">Hi <div><br></div><div>I am recently doing research on binaries in ARM architecture. </div><div><br></div><div>I noticed that when I compile the source code using thumb instruction set, llvm will use BL to jump to some basic blocks rather than B, which means the jump target by BL could also be a basic block rather than function start. Some disassemblers would directly set the target of BL as  a start of a function, which is not right.</div><div><br></div><div>I am really curious when the compiler would choose to use BL and when the compiler would choose to use B when the target is a basic block. I noticed sometimes there might be no differences between these two branch instructions. Many Thanks</div><div><br></div><div>Regards</div><div>Muhui</div></div>