https://gcc.gnu.org/g:802a98d128f9b0eea2432f6511328d14e0bd721b
commit r15-880-g802a98d128f9b0eea2432f6511328d14e0bd721b Author: Hans-Peter Nilsson <h...@axis.com> Date: Tue May 28 23:18:14 2024 +0200 resource.cc: Remove redundant conditionals No functional change. - We always have a target_hash_table and bb_ticks because init_resource_info is always called. These conditionals are an ancient artifact: it's been quite a while since resource.cc was used elsewhere than exclusively from reorg.cc - In mark_target_live_regs, get rid of a now-redundant "if (tinfo != NULL)" conditional and replace an "if (bb)" with a gcc_assert. A "git diff -wb" (ignore whitespace diff) is better at showing the actual changes. * resource.cc (free_resource_info, clear_hashed_info_for_insn): Don't check for non-null target_hash_table and bb_ticks. (mark_target_live_regs): Ditto. Replace check for non-NULL result from BLOCK_FOR_INSN with a call to gcc_assert. Fold code conditioned on tinfo != NULL. Diff: --- gcc/resource.cc | 123 ++++++++++++++++++++++++-------------------------------- 1 file changed, 52 insertions(+), 71 deletions(-) diff --git a/gcc/resource.cc b/gcc/resource.cc index 62bd46f786e..7c1de886432 100644 --- a/gcc/resource.cc +++ b/gcc/resource.cc @@ -658,49 +658,42 @@ mark_target_live_regs (rtx_insn *insns, rtx target_maybe_return, struct resource res->cc = 0; /* See if we have computed this value already. */ - if (target_hash_table != NULL) - { - for (tinfo = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; - tinfo; tinfo = tinfo->next) - if (tinfo->uid == INSN_UID (target)) - break; - - /* Start by getting the basic block number. If we have saved - information, we can get it from there unless the insn at the - start of the basic block has been deleted. */ - if (tinfo && tinfo->block != -1 - && ! BB_HEAD (BASIC_BLOCK_FOR_FN (cfun, tinfo->block))->deleted ()) - b = tinfo->block; - } + for (tinfo = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; + tinfo; tinfo = tinfo->next) + if (tinfo->uid == INSN_UID (target)) + break; + + /* Start by getting the basic block number. If we have saved + information, we can get it from there unless the insn at the + start of the basic block has been deleted. */ + if (tinfo && tinfo->block != -1 + && ! BB_HEAD (BASIC_BLOCK_FOR_FN (cfun, tinfo->block))->deleted ()) + b = tinfo->block; if (b == -1) b = BLOCK_FOR_INSN (target)->index; gcc_assert (b != -1); - if (target_hash_table != NULL) + if (tinfo) { - if (tinfo) + /* If the information is up-to-date, use it. Otherwise, we will + update it below. */ + if (b == tinfo->block && tinfo->bb_tick == bb_ticks[b]) { - /* If the information is up-to-date, use it. Otherwise, we will - update it below. */ - if (b == tinfo->block && tinfo->bb_tick == bb_ticks[b]) - { - res->regs = tinfo->live_regs; - return; - } - } - else - { - /* Allocate a place to put our results and chain it into the - hash table. */ - tinfo = XNEW (struct target_info); - tinfo->uid = INSN_UID (target); - tinfo->block = b; - tinfo->next - = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; - target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME] = tinfo; + res->regs = tinfo->live_regs; + return; } } + else + { + /* Allocate a place to put our results and chain it into the hash + table. */ + tinfo = XNEW (struct target_info); + tinfo->uid = INSN_UID (target); + tinfo->block = b; + tinfo->next = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; + target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME] = tinfo; + } CLEAR_HARD_REG_SET (pending_dead_regs); @@ -825,13 +818,12 @@ mark_target_live_regs (rtx_insn *insns, rtx target_maybe_return, struct resource to be live here still are. The fallthrough edge may have left a live register uninitialized. */ bb = BLOCK_FOR_INSN (real_insn); - if (bb) - { - HARD_REG_SET extra_live; + gcc_assert (bb); - REG_SET_TO_HARD_REG_SET (extra_live, DF_LR_IN (bb)); - current_live_regs |= extra_live; - } + HARD_REG_SET extra_live; + + REG_SET_TO_HARD_REG_SET (extra_live, DF_LR_IN (bb)); + current_live_regs |= extra_live; } /* The beginning of the epilogue corresponds to the end of the @@ -847,10 +839,8 @@ mark_target_live_regs (rtx_insn *insns, rtx target_maybe_return, struct resource { tinfo->block = b; tinfo->bb_tick = bb_ticks[b]; + tinfo->live_regs = res->regs; } - - if (tinfo != NULL) - tinfo->live_regs = res->regs; } /* Initialize the resources required by mark_target_live_regs (). @@ -939,31 +929,25 @@ init_resource_info (rtx_insn *epilogue_insn) void free_resource_info (void) { - if (target_hash_table != NULL) + int i; + + for (i = 0; i < TARGET_HASH_PRIME; ++i) { - int i; + struct target_info *ti = target_hash_table[i]; - for (i = 0; i < TARGET_HASH_PRIME; ++i) + while (ti) { - struct target_info *ti = target_hash_table[i]; - - while (ti) - { - struct target_info *next = ti->next; - free (ti); - ti = next; - } + struct target_info *next = ti->next; + free (ti); + ti = next; } - - free (target_hash_table); - target_hash_table = NULL; } - if (bb_ticks != NULL) - { - free (bb_ticks); - bb_ticks = NULL; - } + free (target_hash_table); + target_hash_table = NULL; + + free (bb_ticks); + bb_ticks = NULL; free_bb_for_insn (); } @@ -975,16 +959,13 @@ clear_hashed_info_for_insn (rtx_insn *insn) { struct target_info *tinfo; - if (target_hash_table != NULL) - { - for (tinfo = target_hash_table[INSN_UID (insn) % TARGET_HASH_PRIME]; - tinfo; tinfo = tinfo->next) - if (tinfo->uid == INSN_UID (insn)) - break; + for (tinfo = target_hash_table[INSN_UID (insn) % TARGET_HASH_PRIME]; + tinfo; tinfo = tinfo->next) + if (tinfo->uid == INSN_UID (insn)) + break; - if (tinfo) - tinfo->block = -1; - } + if (tinfo) + tinfo->block = -1; } /* Clear any hashed information that we have stored for instructions