Commit 2665ab87 by David Edelsohn Committed by David Edelsohn

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
parent 81a39e89
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> 2008-10-29 Steve Ellcey <sje@cup.hp.com>
PR target/32277 PR target/32277
......
...@@ -373,11 +373,23 @@ ...@@ -373,11 +373,23 @@
;; Return 1 if the operand is a memory operand with an address divisible by 4 ;; Return 1 if the operand is a memory operand with an address divisible by 4
(define_predicate "word_offset_memref_operand" (define_predicate "word_offset_memref_operand"
(and (match_operand 0 "memory_operand") (match_operand 0 "memory_operand")
(match_test "GET_CODE (XEXP (op, 0)) != PLUS {
|| ! REG_P (XEXP (XEXP (op, 0), 0)) /* Address inside MEM. */
|| GET_CODE (XEXP (XEXP (op, 0), 1)) != CONST_INT op = XEXP (op, 0);
|| INTVAL (XEXP (XEXP (op, 0), 1)) % 4 == 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. ;; Return 1 if the operand is an indexed or indirect memory operand.
(define_predicate "indexed_or_indirect_operand" (define_predicate "indexed_or_indirect_operand"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment