diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2012-11-28 13:21:59 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2012-11-28 13:21:59 +0000 |
commit | 9bc8692a422f6fee91af1c1097545ba293b9b47b (patch) | |
tree | 925ac860d8010e7cc2630f43bd8515877a33e8c8 /gcc/config | |
parent | ffcc7caf89f32a76f39fd293c0e97df2b5cf5288 (diff) | |
download | gcc-9bc8692a422f6fee91af1c1097545ba293b9b47b.zip gcc-9bc8692a422f6fee91af1c1097545ba293b9b47b.tar.gz gcc-9bc8692a422f6fee91af1c1097545ba293b9b47b.tar.bz2 |
epiphany.md (mov<mode>, [...]): Check for misaligned memory operands.
* config/epiphany/epiphany.md (mov<mode>, *mov<mode>_insn): Check
for misaligned memory operands.
* config/epiphany/predicates.md (misaligned_operand): New predicate.
From-SVN: r193890
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/epiphany/epiphany.md | 5 | ||||
-rw-r--r-- | gcc/config/epiphany/predicates.md | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/config/epiphany/epiphany.md b/gcc/config/epiphany/epiphany.md index 22863e8..f650870 100644 --- a/gcc/config/epiphany/epiphany.md +++ b/gcc/config/epiphany/epiphany.md @@ -325,6 +325,7 @@ if (epiphany_vect_align != 4 /* == 8 */ && !reload_in_progress && (GET_CODE (operands[0]) == MEM || GET_CODE (operands[1]) == MEM) + && !misaligned_operand (operands[1], <MODE>mode) && (GET_CODE (operands[0]) != SUBREG || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[0]))) != GET_MODE_SIZE (<MODE>mode) @@ -355,7 +356,9 @@ ldrd %0,%X1 strd %1,%X0" "reload_completed - && ((!MEM_P (operands[0]) && !MEM_P (operands[1])) + && (((!MEM_P (operands[0]) || misaligned_operand (operands[0], <MODE>mode)) + && (!MEM_P (operands[1]) + || misaligned_operand (operands[1], <MODE>mode))) || epiphany_vect_align == 4)" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))] diff --git a/gcc/config/epiphany/predicates.md b/gcc/config/epiphany/predicates.md index 6e96af9..4cbff58 100644 --- a/gcc/config/epiphany/predicates.md +++ b/gcc/config/epiphany/predicates.md @@ -350,3 +350,8 @@ (define_predicate "nonsymbolic_immediate_operand" (ior (match_test "immediate_operand (op, mode)") (match_code "const_vector"))) /* Is this specific enough? */ + +;; Return true if OP is misaligned memory operand +(define_predicate "misaligned_operand" + (and (match_code "mem") + (match_test "MEM_ALIGN (op) < GET_MODE_ALIGNMENT (mode)"))) |