Issue #24681:  Move the most likely test first in set_add_entry().
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 0e443c4..c590bbf 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -171,12 +171,15 @@
             Py_INCREF(startkey);
             cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
             Py_DECREF(startkey);
-            if (cmp < 0)                                          /* unlikely */
-                goto comparison_error;
-            if (table != so->table || entry->key != startkey)     /* unlikely */
-                goto restart;
             if (cmp > 0)                                          /* likely */
                 goto found_active;
+            if (cmp < 0)
+                goto comparison_error;
+            /* Continuing the search from the current entry only makes
+               sense if the table and entry are unchanged; otherwise,
+               we have to restart from the beginning */
+            if (table != so->table || entry->key != startkey)
+                goto restart;
             mask = so->mask;                 /* help avoid a register spill */
         }
         else if (entry->hash == -1 && freeslot == NULL)
@@ -200,12 +203,12 @@
                     Py_INCREF(startkey);
                     cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
                     Py_DECREF(startkey);
+                    if (cmp > 0)
+                        goto found_active;
                     if (cmp < 0)
                         goto comparison_error;
                     if (table != so->table || entry->key != startkey)
                         goto restart;
-                    if (cmp > 0)
-                        goto found_active;
                     mask = so->mask;
                 }
                 else if (entry->hash == -1 && freeslot == NULL)