]> granicus.if.org Git - llvm/commitdiff
Fix RegScavenger::unprocess
authorDavid Greene <greened@obbligato.org>
Mon, 23 Jul 2018 20:23:50 +0000 (20:23 +0000)
committerDavid Greene <greened@obbligato.org>
Mon, 23 Jul 2018 20:23:50 +0000 (20:23 +0000)
RegScavenger::unprocess walks backward, so it should undo the effects
of defs before undoing effects of kills. Previously it did things in
the opposite order, leaving a register apparently unused (dead) in the
case where an instruction both used (killed) and defined a register.

Differential Revision: https://reviews.llvm.org/D42200

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337735 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegisterScavenging.cpp

index d7cd5a096ef08e230680e75e54a5d57c3809b9ff..a878c34f9aa4e8fd8cce5cead63b45f9146275df 100644 (file)
@@ -162,8 +162,8 @@ void RegScavenger::unprocess() {
     determineKillsAndDefs();
 
     // Commit the changes.
-    setUsed(KillRegUnits);
     setUnused(DefRegUnits);
+    setUsed(KillRegUnits);
   }
 
   if (MBBI == MBB->begin()) {