From 3d14e82f05ff8af2c14ff18cfbcee50d64aa22d7 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Tue, 18 Mar 1997 14:55:01 -0800 Subject: [PATCH] (shorten_branches): Split all insns before computing insn lengths. (shorten_branches): Split all insns before computing insn lengths. (final_scan_insn, case default): If HAVE_ATTR_length defined, call abort for any insn that has a '#' output template. From-SVN: r13744 --- gcc/final.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gcc/final.c b/gcc/final.c index 51296117972f..64b5c500b5da 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -655,6 +655,13 @@ shorten_branches (first) rtx body; int uid; + /* In order to make sure that all instructions have valid length info, + we must split them before we compute the address/length info. */ + + for (insn = NEXT_INSN (first); insn; insn = NEXT_INSN (insn)) + if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') + insn = try_split (PATTERN (insn), insn, 1); + /* Compute maximum UID and allocate arrays. */ for (insn = first; insn; insn = NEXT_INSN (insn)) if (INSN_UID (insn) > max_uid) @@ -2090,6 +2097,13 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) if (new == insn && PATTERN (new) == body) abort (); +#ifdef HAVE_ATTR_length + /* This instruction should have been split in shorten_branches, + to ensure that we would have valid length info for the + splitees. */ + abort (); +#endif + new_block = 0; return new; }