[llvm-commits] [llvm] r47862 - /llvm/trunk/lib/CodeGen/MachineInstr.cpp
Bill Wendling
isanbard at gmail.com
Mon Mar 3 15:22:41 PST 2008
On Mon, Mar 3, 2008 at 3:14 PM, Evan Cheng <evan.cheng at apple.com> wrote:
> > --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Mon Mar 3 16:14:33 2008
> > @@ -678,34 +678,74 @@
> > bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
> > const TargetRegisterInfo
> > *RegInfo,
> > bool AddIfNotFound) {
> > - bool Found = false;
> > - for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
> > + // Go through the machine instruction's operands to eliminate any
> > potentially
> > + // illegal conditions. I.e., a super- and sub-register both
> > marked "kill".
> > + Restart:
> > + for (unsigned i = 0, e = getNumOperands(); i < e; ++i) {
> > MachineOperand &MO = getOperand(i);
> > +
> > if (MO.isRegister() && MO.isUse()) {
> > unsigned Reg = MO.getReg();
> > - if (!Reg)
> > +
> > + if (!Reg || IncomingReg == Reg ||
> > + !TargetRegisterInfo::isPhysicalRegister(Reg) ||
> > + !TargetRegisterInfo::isPhysicalRegister(IncomingReg))
> > continue;
> > +
> > + if (RegInfo->isSubRegister(IncomingReg, Reg)) {
> > + if (MO.isKill()) {
> > + if (MO.isImplicit()) {
> >
> > + // Remove this implicit use that marks the sub-register
> > "kill". Let
> > + // the super-register take care of this information.
> > + RemoveOperand(i);
> > + goto Restart; // Instruction was modified, redo
> > checking.
>
> Seems like this may increase compile time unnecessarily? Do you have
> to restart from first operand? Can you simply recompute 'e' and make
> sure i isn't incremented?
>
Okay. (I'm the only one who likes gotos ;-)
> > + } else {
> > + // The super-register is going to take care of this kill
> > + // information.
> > + MO.setIsKill(false);
> > + }
> > + }
> > + } else if (RegInfo->isSuperRegister(IncomingReg, Reg) &&
> > MO.isKill()) {
> > + // The kill information is already handled by a super-
> > register. Don't
> > + // add this sub-register as a kill.
> > + return true;
> > + }
>
> Check this first so we can take advantage of the early exit to avoid
> nesting.
>
Okay.
>
> >
> > + }
> > + }
> > +
> > + // If the register already exists, then make sure it or its super-
> > register is
> > + // marked "kill".
> > + for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
> > + MachineOperand &MO = getOperand(i);
> > +
> > + if (MO.isRegister() && MO.isUse()) {
> > + unsigned Reg = MO.getReg();
> > + if (!Reg) continue;
> > +
> > if (Reg == IncomingReg) {
> > MO.setIsKill();
> > - Found = true;
> > - break;
> > + return true;
> >
> > } else if (TargetRegisterInfo::isPhysicalRegister(Reg) &&
>
> No need for else here.
>
Okay.
-bw
More information about the llvm-commits
mailing list