<div dir="ltr">Ping?<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 10, 2013 at 10:21 AM, JF Bastien <span dir="ltr"><<a href="mailto:jfb@google.com" target="_blank">jfb@google.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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>
</blockquote></div><br></div></div>