diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c
index 0f9ecf5ee8b..c54cf9db784 100644
--- a/src/backend/optimizer/path/equivclass.c
+++ b/src/backend/optimizer/path/equivclass.c
@@ -2525,12 +2525,17 @@ exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2, Oid opfamily)
 		foreach(lc2, ec->ec_members)
 		{
 			EquivalenceMember *em = (EquivalenceMember *) lfirst(lc2);
+			Expr *expr = em->em_expr;
+
+			/* Remove any relabel decorations. */
+			while (IsA(expr, RelabelType))
+				expr = (Expr *) (castNode(RelabelType, expr))->arg;
 
 			if (em->em_is_child)
 				continue;		/* ignore children here */
-			if (equal(item1, em->em_expr))
+			if (equal(item1, expr))
 				item1member = true;
-			else if (equal(item2, em->em_expr))
+			else if (equal(item2, expr))
 				item2member = true;
 			/* Exit as soon as equality is proven */
 			if (item1member && item2member)
