]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Remove inefficient and not-completely-general logic in addHRegUse and
authorJulian Seward <jseward@acm.org>
Sat, 22 Oct 2005 12:46:06 +0000 (12:46 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 22 Oct 2005 12:46:06 +0000 (12:46 +0000)
replace with something general and simpler.

git-svn-id: svn://svn.valgrind.org/vex/trunk@1423

VEX/priv/host-generic/h_generic_regs.c

index 0388c6bc5a8508bf333136979cc4e33fc912abe2..b0d58b627a11d28e63d408e4cf176ed8ad54a067 100644 (file)
@@ -122,15 +122,21 @@ void addHRegUse ( HRegUsage* tab, HRegMode mode, HReg reg )
       tab->n_used++;
    } else {
       /* Found: combine or ignore. */
-      if (tab->mode[i] == mode)
-         return; /* duplicate, ignore */
-      if (mode == HRmModify) {
+      /* This is a greatest-lower-bound operation in the poset:
+
+            R   W
+             \ /
+              M
+
+         Need to do: tab->mode[i] = GLB(tab->mode, mode).  In this
+         case very simple -- if tab->mode[i] != mode then result must
+         be M.
+      */
+      if (tab->mode[i] == mode) {
+         /* duplicate, ignore */
+      } else {
          tab->mode[i] = HRmModify;
-         return; /* modify mode makes previous mode irrelevant */
       }
-      vassert( (mode == HRmRead && tab->mode[i] == HRmWrite)
-              || (mode == HRmWrite && tab->mode[i] == HRmRead) );
-      tab->mode[i] = HRmModify;
    }
 }