Commit e285df08 by Jan Hubicka Committed by Jan Hubicka

df-core.c (df_clear_bb_info): New function.

	* df-core.c (df_clear_bb_info): New function.
	(df_set_blocks): bb_info is always allocated.
	(df_get_bb_info): Use block_info_elt_size.
	(df_set_bb_info): Likewise.
	(df_compact_blocks): Update for new block_info.
	(grow_bb_info): New function.
	* df-problems.c (df_grow_bb_info): Move to df-core.c
	(df_rd_set_bb_info): Remove.
	(df_rd_free_bb_info): Do not free block pool.
	(df_rd_alloc): Do not create pool, use check for
	obstack presence instead of NULL pointer for new blocks.
	(df_rd_free): DO not free alloc pool; clear block_info.
	(problem_RD): Add size of block info structure.
	(df_lr_set_bb_info): Remove.
	(df_lr_free_bb_info): Do not free block pool.
	(df_lr_alloc): Do not create pool, use check for
	obstack presence instead of NULL pointer for new blocks.
	(df_lr_free): DO not free alloc pool; clear block_info.
	(problem_LR): Add size of block info structure.
	(df_live_set_bb_info): Remove.
	(df_live_free_bb_info): Do not free block pool.
	(df_live_alloc): Do not create pool, use check for
	obstack presence instead of NULL pointer for new blocks.
	(df_live_free): DO not free alloc pool; clear block_info.
	(problem_LIVE): Add size of block info structure.
	(problem_CHAIN): Add size of block info structure.
	(df_byte_lr_set_bb_info): Remove.
	(df_byte_lr_free_bb_info): Do not free block pool.
	(df_byte_lr_alloc): Do not create pool, use check for
	obstack presence instead of NULL pointer for new blocks.
	(df_byte_lr_free): DO not free alloc pool; clear block_info.
	(problem_BYTE_LR): Add size of block info structure.
	(problem_NOTE): Add size of block info structure.
	(df_byte_MD_set_bb_info): Remove.
	(df_byte_MD_free_bb_info): Do not free block pool.
	(df_byte_MD_alloc): Do not create pool, use check for
	obstack presence instead of NULL pointer for new blocks.
	(df_byte_MD_free): DO not free alloc pool; clear block_info.
	(problem_BD): Add size of block info structure.
	* df-scan.c (df_scan_free_internal): Free block pool.
	(df_scan_set_bb_info): Remove.
	(df_scan_free_bb_info): Check for artificial_defs instead
	of bb_info being non-NULL.
	(df_scan_alloc): DO not create df_scan_block pool.
	(problem_SCAN): Set size of block info.
	(df_bb_refs_record): Do not allocate bb_info.
	* df.h (df_problem): Add block_info_elt_size.
	(struct dataflow): Change block_info to void *.
	(df_scan_get_bb_info, df_rd_get_bb_info, df_lr_get_bb_info,
	df_md_get_bb_info, df_live_get_bb_info, df_byte_lr_get_bb_info): Return
	in-line structures.

From-SVN: r160660
parent 02d635a2
2010-06-12 Jan Hubicka <jh@suse.cz> 2010-06-12 Jan Hubicka <jh@suse.cz>
* df-core.c (df_clear_bb_info): New function.
(df_set_blocks): bb_info is always allocated.
(df_get_bb_info): Use block_info_elt_size.
(df_set_bb_info): Likewise.
(df_compact_blocks): Update for new block_info.
(grow_bb_info): New function.
* df-problems.c (df_grow_bb_info): Move to df-core.c
(df_rd_set_bb_info): Remove.
(df_rd_free_bb_info): Do not free block pool.
(df_rd_alloc): Do not create pool, use check for
obstack presence instead of NULL pointer for new blocks.
(df_rd_free): DO not free alloc pool; clear block_info.
(problem_RD): Add size of block info structure.
(df_lr_set_bb_info): Remove.
(df_lr_free_bb_info): Do not free block pool.
(df_lr_alloc): Do not create pool, use check for
obstack presence instead of NULL pointer for new blocks.
(df_lr_free): DO not free alloc pool; clear block_info.
(problem_LR): Add size of block info structure.
(df_live_set_bb_info): Remove.
(df_live_free_bb_info): Do not free block pool.
(df_live_alloc): Do not create pool, use check for
obstack presence instead of NULL pointer for new blocks.
(df_live_free): DO not free alloc pool; clear block_info.
(problem_LIVE): Add size of block info structure.
(problem_CHAIN): Add size of block info structure.
(df_byte_lr_set_bb_info): Remove.
(df_byte_lr_free_bb_info): Do not free block pool.
(df_byte_lr_alloc): Do not create pool, use check for
obstack presence instead of NULL pointer for new blocks.
(df_byte_lr_free): DO not free alloc pool; clear block_info.
(problem_BYTE_LR): Add size of block info structure.
(problem_NOTE): Add size of block info structure.
(df_byte_MD_set_bb_info): Remove.
(df_byte_MD_free_bb_info): Do not free block pool.
(df_byte_MD_alloc): Do not create pool, use check for
obstack presence instead of NULL pointer for new blocks.
(df_byte_MD_free): DO not free alloc pool; clear block_info.
(problem_BD): Add size of block info structure.
* df-scan.c (df_scan_free_internal): Free block pool.
(df_scan_set_bb_info): Remove.
(df_scan_free_bb_info): Check for artificial_defs instead
of bb_info being non-NULL.
(df_scan_alloc): DO not create df_scan_block pool.
(problem_SCAN): Set size of block info.
(df_bb_refs_record): Do not allocate bb_info.
* df.h (df_problem): Add block_info_elt_size.
(struct dataflow): Change block_info to void *.
(df_scan_get_bb_info, df_rd_get_bb_info, df_lr_get_bb_info,
df_md_get_bb_info, df_live_get_bb_info, df_byte_lr_get_bb_info): Return
in-line structures.
2010-06-12 Jan Hubicka <jh@suse.cz>
PR tree-optimize/44485 PR tree-optimize/44485
* tree-cfgcleanup.c (fixup_noreturn_call): Remove basic blocks containing * tree-cfgcleanup.c (fixup_noreturn_call): Remove basic blocks containing
use of return value of noreturn function. use of return value of noreturn function.
......
...@@ -399,6 +399,7 @@ are write-only operations. ...@@ -399,6 +399,7 @@ are write-only operations.
static void *df_get_bb_info (struct dataflow *, unsigned int); static void *df_get_bb_info (struct dataflow *, unsigned int);
static void df_set_bb_info (struct dataflow *, unsigned int, void *); static void df_set_bb_info (struct dataflow *, unsigned int, void *);
static void df_clear_bb_info (struct dataflow *, unsigned int);
#ifdef DF_DEBUG_CFG #ifdef DF_DEBUG_CFG
static void df_set_clean_cfg (void); static void df_set_clean_cfg (void);
#endif #endif
...@@ -523,11 +524,8 @@ df_set_blocks (bitmap blocks) ...@@ -523,11 +524,8 @@ df_set_blocks (bitmap blocks)
if (bb) if (bb)
{ {
void *bb_info = df_get_bb_info (dflow, bb_index); void *bb_info = df_get_bb_info (dflow, bb_index);
if (bb_info) dflow->problem->free_bb_fun (bb, bb_info);
{ df_clear_bb_info (dflow, bb_index);
dflow->problem->free_bb_fun (bb, bb_info);
df_set_bb_info (dflow, bb_index, NULL);
}
} }
} }
} }
...@@ -1294,7 +1292,8 @@ df_get_bb_info (struct dataflow *dflow, unsigned int index) ...@@ -1294,7 +1292,8 @@ df_get_bb_info (struct dataflow *dflow, unsigned int index)
return NULL; return NULL;
if (index >= dflow->block_info_size) if (index >= dflow->block_info_size)
return NULL; return NULL;
return (struct df_scan_bb_info *) dflow->block_info[index]; return (void *)((char *)dflow->block_info
+ index * dflow->problem->block_info_elt_size);
} }
...@@ -1305,7 +1304,22 @@ df_set_bb_info (struct dataflow *dflow, unsigned int index, ...@@ -1305,7 +1304,22 @@ df_set_bb_info (struct dataflow *dflow, unsigned int index,
void *bb_info) void *bb_info)
{ {
gcc_assert (dflow->block_info); gcc_assert (dflow->block_info);
dflow->block_info[index] = bb_info; memcpy ((char *)dflow->block_info
+ index * dflow->problem->block_info_elt_size,
bb_info, dflow->problem->block_info_elt_size);
}
/* Clear basic block info. */
static void
df_clear_bb_info (struct dataflow *dflow, unsigned int index)
{
gcc_assert (dflow->block_info);
gcc_assert (dflow->block_info_size > index);
memset ((char *)dflow->block_info
+ index * dflow->problem->block_info_elt_size,
0, dflow->problem->block_info_elt_size);
} }
...@@ -1378,6 +1392,29 @@ df_set_bb_dirty_nonlr (basic_block bb) ...@@ -1378,6 +1392,29 @@ df_set_bb_dirty_nonlr (basic_block bb)
} }
} }
/* Grow the bb_info array. */
void
df_grow_bb_info (struct dataflow *dflow)
{
unsigned int new_size = last_basic_block + 1;
if (dflow->block_info_size < new_size)
{
new_size += new_size / 4;
dflow->block_info
= (void *)XRESIZEVEC (char, (char *)dflow->block_info,
new_size
* dflow->problem->block_info_elt_size);
memset ((char *)dflow->block_info
+ dflow->block_info_size
* dflow->problem->block_info_elt_size,
0,
(new_size - dflow->block_info_size)
* dflow->problem->block_info_elt_size);
dflow->block_info_size = new_size;
}
}
/* Clear the dirty bits. This is called from places that delete /* Clear the dirty bits. This is called from places that delete
blocks. */ blocks. */
...@@ -1392,6 +1429,7 @@ df_clear_bb_dirty (basic_block bb) ...@@ -1392,6 +1429,7 @@ df_clear_bb_dirty (basic_block bb)
bitmap_clear_bit (dflow->out_of_date_transfer_functions, bb->index); bitmap_clear_bit (dflow->out_of_date_transfer_functions, bb->index);
} }
} }
/* Called from the rtl_compact_blocks to reorganize the problems basic /* Called from the rtl_compact_blocks to reorganize the problems basic
block info. */ block info. */
...@@ -1400,10 +1438,8 @@ df_compact_blocks (void) ...@@ -1400,10 +1438,8 @@ df_compact_blocks (void)
{ {
int i, p; int i, p;
basic_block bb; basic_block bb;
void **problem_temps; void *problem_temps;
int size = last_basic_block * sizeof (void *);
bitmap_head tmp; bitmap_head tmp;
problem_temps = XNEWVAR (void *, size);
bitmap_initialize (&tmp, &df_bitmap_obstack); bitmap_initialize (&tmp, &df_bitmap_obstack);
for (p = 0; p < df->num_problems_defined; p++) for (p = 0; p < df->num_problems_defined; p++)
...@@ -1433,6 +1469,8 @@ df_compact_blocks (void) ...@@ -1433,6 +1469,8 @@ df_compact_blocks (void)
/* Now shuffle the block info for the problem. */ /* Now shuffle the block info for the problem. */
if (dflow->problem->free_bb_fun) if (dflow->problem->free_bb_fun)
{ {
int size = last_basic_block * dflow->problem->block_info_elt_size;
problem_temps = XNEWVAR (char, size);
df_grow_bb_info (dflow); df_grow_bb_info (dflow);
memcpy (problem_temps, dflow->block_info, size); memcpy (problem_temps, dflow->block_info, size);
...@@ -1442,22 +1480,15 @@ df_compact_blocks (void) ...@@ -1442,22 +1480,15 @@ df_compact_blocks (void)
i = NUM_FIXED_BLOCKS; i = NUM_FIXED_BLOCKS;
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
df_set_bb_info (dflow, i, problem_temps[bb->index]); df_set_bb_info (dflow, i,
problem_temps[bb->index] = NULL; (char *)problem_temps
+ bb->index * dflow->problem->block_info_elt_size);
i++; i++;
} }
memset (dflow->block_info + i, 0, memset ((char *)dflow->block_info
(last_basic_block - i) *sizeof (void *)); + i * dflow->problem->block_info_elt_size, 0,
(last_basic_block - i)
/* Free any block infos that were not copied (and NULLed). * dflow->problem->block_info_elt_size);
These are from orphaned blocks. */
for (i = NUM_FIXED_BLOCKS; i < last_basic_block; i++)
{
basic_block bb = BASIC_BLOCK (i);
if (problem_temps[i] && bb)
dflow->problem->free_bb_fun
(bb, problem_temps[i]);
}
} }
} }
...@@ -1482,8 +1513,6 @@ df_compact_blocks (void) ...@@ -1482,8 +1513,6 @@ df_compact_blocks (void)
bitmap_clear (&tmp); bitmap_clear (&tmp);
free (problem_temps);
i = NUM_FIXED_BLOCKS; i = NUM_FIXED_BLOCKS;
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
...@@ -1525,7 +1554,6 @@ df_bb_replace (int old_index, basic_block new_block) ...@@ -1525,7 +1554,6 @@ df_bb_replace (int old_index, basic_block new_block)
if (dflow->block_info) if (dflow->block_info)
{ {
df_grow_bb_info (dflow); df_grow_bb_info (dflow);
gcc_assert (df_get_bb_info (dflow, old_index) == NULL);
df_set_bb_info (dflow, old_index, df_set_bb_info (dflow, old_index,
df_get_bb_info (dflow, new_block_index)); df_get_bb_info (dflow, new_block_index));
} }
...@@ -1561,7 +1589,7 @@ df_bb_delete (int bb_index) ...@@ -1561,7 +1589,7 @@ df_bb_delete (int bb_index)
if (bb_info) if (bb_info)
{ {
dflow->problem->free_bb_fun (bb, bb_info); dflow->problem->free_bb_fun (bb, bb_info);
df_set_bb_info (dflow, bb_index, NULL); df_clear_bb_info (dflow, bb_index);
} }
} }
} }
......
...@@ -266,7 +266,6 @@ df_scan_free_internal (void) ...@@ -266,7 +266,6 @@ df_scan_free_internal (void)
bitmap_clear (&df->insns_to_rescan); bitmap_clear (&df->insns_to_rescan);
bitmap_clear (&df->insns_to_notes_rescan); bitmap_clear (&df->insns_to_notes_rescan);
free_alloc_pool (df_scan->block_pool);
free_alloc_pool (problem_data->ref_base_pool); free_alloc_pool (problem_data->ref_base_pool);
free_alloc_pool (problem_data->ref_artificial_pool); free_alloc_pool (problem_data->ref_artificial_pool);
free_alloc_pool (problem_data->ref_regular_pool); free_alloc_pool (problem_data->ref_regular_pool);
...@@ -280,17 +279,6 @@ df_scan_free_internal (void) ...@@ -280,17 +279,6 @@ df_scan_free_internal (void)
} }
/* Set basic block info. */
static void
df_scan_set_bb_info (unsigned int index,
struct df_scan_bb_info *bb_info)
{
df_grow_bb_info (df_scan);
df_scan->block_info[index] = (void *) bb_info;
}
/* Free basic block info. */ /* Free basic block info. */
static void static void
...@@ -298,7 +286,9 @@ df_scan_free_bb_info (basic_block bb, void *vbb_info) ...@@ -298,7 +286,9 @@ df_scan_free_bb_info (basic_block bb, void *vbb_info)
{ {
struct df_scan_bb_info *bb_info = (struct df_scan_bb_info *) vbb_info; struct df_scan_bb_info *bb_info = (struct df_scan_bb_info *) vbb_info;
unsigned int bb_index = bb->index; unsigned int bb_index = bb->index;
if (bb_info)
/* See if bb_info is initialized. */
if (bb_info->artificial_defs)
{ {
rtx insn; rtx insn;
FOR_BB_INSNS (bb, insn) FOR_BB_INSNS (bb, insn)
...@@ -312,13 +302,15 @@ df_scan_free_bb_info (basic_block bb, void *vbb_info) ...@@ -312,13 +302,15 @@ df_scan_free_bb_info (basic_block bb, void *vbb_info)
bb_info = df_scan_get_bb_info (bb_index); bb_info = df_scan_get_bb_info (bb_index);
/* Get rid of any artificial uses or defs. */ /* Get rid of any artificial uses or defs. */
df_ref_chain_delete_du_chain (bb_info->artificial_defs); if (bb_info->artificial_defs)
df_ref_chain_delete_du_chain (bb_info->artificial_uses); {
df_ref_chain_delete (bb_info->artificial_defs); df_ref_chain_delete_du_chain (bb_info->artificial_defs);
df_ref_chain_delete (bb_info->artificial_uses); df_ref_chain_delete_du_chain (bb_info->artificial_uses);
bb_info->artificial_defs = NULL; df_ref_chain_delete (bb_info->artificial_defs);
bb_info->artificial_uses = NULL; df_ref_chain_delete (bb_info->artificial_uses);
pool_free (df_scan->block_pool, bb_info); bb_info->artificial_defs = NULL;
bb_info->artificial_uses = NULL;
}
} }
} }
...@@ -339,11 +331,6 @@ df_scan_alloc (bitmap all_blocks ATTRIBUTE_UNUSED) ...@@ -339,11 +331,6 @@ df_scan_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
if (df_scan->problem_data) if (df_scan->problem_data)
df_scan_free_internal (); df_scan_free_internal ();
df_scan->block_pool
= create_alloc_pool ("df_scan_block pool",
sizeof (struct df_scan_bb_info),
block_size);
problem_data = XNEW (struct df_scan_problem_data); problem_data = XNEW (struct df_scan_problem_data);
df_scan->problem_data = problem_data; df_scan->problem_data = problem_data;
df_scan->computed = true; df_scan->computed = true;
...@@ -383,11 +370,6 @@ df_scan_alloc (bitmap all_blocks ATTRIBUTE_UNUSED) ...@@ -383,11 +370,6 @@ df_scan_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
{ {
unsigned int bb_index = bb->index; unsigned int bb_index = bb->index;
struct df_scan_bb_info *bb_info = df_scan_get_bb_info (bb_index); struct df_scan_bb_info *bb_info = df_scan_get_bb_info (bb_index);
if (!bb_info)
{
bb_info = (struct df_scan_bb_info *) pool_alloc (df_scan->block_pool);
df_scan_set_bb_info (bb_index, bb_info);
}
bb_info->artificial_defs = NULL; bb_info->artificial_defs = NULL;
bb_info->artificial_uses = NULL; bb_info->artificial_uses = NULL;
} }
...@@ -539,6 +521,7 @@ static struct df_problem problem_SCAN = ...@@ -539,6 +521,7 @@ static struct df_problem problem_SCAN =
NULL, /* Incremental solution verify start. */ NULL, /* Incremental solution verify start. */
NULL, /* Incremental solution verify end. */ NULL, /* Incremental solution verify end. */
NULL, /* Dependent problem. */ NULL, /* Dependent problem. */
sizeof (struct df_scan_bb_info),/* Size of entry of block_info array. */
TV_DF_SCAN, /* Timing variable. */ TV_DF_SCAN, /* Timing variable. */
false /* Reset blocks on dropping out of blocks_to_analyze. */ false /* Reset blocks on dropping out of blocks_to_analyze. */
}; };
...@@ -3698,23 +3681,12 @@ df_bb_refs_record (int bb_index, bool scan_insns) ...@@ -3698,23 +3681,12 @@ df_bb_refs_record (int bb_index, bool scan_insns)
basic_block bb = BASIC_BLOCK (bb_index); basic_block bb = BASIC_BLOCK (bb_index);
rtx insn; rtx insn;
int luid = 0; int luid = 0;
struct df_scan_bb_info *bb_info;
struct df_collection_rec collection_rec; struct df_collection_rec collection_rec;
if (!df) if (!df)
return; return;
bb_info = df_scan_get_bb_info (bb_index); df_grow_bb_info (df_scan);
/* Need to make sure that there is a record in the basic block info. */
if (!bb_info)
{
bb_info = (struct df_scan_bb_info *) pool_alloc (df_scan->block_pool);
df_scan_set_bb_info (bb_index, bb_info);
bb_info->artificial_defs = NULL;
bb_info->artificial_uses = NULL;
}
collection_rec.def_vec = VEC_alloc (df_ref, stack, 128); collection_rec.def_vec = VEC_alloc (df_ref, stack, 128);
collection_rec.use_vec = VEC_alloc (df_ref, stack, 32); collection_rec.use_vec = VEC_alloc (df_ref, stack, 32);
collection_rec.eq_use_vec = VEC_alloc (df_ref, stack, 32); collection_rec.eq_use_vec = VEC_alloc (df_ref, stack, 32);
......
...@@ -277,6 +277,7 @@ struct df_problem { ...@@ -277,6 +277,7 @@ struct df_problem {
df_verify_solution_start verify_start_fun; df_verify_solution_start verify_start_fun;
df_verify_solution_end verify_end_fun; df_verify_solution_end verify_end_fun;
struct df_problem *dependent_problem; struct df_problem *dependent_problem;
unsigned int block_info_elt_size;
/* The timevar id associated with this pass. */ /* The timevar id associated with this pass. */
timevar_id_t tv_id; timevar_id_t tv_id;
...@@ -294,7 +295,7 @@ struct dataflow ...@@ -294,7 +295,7 @@ struct dataflow
/* Array indexed by bb->index, that contains basic block problem and /* Array indexed by bb->index, that contains basic block problem and
solution specific information. */ solution specific information. */
void **block_info; void *block_info;
unsigned int block_info_size; unsigned int block_info_size;
/* The pool to allocate the block_info from. */ /* The pool to allocate the block_info from. */
...@@ -1037,7 +1038,7 @@ static inline struct df_scan_bb_info * ...@@ -1037,7 +1038,7 @@ static inline struct df_scan_bb_info *
df_scan_get_bb_info (unsigned int index) df_scan_get_bb_info (unsigned int index)
{ {
if (index < df_scan->block_info_size) if (index < df_scan->block_info_size)
return (struct df_scan_bb_info *) df_scan->block_info[index]; return &((struct df_scan_bb_info *) df_scan->block_info)[index];
else else
return NULL; return NULL;
} }
...@@ -1046,7 +1047,7 @@ static inline struct df_rd_bb_info * ...@@ -1046,7 +1047,7 @@ static inline struct df_rd_bb_info *
df_rd_get_bb_info (unsigned int index) df_rd_get_bb_info (unsigned int index)
{ {
if (index < df_rd->block_info_size) if (index < df_rd->block_info_size)
return (struct df_rd_bb_info *) df_rd->block_info[index]; return &((struct df_rd_bb_info *) df_rd->block_info)[index];
else else
return NULL; return NULL;
} }
...@@ -1055,7 +1056,7 @@ static inline struct df_lr_bb_info * ...@@ -1055,7 +1056,7 @@ static inline struct df_lr_bb_info *
df_lr_get_bb_info (unsigned int index) df_lr_get_bb_info (unsigned int index)
{ {
if (index < df_lr->block_info_size) if (index < df_lr->block_info_size)
return (struct df_lr_bb_info *) df_lr->block_info[index]; return &((struct df_lr_bb_info *) df_lr->block_info)[index];
else else
return NULL; return NULL;
} }
...@@ -1064,7 +1065,7 @@ static inline struct df_md_bb_info * ...@@ -1064,7 +1065,7 @@ static inline struct df_md_bb_info *
df_md_get_bb_info (unsigned int index) df_md_get_bb_info (unsigned int index)
{ {
if (index < df_md->block_info_size) if (index < df_md->block_info_size)
return (struct df_md_bb_info *) df_md->block_info[index]; return &((struct df_md_bb_info *) df_md->block_info)[index];
else else
return NULL; return NULL;
} }
...@@ -1073,7 +1074,7 @@ static inline struct df_live_bb_info * ...@@ -1073,7 +1074,7 @@ static inline struct df_live_bb_info *
df_live_get_bb_info (unsigned int index) df_live_get_bb_info (unsigned int index)
{ {
if (index < df_live->block_info_size) if (index < df_live->block_info_size)
return (struct df_live_bb_info *) df_live->block_info[index]; return &((struct df_live_bb_info *) df_live->block_info)[index];
else else
return NULL; return NULL;
} }
...@@ -1082,7 +1083,7 @@ static inline struct df_byte_lr_bb_info * ...@@ -1082,7 +1083,7 @@ static inline struct df_byte_lr_bb_info *
df_byte_lr_get_bb_info (unsigned int index) df_byte_lr_get_bb_info (unsigned int index)
{ {
if (index < df_byte_lr->block_info_size) if (index < df_byte_lr->block_info_size)
return (struct df_byte_lr_bb_info *) df_byte_lr->block_info[index]; return &((struct df_byte_lr_bb_info *) df_byte_lr->block_info)[index];
else else
return NULL; return NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment