<div dir="ltr">Committed as r186226.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 12, 2013 at 2:43 PM, Eric Christopher <span dir="ltr"><<a href="mailto:echristo@gmail.com" target="_blank">echristo@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">LGTM.<br>
<br>
-eric<br>
<div class="im"><br>
On Wed, Jul 10, 2013 at 10:21 AM, JF Bastien <<a href="mailto:jfb@google.com">jfb@google.com</a>> wrote:<br>
</div><div><div class="h5">> ARM paired GPR COPY was being lowered to two MOVr without CC. This<br>
> patch puts the CC back.<br>
><br>
> My test is a reduction of the case where I encountered the issue, but<br>
> I'm not sure it's the best one ever (though 64-bit atomics do require<br>
> paired GPRs).<br>
><br>
> The issue only occurs with selectionDAG, FastISel doesn't encounter it<br>
> so I didn't bother calling it.<br>
><br>
><br>
><br>
><br>
> diff --git a/lib/Target/ARM/ARMBaseInstrInfo.cpp<br>
> b/lib/Target/ARM/ARMBaseInstrInfo.cpp<br>
> index 5283d7b..d670178 100644<br>
> --- a/lib/Target/ARM/ARMBaseInstrInfo.cpp<br>
> +++ b/lib/Target/ARM/ARMBaseInstrInfo.cpp<br>
> @@ -745,6 +745,9 @@ void ARMBaseInstrInfo::copyPhysReg(MachineBasicBlock &MBB,<br>
>      if (Opc == ARM::VORRq)<br>
>        Mov.addReg(Src);<br>
>      Mov = AddDefaultPred(Mov);<br>
> +    // MOVr can set CC.<br>
> +    if (Opc == ARM::MOVr)<br>
> +      Mov = AddDefaultCC(Mov);<br>
>    }<br>
>    // Add implicit super-register defs and kills to the last instruction.<br>
>    Mov->addRegisterDefined(DestReg, TRI);<br>
> diff --git a/test/CodeGen/ARM/copy-paired-reg.ll<br>
> b/test/CodeGen/ARM/copy-paired-reg.ll<br>
> new file mode 100644<br>
> index 0000000..17a4461<br>
> --- /dev/null<br>
> +++ b/test/CodeGen/ARM/copy-paired-reg.ll<br>
> @@ -0,0 +1,17 @@<br>
> +; RUN: llc < %s -mtriple=armv7-apple-ios -verify-machineinstrs<br>
> +; RUN: llc < %s -mtriple=armv7-linux-gnueabi -verify-machineinstrs<br>
> +<br>
> +define void @f() {<br>
> +  %a = alloca i8, i32 8, align 8<br>
> +  %b = alloca i8, i32 8, align 8<br>
> +<br>
> +  %c = bitcast i8* %a to i64*<br>
> +  %d = bitcast i8* %b to i64*<br>
> +<br>
> +  store atomic i64 0, i64* %c seq_cst, align 8<br>
> +  store atomic i64 0, i64* %d seq_cst, align 8<br>
> +<br>
> +  %e = load atomic i64* %d seq_cst, align 8<br>
> +<br>
> +  ret void<br>
> +}<br>
</div></div>> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto: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></div>