diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1997-03-18 14:55:01 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-03-18 14:55:01 -0800 |
commit | 3d14e82f05ff8af2c14ff18cfbcee50d64aa22d7 (patch) | |
tree | c638d7f111b1248210d76f7b8586c9ae1789894f | |
parent | aff4d29bf4e61838c3ed08862146f16c8cfe9253 (diff) | |
download | gcc-3d14e82f05ff8af2c14ff18cfbcee50d64aa22d7.zip gcc-3d14e82f05ff8af2c14ff18cfbcee50d64aa22d7.tar.gz gcc-3d14e82f05ff8af2c14ff18cfbcee50d64aa22d7.tar.bz2 |
(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
-rw-r--r-- | gcc/final.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/final.c b/gcc/final.c index 5129611..64b5c50 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; } |