On Thursday, May 1, 2014, Rafael Espíndola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
testcase?</blockquote><div><br></div>I'm not certain how to exercise this from LLIR or assembly.  References there would be global addresses.  This would require a handcrafted MI.  We generate such an instruction in the stack probe emission for Windows on ARM and the<span></span> existing test for that does exercise this.<div>
<br></div><div>Perhaps I should have merged this with the leak cleanup itself to make it clearer.<br><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 1 May 2014 00:19, Saleem Abdulrasool <<a href="javascript:;" onclick="_e(event, 'cvml', 'compnerd@compnerd.org')">compnerd@compnerd.org</a>> wrote:<br>
> Author: compnerd<br>
> Date: Wed Apr 30 23:19:56 2014<br>
> New Revision: 207736<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=207736&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=207736&view=rev</a><br>
> Log:<br>
> ARM: support expanding external symbols in 32-bit moves<br>
><br>
> This enhances the expansion of the mov32imm pseudo-instruction to support an<br>
> external symbol reference.  This is motivated by a simplification of the stack<br>
> probe emission for Windows on ARM (and fixing a leak).<br>
><br>
> Modified:<br>
>     llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp?rev=207736&r1=207735&r2=207736&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp?rev=207736&r1=207735&r2=207736&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp (original)<br>
> +++ llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cpp Wed Apr 30 23:19:56 2014<br>
> @@ -705,17 +705,29 @@ void ARMExpandPseudo::ExpandMOV32BitImm(<br>
>      .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead))<br>
>      .addReg(DstReg);<br>
><br>
> -  if (MO.isImm()) {<br>
> +  switch (MO.getType()) {<br>
> +  case MachineOperand::MO_Immediate: {<br>
>      unsigned Imm = MO.getImm();<br>
>      unsigned Lo16 = Imm & 0xffff;<br>
>      unsigned Hi16 = (Imm >> 16) & 0xffff;<br>
>      LO16 = LO16.addImm(Lo16);<br>
>      HI16 = HI16.addImm(Hi16);<br>
> -  } else {<br>
> +    break;<br>
> +  }<br>
> +  case MachineOperand::MO_ExternalSymbol: {<br>
> +    const char *ES = MO.getSymbolName();<br>
> +    unsigned TF = MO.getTargetFlags();<br>
> +    LO16 = LO16.addExternalSymbol(ES, TF | ARMII::MO_LO16);<br>
> +    HI16 = HI16.addExternalSymbol(ES, TF | ARMII::MO_HI16);<br>
> +    break;<br>
> +  }<br>
> +  default: {<br>
>      const GlobalValue *GV = MO.getGlobal();<br>
>      unsigned TF = MO.getTargetFlags();<br>
>      LO16 = LO16.addGlobalAddress(GV, MO.getOffset(), TF | ARMII::MO_LO16);<br>
>      HI16 = HI16.addGlobalAddress(GV, MO.getOffset(), TF | ARMII::MO_HI16);<br>
> +    break;<br>
> +  }<br>
>    }<br>
><br>
>    LO16->setMemRefs(MI.memoperands_begin(), MI.memoperands_end());<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="javascript:;" onclick="_e(event, 'cvml', 'llvm-commits@cs.uiuc.edu')">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br>-- <br>Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org<br>