diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 19ff524..59ff996 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -1324,7 +1324,7 @@ GetSnapshotData(Snapshot snapshot)
 			/* Update globalxmin to be the smallest valid xmin */
 			xid = pgxact->xmin;	/* fetch just once */
 			if (TransactionIdIsNormal(xid) &&
-				TransactionIdPrecedes(xid, globalxmin))
+				TransactionIdPrecedesBothNormal(xid, globalxmin))
 					globalxmin = xid;
 
 			/* Fetch xid just once - see GetNewTransactionId */
@@ -1341,11 +1341,11 @@ GetSnapshotData(Snapshot snapshot)
 			 */
 			if (TransactionIdIsNormal(xid))
 			{
-				if (TransactionIdFollowsOrEquals(xid, xmax))
+				if (TransactionIdFollowsOrEqualsBothNormal(xid, xmax))
 					continue;
 				if (pgxact != MyPgXact)
 					snapshot->xip[count++] = xid;
-				if (TransactionIdPrecedes(xid, xmin))
+				if (TransactionIdPrecedesBothNormal(xid, xmin))
 					xmin = xid;
 			}
 
diff --git a/src/include/access/transam.h b/src/include/access/transam.h
index c038fd9..31401f9 100644
--- a/src/include/access/transam.h
+++ b/src/include/access/transam.h
@@ -44,6 +44,9 @@
 #define TransactionIdStore(xid, dest)	(*(dest) = (xid))
 #define StoreInvalidTransactionId(dest) (*(dest) = InvalidTransactionId)
 
+#define TransactionIdPrecedesBothNormal(id1, id2) ((int32) (id1 - id2) < 0)
+#define TransactionIdFollowsOrEqualsBothNormal(id1, id2) ((int32) (id1 - id2) >= 0)
+
 /* advance a transaction ID variable, handling wraparound correctly */
 #define TransactionIdAdvance(dest)	\
 	do { \
