aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2018-02-12 11:32:18 -0700
committerJeff Law <law@gcc.gnu.org>2018-02-12 11:32:18 -0700
commit966a140df68bf3e2d378fb9b68a8afb7d80b34d6 (patch)
treee89189e2c2395ff1659a47d1c39d4c44e3aea9be /gcc
parentfa2faaa80708b671806849a40bcabff3eb5a1a1e (diff)
downloadgcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.zip
gcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.tar.gz
gcc-966a140df68bf3e2d378fb9b68a8afb7d80b34d6.tar.bz2
cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when successfully back substituting a reg.
* cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when successfully back substituting a reg. * gcc.c-torture/compile/reg-args-size.c: New test. From-SVN: r257598
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cse.c9
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c36
4 files changed, 54 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5a26439..d5913d0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-12 Jeff Law <law@redhat.com>
+
+ * cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when
+ successfully back substituting a reg.
+
2018-02-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/84037
diff --git a/gcc/cse.c b/gcc/cse.c
index 825b0bd..a73a771 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4256,6 +4256,15 @@ try_back_substitute_reg (rtx set, rtx_insn *insn)
&& (reg_mentioned_p (dest, XEXP (note, 0))
|| rtx_equal_p (src, XEXP (note, 0))))
remove_note (insn, note);
+
+ /* If INSN has a REG_ARGS_SIZE note, move it to PREV. */
+ note = find_reg_note (insn, REG_ARGS_SIZE, NULL_RTX);
+ if (note != 0)
+ {
+ remove_note (insn, note);
+ gcc_assert (!find_reg_note (prev, REG_ARGS_SIZE, NULL_RTX));
+ set_unique_reg_note (prev, REG_ARGS_SIZE, XEXP (note, 0));
+ }
}
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dba0bed..8f22a65 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-02-12 Jeff Law <law@redhat.com>
+
+ * gcc.c-torture/compile/reg-args-size.c: New test.
+
2018-02-12 Carl Love <cel@us.ibm.com>
* gcc.target/powerpc/builtins-4-runnable.c (main): Move int128 and
diff --git a/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
new file mode 100644
index 0000000..0ca0b9f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/regs-arg-size.c
@@ -0,0 +1,36 @@
+int foo;
+typedef long unsigned int size_t;
+typedef short unsigned int wchar_t;
+struct tm
+{
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+};
+size_t
+__strftime (wchar_t * s, size_t maxsize, const wchar_t * format, const struct tm *tim_p)
+{
+ size_t count = 0;
+ int len = 0;
+ size_t i, ctloclen;
+ unsigned long width;
+ {
+ if (foo)
+ {
+ {
+ wchar_t *fmt = L"%s%.*d";
+ len = swprintf (&s[count], maxsize, fmt, "-", width, 0);
+ }
+ if ((count) >= maxsize)
+ return 0;
+ }
+ else
+ {
+ len =
+ swprintf (&s[count], maxsize - count, L"%.2d/%.2d/%.2d", 42, 99, 0);
+ if ((count) >= maxsize)
+ return 0;
+
+ }
+ }
+}