From 080f31344b8fda6171d1cf39e66464d57fbbfbc4 Mon Sep 17 00:00:00 2001
From: Kristof Szabados <Kristof.Szabados@ericsson.com>
Date: Wed, 19 Dec 2018 13:04:30 +0100
Subject: [PATCH] amazing 0.3% speed improvement !

Signed-off-by: Kristof Szabados <Kristof.Szabados@ericsson.com>
---
 compiler2/record.c | 48 ++++++++++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/compiler2/record.c b/compiler2/record.c
index 0671f8e44..e8ee59f19 100644
--- a/compiler2/record.c
+++ b/compiler2/record.c
@@ -3723,20 +3723,24 @@ void defRecordClass1(const struct_def *sdef, output_struct *output)
       "  boolean is_bound() const;\n\n");
   src = mputprintf(src,
       "boolean %s::is_bound() const\n"
-      "{\n", name);
+      "{\n"
+      "return ", name);
       for(i=0; i < sdef->nElements; i++) {
+        if (i != 0 ) {
+          src = mputstr(src, "\n  || ");
+        }
         if(sdef->elements[i].isOptional) {
           src = mputprintf(src,
-            "if(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_bound()) return TRUE;\n",
+            "(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_bound())",
             sdef->elements[i].name, sdef->elements[i].name);
         } else {
           src = mputprintf(src,
-            "if(field_%s.is_bound()) return TRUE;\n",
+            "(field_%s.is_bound())",
             sdef->elements[i].name);
         }
       }
   src = mputprintf(src,
-      "return FALSE;\n"
+      ";\n"
       "}\n");
 
   /* is_present */
@@ -3748,20 +3752,24 @@ void defRecordClass1(const struct_def *sdef, output_struct *output)
       "  boolean is_value() const;\n\n");
   src = mputprintf(src,
       "boolean %s::is_value() const\n"
-      "{\n", name);
+      "{\n"
+      "return ", name);
       for(i=0; i < sdef->nElements; i++) {
+        if (i != 0 ) {
+          src = mputstr(src, "\n  && ");
+        }
         if(sdef->elements[i].isOptional) {
           src = mputprintf(src,
-            "if(OPTIONAL_OMIT != field_%s.get_selection() && !field_%s.is_value()) return FALSE;\n",
+            "(OPTIONAL_OMIT == field_%s.get_selection() || field_%s.is_value())",
             sdef->elements[i].name, sdef->elements[i].name);
         } else {
           src = mputprintf(src,
-            "if(!field_%s.is_value()) return FALSE;\n",
+            "field_%s.is_value()",
             sdef->elements[i].name);
         }
       }
   src = mputprintf(src,
-      "return TRUE;\n}\n");
+      ";\n}\n");
 
   /* field accessor methods */
   for (i = 0; i < sdef->nElements; i++) {
@@ -5959,19 +5967,23 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output)
         "if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) "
         "return FALSE;\n", name);
     src = mputstr(src, "if (template_selection != SPECIFIC_VALUE) return TRUE;\n");
+    src = mputstr(src, "return ");
     for (i = 0; i < sdef->nElements; i++) {
+      if (i != 0) {
+        src = mputstr(src, "\n ||");
+      }
         if (sdef->elements[i].isOptional) {
             src = mputprintf(src,
-                "if (single_value->field_%s.is_omit() ||"
-                    " single_value->field_%s.is_bound()) return TRUE;\n",
+                "(single_value->field_%s.is_omit() ||"
+                    " single_value->field_%s.is_bound())\n",
                 sdef->elements[i].name, sdef->elements[i].name);
         } else {
             src = mputprintf(src,
-                "if (single_value->field_%s.is_bound()) return TRUE;\n",
+                "single_value->field_%s.is_bound()\n",
                 sdef->elements[i].name);
         }
     }
-    src = mputstr(src, "return FALSE;\n"
+    src = mputstr(src, ";\n"
         "}\n\n");
 
     /* is_value */
@@ -5981,19 +5993,23 @@ void defRecordTemplate1(const struct_def *sdef, output_struct *output)
         "{\n"
         "if (template_selection != SPECIFIC_VALUE || is_ifpresent) "
         "return FALSE;\n", name);
+        src = mputstr(src, "return ");
     for (i = 0; i < sdef->nElements; i++) {
+      if (i != 0) {
+        src = mputstr(src, "\n &&");
+      }
         if (sdef->elements[i].isOptional) {
             src = mputprintf(src,
-                "if (!single_value->field_%s.is_omit() &&"
-                    " !single_value->field_%s.is_value()) return FALSE;\n",
+                "(single_value->field_%s.is_omit() ||"
+                    " single_value->field_%s.is_value())",
                 sdef->elements[i].name, sdef->elements[i].name);
         } else {
             src = mputprintf(src,
-                "if (!single_value->field_%s.is_value()) return FALSE;\n",
+                "single_value->field_%s.is_value()",
                 sdef->elements[i].name);
         }
     }
-    src = mputstr(src, "return TRUE;\n"
+    src = mputstr(src, ";\n"
         "}\n\n");
 
     /* clean_up function */
-- 
GitLab