summaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-15 19:55:43 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-15 19:55:43 +0000
commit190dde92df54043ff9a3f30dfb4ac6077fa158be (patch)
tree9e1a0d078ed3e8135de8ee0fb54cfe541b0196f1 /gcc/reload1.c
parent97fb4325c9a48a9d5d0bc8812ada6129ec2cd6b6 (diff)
downloadgcc-190dde92df54043ff9a3f30dfb4ac6077fa158be.tar.gz
* reload1.c (reload_cse_simplify_set): For LOAD_EXTEND_OP, do not
"widen" a destination that is already wider than a word. Also do not widen if LOAD_EXTEND_OP is NIL for the given mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 2f64c2d7d4a..39d1cc3383c 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -8279,9 +8279,13 @@ reload_cse_simplify_set (set, insn)
&& GET_CODE (SET_SRC (set)) != REG))
{
#ifdef LOAD_EXTEND_OP
- rtx wide_dest = gen_rtx_REG (word_mode, REGNO (SET_DEST (set)));
- ORIGINAL_REGNO (wide_dest) = ORIGINAL_REGNO (SET_DEST (set));
- validate_change (insn, &SET_DEST (set), wide_dest, 1);
+ if (GET_MODE_BITSIZE (GET_MODE (SET_DEST (set))) < BITS_PER_WORD
+ && extend_op != NIL)
+ {
+ rtx wide_dest = gen_rtx_REG (word_mode, REGNO (SET_DEST (set)));
+ ORIGINAL_REGNO (wide_dest) = ORIGINAL_REGNO (SET_DEST (set));
+ validate_change (insn, &SET_DEST (set), wide_dest, 1);
+ }
#endif
validate_change (insn, &SET_SRC (set), copy_rtx (this_rtx), 1);