2. I am unable to do an optimized compile even as a cross-compile,
I get an internal error in this function:
gcse.c:
static void
compute_hash_table_work (struct hash_table *table)
{
...
if (!current_bb) /* +++ why are we getting NULL here? */
It appears I have misdiagnosed this. The code will handle NULL
already. Taking that out though, exposes this internal error:
int
i370_branch_dest (branch)
rtx branch;
{
rtx dest = SET_SRC (PATTERN (branch));
int dest_uid;
int dest_addr;
/* first, compute the estimated address of the branch target */
if (GET_CODE (dest) == IF_THEN_ELSE)
dest = XEXP (dest, 1);
dest = XEXP (dest, 0);
/* +++ why is this becoming NULL? */
if (!dest)
{
printf("internal error in branch dest\n");
exit (0);
}
which is obviously specific to the i370 port. This code works fine on
3.2.3 though, so any idea what 3.4.6 changed to stop this from
working?
Thanks. Paul.
dest_uid = INSN_UID (dest);
dest_addr = INSN_ADDRESSES (dest_uid);
/* next, record the address of this insn as the true addr of first ref */
{
label_node_t *lp;
rtx label = JUMP_LABEL (branch);
int labelno = CODE_LABEL_NUMBER (label);
if (!label || CODE_LABEL != GET_CODE (label)) abort ();
lp = mvs_get_label (labelno);
if (-1 == lp -> first_ref_page) lp->first_ref_page = mvs_page_num;
just_referenced_page = lp->label_page;
}
return dest_addr;
}