[LLVMdev] Splitting basic blocks while preserving machine code

Trevor Harmon Trevor.W.Harmon at nasa.gov
Wed Oct 20 17:16:49 PDT 2010


Hi,

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?

Thanks,

Trevor




More information about the llvm-dev mailing list