[llvm] r207736 - ARM: support expanding external symbols in 32-bit moves

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu May 1 05:33:32 PDT 2014


testcase?

On 1 May 2014 00:19, Saleem Abdulrasool <compnerd at compnerd.org> wrote:
> Author: compnerd
> Date: Wed Apr 30 23:19:56 2014
> New Revision: 207736
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207736&view=rev
> Log:
> ARM: support expanding external symbols in 32-bit moves
>
> This enhances the expansion of the mov32imm pseudo-instruction to support an
> external symbol reference.  This is motivated by a simplification of the stack
> probe emission for Windows on ARM (and fixing a leak).
>
> Modified:
>     llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp?rev=207736&r1=207735&r2=207736&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp Wed Apr 30 23:19:56 2014
> @@ -705,17 +705,29 @@ void ARMExpandPseudo::ExpandMOV32BitImm(
>      .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead))
>      .addReg(DstReg);
>
> -  if (MO.isImm()) {
> +  switch (MO.getType()) {
> +  case MachineOperand::MO_Immediate: {
>      unsigned Imm = MO.getImm();
>      unsigned Lo16 = Imm & 0xffff;
>      unsigned Hi16 = (Imm >> 16) & 0xffff;
>      LO16 = LO16.addImm(Lo16);
>      HI16 = HI16.addImm(Hi16);
> -  } else {
> +    break;
> +  }
> +  case MachineOperand::MO_ExternalSymbol: {
> +    const char *ES = MO.getSymbolName();
> +    unsigned TF = MO.getTargetFlags();
> +    LO16 = LO16.addExternalSymbol(ES, TF | ARMII::MO_LO16);
> +    HI16 = HI16.addExternalSymbol(ES, TF | ARMII::MO_HI16);
> +    break;
> +  }
> +  default: {
>      const GlobalValue *GV = MO.getGlobal();
>      unsigned TF = MO.getTargetFlags();
>      LO16 = LO16.addGlobalAddress(GV, MO.getOffset(), TF | ARMII::MO_LO16);
>      HI16 = HI16.addGlobalAddress(GV, MO.getOffset(), TF | ARMII::MO_HI16);
> +    break;
> +  }
>    }
>
>    LO16->setMemRefs(MI.memoperands_begin(), MI.memoperands_end());
>
>
> _______________________________________________
> 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