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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 4 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 5 additions & 0 deletions
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

Lines changed: 1 addition & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy