Skip to content
  • Jakob Stoklund Olesen's avatar
    Tighten up the erase/remove API for bundled instructions. · ccfb5fb4
    Jakob Stoklund Olesen authored
    Most code is oblivious to bundles and uses the MBB::iterator which only
    visits whole bundles. MBB::erase() operates on whole bundles at a time
    as before.
    
    MBB::remove() now refuses to remove bundled instructions. It is not safe
    to remove all instructions in a bundle without deleting them since there
    is no way of returning pointers to all the removed instructions.
    
    MBB::remove_instr() and MBB::erase_instr() will now update bundle flags
    correctly, lifting individual instructions out of bundles while leaving
    the remaining bundle intact.
    
    The MachineInstr convenience functions are updated so
    
      eraseFromParent() erases a whole bundle as before
      eraseFromBundle() erases a single instruction, leaving the rest of its bundle.
      removeFromParent() refuses to operate on bundled instructions, and
      removeFromBundle() lifts a single instruction out of its bundle.
    
    These functions will no longer accidentally split or coalesce bundles -
    bundle flags are updated to preserve the existing bundling, and explicit
    bundleWith* / unbundleFrom* functions should be used to change the
    instruction bundling.
    
    This API update is still a work in progress. I am going to update APIs
    first so they maintain bundle flags automatically when possible. Then
    I'll add stricter verification of the bundle flags.
    
    llvm-svn: 170384
    ccfb5fb4
Loading