[LLVMdev] Splitting basic blocks while preserving machine code
Jim Grosbach
grosbach at apple.com
Wed Oct 20 17:19:14 PDT 2010
On Oct 20, 2010, at 5:16 PM, Trevor Harmon wrote:
> 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?
It probably would be optimized away, yes, but I would recommend against counting on it with requirements as strict as yours.
-Jim
More information about the llvm-dev
mailing list