diff options
| author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-18 17:46:17 +0000 |
|---|---|---|
| committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-18 17:46:17 +0000 |
| commit | 05191abd2d75c61451c55f2d8dfdc1cd1914974e (patch) | |
| tree | 577ca2783f93ad38783670c71add446ae68ee484 | |
| parent | 701b9181c4caed10ea17f8f9ddb87ae1ce55f492 (diff) | |
| download | ppe42-gcc-05191abd2d75c61451c55f2d8dfdc1cd1914974e.tar.gz ppe42-gcc-05191abd2d75c61451c55f2d8dfdc1cd1914974e.zip | |
PR target/42774
* config/alpha/predicates.md (aligned_memory_operand): Return 0 for
memory references with unaligned offsets. Remove CQImode handling.
(unaligned_memory_operand): Return 1 for memory references with
unaligned offsets. Remove CQImode handling.
testsuite/ChangeLog:
PR target/42774
* gcc.target/alpha/pr42774.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156017 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/config/alpha/predicates.md | 46 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.target/alpha/pr42774.c | 10 |
4 files changed, 59 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 795b89c29f1..14e8f8fa2c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-01-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/42774 + * config/alpha/predicates.md (aligned_memory_operand): Return 0 for + memory references with unaligned offsets. Remove CQImode handling. + (unaligned_memory_operand): Return 1 for memory references with + unaligned offsets. Remove CQImode handling. + 2010-01-18 Richard Guenther <rguenther@suse.de> PR middle-end/39954 diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md index b52d9dce028..0852f692998 100644 --- a/gcc/config/alpha/predicates.md +++ b/gcc/config/alpha/predicates.md @@ -439,13 +439,11 @@ (match_code "mem")) { rtx base; + int offset; if (MEM_ALIGN (op) >= 32) return 1; - if (mode == CQImode) - return 0; - op = XEXP (op, 0); /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo) @@ -453,14 +451,29 @@ if (reload_in_progress && GET_CODE (op) == PLUS && GET_CODE (XEXP (op, 0)) == PLUS) - base = XEXP (XEXP (op, 0), 0); + { + base = XEXP (XEXP (op, 0), 0); + offset = INTVAL (XEXP (op, 1)); + } else { if (! memory_address_p (mode, op)) return 0; - base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op); + if (GET_CODE (op) == PLUS) + { + base = XEXP (op, 0); + offset = INTVAL (XEXP (op, 1)); + } + else + { + base = op; + offset = 0; + } } + if (offset % GET_MODE_SIZE (mode)) + return 0; + return (REG_P (base) && REGNO_POINTER_ALIGN (REGNO (base)) >= 32); }) @@ -471,13 +484,11 @@ (match_code "mem")) { rtx base; + int offset; if (MEM_ALIGN (op) >= 32) return 0; - if (mode == CQImode) - return 1; - op = XEXP (op, 0); /* LEGITIMIZE_RELOAD_ADDRESS creates (plus (plus reg const_hi) const_lo) @@ -485,14 +496,29 @@ if (reload_in_progress && GET_CODE (op) == PLUS && GET_CODE (XEXP (op, 0)) == PLUS) - base = XEXP (XEXP (op, 0), 0); + { + base = XEXP (XEXP (op, 0), 0); + offset = INTVAL (XEXP (op, 1)); + } else { if (! memory_address_p (mode, op)) return 0; - base = (GET_CODE (op) == PLUS ? XEXP (op, 0) : op); + if (GET_CODE (op) == PLUS) + { + base = XEXP (op, 0); + offset = INTVAL (XEXP (op, 1)); + } + else + { + base = op; + offset = 0; + } } + if (offset % GET_MODE_SIZE (mode)) + return 1; + return (REG_P (base) && REGNO_POINTER_ALIGN (REGNO (base)) < 32); }) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dabbca1ada6..2b0d96d794a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/42774 + * gcc.target/alpha/pr42774.c: New test. + 2010-01-18 Richard Guenther <rguenther@suse.de> PR tree-optimization/42781 diff --git a/gcc/testsuite/gcc.target/alpha/pr42774.c b/gcc/testsuite/gcc.target/alpha/pr42774.c new file mode 100644 index 00000000000..65688002b3a --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr42774.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mcpu=ev4" } */ + +unsigned int ntfs_getinfo(void *p) +{ + char bootsect[8]; + + __builtin_memcpy(bootsect, p, sizeof bootsect); + return *(unsigned short *)(bootsect + 3); +} |

