mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-25 01:01:20 +08:00
expr.c (emit_move_insn_1): If there is no move pattern for the original mode...
* expr.c (emit_move_insn_1): If there is no move pattern for the original mode, try using a pattern for the corresponding integer mode. From-SVN: r71816
This commit is contained in:
parent
9eb5455884
commit
5581fc9110
@ -1,3 +1,8 @@
|
||||
2003-09-26 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* expr.c (emit_move_insn_1): If there is no move pattern for the
|
||||
original mode, try using a pattern for the corresponding integer mode.
|
||||
|
||||
2003-09-26 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* combine.c (if_then_else_cond): Tighten mode check.
|
||||
|
11
gcc/expr.c
11
gcc/expr.c
@ -3491,6 +3491,17 @@ emit_move_insn_1 (rtx x, rtx y)
|
||||
return emit_insn (GEN_FCN (insn_code) (x, y));
|
||||
}
|
||||
|
||||
/* Try using a move pattern for the corresponding integer mode. This is
|
||||
only safe when simplify_subreg can convert MODE constants into integer
|
||||
constants. At present, it can only do this reliably if the value
|
||||
fits within a HOST_WIDE_INT. */
|
||||
else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT
|
||||
&& (submode = int_mode_for_mode (mode)) != BLKmode
|
||||
&& mov_optab->handlers[submode].insn_code != CODE_FOR_nothing)
|
||||
return emit_insn (GEN_FCN (mov_optab->handlers[submode].insn_code)
|
||||
(simplify_gen_subreg (submode, x, mode, 0),
|
||||
simplify_gen_subreg (submode, y, mode, 0)));
|
||||
|
||||
/* This will handle any multi-word or full-word mode that lacks a move_insn
|
||||
pattern. However, you will get better code if you define such patterns,
|
||||
even if they must turn into multiple assembler instructions. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user