Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Jun 2020 17:18:17 +0000 (UTC)
From:      Doug Moore <dougm@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r361727 - head/sys/sys
Message-ID:  <202006021718.052HIHRs021842@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dougm
Date: Tue Jun  2 17:18:16 2020
New Revision: 361727
URL: https://svnweb.freebsd.org/changeset/base/361727

Log:
  Remove from RB_REMOVE_COLOR some null checks where the pointer checked
  is provably never null.  Restructure the surrounding code just enough
  to make the non-nullness obvious.
  
  Reviewed by:	markj
  Tested by:	pho
  Differential Revision:	https://reviews.freebsd.org/D25089

Modified:
  head/sys/sys/tree.h

Modified: head/sys/sys/tree.h
==============================================================================
--- head/sys/sys/tree.h	Tue Jun  2 16:40:58 2020	(r361726)
+++ head/sys/sys/tree.h	Tue Jun  2 17:18:16 2020	(r361727)
@@ -493,26 +493,23 @@ name##_RB_REMOVE_COLOR(struct name *head, struct type 
 				RB_ROTATE_LEFT(head, parent, tmp, field);\
 				tmp = RB_RIGHT(parent, field);		\
 			}						\
-			if (!RB_ISRED(RB_LEFT(tmp, field), field) &&	\
-			    !RB_ISRED(RB_RIGHT(tmp, field), field)) {	\
+			if (RB_ISRED(RB_LEFT(tmp, field), field)) {	\
+				struct type *oleft;			\
+				oleft = RB_LEFT(tmp, field);		\
+				RB_COLOR(oleft, field) = RB_BLACK;	\
 				RB_COLOR(tmp, field) = RB_RED;		\
+				RB_ROTATE_RIGHT(head, tmp, oleft, field); \
+				tmp = RB_RIGHT(parent, field);		\
+			} else if (!RB_ISRED(RB_RIGHT(tmp, field), field)) { \
+				RB_COLOR(tmp, field) = RB_RED;		\
 				elm = parent;				\
 				parent = RB_PARENT(elm, field);		\
 				continue;				\
 			}						\
-			if (!RB_ISRED(RB_RIGHT(tmp, field), field)) {	\
-				struct type *oleft;			\
-				if ((oleft = RB_LEFT(tmp, field))	\
-				    != NULL)				\
-					RB_COLOR(oleft, field) = RB_BLACK; \
-				RB_COLOR(tmp, field) = RB_RED;		\
-				RB_ROTATE_RIGHT(head, tmp, oleft, field); \
-				tmp = RB_RIGHT(parent, field);		\
-			}						\
+			if (RB_ISRED(RB_RIGHT(tmp, field), field))	\
+				RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \
 			RB_COLOR(tmp, field) = RB_COLOR(parent, field);	\
 			RB_COLOR(parent, field) = RB_BLACK;		\
-			if (RB_RIGHT(tmp, field))			\
-				RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \
 			RB_ROTATE_LEFT(head, parent, tmp, field);	\
 			elm = RB_ROOT(head);				\
 			break;						\
@@ -523,26 +520,23 @@ name##_RB_REMOVE_COLOR(struct name *head, struct type 
 				RB_ROTATE_RIGHT(head, parent, tmp, field);\
 				tmp = RB_LEFT(parent, field);		\
 			}						\
-			if (!RB_ISRED(RB_LEFT(tmp, field), field) &&	\
-			    !RB_ISRED(RB_RIGHT(tmp, field), field)) {	\
+			if (RB_ISRED(RB_RIGHT(tmp, field), field)) {	\
+				struct type *oright;			\
+				oright = RB_RIGHT(tmp, field);		\
+				RB_COLOR(oright, field) = RB_BLACK;	\
 				RB_COLOR(tmp, field) = RB_RED;		\
+				RB_ROTATE_LEFT(head, tmp, oright, field); \
+				tmp = RB_LEFT(parent, field);		\
+			} else if (!RB_ISRED(RB_LEFT(tmp, field), field)) { \
+				RB_COLOR(tmp, field) = RB_RED;		\
 				elm = parent;				\
 				parent = RB_PARENT(elm, field);		\
 				continue;				\
 			}						\
-			if (!RB_ISRED(RB_LEFT(tmp, field), field)) {	\
-				struct type *oright;			\
-				if ((oright = RB_RIGHT(tmp, field))	\
-				    != NULL)				\
-					RB_COLOR(oright, field) = RB_BLACK; \
-				RB_COLOR(tmp, field) = RB_RED;		\
-				RB_ROTATE_LEFT(head, tmp, oright, field); \
-				tmp = RB_LEFT(parent, field);		\
-			}						\
+			if (RB_ISRED(RB_LEFT(tmp, field), field))	\
+				RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \
 			RB_COLOR(tmp, field) = RB_COLOR(parent, field);	\
 			RB_COLOR(parent, field) = RB_BLACK;		\
-			if (RB_LEFT(tmp, field))			\
-				RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \
 			RB_ROTATE_RIGHT(head, parent, tmp, field);	\
 			elm = RB_ROOT(head);				\
 			break;						\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202006021718.052HIHRs021842>