[llvm-commits] [llvm] r53050 - /llvm/trunk/lib/CodeGen/MachineInstr.cpp

Evan Cheng evan.cheng at apple.com
Wed Jul 2 17:01:54 PDT 2008


Doh. Did you keep the .s files around just in case? I'd like to see  
what's wrong. This means we have bugs elsewhere in all likelihood.

Evan

On Jul 2, 2008, at 3:12 PM, Dan Gohman wrote:

> Author: djg
> Date: Wed Jul  2 17:12:55 2008
> New Revision: 53050
>
> URL: http://llvm.org/viewvc/llvm-project?rev=53050&view=rev
> Log:
> Revert r52988. It broke 254.gap on x86-64.
>
> Modified:
>    llvm/trunk/lib/CodeGen/MachineInstr.cpp
>
> Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=53050&r1=53049&r2=53050&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Wed Jul  2 17:12:55 2008
> @@ -738,7 +738,7 @@
>                                      const TargetRegisterInfo  
> *RegInfo,
>                                      bool AddIfNotFound) {
>   bool isPhysReg =  
> TargetRegisterInfo::isPhysicalRegister(IncomingReg);
> -  bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
> +  bool Found = false;
>   SmallVector<unsigned,4> DeadOps;
>   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
>     MachineOperand &MO = getOperand(i);
> @@ -749,15 +749,15 @@
>       continue;
>
>     if (Reg == IncomingReg) {
> -      MO.setIsKill();
> -      return true;
> -    }
> -    if (hasAliases && MO.isKill() &&
> -        TargetRegisterInfo::isPhysicalRegister(Reg)) {
> +      if (!Found)  // One kill of reg per instruction.
> +        MO.setIsKill();
> +      Found = true;
> +    } else if (isPhysReg && MO.isKill() &&
> +               TargetRegisterInfo::isPhysicalRegister(Reg)) {
>       // A super-register kill already exists.
>       if (RegInfo->isSuperRegister(IncomingReg, Reg))
> -        return true;
> -      if (RegInfo->isSubRegister(IncomingReg, Reg))
> +        Found = true;
> +      else if (RegInfo->isSubRegister(IncomingReg, Reg))
>         DeadOps.push_back(i);
>     }
>   }
> @@ -774,14 +774,14 @@
>
>   // If not found, this means an alias of one of the operands is  
> killed. Add a
>   // new implicit operand if required.
> -  if (AddIfNotFound) {
> +  if (!Found && AddIfNotFound) {
>     addOperand(MachineOperand::CreateReg(IncomingReg,
>                                          false /*IsDef*/,
>                                          true  /*IsImp*/,
>                                          true  /*IsKill*/));
>     return true;
>   }
> -  return false;
> +  return Found;
> }
>
> bool MachineInstr::addRegisterDead(unsigned IncomingReg,
> @@ -789,6 +789,7 @@
>                                    bool AddIfNotFound) {
>   bool isPhysReg =  
> TargetRegisterInfo::isPhysicalRegister(IncomingReg);
>   bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
> +  bool Found = false;
>   SmallVector<unsigned,4> DeadOps;
>   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
>     MachineOperand &MO = getOperand(i);
> @@ -797,14 +798,13 @@
>     unsigned Reg = MO.getReg();
>     if (Reg == IncomingReg) {
>       MO.setIsDead();
> -      return true;
> -    }
> -    if (hasAliases && MO.isDead() &&
> -        TargetRegisterInfo::isPhysicalRegister(Reg)) {
> +      Found = true;
> +    } else if (hasAliases && MO.isDead() &&
> +               TargetRegisterInfo::isPhysicalRegister(Reg)) {
>       // There exists a super-register that's marked dead.
>       if (RegInfo->isSuperRegister(IncomingReg, Reg))
> -        return true;
> -      if (RegInfo->isSubRegister(IncomingReg, Reg))
> +        Found = true;
> +      else if (RegInfo->isSubRegister(IncomingReg, Reg))
>         DeadOps.push_back(i);
>     }
>   }
> @@ -821,13 +821,13 @@
>
>   // If not found, this means an alias of one of the operand is  
> dead. Add a
>   // new implicit operand.
> -  if (AddIfNotFound) {
> +  if (!Found && AddIfNotFound) {
>     addOperand(MachineOperand::CreateReg(IncomingReg, true/*IsDef*/,
>                                          true/*IsImp*/,false/ 
> *IsKill*/,
>                                          true/*IsDead*/));
>     return true;
>   }
> -  return false;
> +  return Found;
> }
>
> /// copyKillDeadInfo - copies killed/dead information from one instr  
> to another
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list