[llvm-commits] [llvm] r121021 - in /llvm/trunk/lib/Target/ARM: ARMExpandPseudoInsts.cpp ARMInstrThumb2.td

Jim Grosbach grosbach at apple.com
Mon Dec 6 10:53:24 PST 2010


Hi Owen,

Clang is complaining about "DstIsDead" being unused (which is correct). Since there's no PICADD instruction here, it looks like that local var can just be deleted?

-Jim

On Dec 6, 2010, at 10:35 AM, Owen Anderson wrote:

> Author: resistor
> Date: Mon Dec  6 12:35:51 2010
> New Revision: 121021
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=121021&view=rev
> Log:
> Improve handling of Thumb2 PC-relative loads by converting LDRpci (and friends) to Pseudos.
> 
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp
>    llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp?rev=121021&r1=121020&r2=121021&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp Mon Dec  6 12:35:51 2010
> @@ -699,6 +699,36 @@
>       MI.eraseFromParent();
>       break;
>     }
> +    case ARM::t2LDRHpci:
> +    case ARM::t2LDRBpci:
> +    case ARM::t2LDRSHpci:
> +    case ARM::t2LDRSBpci:
> +    case ARM::t2LDRpci: {
> +      unsigned NewLdOpc;
> +      if (Opcode == ARM::t2LDRpci)
> +        NewLdOpc = ARM::t2LDRi12;
> +      else if (Opcode == ARM::t2LDRHpci)
> +        NewLdOpc = ARM::t2LDRHi12;
> +      else if (Opcode == ARM::t2LDRBpci)
> +        NewLdOpc = ARM::t2LDRBi12;
> +      else if (Opcode == ARM::t2LDRSHpci)
> +        NewLdOpc = ARM::t2LDRSHi12;
> +      else if (Opcode == ARM::t2LDRSBpci)
> +        NewLdOpc = ARM::t2LDRSBi12;
> +      else
> +        llvm_unreachable("Not a known opcode?");
> +            
> +      unsigned DstReg = MI.getOperand(0).getReg();
> +      bool DstIsDead = MI.getOperand(0).isDead();
> +      MachineInstrBuilder MIB =
> +        BuildMI(MBB, MBBI, MI.getDebugLoc(),
> +                               TII->get(NewLdOpc), DstReg)
> +                       .addOperand(MI.getOperand(1));
> +      (*MIB).setMemRefs(MI.memoperands_begin(), MI.memoperands_end());
> +      TransferImpOps(MI, MIB, MIB);
> +      MI.eraseFromParent();
> +      break;
> +    }
>     case ARM::tLDRpci_pic:
>     case ARM::t2LDRpci_pic: {
>       unsigned NewLdOpc = (Opcode == ARM::tLDRpci_pic)
> @@ -706,9 +736,9 @@
>       unsigned DstReg = MI.getOperand(0).getReg();
>       bool DstIsDead = MI.getOperand(0).isDead();
>       MachineInstrBuilder MIB1 =
> -        AddDefaultPred(BuildMI(MBB, MBBI, MI.getDebugLoc(),
> +        BuildMI(MBB, MBBI, MI.getDebugLoc(),
>                                TII->get(NewLdOpc), DstReg)
> -                       .addOperand(MI.getOperand(1)));
> +                       .addOperand(MI.getOperand(1));
>       (*MIB1).setMemRefs(MI.memoperands_begin(), MI.memoperands_end());
>       MachineInstrBuilder MIB2 = BuildMI(MBB, MBBI, MI.getDebugLoc(),
>                                          TII->get(ARM::tPICADD))
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=121021&r1=121020&r2=121021&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original)
> +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Mon Dec  6 12:35:51 2010
> @@ -888,24 +888,8 @@
>     let Inst{5-4}   = addr{1-0}; // imm
>   }
> 
> -  // FIXME: Is the pci variant actually needed?
> -  def pci : T2Ipc <(outs GPR:$Rt), (ins i32imm:$addr), iii,
> -                   opc, ".w\t$Rt, $addr",
> -                   [(set GPR:$Rt, (opnode (ARMWrapper tconstpool:$addr)))]> {
> -    let isReMaterializable = 1;
> -    let Inst{31-27} = 0b11111;
> -    let Inst{26-25} = 0b00;
> -    let Inst{24} = signed;
> -    let Inst{23} = ?; // add = (U == '1')
> -    let Inst{22-21} = opcod;
> -    let Inst{20} = 1; // load
> -    let Inst{19-16} = 0b1111; // Rn
> -
> -    bits<4> Rt;
> -    bits<12> addr;
> -    let Inst{15-12} = Rt{3-0};
> -    let Inst{11-0}  = addr{11-0};
> -  }
> +  def pci : tPseudoInst<(outs GPR:$Rt), (ins i32imm:$addr), Size4Bytes, iis,
> +                      [(set GPR:$Rt, (opnode (ARMWrapper tconstpool:$addr)))]>;
> }
> 
> /// T2I_st - Defines a set of (op r, {imm12|imm8|so_reg}) store patterns.
> 
> 
> _______________________________________________
> 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