aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@st.com>2006-02-13 15:31:31 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2006-02-13 15:31:31 +0000
commitd0ab13fd8ba1689642124031223816930321ccdd (patch)
treee670aabc1910ed8b9cc58c136bcbc1ffc497e927 /gcc
parent3e8b04461f0106f74256a92df8aae1fd88e086c6 (diff)
downloadgcc-d0ab13fd8ba1689642124031223816930321ccdd.zip
gcc-d0ab13fd8ba1689642124031223816930321ccdd.tar.gz
gcc-d0ab13fd8ba1689642124031223816930321ccdd.tar.bz2
* reload1.c (gen_reload): Also use find_replacement in UNARY_P case.
From-SVN: r110915
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/reload1.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c8144ac..9bac8d3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2006-02-13 J"orn Rennecke <joern.rennecke@st.com>
+
+ * reload1.c (gen_reload): Also use find_replacement in UNARY_P case.
+
2006-02-12 Zdenek Dvorak <dvorakz@suse.cz>
PR rtl-optimization/26222
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 87cc425..7bfd2a1 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -7721,6 +7721,10 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
rtx out_moded;
rtx set;
+ op1 = find_replacement (&XEXP (in, 0));
+ if (op1 != XEXP (in, 0))
+ in = gen_rtx_fmt_e (GET_CODE (in), GET_MODE (in), op1);
+
/* First, try a plain SET. */
set = emit_insn_if_valid_for_reload (gen_rtx_SET (VOIDmode, out, in));
if (set)
@@ -7729,7 +7733,6 @@ gen_reload (rtx out, rtx in, int opnum, enum reload_type type)
/* If that failed, move the inner operand to the reload
register, and try the same unop with the inner expression
replaced with the reload register. */
- op1 = XEXP (in, 0);
if (GET_MODE (op1) != GET_MODE (out))
out_moded = gen_rtx_REG (GET_MODE (op1), REGNO (out));