aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2008-06-10 19:01:37 +0000
committerVladimir Makarov <vmakarov@redhat.com>2008-06-10 19:01:37 +0000
commit610897f26f384633ac683f77aeeb17d24c399bfc (patch)
tree4887e9dc9899321eee4b639cae43073f657a9f7d /gcc
parentacb0de2e5166f314004e145aa27ebab248b816ea (diff)
2008-06-10 Vladimir Makarov <vmakarov@redhat.com>
PR target/36450 * caller-save.c (insert_restore, insert_save): Don't require alignment more than PREFERRED_STACK_BOUNDARY in asserts. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ira@136638 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/caller-save.c6
-rw-r--r--gcc/ira-int.h16
3 files changed, 17 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d7d508eeb23..d7f4a5b2152 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
2008-06-10 Vladimir Makarov <vmakarov@redhat.com>
+ PR target/36450
+ * caller-save.c (insert_restore, insert_save): Don't require
+ alignment more than PREFERRED_STACK_BOUNDARY in asserts.
+
+2008-06-10 Vladimir Makarov <vmakarov@redhat.com>
* ira-int.h (allocno_copy): Change comments.
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index 39bc34d2515..b8cc86612c3 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -2420,7 +2420,8 @@ insert_restore (struct insn_chain *chain, int before_p, int regno,
/* Verify that the alignment of spill space is equal to or greater
than required. */
- gcc_assert (GET_MODE_ALIGNMENT (GET_MODE (mem)) <= MEM_ALIGN (mem));
+ gcc_assert (MIN (PREFERRED_STACK_BOUNDARY,
+ GET_MODE_ALIGNMENT (GET_MODE (mem))) <= MEM_ALIGN (mem));
pat = gen_rtx_SET (VOIDmode,
gen_rtx_REG (GET_MODE (mem),
@@ -2505,7 +2506,8 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
/* Verify that the alignment of spill space is equal to or greater
than required. */
- gcc_assert (GET_MODE_ALIGNMENT (GET_MODE (mem)) <= MEM_ALIGN (mem));
+ gcc_assert (MIN (PREFERRED_STACK_BOUNDARY,
+ GET_MODE_ALIGNMENT (GET_MODE (mem))) <= MEM_ALIGN (mem));
pat = gen_rtx_SET (VOIDmode, mem,
gen_rtx_REG (GET_MODE (mem),
diff --git a/gcc/ira-int.h b/gcc/ira-int.h
index 794eb2e6266..e9f8d8858ad 100644
--- a/gcc/ira-int.h
+++ b/gcc/ira-int.h
@@ -481,7 +481,9 @@ extern allocno_t *conflict_id_allocno_map;
/* The following structure represents a copy of two allocnos. The
copies represent move insns or potential move insns usually because
- of two operand insn constraints. */
+ of two operand insn constraints. To remove register shuffle, we
+ also create copies between allocno which is output of an insn and
+ allocno becoming dead in the insn. */
struct allocno_copy
{
/* The unique order number of the copy node starting with 0. */
@@ -491,13 +493,11 @@ struct allocno_copy
allocno_t first, second;
/* Execution frequency of the copy. */
int freq;
- /* It is an insn which is an origin of the copy. It may be a move
- insn or insn whose operand should be the same as the result
- (2-operand insns). To remove register shuffle, we create copies
- between allocno which is output of an insn and allocno becoming
- dead in the insn. The member value for the copy created to
- remove register shuffle is NULL and the frequency is smaller than
- the corresponding insn execution frequency. */
+ /* It is a move insn which is an origin of the copy. The member
+ value for the copy representing two operand insn constraints or
+ for the copy created to remove register shuffle is NULL. In last
+ case the copy frequency is smaller than the corresponding insn
+ execution frequency. */
rtx insn;
/* All copies with the same allocno as FIRST are linked by the two
following members. */