diff --git a/lib/CodeGen/VirtRegMap.cpp b/lib/CodeGen/VirtRegMap.cpp
index bc56945..7e6d09b 100644
--- a/lib/CodeGen/VirtRegMap.cpp
+++ b/lib/CodeGen/VirtRegMap.cpp
@@ -521,6 +521,7 @@
     // Process all of the spilled uses and all non spilled reg references.
     for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
       MachineOperand &MO = MI.getOperand(i);
+
       if (!MO.isRegister() || MO.getReg() == 0)
         continue;   // Ignore non-register operands.
       
@@ -790,16 +791,37 @@
           }
 
           if (!OpTakenCareOf) {
-            // Check to see if this is a noop copy.  If so, eliminate the
-            // instruction before considering the dest reg to be changed.
             unsigned Src, Dst;
-            if (TII->isMoveInstr(MI, Src, Dst) && Src == Dst) {
-              ++NumDCE;
-              DEBUG(std::cerr << "Removing now-noop copy: " << MI);
-              MBB.erase(&MI);
-              VRM.RemoveFromFoldedVirtMap(&MI);
-              goto ProcessNextInst;
+            if (TII->isMoveInstr(MI, Src, Dst)) {
+              if (Src == Dst) {
+                // Check to see if this is a noop copy.  If so, eliminate
+                // the instruction before considering the dest reg to be
+                // changed.
+                ++NumDCE;
+                DEBUG(std::cerr << "Removing now-noop copy: " << MI);
+                MBB.erase(&MI);
+                VRM.RemoveFromFoldedVirtMap(&MI);
+                goto ProcessNextInst;
+              } else if (MII != MBB.begin()) {
+                // Check to see if this is a sequence of the form:
+                //    mov R0, R1
+                //    mov R1, R0
+                // Eliminate the second move if so.
+                MachineBasicBlock::iterator PrevMII = MII; --PrevMII;
+                MachineInstr& PrevMI = *PrevMII;
+                unsigned PrevSrc, PrevDst;
+
+                if (TII->isMoveInstr(PrevMI, PrevSrc, PrevDst))
+                  if (PrevSrc == Dst && PrevDst == Src) {
+                    ++NumDCE;
+                    DEBUG(std::cerr << "Removing now-noop copy: " << MI);
+                    MBB.erase(&MI);
+                    VRM.RemoveFromFoldedVirtMap(&MI);
+                    goto ProcessNextInst;
+                  }
+              }
             }
+
             Spills.ClobberPhysReg(VirtReg);
             continue;
           }
@@ -861,8 +883,6 @@
   }
 }
 
-
-
 llvm::Spiller* llvm::createSpiller() {
   switch (SpillerOpt) {
   default: assert(0 && "Unreachable!");
diff --git a/test/CodeGen/X86/2006-08-21-ExtraMovInst.ll b/test/CodeGen/X86/2006-08-21-ExtraMovInst.ll
new file mode 100644
index 0000000..29c0861
--- /dev/null
+++ b/test/CodeGen/X86/2006-08-21-ExtraMovInst.ll
@@ -0,0 +1,15 @@
+; RUN: llvm-as < %s | llc -fast -march=x86 -mcpu=i386 | not grep 'movl %eax, %edx'
+
+int %foo(int %t, int %C) {
+entry:
+        br label %cond_true
+
+cond_true:              ; preds = %cond_true, %entry
+        %t_addr.0.0 = phi int [ %t, %entry ], [ %tmp7, %cond_true ]             ; <int> [#uses=2]
+        %tmp7 = add int %t_addr.0.0, 1  ; <int> [#uses=1]
+        %tmp = setgt int %C, 39         ; <bool> [#uses=1]
+        br bool %tmp, label %bb12, label %cond_true
+
+bb12:           ; preds = %cond_true
+        ret int %t_addr.0.0
+}
