[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