vppinfra: add CLIB_ASSUME() macro 63/34263/9
authorDamjan Marion <damarion@cisco.com>
Wed, 27 Oct 2021 16:19:43 +0000 (18:19 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 2 Nov 2021 04:44:06 +0000 (04:44 +0000)
This macro privides a way to tell compiler that it is safe to assume
that specified expression is true so it can optimize code accordingly.

i.e.

    CLIB_ASSUME (n < 3);

    while (n)
    {
      /* ... */
    }

Will tell compiler that n is never going to be >= 3 so instead of
creating loop it will just unroll loop 2 times.

Type: improvement
Change-Id: I718a9b95ff7980d7ac68eb9a88357a4ab6eee74a
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vppinfra/clib.h

index 81b59e2..52e7217 100644 (file)
 #define PREDICT_FALSE(x) __builtin_expect((x),0)
 #define PREDICT_TRUE(x) __builtin_expect((x),1)
 #define COMPILE_TIME_CONST(x) __builtin_constant_p (x)
+#define CLIB_ASSUME(x)                                                        \
+  do                                                                          \
+    {                                                                         \
+      if (!(x))                                                               \
+       __builtin_unreachable ();                                             \
+    }                                                                         \
+  while (0)
 
 /*
  * Compiler barrier