ia64.c (ia64_encode_addr_area): Use gcc_assert and gcc_unreachable as appropriate.
* config/ia64/ia64.c (ia64_encode_addr_area): Use gcc_assert and gcc_unreachable as appropriate. (ia64_expand_load_address, ia64_expand_tls_address, ia64_split_tmode, ia64_split_tmode_move, ia64_expand_compare, ia64_expand_vecint_compare, ia64_expand_vecint_minmax, next_scratch_gr_reg, ia64_initial_elimination_offset, ia64_expand_prologue, ia64_expand_epilogue, ia64_output_dwarf_dtprel, ia64_print_operand, ia64_register_move_cost, first_instruction, rws_access_regno, update_set_flags, rtx_needs_barrier, group_barrier_needed_p, ia64_sched_init, ia64_variable_issue, ia64_first_cycle_multipass_dfs_lookahead_guard, ia64_dfa_new_cycle, issue_nops_and_insn, get_template, bundling, ia64_st_address_bypass_p, ia64_ld_address_bypass_p, process_set, process_for_unwind_directive, ia64_hpux_file_end): Likewise. * config/ia64/ia64.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise. * config/ia64/ia64.md (*arm_movdi_vfp, *movdf_vfp): Likewise. * config/ia64/predicates.md (got_symbolic_operand, sdata_symbolic_operand): Likewise. * config/ia64/vect.md (vcondv2sf): Likewise. From-SVN: r98817
This commit is contained in:
parent
5984f98956
commit
e820471b58
|
@ -1,39 +1,59 @@
|
||||||
|
2005-04-27 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
|
* config/ia64/ia64.c (ia64_encode_addr_area): Use gcc_assert and
|
||||||
|
gcc_unreachable as appropriate.
|
||||||
|
(ia64_expand_load_address, ia64_expand_tls_address,
|
||||||
|
ia64_split_tmode, ia64_split_tmode_move, ia64_expand_compare,
|
||||||
|
ia64_expand_vecint_compare, ia64_expand_vecint_minmax,
|
||||||
|
next_scratch_gr_reg, ia64_initial_elimination_offset,
|
||||||
|
ia64_expand_prologue, ia64_expand_epilogue,
|
||||||
|
ia64_output_dwarf_dtprel, ia64_print_operand,
|
||||||
|
ia64_register_move_cost, first_instruction, rws_access_regno,
|
||||||
|
update_set_flags, rtx_needs_barrier, group_barrier_needed_p,
|
||||||
|
ia64_sched_init, ia64_variable_issue,
|
||||||
|
ia64_first_cycle_multipass_dfs_lookahead_guard,
|
||||||
|
ia64_dfa_new_cycle, issue_nops_and_insn, get_template, bundling,
|
||||||
|
ia64_st_address_bypass_p, ia64_ld_address_bypass_p, process_set,
|
||||||
|
process_for_unwind_directive, ia64_hpux_file_end): Likewise.
|
||||||
|
* config/ia64/ia64.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
|
||||||
|
* config/ia64/ia64.md (*arm_movdi_vfp, *movdf_vfp): Likewise.
|
||||||
|
* config/ia64/predicates.md (got_symbolic_operand,
|
||||||
|
sdata_symbolic_operand): Likewise.
|
||||||
|
* config/ia64/vect.md (vcondv2sf): Likewise.
|
||||||
|
|
||||||
2005-04-27 Matt Thomas <matt@3am-software.com>
|
2005-04-27 Matt Thomas <matt@3am-software.com>
|
||||||
|
|
||||||
* config/vax/vax.c (legitimate_constant_address_p): New. Formerly
|
* config/vax/vax.c (legitimate_constant_address_p): New. Formerly
|
||||||
CONSTANT_ADDRESS_P in config/vax/vax.h
|
CONSTANT_ADDRESS_P in config/vax/vax.h
|
||||||
(legitimate_constant_p): Added. Formerly CONSTANT_P in vax.h.
|
(legitimate_constant_p): Added. Formerly CONSTANT_P in vax.h.
|
||||||
(INDEX_REGISTER_P): New.
|
(INDEX_REGISTER_P): New.
|
||||||
(BASE_REGISTER_P): New.
|
(BASE_REGISTER_P): New.
|
||||||
(indirectable_constant_address_p): New. Adapted from
|
(indirectable_constant_address_p): New. Adapted from
|
||||||
INDIRECTABLE_CONSTANT_ADDRESS_P in vax.h.
|
INDIRECTABLE_CONSTANT_ADDRESS_P in vax.h. Use SYMBOL_REF_LOCAL_P.
|
||||||
Use SYMBOL_REF_LOCAL_P.
|
|
||||||
(indirectable_address_p): New. Adapted from
|
(indirectable_address_p): New. Adapted from
|
||||||
INDIRECTABLE_ADDRESS_P in vax.h.
|
INDIRECTABLE_ADDRESS_P in vax.h.
|
||||||
(nonindexed_address_p): New. Adapted from
|
(nonindexed_address_p): New. Adapted from
|
||||||
GO_IF_NONINDEXED_ADDRESS in vax.h.
|
GO_IF_NONINDEXED_ADDRESS in vax.h.
|
||||||
(index_temp_p): New. Adapted from
|
(index_temp_p): New. Adapted from INDEX_TERM_P in vax.h.
|
||||||
INDEX_TERM_P in vax.h.
|
(reg_plus_index_p): New. Adapted from GO_IF_REG_PLUS_INDEX in vax.h.
|
||||||
(reg_plus_index_p): New. Adapted from
|
|
||||||
GO_IF_REG_PLUS_INDEX in vax.h.
|
|
||||||
(legitimate_address_p): New. Adapted from
|
(legitimate_address_p): New. Adapted from
|
||||||
GO_IF_LEGITIMATE_ADDRESS in vax.h
|
GO_IF_LEGITIMATE_ADDRESS in vax.h.
|
||||||
(vax_mode_dependent_address_p): New. Adapted from
|
(vax_mode_dependent_address_p): New. Adapted from
|
||||||
GO_IF_MODE_DEPENDENT_ADDRESS in vax.h
|
GO_IF_MODE_DEPENDENT_ADDRESS in vax.h.
|
||||||
* config/vax/vax.h (CONSTANT_ADDRESS_P): Use
|
* config/vax/vax.h (CONSTANT_ADDRESS_P): Use
|
||||||
legitimate_constant_address_p
|
legitimate_constant_address_p.
|
||||||
(CONSTANT_P): Use legitimate_constant_p.
|
(CONSTANT_P): Use legitimate_constant_p.
|
||||||
(INDIRECTABLE_CONSTANT_ADDRESS_P): Removed.
|
(INDIRECTABLE_CONSTANT_ADDRESS_P): Removed.
|
||||||
(INDIRECTABLE_ADDRESS_P): Removed.
|
(INDIRECTABLE_ADDRESS_P): Removed.
|
||||||
(GO_IF_NONINDEXED_ADDRESS): Removed.
|
(GO_IF_NONINDEXED_ADDRESS): Removed.
|
||||||
(INDEX_TEMP_P): Removed.
|
(INDEX_TEMP_P): Removed.
|
||||||
(GO_IF_REG_PLUS_INDEX): Removed.
|
(GO_IF_REG_PLUS_INDEX): Removed.
|
||||||
(GO_IF_LEGITIMATE_ADDRESS): Use legitimate_address_p.
|
(GO_IF_LEGITIMATE_ADDRESS): Use legitimate_address_p. Two
|
||||||
Two definitions, depending on whether REG_OK_STRICT is defined.
|
definitions, depending on whether REG_OK_STRICT is defined.
|
||||||
(GO_IF_MODE_DEPENDENT_ADDRESS): Use vax_mode_dependent_address_p.
|
(GO_IF_MODE_DEPENDENT_ADDRESS): Use vax_mode_dependent_address_p.
|
||||||
Two definitions, depending on whether REG_OK_STRICT is defined.
|
Two definitions, depending on whether REG_OK_STRICT is defined.
|
||||||
* config/vax/vax-protos.h (legitimate_constant_address_p): Prototype
|
* config/vax/vax-protos.h (legitimate_constant_address_p): Prototype
|
||||||
added.
|
added.
|
||||||
(legitimate_constant_p): Prototype added.
|
(legitimate_constant_p): Prototype added.
|
||||||
(legitimate_address_p): Prototype added.
|
(legitimate_address_p): Prototype added.
|
||||||
(vax_mode_dependent_address_p): Prototype added.
|
(vax_mode_dependent_address_p): Prototype added.
|
||||||
|
|
|
@ -532,7 +532,7 @@ ia64_encode_addr_area (tree decl, rtx symbol)
|
||||||
{
|
{
|
||||||
case ADDR_AREA_NORMAL: break;
|
case ADDR_AREA_NORMAL: break;
|
||||||
case ADDR_AREA_SMALL: flags |= SYMBOL_FLAG_SMALL_ADDR; break;
|
case ADDR_AREA_SMALL: flags |= SYMBOL_FLAG_SMALL_ADDR; break;
|
||||||
default: abort ();
|
default: gcc_unreachable ();
|
||||||
}
|
}
|
||||||
SYMBOL_REF_FLAGS (symbol) = flags;
|
SYMBOL_REF_FLAGS (symbol) = flags;
|
||||||
}
|
}
|
||||||
|
@ -698,10 +698,8 @@ ia64_depz_field_mask (rtx rop, rtx rshift)
|
||||||
void
|
void
|
||||||
ia64_expand_load_address (rtx dest, rtx src)
|
ia64_expand_load_address (rtx dest, rtx src)
|
||||||
{
|
{
|
||||||
if (GET_CODE (src) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (src))
|
gcc_assert (GET_CODE (src) != SYMBOL_REF || !SYMBOL_REF_TLS_MODEL (src));
|
||||||
abort ();
|
gcc_assert (GET_CODE (dest) == REG);
|
||||||
if (GET_CODE (dest) != REG)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* ILP32 mode still loads 64-bits of data from the GOT. This avoids
|
/* ILP32 mode still loads 64-bits of data from the GOT. This avoids
|
||||||
having to pointer-extend the value afterward. Other forms of address
|
having to pointer-extend the value afterward. Other forms of address
|
||||||
|
@ -870,7 +868,7 @@ ia64_expand_tls_address (enum tls_model tls_kind, rtx op0, rtx op1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orig_op0 == op0)
|
if (orig_op0 == op0)
|
||||||
|
@ -950,7 +948,7 @@ ia64_split_tmode (rtx out[2], rtx in, bool reversed, bool dead)
|
||||||
case CONST_INT:
|
case CONST_INT:
|
||||||
case CONST_DOUBLE:
|
case CONST_DOUBLE:
|
||||||
/* Cannot occur reversed. */
|
/* Cannot occur reversed. */
|
||||||
if (reversed) abort ();
|
gcc_assert (!reversed);
|
||||||
|
|
||||||
if (GET_MODE (in) != TFmode)
|
if (GET_MODE (in) != TFmode)
|
||||||
split_double (in, &out[0], &out[1]);
|
split_double (in, &out[0], &out[1]);
|
||||||
|
@ -1007,14 +1005,16 @@ ia64_split_tmode (rtx out[2], rtx in, bool reversed, bool dead)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_INC:
|
case POST_INC:
|
||||||
if (reversed || dead) abort ();
|
gcc_assert (!reversed && !dead);
|
||||||
|
|
||||||
/* Just do the increment in two steps. */
|
/* Just do the increment in two steps. */
|
||||||
out[0] = adjust_automodify_address (in, DImode, 0, 0);
|
out[0] = adjust_automodify_address (in, DImode, 0, 0);
|
||||||
out[1] = adjust_automodify_address (in, DImode, 0, 8);
|
out[1] = adjust_automodify_address (in, DImode, 0, 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_DEC:
|
case POST_DEC:
|
||||||
if (reversed || dead) abort ();
|
gcc_assert (!reversed && !dead);
|
||||||
|
|
||||||
/* Add 8, subtract 24. */
|
/* Add 8, subtract 24. */
|
||||||
base = XEXP (base, 0);
|
base = XEXP (base, 0);
|
||||||
out[0] = adjust_automodify_address
|
out[0] = adjust_automodify_address
|
||||||
|
@ -1026,7 +1026,8 @@ ia64_split_tmode (rtx out[2], rtx in, bool reversed, bool dead)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_MODIFY:
|
case POST_MODIFY:
|
||||||
if (reversed || dead) abort ();
|
gcc_assert (!reversed && !dead);
|
||||||
|
|
||||||
/* Extract and adjust the modification. This case is
|
/* Extract and adjust the modification. This case is
|
||||||
trickier than the others, because we might have an
|
trickier than the others, because we might have an
|
||||||
index register, or we might have a combined offset that
|
index register, or we might have a combined offset that
|
||||||
|
@ -1045,38 +1046,41 @@ ia64_split_tmode (rtx out[2], rtx in, bool reversed, bool dead)
|
||||||
out[1] = adjust_automodify_address (in, DImode, 0, 8);
|
out[1] = adjust_automodify_address (in, DImode, 0, 8);
|
||||||
fixup = gen_adddi3 (base, base, GEN_INT (-8));
|
fixup = gen_adddi3 (base, base, GEN_INT (-8));
|
||||||
}
|
}
|
||||||
else if (GET_CODE (XEXP (offset, 1)) != CONST_INT)
|
|
||||||
abort ();
|
|
||||||
else if (INTVAL (XEXP (offset, 1)) < -256 + 8)
|
|
||||||
{
|
|
||||||
/* Again the postmodify cannot be made to match, but
|
|
||||||
in this case it's more efficient to get rid of the
|
|
||||||
postmodify entirely and fix up with an add insn. */
|
|
||||||
out[1] = adjust_automodify_address (in, DImode, base, 8);
|
|
||||||
fixup = gen_adddi3 (base, base,
|
|
||||||
GEN_INT (INTVAL (XEXP (offset, 1)) - 8));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Combined offset still fits in the displacement field.
|
gcc_assert (GET_CODE (XEXP (offset, 1)) == CONST_INT);
|
||||||
(We cannot overflow it at the high end.) */
|
if (INTVAL (XEXP (offset, 1)) < -256 + 8)
|
||||||
out[1] = adjust_automodify_address
|
{
|
||||||
(in, DImode,
|
/* Again the postmodify cannot be made to match,
|
||||||
gen_rtx_POST_MODIFY (Pmode, base,
|
but in this case it's more efficient to get rid
|
||||||
gen_rtx_PLUS (Pmode, base,
|
of the postmodify entirely and fix up with an
|
||||||
GEN_INT (INTVAL (XEXP (offset, 1)) - 8))),
|
add insn. */
|
||||||
8);
|
out[1] = adjust_automodify_address (in, DImode, base, 8);
|
||||||
|
fixup = gen_adddi3
|
||||||
|
(base, base, GEN_INT (INTVAL (XEXP (offset, 1)) - 8));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Combined offset still fits in the displacement field.
|
||||||
|
(We cannot overflow it at the high end.) */
|
||||||
|
out[1] = adjust_automodify_address
|
||||||
|
(in, DImode, gen_rtx_POST_MODIFY
|
||||||
|
(Pmode, base, gen_rtx_PLUS
|
||||||
|
(Pmode, base,
|
||||||
|
GEN_INT (INTVAL (XEXP (offset, 1)) - 8))),
|
||||||
|
8);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return fixup;
|
return fixup;
|
||||||
|
@ -1096,7 +1100,7 @@ ia64_split_tmode_move (rtx operands[])
|
||||||
the value it points to. In that case we have to do the loads in
|
the value it points to. In that case we have to do the loads in
|
||||||
the appropriate order so that the pointer is not destroyed too
|
the appropriate order so that the pointer is not destroyed too
|
||||||
early. Also we must not generate a postmodify for that second
|
early. Also we must not generate a postmodify for that second
|
||||||
load, or rws_access_regno will abort. */
|
load, or rws_access_regno will die. */
|
||||||
if (GET_CODE (operands[1]) == MEM
|
if (GET_CODE (operands[1]) == MEM
|
||||||
&& reg_overlap_mentioned_p (operands[0], operands[1]))
|
&& reg_overlap_mentioned_p (operands[0], operands[1]))
|
||||||
{
|
{
|
||||||
|
@ -1189,10 +1193,8 @@ ia64_expand_compare (enum rtx_code code, enum machine_mode mode)
|
||||||
do not need to emit another comparison. */
|
do not need to emit another comparison. */
|
||||||
if (GET_MODE (op0) == BImode)
|
if (GET_MODE (op0) == BImode)
|
||||||
{
|
{
|
||||||
if ((code == NE || code == EQ) && op1 == const0_rtx)
|
gcc_assert ((code == NE || code == EQ) && op1 == const0_rtx);
|
||||||
cmp = op0;
|
cmp = op0;
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
}
|
}
|
||||||
/* HPUX TFmode compare requires a library call to _U_Qfcmp, which takes a
|
/* HPUX TFmode compare requires a library call to _U_Qfcmp, which takes a
|
||||||
magic number as its third argument, that indicates what to do.
|
magic number as its third argument, that indicates what to do.
|
||||||
|
@ -1208,8 +1210,8 @@ ia64_expand_compare (enum rtx_code code, enum machine_mode mode)
|
||||||
} magic;
|
} magic;
|
||||||
enum rtx_code ncode;
|
enum rtx_code ncode;
|
||||||
rtx ret, insns;
|
rtx ret, insns;
|
||||||
if (!cmptf_libfunc || GET_MODE (op1) != TFmode)
|
|
||||||
abort ();
|
gcc_assert (cmptf_libfunc && GET_MODE (op1) == TFmode);
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
/* 1 = equal, 0 = not equal. Equality operators do
|
/* 1 = equal, 0 = not equal. Equality operators do
|
||||||
|
@ -1228,7 +1230,7 @@ ia64_expand_compare (enum rtx_code code, enum machine_mode mode)
|
||||||
/* FUTURE: Implement UNEQ, UNLT, UNLE, UNGT, UNGE, LTGT.
|
/* FUTURE: Implement UNEQ, UNLT, UNLE, UNGT, UNGE, LTGT.
|
||||||
Expanders for buneq etc. weuld have to be added to ia64.md
|
Expanders for buneq etc. weuld have to be added to ia64.md
|
||||||
for this to be useful. */
|
for this to be useful. */
|
||||||
default: abort ();
|
default: gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
start_sequence ();
|
start_sequence ();
|
||||||
|
@ -1309,24 +1311,26 @@ ia64_expand_vecint_compare (enum rtx_code code, enum machine_mode mode,
|
||||||
/* We don't have native unsigned comparisons, but we can generate
|
/* We don't have native unsigned comparisons, but we can generate
|
||||||
them better than generic code can. */
|
them better than generic code can. */
|
||||||
|
|
||||||
if (mode == V2SImode)
|
gcc_assert (mode != V2SImode);
|
||||||
abort ();
|
switch (mode)
|
||||||
else if (mode == V8QImode)
|
|
||||||
{
|
{
|
||||||
|
case V8QImode:
|
||||||
wmode = V4HImode;
|
wmode = V4HImode;
|
||||||
pack = gen_pack2_sss;
|
pack = gen_pack2_sss;
|
||||||
unpack_l = gen_unpack1_l;
|
unpack_l = gen_unpack1_l;
|
||||||
unpack_h = gen_unpack1_h;
|
unpack_h = gen_unpack1_h;
|
||||||
}
|
break;
|
||||||
else if (mode == V4HImode)
|
|
||||||
{
|
case V4HImode:
|
||||||
wmode = V2SImode;
|
wmode = V2SImode;
|
||||||
pack = gen_pack4_sss;
|
pack = gen_pack4_sss;
|
||||||
unpack_l = gen_unpack2_l;
|
unpack_l = gen_unpack2_l;
|
||||||
unpack_h = gen_unpack2_h;
|
unpack_h = gen_unpack2_h;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Unpack into wider vectors, zero extending the elements. */
|
/* Unpack into wider vectors, zero extending the elements. */
|
||||||
|
|
||||||
|
@ -1354,7 +1358,7 @@ ia64_expand_vecint_compare (enum rtx_code code, enum machine_mode mode,
|
||||||
return negate;
|
return negate;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
x = gen_rtx_fmt_ee (code, mode, op0, op1);
|
x = gen_rtx_fmt_ee (code, mode, op0, op1);
|
||||||
|
@ -1509,7 +1513,7 @@ ia64_expand_vecint_minmax (enum rtx_code code, enum machine_mode mode,
|
||||||
code = GT;
|
code = GT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
xops[3] = gen_rtx_fmt_ee (code, VOIDmode, operands[1], operands[2]);
|
xops[3] = gen_rtx_fmt_ee (code, VOIDmode, operands[1], operands[2]);
|
||||||
|
|
||||||
|
@ -1774,7 +1778,7 @@ next_scratch_gr_reg (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* There must be _something_ available. */
|
/* There must be _something_ available. */
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper function for ia64_compute_frame_size, called through
|
/* Helper function for ia64_compute_frame_size, called through
|
||||||
|
@ -2071,39 +2075,49 @@ ia64_initial_elimination_offset (int from, int to)
|
||||||
switch (from)
|
switch (from)
|
||||||
{
|
{
|
||||||
case FRAME_POINTER_REGNUM:
|
case FRAME_POINTER_REGNUM:
|
||||||
if (to == HARD_FRAME_POINTER_REGNUM)
|
switch (to)
|
||||||
{
|
{
|
||||||
|
case HARD_FRAME_POINTER_REGNUM:
|
||||||
if (current_function_is_leaf)
|
if (current_function_is_leaf)
|
||||||
offset = -current_frame_info.total_size;
|
offset = -current_frame_info.total_size;
|
||||||
else
|
else
|
||||||
offset = -(current_frame_info.total_size
|
offset = -(current_frame_info.total_size
|
||||||
- current_function_outgoing_args_size - 16);
|
- current_function_outgoing_args_size - 16);
|
||||||
}
|
break;
|
||||||
else if (to == STACK_POINTER_REGNUM)
|
|
||||||
{
|
case STACK_POINTER_REGNUM:
|
||||||
if (current_function_is_leaf)
|
if (current_function_is_leaf)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
else
|
else
|
||||||
offset = 16 + current_function_outgoing_args_size;
|
offset = 16 + current_function_outgoing_args_size;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ARG_POINTER_REGNUM:
|
case ARG_POINTER_REGNUM:
|
||||||
/* Arguments start above the 16 byte save area, unless stdarg
|
/* Arguments start above the 16 byte save area, unless stdarg
|
||||||
in which case we store through the 16 byte save area. */
|
in which case we store through the 16 byte save area. */
|
||||||
if (to == HARD_FRAME_POINTER_REGNUM)
|
switch (to)
|
||||||
offset = 16 - current_function_pretend_args_size;
|
{
|
||||||
else if (to == STACK_POINTER_REGNUM)
|
case HARD_FRAME_POINTER_REGNUM:
|
||||||
offset = (current_frame_info.total_size
|
offset = 16 - current_function_pretend_args_size;
|
||||||
+ 16 - current_function_pretend_args_size);
|
break;
|
||||||
else
|
|
||||||
abort ();
|
case STACK_POINTER_REGNUM:
|
||||||
|
offset = (current_frame_info.total_size
|
||||||
|
+ 16 - current_function_pretend_args_size);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
gcc_unreachable ();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -2649,9 +2663,8 @@ ia64_expand_prologue (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We should now be at the base of the gr/br/fr spill area. */
|
/* We should now be at the base of the gr/br/fr spill area. */
|
||||||
if (cfa_off != (current_frame_info.spill_cfa_off
|
gcc_assert (cfa_off == (current_frame_info.spill_cfa_off
|
||||||
+ current_frame_info.spill_size))
|
+ current_frame_info.spill_size));
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Spill all general registers. */
|
/* Spill all general registers. */
|
||||||
for (regno = GR_REG (1); regno <= GR_REG (31); ++regno)
|
for (regno = GR_REG (1); regno <= GR_REG (31); ++regno)
|
||||||
|
@ -2704,15 +2717,13 @@ ia64_expand_prologue (void)
|
||||||
for (regno = FR_REG (2); regno <= FR_REG (127); ++regno)
|
for (regno = FR_REG (2); regno <= FR_REG (127); ++regno)
|
||||||
if (TEST_HARD_REG_BIT (current_frame_info.mask, regno))
|
if (TEST_HARD_REG_BIT (current_frame_info.mask, regno))
|
||||||
{
|
{
|
||||||
if (cfa_off & 15)
|
gcc_assert (!(cfa_off & 15));
|
||||||
abort ();
|
|
||||||
reg = gen_rtx_REG (XFmode, regno);
|
reg = gen_rtx_REG (XFmode, regno);
|
||||||
do_spill (gen_fr_spill_x, reg, cfa_off, reg);
|
do_spill (gen_fr_spill_x, reg, cfa_off, reg);
|
||||||
cfa_off -= 16;
|
cfa_off -= 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfa_off != current_frame_info.spill_cfa_off)
|
gcc_assert (cfa_off == current_frame_info.spill_cfa_off);
|
||||||
abort ();
|
|
||||||
|
|
||||||
finish_spill_pointers ();
|
finish_spill_pointers ();
|
||||||
}
|
}
|
||||||
|
@ -2824,9 +2835,8 @@ ia64_expand_epilogue (int sibcall_p)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We should now be at the base of the gr/br/fr spill area. */
|
/* We should now be at the base of the gr/br/fr spill area. */
|
||||||
if (cfa_off != (current_frame_info.spill_cfa_off
|
gcc_assert (cfa_off == (current_frame_info.spill_cfa_off
|
||||||
+ current_frame_info.spill_size))
|
+ current_frame_info.spill_size));
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* The GP may be stored on the stack in the prologue, but it's
|
/* The GP may be stored on the stack in the prologue, but it's
|
||||||
never restored in the epilogue. Skip the stack slot. */
|
never restored in the epilogue. Skip the stack slot. */
|
||||||
|
@ -2874,8 +2884,7 @@ ia64_expand_epilogue (int sibcall_p)
|
||||||
for (regno = FR_REG (2); regno <= FR_REG (127); ++regno)
|
for (regno = FR_REG (2); regno <= FR_REG (127); ++regno)
|
||||||
if (TEST_HARD_REG_BIT (current_frame_info.mask, regno))
|
if (TEST_HARD_REG_BIT (current_frame_info.mask, regno))
|
||||||
{
|
{
|
||||||
if (cfa_off & 15)
|
gcc_assert (!(cfa_off & 15));
|
||||||
abort ();
|
|
||||||
reg = gen_rtx_REG (XFmode, regno);
|
reg = gen_rtx_REG (XFmode, regno);
|
||||||
do_restore (gen_fr_restore_x, reg, cfa_off);
|
do_restore (gen_fr_restore_x, reg, cfa_off);
|
||||||
cfa_off -= 16;
|
cfa_off -= 16;
|
||||||
|
@ -2888,8 +2897,7 @@ ia64_expand_epilogue (int sibcall_p)
|
||||||
emit_move_insn (reg, ar_unat_save_reg);
|
emit_move_insn (reg, ar_unat_save_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfa_off != current_frame_info.spill_cfa_off)
|
gcc_assert (cfa_off == current_frame_info.spill_cfa_off);
|
||||||
abort ();
|
|
||||||
|
|
||||||
finish_spill_pointers ();
|
finish_spill_pointers ();
|
||||||
|
|
||||||
|
@ -3931,8 +3939,7 @@ ia64_function_value (tree valtype, tree func ATTRIBUTE_UNUSED)
|
||||||
void
|
void
|
||||||
ia64_output_dwarf_dtprel (FILE *file, int size, rtx x)
|
ia64_output_dwarf_dtprel (FILE *file, int size, rtx x)
|
||||||
{
|
{
|
||||||
if (size != 8)
|
gcc_assert (size == 8);
|
||||||
abort ();
|
|
||||||
fputs ("\tdata8.ua\t@dtprel(", file);
|
fputs ("\tdata8.ua\t@dtprel(", file);
|
||||||
output_addr_const (file, x);
|
output_addr_const (file, x);
|
||||||
fputs (")", file);
|
fputs (")", file);
|
||||||
|
@ -4021,10 +4028,11 @@ ia64_print_operand (FILE * file, rtx x, int code)
|
||||||
str = reg_names [FR_REG (0)];
|
str = reg_names [FR_REG (0)];
|
||||||
else if (x == CONST1_RTX (GET_MODE (x)))
|
else if (x == CONST1_RTX (GET_MODE (x)))
|
||||||
str = reg_names [FR_REG (1)];
|
str = reg_names [FR_REG (1)];
|
||||||
else if (GET_CODE (x) == REG)
|
|
||||||
str = reg_names [REGNO (x)];
|
|
||||||
else
|
else
|
||||||
abort ();
|
{
|
||||||
|
gcc_assert (GET_CODE (x) == REG);
|
||||||
|
str = reg_names [REGNO (x)];
|
||||||
|
}
|
||||||
fputs (str, file);
|
fputs (str, file);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -4062,13 +4070,12 @@ ia64_print_operand (FILE * file, rtx x, int code)
|
||||||
x = XEXP (XEXP (XEXP (x, 0), 1), 1);
|
x = XEXP (XEXP (XEXP (x, 0), 1), 1);
|
||||||
if (GET_CODE (x) == CONST_INT)
|
if (GET_CODE (x) == CONST_INT)
|
||||||
value = INTVAL (x);
|
value = INTVAL (x);
|
||||||
else if (GET_CODE (x) == REG)
|
else
|
||||||
{
|
{
|
||||||
|
gcc_assert (GET_CODE (x) == REG);
|
||||||
fprintf (file, ", %s", reg_names[REGNO (x)]);
|
fprintf (file, ", %s", reg_names[REGNO (x)]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_INC:
|
case POST_INC:
|
||||||
|
@ -4350,7 +4357,7 @@ ia64_register_move_cost (enum machine_mode mode, enum reg_class from,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -4753,8 +4760,8 @@ struct reg_write_state rws_sum[NUM_REGS];
|
||||||
struct reg_write_state rws_insn[NUM_REGS];
|
struct reg_write_state rws_insn[NUM_REGS];
|
||||||
|
|
||||||
/* Indicates whether this is the first instruction after a stop bit,
|
/* Indicates whether this is the first instruction after a stop bit,
|
||||||
in which case we don't need another stop bit. Without this, we hit
|
in which case we don't need another stop bit. Without this,
|
||||||
the abort in ia64_variable_issue when scheduling an alloc. */
|
ia64_variable_issue will die when scheduling an alloc. */
|
||||||
static int first_instruction;
|
static int first_instruction;
|
||||||
|
|
||||||
/* Misc flags needed to compute RAW/WAW dependencies while we are traversing
|
/* Misc flags needed to compute RAW/WAW dependencies while we are traversing
|
||||||
|
@ -4805,8 +4812,7 @@ rws_access_regno (int regno, struct reg_flags flags, int pred)
|
||||||
{
|
{
|
||||||
int need_barrier = 0;
|
int need_barrier = 0;
|
||||||
|
|
||||||
if (regno >= NUM_REGS)
|
gcc_assert (regno < NUM_REGS);
|
||||||
abort ();
|
|
||||||
|
|
||||||
if (! PR_REGNO_P (regno))
|
if (! PR_REGNO_P (regno))
|
||||||
flags.is_and = flags.is_or = 0;
|
flags.is_and = flags.is_or = 0;
|
||||||
|
@ -4816,8 +4822,7 @@ rws_access_regno (int regno, struct reg_flags flags, int pred)
|
||||||
int write_count;
|
int write_count;
|
||||||
|
|
||||||
/* One insn writes same reg multiple times? */
|
/* One insn writes same reg multiple times? */
|
||||||
if (rws_insn[regno].write_count > 0)
|
gcc_assert (!rws_insn[regno].write_count);
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Update info for current instruction. */
|
/* Update info for current instruction. */
|
||||||
rws_update (rws_insn, regno, flags, pred);
|
rws_update (rws_insn, regno, flags, pred);
|
||||||
|
@ -4858,7 +4863,7 @@ rws_access_regno (int regno, struct reg_flags flags, int pred)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -4911,7 +4916,7 @@ rws_access_regno (int regno, struct reg_flags flags, int pred)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4963,9 +4968,8 @@ update_set_flags (rtx x, struct reg_flags *pflags, int *ppred, rtx *pcond)
|
||||||
if (GET_CODE (cond) == EQ)
|
if (GET_CODE (cond) == EQ)
|
||||||
is_complemented = 1;
|
is_complemented = 1;
|
||||||
cond = XEXP (cond, 0);
|
cond = XEXP (cond, 0);
|
||||||
if (GET_CODE (cond) != REG
|
gcc_assert (GET_CODE (cond) == REG
|
||||||
&& REGNO_REG_CLASS (REGNO (cond)) != PR_REGS)
|
|| REGNO_REG_CLASS (REGNO (cond)) == PR_REGS);
|
||||||
abort ();
|
|
||||||
*pcond = cond;
|
*pcond = cond;
|
||||||
if (XEXP (src, 1) == SET_DEST (x)
|
if (XEXP (src, 1) == SET_DEST (x)
|
||||||
|| XEXP (src, 2) == SET_DEST (x))
|
|| XEXP (src, 2) == SET_DEST (x))
|
||||||
|
@ -5089,7 +5093,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
need_barrier |= rws_access_regno (AR_EC_REGNUM, new_flags, pred);
|
need_barrier |= rws_access_regno (AR_EC_REGNUM, new_flags, pred);
|
||||||
|
|
||||||
/* Avoid multiple register writes, in case this is a pattern with
|
/* Avoid multiple register writes, in case this is a pattern with
|
||||||
multiple CALL rtx. This avoids an abort in rws_access_reg. */
|
multiple CALL rtx. This avoids a failure in rws_access_reg. */
|
||||||
if (! flags.is_sibcall && ! rws_insn[REG_AR_CFM].write_count)
|
if (! flags.is_sibcall && ! rws_insn[REG_AR_CFM].write_count)
|
||||||
{
|
{
|
||||||
new_flags.is_write = 1;
|
new_flags.is_write = 1;
|
||||||
|
@ -5103,16 +5107,14 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
/* X is a predicated instruction. */
|
/* X is a predicated instruction. */
|
||||||
|
|
||||||
cond = COND_EXEC_TEST (x);
|
cond = COND_EXEC_TEST (x);
|
||||||
if (pred)
|
gcc_assert (!pred);
|
||||||
abort ();
|
|
||||||
need_barrier = rtx_needs_barrier (cond, flags, 0);
|
need_barrier = rtx_needs_barrier (cond, flags, 0);
|
||||||
|
|
||||||
if (GET_CODE (cond) == EQ)
|
if (GET_CODE (cond) == EQ)
|
||||||
is_complemented = 1;
|
is_complemented = 1;
|
||||||
cond = XEXP (cond, 0);
|
cond = XEXP (cond, 0);
|
||||||
if (GET_CODE (cond) != REG
|
gcc_assert (GET_CODE (cond) == REG
|
||||||
&& REGNO_REG_CLASS (REGNO (cond)) != PR_REGS)
|
|| REGNO_REG_CLASS (REGNO (cond)) == PR_REGS);
|
||||||
abort ();
|
|
||||||
pred = REGNO (cond);
|
pred = REGNO (cond);
|
||||||
if (is_complemented)
|
if (is_complemented)
|
||||||
++pred;
|
++pred;
|
||||||
|
@ -5133,7 +5135,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
|| (MEM_VOLATILE_P (x) && TARGET_VOL_ASM_STOP))
|
|| (MEM_VOLATILE_P (x) && TARGET_VOL_ASM_STOP))
|
||||||
{
|
{
|
||||||
/* Avoid writing the register multiple times if we have multiple
|
/* Avoid writing the register multiple times if we have multiple
|
||||||
asm outputs. This avoids an abort in rws_access_reg. */
|
asm outputs. This avoids a failure in rws_access_reg. */
|
||||||
if (! rws_insn[REG_VOLATILE].write_count)
|
if (! rws_insn[REG_VOLATILE].write_count)
|
||||||
{
|
{
|
||||||
new_flags.is_write = 1;
|
new_flags.is_write = 1;
|
||||||
|
@ -5220,8 +5222,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
|
|
||||||
/* Operators with side-effects. */
|
/* Operators with side-effects. */
|
||||||
case POST_INC: case POST_DEC:
|
case POST_INC: case POST_DEC:
|
||||||
if (GET_CODE (XEXP (x, 0)) != REG)
|
gcc_assert (GET_CODE (XEXP (x, 0)) == REG);
|
||||||
abort ();
|
|
||||||
|
|
||||||
new_flags.is_write = 0;
|
new_flags.is_write = 0;
|
||||||
need_barrier = rws_access_reg (XEXP (x, 0), new_flags, pred);
|
need_barrier = rws_access_reg (XEXP (x, 0), new_flags, pred);
|
||||||
|
@ -5230,8 +5231,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_MODIFY:
|
case POST_MODIFY:
|
||||||
if (GET_CODE (XEXP (x, 0)) != REG)
|
gcc_assert (GET_CODE (XEXP (x, 0)) == REG);
|
||||||
abort ();
|
|
||||||
|
|
||||||
new_flags.is_write = 0;
|
new_flags.is_write = 0;
|
||||||
need_barrier = rws_access_reg (XEXP (x, 0), new_flags, pred);
|
need_barrier = rws_access_reg (XEXP (x, 0), new_flags, pred);
|
||||||
|
@ -5262,7 +5262,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
/* VEC_SELECT's second argument is a PARALLEL with integers that
|
/* VEC_SELECT's second argument is a PARALLEL with integers that
|
||||||
describe the elements selected. On ia64, those integers are
|
describe the elements selected. On ia64, those integers are
|
||||||
always constants. Avoid walking the PARALLEL so that we don't
|
always constants. Avoid walking the PARALLEL so that we don't
|
||||||
get confused with "normal" parallels and abort. */
|
get confused with "normal" parallels and then die. */
|
||||||
need_barrier = rtx_needs_barrier (XEXP (x, 0), flags, pred);
|
need_barrier = rtx_needs_barrier (XEXP (x, 0), flags, pred);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5318,7 +5318,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5351,7 +5351,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5390,7 +5390,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -5505,7 +5505,7 @@ group_barrier_needed_p (rtx insn)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first_instruction && INSN_P (insn)
|
if (first_instruction && INSN_P (insn)
|
||||||
|
@ -5861,8 +5861,7 @@ ia64_sched_init (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
for (insn = NEXT_INSN (current_sched_info->prev_head);
|
for (insn = NEXT_INSN (current_sched_info->prev_head);
|
||||||
insn != current_sched_info->next_tail;
|
insn != current_sched_info->next_tail;
|
||||||
insn = NEXT_INSN (insn))
|
insn = NEXT_INSN (insn))
|
||||||
if (SCHED_GROUP_P (insn))
|
gcc_assert (!SCHED_GROUP_P (insn));
|
||||||
abort ();
|
|
||||||
#endif
|
#endif
|
||||||
last_scheduled_insn = NULL_RTX;
|
last_scheduled_insn = NULL_RTX;
|
||||||
init_insn_group_barriers ();
|
init_insn_group_barriers ();
|
||||||
|
@ -5994,8 +5993,9 @@ ia64_variable_issue (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
memcpy (prev_cycle_state, curr_state, dfa_state_size);
|
memcpy (prev_cycle_state, curr_state, dfa_state_size);
|
||||||
if (reload_completed)
|
if (reload_completed)
|
||||||
{
|
{
|
||||||
if (group_barrier_needed_p (insn))
|
int needed = group_barrier_needed_p (insn);
|
||||||
abort ();
|
|
||||||
|
gcc_assert (!needed);
|
||||||
if (GET_CODE (insn) == CALL_INSN)
|
if (GET_CODE (insn) == CALL_INSN)
|
||||||
init_insn_group_barriers ();
|
init_insn_group_barriers ();
|
||||||
stops_p [INSN_UID (insn)] = stop_before_p;
|
stops_p [INSN_UID (insn)] = stop_before_p;
|
||||||
|
@ -6010,8 +6010,7 @@ ia64_variable_issue (FILE *dump ATTRIBUTE_UNUSED,
|
||||||
static int
|
static int
|
||||||
ia64_first_cycle_multipass_dfa_lookahead_guard (rtx insn)
|
ia64_first_cycle_multipass_dfa_lookahead_guard (rtx insn)
|
||||||
{
|
{
|
||||||
if (insn == NULL_RTX || !INSN_P (insn))
|
gcc_assert (insn && INSN_P (insn));
|
||||||
abort ();
|
|
||||||
return (!reload_completed
|
return (!reload_completed
|
||||||
|| !safe_group_barrier_needed_p (insn));
|
|| !safe_group_barrier_needed_p (insn));
|
||||||
}
|
}
|
||||||
|
@ -6032,8 +6031,7 @@ ia64_dfa_new_cycle (FILE *dump, int verbose, rtx insn, int last_clock,
|
||||||
{
|
{
|
||||||
int setup_clocks_p = FALSE;
|
int setup_clocks_p = FALSE;
|
||||||
|
|
||||||
if (insn == NULL_RTX || !INSN_P (insn))
|
gcc_assert (insn && INSN_P (insn));
|
||||||
abort ();
|
|
||||||
if ((reload_completed && safe_group_barrier_needed_p (insn))
|
if ((reload_completed && safe_group_barrier_needed_p (insn))
|
||||||
|| (last_scheduled_insn
|
|| (last_scheduled_insn
|
||||||
&& (GET_CODE (last_scheduled_insn) == CALL_INSN
|
&& (GET_CODE (last_scheduled_insn) == CALL_INSN
|
||||||
|
@ -6361,12 +6359,10 @@ issue_nops_and_insn (struct bundle_state *originator, int before_nops_num,
|
||||||
curr_state->accumulated_insns_num
|
curr_state->accumulated_insns_num
|
||||||
= originator->accumulated_insns_num + before_nops_num;
|
= originator->accumulated_insns_num + before_nops_num;
|
||||||
curr_state->branch_deviation = originator->branch_deviation;
|
curr_state->branch_deviation = originator->branch_deviation;
|
||||||
if (insn == NULL_RTX)
|
gcc_assert (insn);
|
||||||
abort ();
|
if (INSN_CODE (insn) == CODE_FOR_insn_group_barrier)
|
||||||
else if (INSN_CODE (insn) == CODE_FOR_insn_group_barrier)
|
|
||||||
{
|
{
|
||||||
if (GET_MODE (insn) == TImode)
|
gcc_assert (GET_MODE (insn) != TImode);
|
||||||
abort ();
|
|
||||||
if (!try_issue_nops (curr_state, before_nops_num))
|
if (!try_issue_nops (curr_state, before_nops_num))
|
||||||
return;
|
return;
|
||||||
if (!try_issue_insn (curr_state, insn))
|
if (!try_issue_insn (curr_state, insn))
|
||||||
|
@ -6386,9 +6382,9 @@ issue_nops_and_insn (struct bundle_state *originator, int before_nops_num,
|
||||||
if (!try_issue_insn (curr_state, insn))
|
if (!try_issue_insn (curr_state, insn))
|
||||||
return;
|
return;
|
||||||
curr_state->accumulated_insns_num++;
|
curr_state->accumulated_insns_num++;
|
||||||
if (GET_CODE (PATTERN (insn)) == ASM_INPUT
|
gcc_assert (GET_CODE (PATTERN (insn)) != ASM_INPUT
|
||||||
|| asm_noperands (PATTERN (insn)) >= 0)
|
&& asm_noperands (PATTERN (insn)) < 0);
|
||||||
abort ();
|
|
||||||
if (ia64_safe_type (insn) == TYPE_L)
|
if (ia64_safe_type (insn) == TYPE_L)
|
||||||
curr_state->accumulated_insns_num++;
|
curr_state->accumulated_insns_num++;
|
||||||
}
|
}
|
||||||
|
@ -6518,7 +6514,7 @@ get_template (state_t state, int pos)
|
||||||
else if (cpu_unit_reservation_p (state, _0mlx_))
|
else if (cpu_unit_reservation_p (state, _0mlx_))
|
||||||
return 9;
|
return 9;
|
||||||
else
|
else
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
case 6:
|
case 6:
|
||||||
if (cpu_unit_reservation_p (state, _1mmi_))
|
if (cpu_unit_reservation_p (state, _1mmi_))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -6541,9 +6537,9 @@ get_template (state_t state, int pos)
|
||||||
else if (cpu_unit_reservation_p (state, _1mlx_))
|
else if (cpu_unit_reservation_p (state, _1mlx_))
|
||||||
return 9;
|
return 9;
|
||||||
else
|
else
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6669,11 +6665,10 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
insn != NULL_RTX;
|
insn != NULL_RTX;
|
||||||
insn = next_insn)
|
insn = next_insn)
|
||||||
{
|
{
|
||||||
if (!INSN_P (insn)
|
gcc_assert (INSN_P (insn)
|
||||||
|| ia64_safe_itanium_class (insn) == ITANIUM_CLASS_IGNORE
|
&& ia64_safe_itanium_class (insn) != ITANIUM_CLASS_IGNORE
|
||||||
|| GET_CODE (PATTERN (insn)) == USE
|
&& GET_CODE (PATTERN (insn)) != USE
|
||||||
|| GET_CODE (PATTERN (insn)) == CLOBBER)
|
&& GET_CODE (PATTERN (insn)) != CLOBBER);
|
||||||
abort ();
|
|
||||||
type = ia64_safe_type (insn);
|
type = ia64_safe_type (insn);
|
||||||
next_insn = get_next_important_insn (NEXT_INSN (insn), tail);
|
next_insn = get_next_important_insn (NEXT_INSN (insn), tail);
|
||||||
insn_num++;
|
insn_num++;
|
||||||
|
@ -6713,8 +6708,7 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
issue_nops_and_insn (curr_state, 0, insn, bundle_end_p,
|
issue_nops_and_insn (curr_state, 0, insn, bundle_end_p,
|
||||||
only_bundle_end_p);
|
only_bundle_end_p);
|
||||||
}
|
}
|
||||||
if (index_to_bundle_states [insn_num] == NULL)
|
gcc_assert (index_to_bundle_states [insn_num]);
|
||||||
abort ();
|
|
||||||
for (curr_state = index_to_bundle_states [insn_num];
|
for (curr_state = index_to_bundle_states [insn_num];
|
||||||
curr_state != NULL;
|
curr_state != NULL;
|
||||||
curr_state = curr_state->next)
|
curr_state = curr_state->next)
|
||||||
|
@ -6747,10 +6741,10 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
INSN_UID (insn));
|
INSN_UID (insn));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (index_to_bundle_states [insn_num] == NULL)
|
|
||||||
/* We should find a solution because the 2nd insn scheduling has
|
/* We should find a solution because the 2nd insn scheduling has
|
||||||
found one. */
|
found one. */
|
||||||
abort ();
|
gcc_assert (index_to_bundle_states [insn_num]);
|
||||||
/* Find a state corresponding to the best insn sequence. */
|
/* Find a state corresponding to the best insn sequence. */
|
||||||
best_state = NULL;
|
best_state = NULL;
|
||||||
for (curr_state = index_to_bundle_states [insn_num];
|
for (curr_state = index_to_bundle_states [insn_num];
|
||||||
|
@ -6828,8 +6822,7 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
if (max_pos > 3 && template1 < 0)
|
if (max_pos > 3 && template1 < 0)
|
||||||
/* It may happen when we have the stop inside a bundle. */
|
/* It may happen when we have the stop inside a bundle. */
|
||||||
{
|
{
|
||||||
if (pos > 3)
|
gcc_assert (pos <= 3);
|
||||||
abort ();
|
|
||||||
template1 = get_template (curr_state->dfa_state, 3);
|
template1 = get_template (curr_state->dfa_state, 3);
|
||||||
pos += 3;
|
pos += 3;
|
||||||
}
|
}
|
||||||
|
@ -6840,14 +6833,12 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
nop = gen_nop ();
|
nop = gen_nop ();
|
||||||
emit_insn_after (nop, insn);
|
emit_insn_after (nop, insn);
|
||||||
pos--;
|
pos--;
|
||||||
if (pos < 0)
|
gcc_assert (pos >= 0);
|
||||||
abort ();
|
|
||||||
if (pos % 3 == 0)
|
if (pos % 3 == 0)
|
||||||
{
|
{
|
||||||
/* We are at the start of a bundle: emit the template
|
/* We are at the start of a bundle: emit the template
|
||||||
(it should be defined). */
|
(it should be defined). */
|
||||||
if (template0 < 0)
|
gcc_assert (template0 >= 0);
|
||||||
abort ();
|
|
||||||
b = gen_bundle_selector (GEN_INT (template0));
|
b = gen_bundle_selector (GEN_INT (template0));
|
||||||
ia64_emit_insn_before (b, nop);
|
ia64_emit_insn_before (b, nop);
|
||||||
/* If we have two bundle window, we make one bundle
|
/* If we have two bundle window, we make one bundle
|
||||||
|
@ -6866,8 +6857,7 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
/* Long insn takes 2 slots. */
|
/* Long insn takes 2 slots. */
|
||||||
if (ia64_safe_type (insn) == TYPE_L)
|
if (ia64_safe_type (insn) == TYPE_L)
|
||||||
pos--;
|
pos--;
|
||||||
if (pos < 0)
|
gcc_assert (pos >= 0);
|
||||||
abort ();
|
|
||||||
if (pos % 3 == 0
|
if (pos % 3 == 0
|
||||||
&& INSN_CODE (insn) != CODE_FOR_insn_group_barrier
|
&& INSN_CODE (insn) != CODE_FOR_insn_group_barrier
|
||||||
&& GET_CODE (PATTERN (insn)) != ASM_INPUT
|
&& GET_CODE (PATTERN (insn)) != ASM_INPUT
|
||||||
|
@ -6875,8 +6865,7 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
{
|
{
|
||||||
/* The current insn is at the bundle start: emit the
|
/* The current insn is at the bundle start: emit the
|
||||||
template. */
|
template. */
|
||||||
if (template0 < 0)
|
gcc_assert (template0 >= 0);
|
||||||
abort ();
|
|
||||||
b = gen_bundle_selector (GEN_INT (template0));
|
b = gen_bundle_selector (GEN_INT (template0));
|
||||||
ia64_emit_insn_before (b, insn);
|
ia64_emit_insn_before (b, insn);
|
||||||
b = PREV_INSN (insn);
|
b = PREV_INSN (insn);
|
||||||
|
@ -6894,14 +6883,12 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
nop = PREV_INSN (insn);
|
nop = PREV_INSN (insn);
|
||||||
insn = nop;
|
insn = nop;
|
||||||
pos--;
|
pos--;
|
||||||
if (pos < 0)
|
gcc_assert (pos >= 0);
|
||||||
abort ();
|
|
||||||
if (pos % 3 == 0)
|
if (pos % 3 == 0)
|
||||||
{
|
{
|
||||||
/* See comment above in analogous place for emitting nops
|
/* See comment above in analogous place for emitting nops
|
||||||
after the insn. */
|
after the insn. */
|
||||||
if (template0 < 0)
|
gcc_assert (template0 >= 0);
|
||||||
abort ();
|
|
||||||
b = gen_bundle_selector (GEN_INT (template0));
|
b = gen_bundle_selector (GEN_INT (template0));
|
||||||
ia64_emit_insn_before (b, insn);
|
ia64_emit_insn_before (b, insn);
|
||||||
b = PREV_INSN (insn);
|
b = PREV_INSN (insn);
|
||||||
|
@ -6921,11 +6908,10 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
insn != NULL_RTX;
|
insn != NULL_RTX;
|
||||||
insn = next_insn)
|
insn = next_insn)
|
||||||
{
|
{
|
||||||
if (!INSN_P (insn)
|
gcc_assert (INSN_P (insn)
|
||||||
|| ia64_safe_itanium_class (insn) == ITANIUM_CLASS_IGNORE
|
&& ia64_safe_itanium_class (insn) != ITANIUM_CLASS_IGNORE
|
||||||
|| GET_CODE (PATTERN (insn)) == USE
|
&& GET_CODE (PATTERN (insn)) != USE
|
||||||
|| GET_CODE (PATTERN (insn)) == CLOBBER)
|
&& GET_CODE (PATTERN (insn)) != CLOBBER);
|
||||||
abort ();
|
|
||||||
next_insn = get_next_important_insn (NEXT_INSN (insn), tail);
|
next_insn = get_next_important_insn (NEXT_INSN (insn), tail);
|
||||||
if (INSN_UID (insn) < clocks_length && add_cycles [INSN_UID (insn)])
|
if (INSN_UID (insn) < clocks_length && add_cycles [INSN_UID (insn)])
|
||||||
/* We found a MM-insn which needs additional cycles. */
|
/* We found a MM-insn which needs additional cycles. */
|
||||||
|
@ -6963,9 +6949,9 @@ bundling (FILE *dump, int verbose, rtx prev_head_insn, rtx tail)
|
||||||
bundle start, there are no more 3 insns in the bundle,
|
bundle start, there are no more 3 insns in the bundle,
|
||||||
and the MM-insn is not at the start of bundle with
|
and the MM-insn is not at the start of bundle with
|
||||||
template MLX. */
|
template MLX. */
|
||||||
if ((pred_stop_p && n == 0) || n > 2
|
gcc_assert ((!pred_stop_p || n)
|
||||||
|| (template0 == 9 && n != 0))
|
&& n <= 2
|
||||||
abort ();
|
&& (template0 != 9 || !n));
|
||||||
/* Put nops after the insn in the bundle. */
|
/* Put nops after the insn in the bundle. */
|
||||||
for (j = 3 - n; j > 0; j --)
|
for (j = 3 - n; j > 0; j --)
|
||||||
ia64_emit_insn_before (gen_nop (), insn);
|
ia64_emit_insn_before (gen_nop (), insn);
|
||||||
|
@ -7170,18 +7156,19 @@ ia64_st_address_bypass_p (rtx producer, rtx consumer)
|
||||||
{
|
{
|
||||||
rtx dest, reg, mem;
|
rtx dest, reg, mem;
|
||||||
|
|
||||||
if (producer == NULL_RTX || consumer == NULL_RTX)
|
gcc_assert (producer && consumer);
|
||||||
abort ();
|
|
||||||
dest = ia64_single_set (producer);
|
dest = ia64_single_set (producer);
|
||||||
if (dest == NULL_RTX || (reg = SET_DEST (dest)) == NULL_RTX
|
gcc_assert (dest);
|
||||||
|| (GET_CODE (reg) != REG && GET_CODE (reg) != SUBREG))
|
reg = SET_DEST (dest);
|
||||||
abort ();
|
gcc_assert (reg);
|
||||||
if (GET_CODE (reg) == SUBREG)
|
if (GET_CODE (reg) == SUBREG)
|
||||||
reg = SUBREG_REG (reg);
|
reg = SUBREG_REG (reg);
|
||||||
|
gcc_assert (GET_CODE (reg) == REG);
|
||||||
|
|
||||||
dest = ia64_single_set (consumer);
|
dest = ia64_single_set (consumer);
|
||||||
if (dest == NULL_RTX || (mem = SET_DEST (dest)) == NULL_RTX
|
gcc_assert (dest);
|
||||||
|| GET_CODE (mem) != MEM)
|
mem = SET_DEST (dest);
|
||||||
abort ();
|
gcc_assert (mem && GET_CODE (mem) == MEM);
|
||||||
return reg_mentioned_p (reg, mem);
|
return reg_mentioned_p (reg, mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7193,25 +7180,26 @@ ia64_ld_address_bypass_p (rtx producer, rtx consumer)
|
||||||
{
|
{
|
||||||
rtx dest, src, reg, mem;
|
rtx dest, src, reg, mem;
|
||||||
|
|
||||||
if (producer == NULL_RTX || consumer == NULL_RTX)
|
gcc_assert (producer && consumer);
|
||||||
abort ();
|
|
||||||
dest = ia64_single_set (producer);
|
dest = ia64_single_set (producer);
|
||||||
if (dest == NULL_RTX || (reg = SET_DEST (dest)) == NULL_RTX
|
gcc_assert (dest);
|
||||||
|| (GET_CODE (reg) != REG && GET_CODE (reg) != SUBREG))
|
reg = SET_DEST (dest);
|
||||||
abort ();
|
gcc_assert (reg);
|
||||||
if (GET_CODE (reg) == SUBREG)
|
if (GET_CODE (reg) == SUBREG)
|
||||||
reg = SUBREG_REG (reg);
|
reg = SUBREG_REG (reg);
|
||||||
|
gcc_assert (GET_CODE (reg) == REG);
|
||||||
|
|
||||||
src = ia64_single_set (consumer);
|
src = ia64_single_set (consumer);
|
||||||
if (src == NULL_RTX || (mem = SET_SRC (src)) == NULL_RTX)
|
gcc_assert (src);
|
||||||
abort ();
|
mem = SET_SRC (src);
|
||||||
|
gcc_assert (mem);
|
||||||
if (GET_CODE (mem) == UNSPEC && XVECLEN (mem, 0) > 0)
|
if (GET_CODE (mem) == UNSPEC && XVECLEN (mem, 0) > 0)
|
||||||
mem = XVECEXP (mem, 0, 0);
|
mem = XVECEXP (mem, 0, 0);
|
||||||
while (GET_CODE (mem) == SUBREG || GET_CODE (mem) == ZERO_EXTEND)
|
while (GET_CODE (mem) == SUBREG || GET_CODE (mem) == ZERO_EXTEND)
|
||||||
mem = XEXP (mem, 0);
|
mem = XEXP (mem, 0);
|
||||||
|
|
||||||
/* Note that LO_SUM is used for GOT loads. */
|
/* Note that LO_SUM is used for GOT loads. */
|
||||||
if (GET_CODE (mem) != LO_SUM && GET_CODE (mem) != MEM)
|
gcc_assert (GET_CODE (mem) == LO_SUM || GET_CODE (mem) == MEM);
|
||||||
abort ();
|
|
||||||
|
|
||||||
return reg_mentioned_p (reg, mem);
|
return reg_mentioned_p (reg, mem);
|
||||||
}
|
}
|
||||||
|
@ -7619,22 +7607,21 @@ process_set (FILE *asm_out_file, rtx pat)
|
||||||
{
|
{
|
||||||
rtx op0 = XEXP (src, 0);
|
rtx op0 = XEXP (src, 0);
|
||||||
rtx op1 = XEXP (src, 1);
|
rtx op1 = XEXP (src, 1);
|
||||||
if (op0 == dest && GET_CODE (op1) == CONST_INT)
|
|
||||||
{
|
gcc_assert (op0 == dest && GET_CODE (op1) == CONST_INT);
|
||||||
if (INTVAL (op1) < 0)
|
|
||||||
fprintf (asm_out_file, "\t.fframe "HOST_WIDE_INT_PRINT_DEC"\n",
|
if (INTVAL (op1) < 0)
|
||||||
-INTVAL (op1));
|
fprintf (asm_out_file, "\t.fframe "HOST_WIDE_INT_PRINT_DEC"\n",
|
||||||
else
|
-INTVAL (op1));
|
||||||
process_epilogue ();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
abort ();
|
process_epilogue ();
|
||||||
}
|
}
|
||||||
else if (GET_CODE (src) == REG
|
|
||||||
&& REGNO (src) == HARD_FRAME_POINTER_REGNUM)
|
|
||||||
process_epilogue ();
|
|
||||||
else
|
else
|
||||||
abort ();
|
{
|
||||||
|
gcc_assert (GET_CODE (src) == REG
|
||||||
|
&& REGNO (src) == HARD_FRAME_POINTER_REGNUM);
|
||||||
|
process_epilogue ();
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -7649,44 +7636,39 @@ process_set (FILE *asm_out_file, rtx pat)
|
||||||
{
|
{
|
||||||
case BR_REG (0):
|
case BR_REG (0):
|
||||||
/* Saving return address pointer. */
|
/* Saving return address pointer. */
|
||||||
if (dest_regno != current_frame_info.reg_save_b0)
|
gcc_assert (dest_regno == current_frame_info.reg_save_b0);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t.save rp, r%d\n",
|
fprintf (asm_out_file, "\t.save rp, r%d\n",
|
||||||
ia64_dbx_register_number (dest_regno));
|
ia64_dbx_register_number (dest_regno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PR_REG (0):
|
case PR_REG (0):
|
||||||
if (dest_regno != current_frame_info.reg_save_pr)
|
gcc_assert (dest_regno == current_frame_info.reg_save_pr);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t.save pr, r%d\n",
|
fprintf (asm_out_file, "\t.save pr, r%d\n",
|
||||||
ia64_dbx_register_number (dest_regno));
|
ia64_dbx_register_number (dest_regno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case AR_UNAT_REGNUM:
|
case AR_UNAT_REGNUM:
|
||||||
if (dest_regno != current_frame_info.reg_save_ar_unat)
|
gcc_assert (dest_regno == current_frame_info.reg_save_ar_unat);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t.save ar.unat, r%d\n",
|
fprintf (asm_out_file, "\t.save ar.unat, r%d\n",
|
||||||
ia64_dbx_register_number (dest_regno));
|
ia64_dbx_register_number (dest_regno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case AR_LC_REGNUM:
|
case AR_LC_REGNUM:
|
||||||
if (dest_regno != current_frame_info.reg_save_ar_lc)
|
gcc_assert (dest_regno == current_frame_info.reg_save_ar_lc);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t.save ar.lc, r%d\n",
|
fprintf (asm_out_file, "\t.save ar.lc, r%d\n",
|
||||||
ia64_dbx_register_number (dest_regno));
|
ia64_dbx_register_number (dest_regno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case STACK_POINTER_REGNUM:
|
case STACK_POINTER_REGNUM:
|
||||||
if (dest_regno != HARD_FRAME_POINTER_REGNUM
|
gcc_assert (dest_regno == HARD_FRAME_POINTER_REGNUM
|
||||||
|| ! frame_pointer_needed)
|
&& frame_pointer_needed);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t.vframe r%d\n",
|
fprintf (asm_out_file, "\t.vframe r%d\n",
|
||||||
ia64_dbx_register_number (dest_regno));
|
ia64_dbx_register_number (dest_regno));
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* Everything else should indicate being stored to memory. */
|
/* Everything else should indicate being stored to memory. */
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7702,55 +7684,50 @@ process_set (FILE *asm_out_file, rtx pat)
|
||||||
base = XEXP (dest, 0);
|
base = XEXP (dest, 0);
|
||||||
off = 0;
|
off = 0;
|
||||||
}
|
}
|
||||||
else if (GET_CODE (XEXP (dest, 0)) == PLUS
|
else
|
||||||
&& GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT)
|
|
||||||
{
|
{
|
||||||
|
gcc_assert (GET_CODE (XEXP (dest, 0)) == PLUS
|
||||||
|
&& GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT);
|
||||||
base = XEXP (XEXP (dest, 0), 0);
|
base = XEXP (XEXP (dest, 0), 0);
|
||||||
off = INTVAL (XEXP (XEXP (dest, 0), 1));
|
off = INTVAL (XEXP (XEXP (dest, 0), 1));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
if (base == hard_frame_pointer_rtx)
|
if (base == hard_frame_pointer_rtx)
|
||||||
{
|
{
|
||||||
saveop = ".savepsp";
|
saveop = ".savepsp";
|
||||||
off = - off;
|
off = - off;
|
||||||
}
|
}
|
||||||
else if (base == stack_pointer_rtx)
|
|
||||||
saveop = ".savesp";
|
|
||||||
else
|
else
|
||||||
abort ();
|
{
|
||||||
|
gcc_assert (base == stack_pointer_rtx);
|
||||||
|
saveop = ".savesp";
|
||||||
|
}
|
||||||
|
|
||||||
src_regno = REGNO (src);
|
src_regno = REGNO (src);
|
||||||
switch (src_regno)
|
switch (src_regno)
|
||||||
{
|
{
|
||||||
case BR_REG (0):
|
case BR_REG (0):
|
||||||
if (current_frame_info.reg_save_b0 != 0)
|
gcc_assert (!current_frame_info.reg_save_b0);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t%s rp, %ld\n", saveop, off);
|
fprintf (asm_out_file, "\t%s rp, %ld\n", saveop, off);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PR_REG (0):
|
case PR_REG (0):
|
||||||
if (current_frame_info.reg_save_pr != 0)
|
gcc_assert (!current_frame_info.reg_save_pr);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t%s pr, %ld\n", saveop, off);
|
fprintf (asm_out_file, "\t%s pr, %ld\n", saveop, off);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case AR_LC_REGNUM:
|
case AR_LC_REGNUM:
|
||||||
if (current_frame_info.reg_save_ar_lc != 0)
|
gcc_assert (!current_frame_info.reg_save_ar_lc);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t%s ar.lc, %ld\n", saveop, off);
|
fprintf (asm_out_file, "\t%s ar.lc, %ld\n", saveop, off);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case AR_PFS_REGNUM:
|
case AR_PFS_REGNUM:
|
||||||
if (current_frame_info.reg_save_ar_pfs != 0)
|
gcc_assert (!current_frame_info.reg_save_ar_pfs);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t%s ar.pfs, %ld\n", saveop, off);
|
fprintf (asm_out_file, "\t%s ar.pfs, %ld\n", saveop, off);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case AR_UNAT_REGNUM:
|
case AR_UNAT_REGNUM:
|
||||||
if (current_frame_info.reg_save_ar_unat != 0)
|
gcc_assert (!current_frame_info.reg_save_ar_unat);
|
||||||
abort ();
|
|
||||||
fprintf (asm_out_file, "\t%s ar.unat, %ld\n", saveop, off);
|
fprintf (asm_out_file, "\t%s ar.unat, %ld\n", saveop, off);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -7850,7 +7827,7 @@ process_for_unwind_directive (FILE *asm_out_file, rtx insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7990,8 +7967,7 @@ ia64_hpux_file_end (void)
|
||||||
tree decl = p->decl;
|
tree decl = p->decl;
|
||||||
tree id = DECL_ASSEMBLER_NAME (decl);
|
tree id = DECL_ASSEMBLER_NAME (decl);
|
||||||
|
|
||||||
if (!id)
|
gcc_assert (id);
|
||||||
abort ();
|
|
||||||
|
|
||||||
if (!TREE_ASM_WRITTEN (decl) && TREE_SYMBOL_REFERENCED (id))
|
if (!TREE_ASM_WRITTEN (decl) && TREE_SYMBOL_REFERENCED (id))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1796,7 +1796,7 @@ do { \
|
||||||
/* This is how to output an element of a case-vector that is absolute.
|
/* This is how to output an element of a case-vector that is absolute.
|
||||||
(Ia64 does not use such vectors, but we must define this macro anyway.) */
|
(Ia64 does not use such vectors, but we must define this macro anyway.) */
|
||||||
|
|
||||||
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) abort ()
|
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) gcc_unreachable ()
|
||||||
|
|
||||||
/* Jump tables only need 8 byte alignment. */
|
/* Jump tables only need 8 byte alignment. */
|
||||||
|
|
||||||
|
|
|
@ -363,9 +363,8 @@
|
||||||
"mov pr = %1, -1"
|
"mov pr = %1, -1"
|
||||||
};
|
};
|
||||||
|
|
||||||
if (which_alternative == 2 && ! TARGET_NO_PIC
|
gcc_assert (which_alternative != 2 || TARGET_NO_PIC
|
||||||
&& symbolic_operand (operands[1], VOIDmode))
|
|| !symbolic_operand (operands[1], VOIDmode));
|
||||||
abort ();
|
|
||||||
|
|
||||||
return alt[which_alternative];
|
return alt[which_alternative];
|
||||||
}
|
}
|
||||||
|
@ -700,10 +699,11 @@
|
||||||
|
|
||||||
if (GET_CODE (op0) == REG && GR_REGNO_P (REGNO (op0)))
|
if (GET_CODE (op0) == REG && GR_REGNO_P (REGNO (op0)))
|
||||||
{
|
{
|
||||||
|
rtx out[2];
|
||||||
|
|
||||||
/* We're hoping to transform everything that deals with XFmode
|
/* We're hoping to transform everything that deals with XFmode
|
||||||
quantities and GR registers early in the compiler. */
|
quantities and GR registers early in the compiler. */
|
||||||
if (no_new_pseudos)
|
gcc_assert (!no_new_pseudos);
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Struct to register can just use TImode instead. */
|
/* Struct to register can just use TImode instead. */
|
||||||
if ((GET_CODE (operands[1]) == SUBREG
|
if ((GET_CODE (operands[1]) == SUBREG
|
||||||
|
@ -735,27 +735,21 @@
|
||||||
if (register_operand (operands[1], XFmode))
|
if (register_operand (operands[1], XFmode))
|
||||||
operands[1] = spill_xfmode_operand (operands[1], 1);
|
operands[1] = spill_xfmode_operand (operands[1], 1);
|
||||||
|
|
||||||
if (GET_CODE (operands[1]) == MEM)
|
gcc_assert (GET_CODE (operands[1]) == MEM);
|
||||||
{
|
|
||||||
rtx out[2];
|
|
||||||
|
|
||||||
out[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (op0));
|
out[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (op0));
|
||||||
out[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (op0) + 1);
|
out[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (op0) + 1);
|
||||||
|
|
||||||
emit_move_insn (out[0], adjust_address (operands[1], DImode, 0));
|
emit_move_insn (out[0], adjust_address (operands[1], DImode, 0));
|
||||||
emit_move_insn (out[1], adjust_address (operands[1], DImode, 8));
|
emit_move_insn (out[1], adjust_address (operands[1], DImode, 8));
|
||||||
DONE;
|
DONE;
|
||||||
}
|
|
||||||
|
|
||||||
abort ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GET_CODE (operands[1]) == REG && GR_REGNO_P (REGNO (operands[1])))
|
if (GET_CODE (operands[1]) == REG && GR_REGNO_P (REGNO (operands[1])))
|
||||||
{
|
{
|
||||||
/* We're hoping to transform everything that deals with XFmode
|
/* We're hoping to transform everything that deals with XFmode
|
||||||
quantities and GR registers early in the compiler. */
|
quantities and GR registers early in the compiler. */
|
||||||
if (no_new_pseudos)
|
gcc_assert (!no_new_pseudos);
|
||||||
abort ();
|
|
||||||
|
|
||||||
/* Op0 can't be a GR_REG here, as that case is handled above.
|
/* Op0 can't be a GR_REG here, as that case is handled above.
|
||||||
If op0 is a register, then we spill op1, so that we now have a
|
If op0 is a register, then we spill op1, so that we now have a
|
||||||
|
@ -768,10 +762,11 @@
|
||||||
operands[1] = spill_xfmode_operand (op1, 0);
|
operands[1] = spill_xfmode_operand (op1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (GET_CODE (operands[0]) == MEM)
|
else
|
||||||
{
|
{
|
||||||
rtx in[2];
|
rtx in[2];
|
||||||
|
|
||||||
|
gcc_assert (GET_CODE (operands[0]) == MEM);
|
||||||
in[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[1]));
|
in[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[1]));
|
||||||
in[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[1]) + 1);
|
in[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[1]) + 1);
|
||||||
|
|
||||||
|
@ -779,9 +774,6 @@
|
||||||
emit_move_insn (adjust_address (operands[0], DImode, 8), in[1]);
|
emit_move_insn (adjust_address (operands[0], DImode, 8), in[1]);
|
||||||
DONE;
|
DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! reload_in_progress && ! reload_completed)
|
if (! reload_in_progress && ! reload_completed)
|
||||||
|
@ -2825,14 +2817,14 @@
|
||||||
"TARGET_INLINE_SQRT"
|
"TARGET_INLINE_SQRT"
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx insn;
|
||||||
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
|
||||||
#if 0
|
#if 0
|
||||||
|
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
||||||
insn = gen_sqrtsf2_internal_lat (operands[0], operands[1]);
|
insn = gen_sqrtsf2_internal_lat (operands[0], operands[1]);
|
||||||
#else
|
|
||||||
abort ();
|
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
insn = gen_sqrtsf2_internal_thr (operands[0], operands[1]);
|
#else
|
||||||
|
gcc_assert (TARGET_INLINE_SQRT != INL_MIN_LAT);
|
||||||
|
#endif
|
||||||
|
insn = gen_sqrtsf2_internal_thr (operands[0], operands[1]);
|
||||||
emit_insn (insn);
|
emit_insn (insn);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
@ -3323,14 +3315,14 @@
|
||||||
"TARGET_INLINE_SQRT"
|
"TARGET_INLINE_SQRT"
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx insn;
|
||||||
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
|
||||||
#if 0
|
#if 0
|
||||||
|
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
||||||
insn = gen_sqrtdf2_internal_lat (operands[0], operands[1]);
|
insn = gen_sqrtdf2_internal_lat (operands[0], operands[1]);
|
||||||
#else
|
|
||||||
abort ();
|
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
insn = gen_sqrtdf2_internal_thr (operands[0], operands[1]);
|
#else
|
||||||
|
gcc_assert (TARGET_INLINE_SQRT != INL_MIN_LAT);
|
||||||
|
#endif
|
||||||
|
insn = gen_sqrtdf2_internal_thr (operands[0], operands[1]);
|
||||||
emit_insn (insn);
|
emit_insn (insn);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
@ -3998,14 +3990,14 @@
|
||||||
"TARGET_INLINE_SQRT"
|
"TARGET_INLINE_SQRT"
|
||||||
{
|
{
|
||||||
rtx insn;
|
rtx insn;
|
||||||
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
|
||||||
#if 0
|
#if 0
|
||||||
|
if (TARGET_INLINE_SQRT == INL_MIN_LAT)
|
||||||
insn = gen_sqrtxf2_internal_lat (operands[0], operands[1]);
|
insn = gen_sqrtxf2_internal_lat (operands[0], operands[1]);
|
||||||
#else
|
|
||||||
abort ();
|
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
insn = gen_sqrtxf2_internal_thr (operands[0], operands[1]);
|
#else
|
||||||
|
gcc_assert (TARGET_INLINE_SQRT != INL_MIN_LAT);
|
||||||
|
#endif
|
||||||
|
insn = gen_sqrtxf2_internal_thr (operands[0], operands[1]);
|
||||||
emit_insn (insn);
|
emit_insn (insn);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
@ -4351,7 +4343,7 @@
|
||||||
(match_operand:DI 3 "nonmemory_operand" "r"))
|
(match_operand:DI 3 "nonmemory_operand" "r"))
|
||||||
(match_operand:DI 4 "nonmemory_operand" "rI")))]
|
(match_operand:DI 4 "nonmemory_operand" "rI")))]
|
||||||
"reload_in_progress"
|
"reload_in_progress"
|
||||||
"* abort ();"
|
"* gcc_unreachable ();"
|
||||||
"reload_completed"
|
"reload_completed"
|
||||||
[(set (match_dup 0) (plus:DI (mult:DI (match_dup 1) (match_dup 2))
|
[(set (match_dup 0) (plus:DI (mult:DI (match_dup 1) (match_dup 2))
|
||||||
(match_dup 3)))
|
(match_dup 3)))
|
||||||
|
@ -5103,7 +5095,7 @@
|
||||||
"rim,rim,rim, rim, *f, *b,*d*e,*f,*b,*d*e,rO,*f,rOQ,rO, rK")))]
|
"rim,rim,rim, rim, *f, *b,*d*e,*f,*b,*d*e,rO,*f,rOQ,rO, rK")))]
|
||||||
"ia64_move_ok (operands[0], operands[2])
|
"ia64_move_ok (operands[0], operands[2])
|
||||||
&& ia64_move_ok (operands[0], operands[3])"
|
&& ia64_move_ok (operands[0], operands[3])"
|
||||||
{ abort (); }
|
{ gcc_unreachable (); }
|
||||||
[(set_attr "predicable" "no")])
|
[(set_attr "predicable" "no")])
|
||||||
|
|
||||||
(define_split
|
(define_split
|
||||||
|
@ -5206,7 +5198,7 @@
|
||||||
"rim*f,rO,rO,0,0,0,rim*f,rO,rO")))]
|
"rim*f,rO,rO,0,0,0,rim*f,rO,rO")))]
|
||||||
"ia64_move_ok (operands[0], operands[2])
|
"ia64_move_ok (operands[0], operands[2])
|
||||||
&& ia64_move_ok (operands[0], operands[3])"
|
&& ia64_move_ok (operands[0], operands[3])"
|
||||||
{ abort (); }
|
{ gcc_unreachable (); }
|
||||||
[(set_attr "predicable" "no")])
|
[(set_attr "predicable" "no")])
|
||||||
|
|
||||||
(define_insn "*abssi2_internal"
|
(define_insn "*abssi2_internal"
|
||||||
|
@ -5605,12 +5597,10 @@
|
||||||
start_sequence ();
|
start_sequence ();
|
||||||
set = single_set (last);
|
set = single_set (last);
|
||||||
|
|
||||||
if (! rtx_equal_p (SET_DEST (set), op0)
|
gcc_assert (rtx_equal_p (SET_DEST (set), op0)
|
||||||
|| GET_CODE (SET_SRC (set)) != MEM)
|
&& GET_CODE (SET_SRC (set)) == MEM);
|
||||||
abort ();
|
|
||||||
addr = XEXP (SET_SRC (set), 0);
|
addr = XEXP (SET_SRC (set), 0);
|
||||||
if (rtx_equal_p (addr, op0))
|
gcc_assert (!rtx_equal_p (addr, op0));
|
||||||
abort ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Jump table elements are stored pc-relative. That is, a displacement
|
/* Jump table elements are stored pc-relative. That is, a displacement
|
||||||
|
@ -5958,10 +5948,8 @@
|
||||||
int i = (INTVAL (operands[1]));
|
int i = (INTVAL (operands[1]));
|
||||||
int j = (INTVAL (operands[2]));
|
int j = (INTVAL (operands[2]));
|
||||||
|
|
||||||
if (i != 0 && i != 1)
|
gcc_assert (i == 0 || i == 1);
|
||||||
abort ();
|
gcc_assert (j >= 0 && j <= 3);
|
||||||
if (j < 0 || j > 3)
|
|
||||||
abort ();
|
|
||||||
return alt[i][j];
|
return alt[i][j];
|
||||||
}
|
}
|
||||||
[(set_attr "itanium_class" "lfetch")])
|
[(set_attr "itanium_class" "lfetch")])
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
return (INTVAL (op) & 0x3fff) == 0;
|
return (INTVAL (op) & 0x3fff) == 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
return (offset >= 0 && offset <= size);
|
return (offset >= 0 && offset <= size);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -893,7 +893,7 @@
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
abort ();
|
gcc_unreachable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
cmp = gen_reg_rtx (V2SFmode);
|
cmp = gen_reg_rtx (V2SFmode);
|
||||||
|
|
Loading…
Reference in New Issue