diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1997-02-03 17:00:11 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-02-03 17:00:11 -0800 |
commit | 44c389e479e9e226cd7d4e33abf8fda15209c894 (patch) | |
tree | c90a3bd0b9e7fd1c73451e1075175d8c6e74c7bc /gcc | |
parent | b91b26c962cc51f3f1058aceb4de20b31f100c8c (diff) | |
download | gcc-44c389e479e9e226cd7d4e33abf8fda15209c894.zip gcc-44c389e479e9e226cd7d4e33abf8fda15209c894.tar.gz gcc-44c389e479e9e226cd7d4e33abf8fda15209c894.tar.bz2 |
(find_cross_jump): Don't allow old-style and volatile asms
to match.
From-SVN: r13603
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/jump.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -2605,7 +2605,19 @@ find_cross_jump (e1, e2, minimum, f1, f2) } #endif - if (lose || GET_CODE (p1) != GET_CODE (p2) + /* Don't allow old-style asm or volatile extended asms to be accepted + for cross jumping purposes. It is conceptually correct to allow + them, since cross-jumping preserves the dynamic instruction order + even though it is changing the static instruction order. However, + if an asm is being used to emit an assembler pseudo-op, such as + the MIPS `.set reorder' pseudo-op, then the static instruction order + matters and it must be preserved. */ + if (GET_CODE (p1) == ASM_INPUT || GET_CODE (p2) == ASM_INPUT + || (GET_CODE (p1) == ASM_OPERANDS && MEM_VOLATILE_P (p1)) + || (GET_CODE (p2) == ASM_OPERANDS && MEM_VOLATILE_P (p2))) + lose = 1; + + if (lose || GET_CODE (p1) != GET_CODE (p2) || ! rtx_renumbered_equal_p (p1, p2)) { /* The following code helps take care of G++ cleanups. */ |