diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2003-05-09 17:16:54 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2003-05-09 17:16:54 +0000 |
commit | f8a30250165a6dc9ac3e323cdf0859f13b4b69d8 (patch) | |
tree | a45f9fe5c6841a2561bee0d8369feff64fbea99c /gcc | |
parent | e912eadf52af10e7ffff54c1c6ec867f2f0ba3bc (diff) | |
download | gcc-f8a30250165a6dc9ac3e323cdf0859f13b4b69d8.zip gcc-f8a30250165a6dc9ac3e323cdf0859f13b4b69d8.tar.gz gcc-f8a30250165a6dc9ac3e323cdf0859f13b4b69d8.tar.bz2 |
reload1.c (reload_cse_move2add): Don't turn an implicit truncation into a self-set in the narrow mode.
* reload1.c (reload_cse_move2add): Don't turn an implicit
truncation into a self-set in the narrow mode.
From-SVN: r66638
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload1.c | 21 |
2 files changed, 22 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01bc7ff..d7ac8d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-05-09 Alexandre Oliva <aoliva@redhat.com> + + * reload1.c (reload_cse_move2add): Don't turn an implicit + truncation into a self-set in the narrow mode. + 2003-05-09 Richard Earnshaw <rearnsha@arm.com> * arm.md (clzsi2): The CLZ instruction is predicable. diff --git a/gcc/reload1.c b/gcc/reload1.c index 792dd46..adae5c8 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -9166,7 +9166,14 @@ reload_cse_move2add (first) value flag. jump2 already knows how to get rid of no-op moves. */ if (new_src == const0_rtx) - validate_change (insn, &SET_SRC (pat), reg, 0); + { + /* If the constants are different, this is a + truncation, that, if turned into (set (reg) + (reg)), would be discarded. Maybe we should + try a truncMN pattern? */ + if (INTVAL (src) == reg_offset [regno]) + validate_change (insn, &SET_SRC (pat), reg, 0); + } else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET) && have_add2_insn (reg, new_src)) { @@ -9252,9 +9259,15 @@ reload_cse_move2add (first) int success = 0; if (new_src == const0_rtx) - /* See above why we create (set (reg) (reg)) here. */ - success - = validate_change (next, &SET_SRC (set), reg, 0); + { + if (INTVAL (src) == reg_offset [regno]) + /* See above why we create (set (reg) + (reg)) here. */ + success + = validate_change (next, &SET_SRC (set), reg, 0); + else + success = 0; + } else if ((rtx_cost (new_src, PLUS) < COSTS_N_INSNS (1) + rtx_cost (src3, SET)) && have_add2_insn (reg, new_src)) |