I'm writing a pass that does some static analysis on C code. A critical requirement of the pass is that it must preserve not only the correctness of the code but also its timing -- It cannot add or remove even one CPU cycle from the resulting machine code. To put it another way, the binary executable that is produced when the pass is present must be identical to what is produced when the pass is not present.
That said, I have run into a situation where it would help to split certain basic blocks, probably by calling BasicBlock::splitBasicBlock. But this method adds an unconditional branch instruction. Would this new instruction alter the machine code that is later generated, or would the additional branch somehow be optimized away in subsequent passes?