re PR target/37878 (PPC64 ldu command generated with invalid offset)
PR target/37878 * config/rs6000/predicates.md (word_offset_memref_operand): Restructure code and look inside auto-inc/dec addresses. From-SVN: r141450
This commit is contained in:
parent
81a39e89f3
commit
2665ab87be
@ -1,3 +1,9 @@
|
||||
2008-10-29 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
PR target/37878
|
||||
* config/rs6000/predicates.md (word_offset_memref_operand):
|
||||
Restructure code and look inside auto-inc/dec addresses.
|
||||
|
||||
2008-10-29 Steve Ellcey <sje@cup.hp.com>
|
||||
|
||||
PR target/32277
|
||||
|
@ -373,11 +373,23 @@
|
||||
|
||||
;; Return 1 if the operand is a memory operand with an address divisible by 4
|
||||
(define_predicate "word_offset_memref_operand"
|
||||
(and (match_operand 0 "memory_operand")
|
||||
(match_test "GET_CODE (XEXP (op, 0)) != PLUS
|
||||
|| ! REG_P (XEXP (XEXP (op, 0), 0))
|
||||
|| GET_CODE (XEXP (XEXP (op, 0), 1)) != CONST_INT
|
||||
|| INTVAL (XEXP (XEXP (op, 0), 1)) % 4 == 0")))
|
||||
(match_operand 0 "memory_operand")
|
||||
{
|
||||
/* Address inside MEM. */
|
||||
op = XEXP (op, 0);
|
||||
|
||||
/* Extract address from auto-inc/dec. */
|
||||
if (GET_CODE (op) == PRE_INC
|
||||
|| GET_CODE (op) == PRE_DEC)
|
||||
op = XEXP (op, 0);
|
||||
else if (GET_CODE (op) == PRE_MODIFY)
|
||||
op = XEXP (op, 1);
|
||||
|
||||
return (GET_CODE (op) != PLUS
|
||||
|| ! REG_P (XEXP (op, 0))
|
||||
|| GET_CODE (XEXP (op, 1)) != CONST_INT
|
||||
|| INTVAL (XEXP (op, 1)) % 4 == 0);
|
||||
})
|
||||
|
||||
;; Return 1 if the operand is an indexed or indirect memory operand.
|
||||
(define_predicate "indexed_or_indirect_operand"
|
||||
|
Loading…
Reference in New Issue
Block a user