OPTIM: halog: improve field parser speed for modern compilers
authorWilly Tarreau <w@1wt.eu>
Mon, 8 Nov 2021 08:58:22 +0000 (09:58 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 8 Nov 2021 11:08:26 +0000 (12:08 +0100)
Modern compilers were producing producing less efficient code in the
field_start() loop, by not emitting two conditional jumps for a single
test. However by reordering the test we can merge the optimal case and
the default one and get back to good performance so let's simplify the
test. This improves the parsing speed by 5%.

admin/halog/halog.c

index 79eff91..5c0218b 100644 (file)
@@ -265,12 +265,10 @@ const char *field_start(const char *p, int field)
                /* skip spaces */
                while (1) {
                        c = *(p++);
-                       if (c > ' ')
-                               break;
-                       if (c == ' ')
-                               continue;
                        if (!c) /* end of line */
                                return p-1;
+                       if (c == ' ')
+                               continue;
                        /* other char => new field */
                        break;
                }
@@ -283,12 +281,10 @@ const char *field_start(const char *p, int field)
                /* skip this field */
                while (1) {
                        c = *(p++);
-                       if (c == ' ')
-                               break;
-                       if (c > ' ')
-                               continue;
                        if (c == '\0')
                                return p - 1;
+                       if (c == ' ')
+                               break;
                }
        }
 #else