Commit 334269b9 by David Edelsohn Committed by David Edelsohn

re PR target/20814 (ICE in extract_insn for test vmx/varargs-1.c)

        PR target/20814
        * config/rs6000/predicates.md (altivec_register_operand): Accept
        SUBREG.
        (and64_operand): Do not limit CONST_INT to mask64_operand.
        (and64_2_operand): Do not limit CONST_INT to mask64_1or2_operand.
        (and_operand): Do not limit CONST_INT to mask_operand.

From-SVN: r97872
parent de2ab0ca
2005-04-08 David Edelsohn <edelsohn@gnu.org>
PR target/20814
* config/rs6000/predicates.md (altivec_register_operand): Accept
SUBREG.
(and64_operand): Do not limit CONST_INT to mask64_operand.
(and64_2_operand): Do not limit CONST_INT to mask64_1or2_operand.
(and_operand): Do not limit CONST_INT to mask_operand.
2005-04-09 Hans-Peter Nilsson <hp@axis.com> 2005-04-09 Hans-Peter Nilsson <hp@axis.com>
PR rtl-optimization/20466 PR rtl-optimization/20466
......
...@@ -34,9 +34,11 @@ ...@@ -34,9 +34,11 @@
;; Return 1 if op is an Altivec register. ;; Return 1 if op is an Altivec register.
(define_predicate "altivec_register_operand" (define_predicate "altivec_register_operand"
(and (match_code "reg") (and (match_code "reg,subreg")
(match_test "ALTIVEC_REGNO_P (REGNO (op)) (and (match_operand 0 "register_operand")
|| REGNO (op) > LAST_VIRTUAL_REGISTER"))) (match_test "GET_CODE (op) != REG
|| ALTIVEC_REGNO_P (REGNO (op))
|| REGNO (op) > LAST_VIRTUAL_REGISTER"))))
;; Return 1 if op is XER register. ;; Return 1 if op is XER register.
(define_predicate "xer_operand" (define_predicate "xer_operand"
...@@ -531,29 +533,27 @@ ...@@ -531,29 +533,27 @@
;; Return 1 if the operand is either a non-special register or a constant ;; Return 1 if the operand is either a non-special register or a constant
;; that can be used as the operand of a PowerPC64 logical AND insn. ;; that can be used as the operand of a PowerPC64 logical AND insn.
(define_predicate "and64_operand" (define_predicate "and64_operand"
(if_then_else (match_code "const_int") (ior (match_operand 0 "mask64_operand")
(match_operand 0 "mask64_operand") (if_then_else (match_test "fixed_regs[CR0_REGNO]")
(if_then_else (match_test "fixed_regs[CR0_REGNO]") (match_operand 0 "gpc_reg_operand")
(match_operand 0 "gpc_reg_operand") (match_operand 0 "logical_operand"))))
(match_operand 0 "logical_operand"))))
;; Like and64_operand, but also match constants that can be implemented ;; Like and64_operand, but also match constants that can be implemented
;; with two rldicl or rldicr insns. ;; with two rldicl or rldicr insns.
(define_predicate "and64_2_operand" (define_predicate "and64_2_operand"
(if_then_else (match_code "const_int") (ior (and (match_code "const_int")
(match_test "mask64_1or2_operand (op, mode, true)") (match_test "mask64_1or2_operand (op, mode, true)"))
(if_then_else (match_test "fixed_regs[CR0_REGNO]") (if_then_else (match_test "fixed_regs[CR0_REGNO]")
(match_operand 0 "gpc_reg_operand") (match_operand 0 "gpc_reg_operand")
(match_operand 0 "logical_operand")))) (match_operand 0 "logical_operand"))))
;; Return 1 if the operand is either a non-special register or a ;; Return 1 if the operand is either a non-special register or a
;; constant that can be used as the operand of a logical AND. ;; constant that can be used as the operand of a logical AND.
(define_predicate "and_operand" (define_predicate "and_operand"
(if_then_else (match_code "const_int") (ior (match_operand 0 "mask_operand")
(match_operand 0 "mask_operand") (if_then_else (match_test "fixed_regs[CR0_REGNO]")
(if_then_else (match_test "fixed_regs[CR0_REGNO]") (match_operand 0 "gpc_reg_operand")
(match_operand 0 "gpc_reg_operand") (match_operand 0 "logical_operand"))))
(match_operand 0 "logical_operand"))))
;; Return 1 if the operand is a general non-special register or memory operand. ;; Return 1 if the operand is a general non-special register or memory operand.
(define_predicate "reg_or_mem_operand" (define_predicate "reg_or_mem_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