aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra.c
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2014-03-24 17:38:09 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2014-03-24 17:38:09 +0000
commit72a4ddf2b5f8167dd49a483888f14d34c3da582f (patch)
treeaeae7ffed74971f9fea144af390f17c819a9157c /gcc/lra.c
parent2b2384e8c11ac54f8add062584ada9480079a25b (diff)
downloadgcc-72a4ddf2b5f8167dd49a483888f14d34c3da582f.zip
gcc-72a4ddf2b5f8167dd49a483888f14d34c3da582f.tar.gz
gcc-72a4ddf2b5f8167dd49a483888f14d34c3da582f.tar.bz2
re PR rtl-optimization/60501 (LRA emits add patterns which might clobber cc)
2014-03-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> PR rtl-optimization/60501 * optabs.def (addptr3_optab): New optab. * optabs.c (gen_addptr3_insn, have_addptr3_insn): New function. * doc/md.texi ("addptrm3"): Document new RTL standard expander. * expr.h (gen_addptr3_insn, have_addptr3_insn): Add prototypes. * lra.c (emit_add3_insn): Use the addptr pattern if available. * config/s390/s390.md ("addptrdi3", "addptrsi3"): New expanders. From-SVN: r208796
Diffstat (limited to 'gcc/lra.c')
-rw-r--r--gcc/lra.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/lra.c b/gcc/lra.c
index 77074e2..c1b92d8 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -254,6 +254,19 @@ emit_add3_insn (rtx x, rtx y, rtx z)
rtx insn, last;
last = get_last_insn ();
+
+ if (have_addptr3_insn (x, y, z))
+ {
+ insn = gen_addptr3_insn (x, y, z);
+
+ /* If the target provides an "addptr" pattern it hopefully does
+ for a reason. So falling back to the normal add would be
+ a bug. */
+ lra_assert (insn != NULL_RTX);
+ emit_insn (insn);
+ return insn;
+ }
+
insn = emit_insn (gen_rtx_SET (VOIDmode, x,
gen_rtx_PLUS (GET_MODE (y), y, z)));
if (recog_memoized (insn) < 0)