Hoist the global "dummy" lookup outside of the reinsertion loop.
diff --git a/Objects/setobject.c b/Objects/setobject.c
index eff91c5..ac501b6 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -280,6 +280,7 @@
     Py_ssize_t i;
     int is_oldtable_malloced;
     setentry small_copy[PySet_MINSIZE];
+    PyObject *dummy_entry;
 
     assert(minused >= 0);
 
@@ -336,11 +337,12 @@
 
     /* Copy the data over; this is refcount-neutral for active entries;
        dummy entries aren't copied over, of course */
+    dummy_entry = dummy;
     for (entry = oldtable; i > 0; entry++) {
         if (entry->key == NULL) {
             /* UNUSED */
             ;
-        } else if (entry->key == dummy) {
+        } else if (entry->key == dummy_entry) {
             /* DUMMY */
             --i;
             assert(entry->key == dummy);