Skip to content

Commit 19ce381

Browse files
committed
fix leak when ipo is enabled
1 parent 24dd44b commit 19ce381

File tree

6 files changed

+27
-16
lines changed

6 files changed

+27
-16
lines changed

ODIN_II/SRC/adders.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ t_linked_vptr *add_list = NULL;
5151
t_linked_vptr *processed_adder_list = NULL;
5252
t_linked_vptr *chain_list = NULL;
5353
int total = 0;
54-
int *adder = NULL;
54+
static int *adder = NULL;
5555
int min_add = 0;
5656
int min_threshold_adder = 0;
5757

@@ -67,13 +67,10 @@ void init_split_adder(nnode_t *node, nnode_t *ptr, int a, int sizea, int b, int
6767
*-------------------------------------------------------------------------*/
6868
void init_add_distribution()
6969
{
70-
int i, j;
7170
oassert(hard_adders != NULL);
72-
j = hard_adders->inputs->size + hard_adders->inputs->next->size;
73-
adder = (int *)vtr::malloc(sizeof(int) * (j + 1));
74-
for (i = 0; i <= j; i++)
75-
adder[i] = 0;
76-
return;
71+
72+
int len = hard_adders->inputs->size + hard_adders->inputs->next->size + 1;
73+
adder = (int *)vtr::calloc(len, sizeof(int));
7774
}
7875

7976
/*---------------------------------------------------------------------------
@@ -84,7 +81,12 @@ void record_add_distribution(nnode_t *node)
8481
oassert(hard_adders != NULL);
8582
oassert(node != NULL);
8683
adder[hard_adders->inputs->size] += 1;
87-
return;
84+
}
85+
86+
void terminate_add_distribution()
87+
{
88+
oassert(hard_adders != NULL);
89+
vtr::free(adder);
8890
}
8991

9092
/*---------------------------------------------------------------------------

ODIN_II/SRC/include/adders.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ extern int min_threshold_adder;
5555

5656
void init_add_distribution();
5757
void report_add_distribution();
58+
void terminate_add_distribution();
59+
5860
void declare_hard_adder(nnode_t *node);
5961
void instantiate_hard_adder(nnode_t *node, short mark, netlist_t *netlist);
6062
void instantiate_simple_soft_adder(nnode_t *node, short mark, netlist_t *netlist);

ODIN_II/SRC/include/multipliers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ extern vtr::t_linked_vptr *mult_list;
3838
extern int min_mult;
3939

4040
extern void init_mult_distribution();
41+
void terminate_mult_distribution();
42+
4143
extern void report_mult_distribution();
4244
extern void declare_hard_multiplier(nnode_t *node);
4345
extern void instantiate_hard_multiplier(nnode_t *node, short mark, netlist_t *netlist);

ODIN_II/SRC/multipliers.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ using vtr::insert_in_vptr_list;
4949
t_model *hard_multipliers = NULL;
5050
t_linked_vptr *mult_list = NULL;
5151
int min_mult = 0;
52-
int *mults = NULL;
52+
static int *mults = NULL;
5353

5454
void record_mult_distribution(nnode_t *node);
5555
void init_split_multiplier(nnode_t *node, nnode_t *ptr, int offa, int a, int offb, int b, nnode_t *node_a, nnode_t *node_b);
@@ -275,14 +275,15 @@ void instantiate_simple_soft_multiplier(nnode_t *node, short mark, netlist_t *ne
275275
*-------------------------------------------------------------------------*/
276276
void init_mult_distribution()
277277
{
278-
int i, j;
278+
oassert(hard_multipliers != NULL);
279+
int len = ( 1 + hard_multipliers->inputs->size ) * ( 1 + hard_multipliers->inputs->next->size );
280+
mults = (int *)vtr::calloc(len, sizeof(int));
281+
}
279282

283+
void terminate_mult_distribution()
284+
{
280285
oassert(hard_multipliers != NULL);
281-
mults = (int *)vtr::malloc(sizeof(int) * (hard_multipliers->inputs->size + 1) * (1 + hard_multipliers->inputs->next->size));
282-
for (i = 0; i <= hard_multipliers->inputs->size; i++)
283-
for (j = 0; j <= hard_multipliers->inputs->next->size; j++)
284-
mults[i * hard_multipliers->inputs->size + j] = 0;
285-
return;
286+
vtr::free(mults);
286287
}
287288

288289
/*---------------------------------------------------------------------------

ODIN_II/SRC/odin_ii.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,13 @@ static ODIN_ERROR_CODE synthesize_verilog()
192192
printf("--------------------------------------------------------------------\n");
193193

194194
report_mult_distribution();
195+
terminate_mult_distribution();
196+
195197
report_add_distribution();
198+
terminate_add_distribution();
199+
196200
report_sub_distribution();
201+
197202
deregister_hard_blocks();
198203

199204
//cleanup netlist

ODIN_II/SRC/subtractions.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ using vtr::t_linked_vptr;
4444
t_linked_vptr *sub_list = NULL;
4545
t_linked_vptr *sub_chain_list = NULL;
4646
int subchaintotal = 0;
47-
int *sub = NULL;
4847

4948
void init_split_adder_for_sub(nnode_t *node, nnode_t *ptr, int a, int sizea, int b, int sizeb, int cin, int cout, int index, int flag);
5049

0 commit comments

Comments
 (0)