summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-12-16 09:54:34 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-12-16 09:54:34 +0000
commitb2d919a895ca56b408b08e6aa1d14ef1dca781d3 (patch)
tree472ece16a2d2361e3f9da5e4bce513a52f486963
parent786d303736649a671bf461213deeba93ada83aff (diff)
downloadgcc-b2d919a895ca56b408b08e6aa1d14ef1dca781d3.tar.gz
gcc/
PR rtl-optimization/34415 * df.h (DF_LR_IN, DF_LR_OUT): Update comments. * resource.c (mark_target_live_regs): Use DF_LR_IN rather than df_get_live_in. Don't handle pseudos. gcc/testsuite/ PR rtl-optimization/34415 * gcc.c-torture/execute/pr34415.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130987 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/df.h6
-rw-r--r--gcc/resource.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr34415.c34
5 files changed, 50 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 054ef8f2caf..4dac20691b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-16 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ PR rtl-optimization/34415
+ * df.h (DF_LR_IN, DF_LR_OUT): Update comments.
+ * resource.c (mark_target_live_regs): Use DF_LR_IN rather than
+ df_get_live_in. Don't handle pseudos.
+
2007-12-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/34003
diff --git a/gcc/df.h b/gcc/df.h
index ba5f9b9e9b0..04bac49bf0a 100644
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -559,9 +559,9 @@ struct df
#define DF_LIVE_IN(BB) (DF_LIVE_BB_INFO(BB)->in)
#define DF_LIVE_OUT(BB) (DF_LIVE_BB_INFO(BB)->out)
-/* These macros are currently used by only reg-stack since it is not
- tolerant of uninitialized variables. This intolerance should be
- fixed because it causes other problems. */
+/* These macros are used by passes that are not tolerant of
+ uninitialized variables. This intolerance should eventually
+ be fixed. */
#define DF_LR_IN(BB) (DF_LR_BB_INFO(BB)->in)
#define DF_LR_OUT(BB) (DF_LR_BB_INFO(BB)->out)
diff --git a/gcc/resource.c b/gcc/resource.c
index 7cb4d2ae490..2ffde4f8e6f 100644
--- a/gcc/resource.c
+++ b/gcc/resource.c
@@ -958,9 +958,8 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
TARGET. Otherwise, we must assume everything is live. */
if (b != -1)
{
- regset regs_live = df_get_live_in (BASIC_BLOCK (b));
+ regset regs_live = DF_LR_IN (BASIC_BLOCK (b));
rtx start_insn, stop_insn;
- reg_set_iterator rsi;
/* Compute hard regs live at start of block -- this is the real hard regs
marked live, plus live pseudo regs that have been renumbered to
@@ -968,13 +967,6 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
REG_SET_TO_HARD_REG_SET (current_live_regs, regs_live);
- EXECUTE_IF_SET_IN_REG_SET (regs_live, FIRST_PSEUDO_REGISTER, i, rsi)
- {
- if (reg_renumber[i] >= 0)
- add_to_hard_reg_set (&current_live_regs, PSEUDO_REGNO_MODE (i),
- reg_renumber[i]);
- }
-
/* Get starting and ending insn, handling the case where each might
be a SEQUENCE. */
start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ?
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3014120c2d1..06a2195d963 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-16 Richard Sandiford <rsandifo@nildram.co.uk>
+
+ PR rtl-optimization/34415
+ * gcc.c-torture/execute/pr34415.c: New test.
+
2007-12-16 Danny Smith <dannysmith@users.sourceforge.net>
* gcc.target/i386/fastcall-1.c: (f4): Change return type to
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr34415.c b/gcc/testsuite/gcc.c-torture/execute/pr34415.c
new file mode 100644
index 00000000000..ec75394afe0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr34415.c
@@ -0,0 +1,34 @@
+const char *__attribute__((noinline))
+foo (const char *p)
+{
+ const char *end;
+ int len = 1;
+ for (;;)
+ {
+ int c = *p;
+ c = (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
+ if (c == 'B')
+ end = p;
+ else if (c == 'A')
+ {
+ end = p;
+ do
+ p++;
+ while (*p == '+');
+ }
+ else
+ break;
+ p++;
+ len++;
+ }
+ if (len > 2 && *p == ':')
+ p = end;
+ return p;
+}
+
+int
+main (void)
+{
+ const char *input = "Bbb:";
+ return foo (input) != input + 2;
+}