/* Update globalxmin to be the smallest valid xmin */
            xid = pgxact->xmin; /* fetch just once */
            if (TransactionIdIsNormal(xid) &&
-               TransactionIdPrecedes(xid, globalxmin))
+               NormalTransactionIdPrecedes(xid, globalxmin))
                    globalxmin = xid;
 
            /* Fetch xid just once - see GetNewTransactionId */
            xid = pgxact->xid;
 
            /*
-            * If the transaction has been assigned an xid < xmax we add it to
-            * the snapshot, and update xmin if necessary.  There's no need to
-            * store XIDs >= xmax, since we'll treat them as running anyway.
-            * We don't bother to examine their subxids either.
-            *
-            * We don't include our own XID (if any) in the snapshot, but we
-            * must include it into xmin.
+            * If the transaction has no XID assigned, we can skip it; it won't
+            * have sub-XIDs either.  If the XID is >= xmax, we can also skip
+            * it; such transactions will be treated as running anyway (and any
+            * sub-XIDs will also be >= xmax).
             */
-           if (TransactionIdIsNormal(xid))
-           {
-               if (TransactionIdFollowsOrEquals(xid, xmax))
+           if (!TransactionIdIsNormal(xid)
+               || !NormalTransactionIdPrecedes(xid, xmax))
                    continue;
-               if (pgxact != MyPgXact)
-                   snapshot->xip[count++] = xid;
-               if (TransactionIdPrecedes(xid, xmin))
-                   xmin = xid;
-           }
+
+           /*
+            * We don't include our own XIDs (if any) in the snapshot, but we
+            * must include them in xmin.
+            */
+           if (NormalTransactionIdPrecedes(xid, xmin))
+               xmin = xid;
+           if (pgxact == MyPgXact)
+               continue;
+
+           /* Add XID to snapshot. */
+           snapshot->xip[count++] = xid;
 
            /*
             * Save subtransaction XIDs if possible (if we've already
             *
             * Again, our own XIDs are not included in the snapshot.
             */
-           if (!suboverflowed && pgxact != MyPgXact)
+           if (!suboverflowed)
            {
                if (pgxact->overflowed)
                    suboverflowed = true;
 
        (dest)--; \
    } while ((dest) < FirstNormalTransactionId)
 
+/* compare two XIDs already known to be normal; this is a macro for speed */
+#define NormalTransactionIdPrecedes(id1, id2) \
+   (AssertMacro(TransactionIdIsNormal(id1) && TransactionIdIsNormal(id2)), \
+   (int32) ((id1) - (id2)) < 0)
 
 /* ----------
  *     Object ID (OID) zero is InvalidOid.