<div dir="ltr">Hi,<div><br></div><div>I am trying to write a pass to convert any branch instructions to indirect branch instructions for ARM / AArch64.</div><div>I managed to generate a llvm IR like this:</div>





  %7 = icmp ne i8** %2, null<br>  %8 = and i1 %6, %7<div>  %9 = select i1 %8, i8* blockaddress(@_Z4testPKcmPPc, %10), i8* blockaddress(@_Z4testPKcmPPc, %26)<br>  indirectbr i8* %9, [label %10, label %26]<div><br></div><div>But when this IR is translated into AArch64 machine codes, I only get something like:</div><div>CBZ X1, loc_XX</div><div><br></div><div>It seems the select and indirectbr instructions are optimized in the backend.</div><div>What I expected is something like:<br></div><div>MOV X2, loc_XX</div><div><a href="http://B.NE">B.NE</a> X2</div><div><br></div><div>Does anyone know how can I achieve this?</div><div>Thanks!</div><div><br></div><div><br></div><div><br></div></div></div>