void VirtRegRewriter::handleIdentityCopy(MachineInstr &MI) const { if (!MI.isIdentityCopy()) return; DEBUG(dbgs() << "Identity copy: " << MI); ++NumIdCopies; // Copies like: // %R0 = COPY %R0<undef> // %AL = COPY %AL, %EAX<imp-def> // give us additional liveness information: The target (super-)register // must not be valid before this point. Replace the COPY with a KILL // instruction to maintain this information. if (MI.getOperand(0).isUndef() || MI.getNumOperands() > 2) { MI.setDesc(TII->get(TargetOpcode::KILL)); DEBUG(dbgs() << " replace by: " << MI); return; } if (Indexes) Indexes->removeSingleMachineInstrFromMaps(MI); MI.eraseFromBundle(); DEBUG(dbgs() << " deleted.\n"); }