Skip to content

Commit 9db7d47

Browse files
committed
#ifdef out assorted unused GEQO code.
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.
1 parent 0d18852 commit 9db7d47

File tree

10 files changed

+30
-3
lines changed

10 files changed

+30
-3
lines changed

src/backend/optimizer/geqo/geqo_cx.c

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "optimizer/geqo_recombination.h"
3939
#include "optimizer/geqo_random.h"
4040

41+
#if defined(CX)
4142

4243
/* cx
4344
*
@@ -119,3 +120,5 @@ cx(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring,
119120

120121
return num_diffs;
121122
}
123+
124+
#endif /* defined(CX) */

src/backend/optimizer/geqo/geqo_erx.c

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "optimizer/geqo_recombination.h"
3636
#include "optimizer/geqo_random.h"
3737

38+
#if defined(ERX)
3839

3940
static int gimme_edge(PlannerInfo *root, Gene gene1, Gene gene2, Edge *edge_table);
4041
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
466467
elog(ERROR, "no edge found");
467468
return 0; /* to keep the compiler quiet */
468469
}
470+
471+
#endif /* defined(ERX) */

src/backend/optimizer/geqo/geqo_main.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ double Geqo_seed;
4646
static int gimme_pool_size(int nr_rel);
4747
static int gimme_number_generations(int pool_size);
4848

49-
/* define edge recombination crossover [ERX] per default */
49+
/* complain if no recombination mechanism is #define'd */
5050
#if !defined(ERX) && \
5151
!defined(PMX) && \
5252
!defined(CX) && \
5353
!defined(PX) && \
5454
!defined(OX1) && \
5555
!defined(OX2)
56-
#define ERX
56+
#error "must choose one GEQO recombination mechanism in geqo.h"
5757
#endif
5858

5959

src/backend/optimizer/geqo/geqo_mutation.c

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
#include "optimizer/geqo_mutation.h"
3636
#include "optimizer/geqo_random.h"
3737

38+
#if defined(CX) /* currently used only in CX mode */
39+
3840
void
3941
geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene)
4042
{
@@ -60,3 +62,5 @@ geqo_mutation(PlannerInfo *root, Gene *tour, int num_gene)
6062
num_swaps -= 1;
6163
}
6264
}
65+
66+
#endif /* defined(CX) */

src/backend/optimizer/geqo/geqo_ox1.c

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "optimizer/geqo_random.h"
3838
#include "optimizer/geqo_recombination.h"
3939

40+
#if defined(OX1)
4041

4142
/* ox1
4243
*
@@ -90,3 +91,5 @@ ox1(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
9091
}
9192

9293
}
94+
95+
#endif /* defined(OX1) */

src/backend/optimizer/geqo/geqo_ox2.c

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "optimizer/geqo_random.h"
3838
#include "optimizer/geqo_recombination.h"
3939

40+
#if defined(OX2)
4041

4142
/* ox2
4243
*
@@ -107,3 +108,5 @@ ox2(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
107108
}
108109

109110
}
111+
112+
#endif /* defined(OX2) */

src/backend/optimizer/geqo/geqo_pmx.c

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "optimizer/geqo_random.h"
3838
#include "optimizer/geqo_recombination.h"
3939

40+
#if defined(PMX)
4041

4142
/* pmx
4243
*
@@ -219,3 +220,5 @@ pmx(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene)
219220
pfree(indx);
220221
pfree(check_list);
221222
}
223+
224+
#endif /* defined(PMX) */

src/backend/optimizer/geqo/geqo_px.c

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "optimizer/geqo_random.h"
3838
#include "optimizer/geqo_recombination.h"
3939

40+
#if defined(PX)
4041

4142
/* px
4243
*
@@ -105,3 +106,5 @@ px(PlannerInfo *root, Gene *tour1, Gene *tour2, Gene *offspring, int num_gene,
105106
}
106107

107108
}
109+
110+
#endif /* defined(PX) */

src/backend/optimizer/geqo/geqo_recombination.c

+5
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ init_tour(PlannerInfo *root, Gene *tour, int num_gene)
5858
}
5959
}
6060

61+
/* city table is used in these recombination methods: */
62+
#if defined(CX) || defined(PX) || defined(OX1) || defined(OX2)
63+
6164
/* alloc_city_table
6265
*
6366
* allocate memory for city table
@@ -85,3 +88,5 @@ free_city_table(PlannerInfo *root, City *city_table)
8588
{
8689
pfree(city_table);
8790
}
91+
92+
#endif /* CX || PX || OX1 || OX2 */

src/include/optimizer/geqo.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#define GEQO_DEBUG
3232
*/
3333

34-
/* recombination mechanism */
34+
/* choose one recombination mechanism here */
3535
/*
3636
#define ERX
3737
#define PMX

0 commit comments

Comments
 (0)