diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c
index bb2c6a2bcc..e896c98db9 100644
--- a/src/backend/access/common/indextuple.c
+++ b/src/backend/access/common/indextuple.c
@@ -73,7 +73,7 @@ index_form_tuple_context(TupleDesc tupleDescriptor,
 				data_size,
 				hoff;
 	int			i;
-	unsigned short infomask = 0;
+	index_info  infomask = 0;
 	bool		hasnull = false;
 	uint16		tupmask = 0;
 	int			numberOfAttributes = tupleDescriptor->natts;
diff --git a/src/backend/access/spgist/spgutils.c b/src/backend/access/spgist/spgutils.c
index 5b5e6e82d3..40c4f168a5 100644
--- a/src/backend/access/spgist/spgutils.c
+++ b/src/backend/access/spgist/spgutils.c
@@ -942,7 +942,7 @@ spgFormNodeTuple(SpGistState *state, Datum label, bool isnull)
 {
 	SpGistNodeTuple tup;
 	unsigned int size;
-	unsigned short infomask = 0;
+	index_info infomask = 0;
 
 	/* compute space needed (note result is already maxaligned) */
 	size = SGNTHDRSZ;
diff --git a/src/include/access/itup.h b/src/include/access/itup.h
index 94885751e5..84498790d3 100644
--- a/src/include/access/itup.h
+++ b/src/include/access/itup.h
@@ -19,6 +19,8 @@
 #include "storage/bufpage.h"
 #include "storage/itemptr.h"
 
+typedef uint32 index_info;
+
 /*
  * Index tuple header structure
  *
@@ -39,14 +41,14 @@ typedef struct IndexTupleData
 	/* ---------------
 	 * t_info is laid out in the following fashion:
 	 *
-	 * 15th (high) bit: has nulls
-	 * 14th bit: has var-width attributes
-	 * 13th bit: AM-defined meaning
-	 * 12-0 bit: size of tuple
+	 * 31st (high) bit: has nulls
+	 * 30th bit: has var-width attributes
+	 * 29th bit: AM-defined meaning
+	 * 28-0 bit: size of tuple
 	 * ---------------
 	 */
 
-	unsigned short t_info;		/* various info about tuple */
+	index_info t_info;		        /* various info about tuple */
 
 } IndexTupleData;				/* MORE DATA FOLLOWS AT END OF STRUCT */
 
@@ -62,11 +64,11 @@ typedef IndexAttributeBitMapData * IndexAttributeBitMap;
 /*
  * t_info manipulation macros
  */
-#define INDEX_SIZE_MASK 0x1FFF
-#define INDEX_AM_RESERVED_BIT 0x2000	/* reserved for index-AM specific
-										 * usage */
-#define INDEX_VAR_MASK	0x4000
-#define INDEX_NULL_MASK 0x8000
+#define INDEX_SIZE_MASK 0x1FFFFFFF
+#define INDEX_AM_RESERVED_BIT 0x20000000	/* reserved for index-AM specific
+										     * usage */
+#define INDEX_VAR_MASK	0x40000000
+#define INDEX_NULL_MASK 0x80000000
 
 #define IndexTupleSize(itup)		((Size) ((itup)->t_info & INDEX_SIZE_MASK))
 #define IndexTupleHasNulls(itup)	((((IndexTuple) (itup))->t_info & INDEX_NULL_MASK))
@@ -96,7 +98,7 @@ extern IndexTuple index_truncate_tuple(TupleDesc sourceDescriptor,
  * at index_form_tuple time so enough space is allocated).
  */
 static inline Size
-IndexInfoFindDataOffset(unsigned short t_info)
+IndexInfoFindDataOffset(index_info t_info)
 {
 	if (!(t_info & INDEX_NULL_MASK))
 		return MAXALIGN(sizeof(IndexTupleData));
