cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu of tests for JUMP_P and a ADDR_DIFF_VEC or...
* cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern. (control_flow_insn_p): Likewise. * cfgrtl.c (duplicate_insn_chain): Likewise. * final.c (get_attr_length_1): Likewise. (shorten_branches): Likewise. (final_scan_insn): Likewise. * function.c (instantiate_virtual_regs): Likewise. * gcse.c (insert_insn_end_basic_block): Likewise. * ira-costs.c (scan_one_insn): Likewise. * lra-eliminations.c (eliminate_regs_in_insn): Likewise. * lra.c (check_rtl): Likewise. * reload1.c (elimination_costs_in_insn): Likewise. * reorg.c (follow_jumps): Likewise. * config/arm/arm.c (is_jump_table): Use JUMP_TABLE_DATA_P in lieu of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern. (thumb_far_jump_used_p): Likewise. * config/bfin/bfin.c (workaround_rts_anomaly): Likewise. (workaround_speculation): Likewise. (add_sched_insns_for_speculation): Likewise. * config/c6x/c6x.c (reorg_emit_nops): Likewise. * config/frv/frv.c (frv_function_contains_far_jump): Likewise. (frv_for_each_packet): Likewise. * config/i386/i386.c (ix86_avoid_jump_mispredicts): Likewise. * config/ia64/ia64.c (emit_all_insn_group_barriers): Likewise. (final_emit_insn_group_barriers): Likewise. * config/m32r/m32r.c (m32r_is_insn): Likewise. * config/mips/mips.c (USEFUL_INSN_P): Likewise. (mips16_insn_length): Likewise. * config/pa/pa.c (pa_reorg): Likewise. (pa_combine_instructions): Likewise. * config/rs6000/rs6000.c (rs6000_invalid_within_doloop): Likewise. * config/sh/sh.c (fixup_addr_diff_vecs): Likewise. (sh_reorg): Likewise. (split_branches): Likewise. * config/spu/spu.c (get_branch_target): Likewise. * config/s390/s390.c (s390_chunkify_start): Simplify logic using JUMP_TABLE_DATA_P. From-SVN: r197234
This commit is contained in:
parent
4ac761b0ba
commit
34f0d87acd
24 changed files with 116 additions and 106 deletions
|
@ -1,3 +1,46 @@
|
|||
2013-03-29 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
* cfgbuild.c (inside_basic_block_p): Use JUMP_TABLE_DATA_P in lieu
|
||||
of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
|
||||
(control_flow_insn_p): Likewise.
|
||||
* cfgrtl.c (duplicate_insn_chain): Likewise.
|
||||
* final.c (get_attr_length_1): Likewise.
|
||||
(shorten_branches): Likewise.
|
||||
(final_scan_insn): Likewise.
|
||||
* function.c (instantiate_virtual_regs): Likewise.
|
||||
* gcse.c (insert_insn_end_basic_block): Likewise.
|
||||
* ira-costs.c (scan_one_insn): Likewise.
|
||||
* lra-eliminations.c (eliminate_regs_in_insn): Likewise.
|
||||
* lra.c (check_rtl): Likewise.
|
||||
* reload1.c (elimination_costs_in_insn): Likewise.
|
||||
* reorg.c (follow_jumps): Likewise.
|
||||
|
||||
* config/arm/arm.c (is_jump_table): Use JUMP_TABLE_DATA_P in lieu
|
||||
of tests for JUMP_P and a ADDR_DIFF_VEC or ADDR_VEC pattern.
|
||||
(thumb_far_jump_used_p): Likewise.
|
||||
* config/bfin/bfin.c (workaround_rts_anomaly): Likewise.
|
||||
(workaround_speculation): Likewise.
|
||||
(add_sched_insns_for_speculation): Likewise.
|
||||
* config/c6x/c6x.c (reorg_emit_nops): Likewise.
|
||||
* config/frv/frv.c (frv_function_contains_far_jump): Likewise.
|
||||
(frv_for_each_packet): Likewise.
|
||||
* config/i386/i386.c (ix86_avoid_jump_mispredicts): Likewise.
|
||||
* config/ia64/ia64.c (emit_all_insn_group_barriers): Likewise.
|
||||
(final_emit_insn_group_barriers): Likewise.
|
||||
* config/m32r/m32r.c (m32r_is_insn): Likewise.
|
||||
* config/mips/mips.c (USEFUL_INSN_P): Likewise.
|
||||
(mips16_insn_length): Likewise.
|
||||
* config/pa/pa.c (pa_reorg): Likewise.
|
||||
(pa_combine_instructions): Likewise.
|
||||
* config/rs6000/rs6000.c (rs6000_invalid_within_doloop): Likewise.
|
||||
* config/sh/sh.c (fixup_addr_diff_vecs): Likewise.
|
||||
(sh_reorg): Likewise.
|
||||
(split_branches): Likewise.
|
||||
* config/spu/spu.c (get_branch_target): Likewise.
|
||||
|
||||
* config/s390/s390.c (s390_chunkify_start): Simplify logic using
|
||||
JUMP_TABLE_DATA_P.
|
||||
|
||||
2013-03-29 Kirill Yukhin <kirill.yukhin@intel.com>
|
||||
|
||||
* gcc/config/i386/avx2intrin.h (_mm256_broadcastsi128_si256):
|
||||
|
|
|
@ -51,13 +51,10 @@ inside_basic_block_p (const_rtx insn)
|
|||
case CODE_LABEL:
|
||||
/* Avoid creating of basic block for jumptables. */
|
||||
return (NEXT_INSN (insn) == 0
|
||||
|| !JUMP_P (NEXT_INSN (insn))
|
||||
|| (GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_DIFF_VEC));
|
||||
|| ! JUMP_TABLE_DATA_P (insn));
|
||||
|
||||
case JUMP_INSN:
|
||||
return (GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
|
||||
return (! JUMP_TABLE_DATA_P (insn));
|
||||
|
||||
case CALL_INSN:
|
||||
case INSN:
|
||||
|
@ -88,8 +85,7 @@ control_flow_insn_p (const_rtx insn)
|
|||
|
||||
case JUMP_INSN:
|
||||
/* Jump insn always causes control transfer except for tablejumps. */
|
||||
return (GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC);
|
||||
return (! JUMP_TABLE_DATA_P (insn));
|
||||
|
||||
case CALL_INSN:
|
||||
/* Noreturn and sibling call instructions terminate the basic blocks
|
||||
|
|
|
@ -3627,8 +3627,7 @@ duplicate_insn_chain (rtx from, rtx to)
|
|||
/* Avoid copying of dispatch tables. We never duplicate
|
||||
tablejumps, so this can hit only in case the table got
|
||||
moved far from original jump. */
|
||||
if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
/* Avoid copying following barrier as well if any
|
||||
(and debug insns in between). */
|
||||
|
|
|
@ -12824,9 +12824,7 @@ is_jump_table (rtx insn)
|
|||
&& ((table = next_real_insn (JUMP_LABEL (insn)))
|
||||
== next_real_insn (insn))
|
||||
&& table != NULL
|
||||
&& JUMP_P (table)
|
||||
&& (GET_CODE (PATTERN (table)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
|
||||
&& JUMP_TABLE_DATA_P (table))
|
||||
return table;
|
||||
|
||||
return NULL_RTX;
|
||||
|
@ -22658,8 +22656,7 @@ thumb_far_jump_used_p (void)
|
|||
{
|
||||
if (JUMP_P (insn)
|
||||
/* Ignore tablejump patterns. */
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
|
||||
&& ! JUMP_TABLE_DATA_P (insn)
|
||||
&& get_attr_far_jump (insn) == FAR_JUMP_YES
|
||||
)
|
||||
{
|
||||
|
|
|
@ -4084,12 +4084,15 @@ workaround_rts_anomaly (void)
|
|||
if (NOTE_P (insn) || LABEL_P (insn))
|
||||
continue;
|
||||
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
continue;
|
||||
|
||||
if (first_insn == NULL_RTX)
|
||||
first_insn = insn;
|
||||
pat = PATTERN (insn);
|
||||
if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
|
||||
|| GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
|
||||
|| GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
|
||||
|| GET_CODE (pat) == ASM_INPUT
|
||||
|| asm_noperands (pat) >= 0)
|
||||
continue;
|
||||
|
||||
if (CALL_P (insn))
|
||||
|
@ -4277,6 +4280,8 @@ workaround_speculation (void)
|
|||
|
||||
if (NOTE_P (insn) || BARRIER_P (insn))
|
||||
continue;
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
continue;
|
||||
|
||||
if (LABEL_P (insn))
|
||||
{
|
||||
|
@ -4285,8 +4290,7 @@ workaround_speculation (void)
|
|||
}
|
||||
|
||||
pat = PATTERN (insn);
|
||||
if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
|
||||
|| GET_CODE (pat) == ADDR_VEC || GET_CODE (pat) == ADDR_DIFF_VEC)
|
||||
if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER)
|
||||
continue;
|
||||
|
||||
if (GET_CODE (pat) == ASM_INPUT || asm_noperands (pat) >= 0)
|
||||
|
@ -4434,10 +4438,13 @@ workaround_speculation (void)
|
|||
if (NOTE_P (target) || BARRIER_P (target) || LABEL_P (target))
|
||||
continue;
|
||||
|
||||
if (JUMP_TABLE_DATA_P (target))
|
||||
continue;
|
||||
|
||||
pat = PATTERN (target);
|
||||
if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
|
||||
|| GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
|
||||
|| GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
|
||||
|| GET_CODE (pat) == ASM_INPUT
|
||||
|| asm_noperands (pat) >= 0)
|
||||
continue;
|
||||
|
||||
if (NONDEBUG_INSN_P (target))
|
||||
|
@ -4510,11 +4517,13 @@ add_sched_insns_for_speculation (void)
|
|||
|
||||
if (NOTE_P (insn) || BARRIER_P (insn) || LABEL_P (insn))
|
||||
continue;
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
continue;
|
||||
|
||||
pat = PATTERN (insn);
|
||||
if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER
|
||||
|| GET_CODE (pat) == ASM_INPUT || GET_CODE (pat) == ADDR_VEC
|
||||
|| GET_CODE (pat) == ADDR_DIFF_VEC || asm_noperands (pat) >= 0)
|
||||
|| GET_CODE (pat) == ASM_INPUT
|
||||
|| asm_noperands (pat) >= 0)
|
||||
continue;
|
||||
|
||||
if (JUMP_P (insn))
|
||||
|
|
|
@ -5052,9 +5052,7 @@ reorg_emit_nops (rtx *call_labels)
|
|||
|| GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| shadow_or_blockage_p (insn)
|
||||
|| (JUMP_P (insn)
|
||||
&& (GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC)))
|
||||
|| JUMP_TABLE_DATA_P (insn))
|
||||
goto next_insn;
|
||||
|
||||
if (!c6x_flag_schedule_insns2)
|
||||
|
|
|
@ -1410,8 +1410,7 @@ frv_function_contains_far_jump (void)
|
|||
while (insn != NULL
|
||||
&& !(JUMP_P (insn)
|
||||
/* Ignore tablejump patterns. */
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
|
||||
&& ! JUMP_TABLE_DATA_P (insn)
|
||||
&& get_attr_far_jump (insn) == FAR_JUMP_YES))
|
||||
insn = NEXT_INSN (insn);
|
||||
return (insn != NULL);
|
||||
|
@ -7481,13 +7480,11 @@ frv_for_each_packet (void (*handle_packet) (void))
|
|||
frv_start_packet_block ();
|
||||
}
|
||||
|
||||
if (INSN_P (insn))
|
||||
if (INSN_P (insn) && ! JUMP_TABLE_DATA_P (insn))
|
||||
switch (GET_CODE (PATTERN (insn)))
|
||||
{
|
||||
case USE:
|
||||
case CLOBBER:
|
||||
case ADDR_VEC:
|
||||
case ADDR_DIFF_VEC:
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -35209,8 +35209,7 @@ ix86_avoid_jump_mispredicts (void)
|
|||
{
|
||||
start = NEXT_INSN (start);
|
||||
if ((JUMP_P (start)
|
||||
&& GET_CODE (PATTERN (start)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
|
||||
&& ! JUMP_TABLE_DATA_P (start))
|
||||
|| CALL_P (start))
|
||||
njumps--, isjump = 1;
|
||||
else
|
||||
|
@ -35227,8 +35226,7 @@ ix86_avoid_jump_mispredicts (void)
|
|||
fprintf (dump_file, "Insn %i estimated to %i bytes\n",
|
||||
INSN_UID (insn), min_size);
|
||||
if ((JUMP_P (insn)
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
|
||||
&& ! JUMP_TABLE_DATA_P (insn))
|
||||
|| CALL_P (insn))
|
||||
njumps++;
|
||||
else
|
||||
|
@ -35238,8 +35236,7 @@ ix86_avoid_jump_mispredicts (void)
|
|||
{
|
||||
start = NEXT_INSN (start);
|
||||
if ((JUMP_P (start)
|
||||
&& GET_CODE (PATTERN (start)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
|
||||
&& ! JUMP_TABLE_DATA_P (start))
|
||||
|| CALL_P (start))
|
||||
njumps--, isjump = 1;
|
||||
else
|
||||
|
|
|
@ -6987,8 +6987,7 @@ emit_all_insn_group_barriers (FILE *dump ATTRIBUTE_UNUSED)
|
|||
|
||||
if (! last)
|
||||
continue;
|
||||
if (JUMP_P (last)
|
||||
&& GET_CODE (PATTERN (last)) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (last))
|
||||
last = prev_active_insn (last);
|
||||
if (recog_memoized (last) != CODE_FOR_insn_group_barrier)
|
||||
emit_insn_after (gen_insn_group_barrier (GEN_INT (3)), last);
|
||||
|
@ -9376,8 +9375,7 @@ final_emit_insn_group_barriers (FILE *dump ATTRIBUTE_UNUSED)
|
|||
|
||||
if (! last)
|
||||
continue;
|
||||
if (JUMP_P (last)
|
||||
&& GET_CODE (PATTERN (last)) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (last))
|
||||
last = prev_active_insn (last);
|
||||
if (recog_memoized (last) != CODE_FOR_insn_group_barrier)
|
||||
emit_insn_after (gen_insn_group_barrier (GEN_INT (3)), last);
|
||||
|
|
|
@ -1308,9 +1308,9 @@ static int
|
|||
m32r_is_insn (rtx insn)
|
||||
{
|
||||
return (NONDEBUG_INSN_P (insn)
|
||||
&& ! JUMP_TABLE_DATA_P (insn)
|
||||
&& GET_CODE (PATTERN (insn)) != USE
|
||||
&& GET_CODE (PATTERN (insn)) != CLOBBER
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_VEC);
|
||||
&& GET_CODE (PATTERN (insn)) != CLOBBER);
|
||||
}
|
||||
|
||||
/* Increase the priority of long instructions so that the
|
||||
|
|
|
@ -95,12 +95,13 @@ along with GCC; see the file COPYING3. If not see
|
|||
: TARGET_64BIT ? 0x100 : 0x400)
|
||||
|
||||
/* True if INSN is a mips.md pattern or asm statement. */
|
||||
/* ??? This test exists through the compiler, perhaps it should be
|
||||
moved to rtl.h. */
|
||||
#define USEFUL_INSN_P(INSN) \
|
||||
(NONDEBUG_INSN_P (INSN) \
|
||||
&& ! JUMP_TABLE_DATA_P (INSN) \
|
||||
&& GET_CODE (PATTERN (INSN)) != USE \
|
||||
&& GET_CODE (PATTERN (INSN)) != CLOBBER \
|
||||
&& GET_CODE (PATTERN (INSN)) != ADDR_VEC \
|
||||
&& GET_CODE (PATTERN (INSN)) != ADDR_DIFF_VEC)
|
||||
&& GET_CODE (PATTERN (INSN)) != CLOBBER)
|
||||
|
||||
/* If INSN is a delayed branch sequence, return the first instruction
|
||||
in the sequence, otherwise return INSN itself. */
|
||||
|
@ -14648,7 +14649,7 @@ mips16_emit_constants (struct mips16_constant *constants, rtx insn)
|
|||
static int
|
||||
mips16_insn_length (rtx insn)
|
||||
{
|
||||
if (JUMP_P (insn))
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
rtx body = PATTERN (insn);
|
||||
if (GET_CODE (body) == ADDR_VEC)
|
||||
|
|
|
@ -8997,9 +8997,7 @@ pa_reorg (void)
|
|||
unsigned int length, i;
|
||||
|
||||
/* Find an ADDR_VEC or ADDR_DIFF_VEC insn to explode. */
|
||||
if (! JUMP_P (insn)
|
||||
|| (GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
|
||||
if (! JUMP_TABLE_DATA_P (insn))
|
||||
continue;
|
||||
|
||||
/* Emit marker for the beginning of the branch table. */
|
||||
|
@ -9056,9 +9054,7 @@ pa_reorg (void)
|
|||
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
|
||||
{
|
||||
/* Find an ADDR_VEC insn. */
|
||||
if (! JUMP_P (insn)
|
||||
|| (GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
|
||||
if (! JUMP_TABLE_DATA_P (insn))
|
||||
continue;
|
||||
|
||||
/* Now generate markers for the beginning and end of the
|
||||
|
@ -9138,10 +9134,9 @@ pa_combine_instructions (void)
|
|||
/* We only care about INSNs, JUMP_INSNs, and CALL_INSNs.
|
||||
Also ignore any special USE insns. */
|
||||
if ((! NONJUMP_INSN_P (anchor) && ! JUMP_P (anchor) && ! CALL_P (anchor))
|
||||
|| JUMP_TABLE_DATA_P (anchor)
|
||||
|| GET_CODE (PATTERN (anchor)) == USE
|
||||
|| GET_CODE (PATTERN (anchor)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (anchor)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (anchor)) == ADDR_DIFF_VEC)
|
||||
|| GET_CODE (PATTERN (anchor)) == CLOBBER)
|
||||
continue;
|
||||
|
||||
anchor_attr = get_attr_pa_combine_type (anchor);
|
||||
|
@ -9165,8 +9160,7 @@ pa_combine_instructions (void)
|
|||
|
||||
/* Anything except a regular INSN will stop our search. */
|
||||
if (! NONJUMP_INSN_P (floater)
|
||||
|| GET_CODE (PATTERN (floater)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (floater)) == ADDR_DIFF_VEC)
|
||||
|| JUMP_TABLE_DATA_P (floater))
|
||||
{
|
||||
floater = NULL_RTX;
|
||||
break;
|
||||
|
@ -9227,8 +9221,7 @@ pa_combine_instructions (void)
|
|||
|
||||
/* Anything except a regular INSN will stop our search. */
|
||||
if (! NONJUMP_INSN_P (floater)
|
||||
|| GET_CODE (PATTERN (floater)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (floater)) == ADDR_DIFF_VEC)
|
||||
|| JUMP_TABLE_DATA_P (floater))
|
||||
{
|
||||
floater = NULL_RTX;
|
||||
break;
|
||||
|
|
|
@ -18788,9 +18788,7 @@ rs6000_invalid_within_doloop (const_rtx insn)
|
|||
if (CALL_P (insn))
|
||||
return "Function call in the loop.";
|
||||
|
||||
if (JUMP_P (insn)
|
||||
&& (GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC))
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
return "Computed branch in the loop.";
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -5739,7 +5739,7 @@ addr_generation_dependency_p (rtx dep_rtx, rtx insn)
|
|||
rtx target, pat;
|
||||
|
||||
if (NONJUMP_INSN_P (dep_rtx))
|
||||
dep_rtx = PATTERN (dep_rtx);
|
||||
dep_rtx = PATTERN (dep_rtx);
|
||||
|
||||
if (GET_CODE (dep_rtx) == SET)
|
||||
{
|
||||
|
@ -7013,11 +7013,7 @@ s390_chunkify_start (void)
|
|||
&& (LABEL_PRESERVE_P (insn) || LABEL_NAME (insn)))
|
||||
{
|
||||
rtx vec_insn = next_real_insn (insn);
|
||||
rtx vec_pat = vec_insn && JUMP_P (vec_insn) ?
|
||||
PATTERN (vec_insn) : NULL_RTX;
|
||||
if (!vec_pat
|
||||
|| !(GET_CODE (vec_pat) == ADDR_VEC
|
||||
|| GET_CODE (vec_pat) == ADDR_DIFF_VEC))
|
||||
if (! vec_insn || ! JUMP_TABLE_DATA_P (vec_insn))
|
||||
bitmap_set_bit (far_labels, CODE_LABEL_NUMBER (insn));
|
||||
}
|
||||
|
||||
|
@ -7048,12 +7044,9 @@ s390_chunkify_start (void)
|
|||
/* Find the jump table used by this casesi jump. */
|
||||
rtx vec_label = XEXP (XEXP (XVECEXP (pat, 0, 1), 0), 0);
|
||||
rtx vec_insn = next_real_insn (vec_label);
|
||||
rtx vec_pat = vec_insn && JUMP_P (vec_insn) ?
|
||||
PATTERN (vec_insn) : NULL_RTX;
|
||||
if (vec_pat
|
||||
&& (GET_CODE (vec_pat) == ADDR_VEC
|
||||
|| GET_CODE (vec_pat) == ADDR_DIFF_VEC))
|
||||
if (vec_insn && JUMP_TABLE_DATA_P (vec_insn))
|
||||
{
|
||||
rtx vec_pat = PATTERN (vec_insn);
|
||||
int i, diff_p = GET_CODE (vec_pat) == ADDR_DIFF_VEC;
|
||||
|
||||
for (i = 0; i < XVECLEN (vec_pat, diff_p); i++)
|
||||
|
|
|
@ -5799,7 +5799,7 @@ fixup_addr_diff_vecs (rtx first)
|
|||
{
|
||||
rtx vec_lab, pat, prev, prevpat, x, braf_label;
|
||||
|
||||
if (!JUMP_P (insn)
|
||||
if (! JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
|
||||
continue;
|
||||
pat = PATTERN (insn);
|
||||
|
@ -6233,7 +6233,7 @@ sh_reorg (void)
|
|||
num_mova = 0;
|
||||
}
|
||||
}
|
||||
else if (JUMP_P (insn)
|
||||
else if (JUMP_TABLE_DATA_P (insn)
|
||||
&& GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
&& num_mova
|
||||
/* ??? loop invariant motion can also move a mova out of a
|
||||
|
@ -6496,8 +6496,7 @@ split_branches (rtx first)
|
|||
}
|
||||
else if (JUMP_P (insn)
|
||||
/* Don't mess with ADDR_DIFF_VEC */
|
||||
&& (GET_CODE (PATTERN (insn)) == SET
|
||||
|| GET_CODE (PATTERN (insn)) == RETURN))
|
||||
&& ! JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
enum attr_type type = get_attr_type (insn);
|
||||
if (type == TYPE_CBRANCH)
|
||||
|
|
|
@ -2172,8 +2172,7 @@ get_branch_target (rtx branch)
|
|||
return gen_rtx_REG (SImode, LINK_REGISTER_REGNUM);
|
||||
|
||||
/* jump table */
|
||||
if (GET_CODE (PATTERN (branch)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (branch)) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (branch))
|
||||
return 0;
|
||||
|
||||
/* ASM GOTOs. */
|
||||
|
|
11
gcc/final.c
11
gcc/final.c
|
@ -396,7 +396,7 @@ get_attr_length_1 (rtx insn, int (*fallback_fn) (rtx))
|
|||
|
||||
case JUMP_INSN:
|
||||
body = PATTERN (insn);
|
||||
if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
/* Alignment is machine-dependent and should be handled by
|
||||
ADDR_VEC_ALIGN. */
|
||||
|
@ -1020,7 +1020,7 @@ shorten_branches (rtx first)
|
|||
int min_align;
|
||||
addr_diff_vec_flags flags;
|
||||
|
||||
if (!JUMP_P (insn)
|
||||
if (! JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
|
||||
continue;
|
||||
pat = PATTERN (insn);
|
||||
|
@ -1094,7 +1094,7 @@ shorten_branches (rtx first)
|
|||
continue;
|
||||
|
||||
body = PATTERN (insn);
|
||||
if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
/* This only takes room if read-only data goes into the text
|
||||
section. */
|
||||
|
@ -1230,7 +1230,8 @@ shorten_branches (rtx first)
|
|||
INSN_ADDRESSES (uid) = insn_current_address;
|
||||
|
||||
#ifdef CASE_VECTOR_SHORTEN_MODE
|
||||
if (optimize && JUMP_P (insn)
|
||||
if (optimize
|
||||
&& JUMP_TABLE_DATA_P (insn)
|
||||
&& GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
|
||||
{
|
||||
rtx body = PATTERN (insn);
|
||||
|
@ -2404,7 +2405,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
|
|||
/* Detect insns that are really jump-tables
|
||||
and output them as such. */
|
||||
|
||||
if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
{
|
||||
#if !(defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC))
|
||||
int vlen, idx;
|
||||
|
|
|
@ -1915,10 +1915,9 @@ instantiate_virtual_regs (void)
|
|||
{
|
||||
/* These patterns in the instruction stream can never be recognized.
|
||||
Fortunately, they shouldn't contain virtual registers either. */
|
||||
if (GET_CODE (PATTERN (insn)) == USE
|
||||
if (JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT)
|
||||
continue;
|
||||
else if (DEBUG_INSN_P (insn))
|
||||
|
|
|
@ -2155,8 +2155,7 @@ insert_insn_end_basic_block (struct expr *expr, basic_block bb)
|
|||
/* If this is a jump table, then we can't insert stuff here. Since
|
||||
we know the previous real insn must be the tablejump, we insert
|
||||
the new instruction just before the tablejump. */
|
||||
if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
|
||||
if (JUMP_TABLE_DATA_P (insn))
|
||||
insn = prev_active_insn (insn);
|
||||
|
||||
#ifdef HAVE_cc0
|
||||
|
|
|
@ -1269,12 +1269,12 @@ scan_one_insn (rtx insn)
|
|||
int i, k;
|
||||
bool counted_mem;
|
||||
|
||||
if (!NONDEBUG_INSN_P (insn))
|
||||
if (!NONDEBUG_INSN_P (insn)
|
||||
|| JUMP_TABLE_DATA_P (insn))
|
||||
return insn;
|
||||
|
||||
pat_code = GET_CODE (PATTERN (insn));
|
||||
if (pat_code == USE || pat_code == CLOBBER || pat_code == ASM_INPUT
|
||||
|| pat_code == ADDR_VEC || pat_code == ADDR_DIFF_VEC)
|
||||
if (pat_code == USE || pat_code == CLOBBER || pat_code == ASM_INPUT)
|
||||
return insn;
|
||||
|
||||
counted_mem = false;
|
||||
|
|
|
@ -767,10 +767,9 @@ eliminate_regs_in_insn (rtx insn, bool replace_p)
|
|||
|
||||
if (icode < 0 && asm_noperands (PATTERN (insn)) < 0 && ! DEBUG_INSN_P (insn))
|
||||
{
|
||||
lra_assert (GET_CODE (PATTERN (insn)) == USE
|
||||
lra_assert (JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1997,10 +1997,9 @@ check_rtl (bool final_p)
|
|||
FOR_EACH_BB (bb)
|
||||
FOR_BB_INSNS (bb, insn)
|
||||
if (NONDEBUG_INSN_P (insn)
|
||||
&& ! JUMP_TABLE_DATA_P (insn)
|
||||
&& GET_CODE (PATTERN (insn)) != USE
|
||||
&& GET_CODE (PATTERN (insn)) != CLOBBER
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
|
||||
&& GET_CODE (PATTERN (insn)) != ASM_INPUT)
|
||||
{
|
||||
if (final_p)
|
||||
|
|
|
@ -3234,10 +3234,9 @@ eliminate_regs_in_insn (rtx insn, int replace)
|
|||
|
||||
if (! insn_is_asm && icode < 0)
|
||||
{
|
||||
gcc_assert (GET_CODE (PATTERN (insn)) == USE
|
||||
gcc_assert (JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT
|
||||
|| DEBUG_INSN_P (insn));
|
||||
if (DEBUG_INSN_P (insn))
|
||||
|
@ -3645,10 +3644,9 @@ elimination_costs_in_insn (rtx insn)
|
|||
|
||||
if (! insn_is_asm && icode < 0)
|
||||
{
|
||||
gcc_assert (GET_CODE (PATTERN (insn)) == USE
|
||||
gcc_assert (JUMP_TABLE_DATA_P (insn)
|
||||
|| GET_CODE (PATTERN (insn)) == USE
|
||||
|| GET_CODE (PATTERN (insn)) == CLOBBER
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
|
||||
|| GET_CODE (PATTERN (insn)) == ASM_INPUT
|
||||
|| DEBUG_INSN_P (insn));
|
||||
return;
|
||||
|
|
|
@ -2339,9 +2339,7 @@ follow_jumps (rtx label, rtx jump, bool *crossing)
|
|||
if (ANY_RETURN_P (this_label))
|
||||
return this_label;
|
||||
tem = next_active_insn (this_label);
|
||||
if (tem
|
||||
&& (GET_CODE (PATTERN (tem)) == ADDR_VEC
|
||||
|| GET_CODE (PATTERN (tem)) == ADDR_DIFF_VEC))
|
||||
if (tem && JUMP_TABLE_DATA_P (tem))
|
||||
break;
|
||||
|
||||
if (!targetm.can_follow_jump (jump, insn))
|
||||
|
|
Loading…
Add table
Reference in a new issue