]> granicus.if.org Git - postgresql/commitdiff
#ifdef out assorted unused GEQO code.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Jun 2017 17:34:05 +0000 (13:34 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 4 Jun 2017 17:34:05 +0000 (13:34 -0400)
I'd always assumed that backend/optimizer/geqo/'s remarkably poor
showing on code coverage metrics was because we weren't exercising
it much in the regression tests.  But it turns out that a good chunk
of the problem is that there's a bunch of code that is physically
unreachable (because the calls to it are #ifdef'd out in geqo_main.c)
but is being built anyway.  Making the called code have #if guards
similar to the calling code saves a couple of kilobytes of executable
size and should make the coverage numbers more reflective of reality.

It's arguable that we should just delete all the unused recombination
mechanisms altogether, but I didn't feel a need to go that far today.

src/backend/optimizer/geqo/geqo_cx.c
src/backend/optimizer/geqo/geqo_erx.c
src/backend/optimizer/geqo/geqo_main.c
src/backend/optimizer/geqo/geqo_mutation.c
src/backend/optimizer/geqo/geqo_ox1.c
src/backend/optimizer/geqo/geqo_ox2.c
src/backend/optimizer/geqo/geqo_pmx.c
src/backend/optimizer/geqo/geqo_px.c
src/backend/optimizer/geqo/geqo_recombination.c
src/include/optimizer/geqo.h

index 9f6d5e478aab3c53f18141995ec989f950831ee4..c72081e81af314fcb660f3ad0b0aebb63c36a5dd 100644 (file)
@@ -38,6 +38,7 @@
 #include "optimizer/geqo_recombination.h"
 #include "optimizer/geqo_random.h"
 
+#if defined(CX)
 
 /* cx
  *
@@ -119,3 +120,5 @@ cx(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring,
 
        return num_diffs;
 }
+
+#endif   /* defined(CX) */
index 133fe32348401472fcdc2879aa21f0582f8b9a9e..173be44409342efd39aed1d793dd955647a0f24f 100644 (file)
@@ -35,6 +35,7 @@
 #include "optimizer/geqo_recombination.h"
 #include "optimizer/geqo_random.h"
 
+#if defined(ERX)
 
 static int     gimme_edge(PlannerInfo *root, Gene gene1, Gene gene2, Edge *edge_table);
 static void remove_gene(PlannerInfo *root, Gene gene, Edge edge, Edge *edge_table);
@@ -466,3 +467,5 @@ edge_failure(PlannerInfo *root, Gene *gene, int index, Edge *edge_table, int num
        elog(ERROR, "no edge found");
        return 0;                                       /* to keep the compiler quiet */
 }
+
+#endif   /* defined(ERX) */
index 52bd428187be7b2521d30a12cd10938542f37134..86213ac5a097eec68bb2155026fcc364c04f8a52 100644 (file)
@@ -46,14 +46,14 @@ double              Geqo_seed;
 static int     gimme_pool_size(int nr_rel);
 static int     gimme_number_generations(int pool_size);
 
-/* define edge recombination crossover [ERX] per default */
+/* complain if no recombination mechanism is #define'd */
 #if !defined(ERX) && \
        !defined(PMX) && \
        !defined(CX)  && \
        !defined(PX)  && \
        !defined(OX1) && \
        !defined(OX2)
-#define ERX
+#error "must choose one GEQO recombination mechanism in geqo.h"
 #endif
 
 
index 1a06d497757f149e890bb8f5bbf89dd6dc360a39..c6af00a2a76e5c0b373607078600a0f466c3d071 100644 (file)
@@ -35,6 +35,8 @@
 #include "optimizer/geqo_mutation.h"
 #include "optimizer/geqo_random.h"
 
+#if defined(CX)                                        /* currently used only in CX mode */
+
 void
 geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene)
 {
@@ -60,3 +62,5 @@ geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene)
                num_swaps -= 1;
        }
 }
+
+#endif   /* defined(CX) */
index fbf15282ad81f3ff0790bcf52d7f03ca6df20183..891cfa2403d7b2d928dd4e81e3cf45a255e526bf 100644 (file)
@@ -37,6 +37,7 @@
 #include "optimizer/geqo_random.h"
 #include "optimizer/geqo_recombination.h"
 
+#if defined(OX1)
 
 /* ox1
  *
@@ -90,3 +91,5 @@ ox1(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
        }
 
 }
+
+#endif   /* defined(OX1) */
index 01c55bea41c0b5d8d5b5bf9733973152a36dfade..b43455d3eb60be35b754835ac9e5a9e073278f7d 100644 (file)
@@ -37,6 +37,7 @@
 #include "optimizer/geqo_random.h"
 #include "optimizer/geqo_recombination.h"
 
+#if defined(OX2)
 
 /* ox2
  *
@@ -107,3 +108,5 @@ ox2(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
        }
 
 }
+
+#endif   /* defined(OX2) */
index deb0f7b353f94fba92a09d5d0dd61a5c5a7831d3..e9485cc8b5c6e61110c7adb614a418f52a63a502 100644 (file)
@@ -37,6 +37,7 @@
 #include "optimizer/geqo_random.h"
 #include "optimizer/geqo_recombination.h"
 
+#if defined(PMX)
 
 /* pmx
  *
@@ -219,3 +220,5 @@ pmx(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene)
        pfree(indx);
        pfree(check_list);
 }
+
+#endif   /* defined(PMX) */
index 99289bc11f5a08b43f55252ce0b10090ded852e6..f7f615462c6f093e4c8c1c866b8dd6136f87b4a6 100644 (file)
@@ -37,6 +37,7 @@
 #include "optimizer/geqo_random.h"
 #include "optimizer/geqo_recombination.h"
 
+#if defined(PX)
 
 /* px
  *
@@ -105,3 +106,5 @@ px(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
        }
 
 }
+
+#endif   /* defined(PX) */
index ef433e54e58c930f4140b5cf8fd39c52649b66ff..a61547c16d874224d5760bbb2fb28dfb374f763a 100644 (file)
@@ -58,6 +58,9 @@ init_tour(PlannerInfo *root, Gene *tour, int num_gene)
        }
 }
 
+/* city table is used in these recombination methods: */
+#if defined(CX) || defined(PX) || defined(OX1) || defined(OX2)
+
 /* alloc_city_table
  *
  *      allocate memory for city table
@@ -85,3 +88,5 @@ free_city_table(PlannerInfo *root, City *city_table)
 {
        pfree(city_table);
 }
+
+#endif   /* CX || PX || OX1 || OX2 */
index 6b09c4e19512627f5c410c43c2288b5349b7f16a..be65c054e1055bad4aaf69ada911cb0982610504 100644 (file)
@@ -31,7 +31,7 @@
  #define GEQO_DEBUG
  */
 
-/* recombination mechanism */
+/* choose one recombination mechanism here */
 /*
  #define ERX
  #define PMX