pa-protos.h (reg_before_reload_operand): New function prototype.
* pa-protos.h (reg_before_reload_operand): New function prototype. * pa.c (reg_before_reload_operand): New function implementation. * pa.md (decrement_and_branch_until_zero, movb): Use it. Change "!*m" contraints to "*m". From-SVN: r49058
This commit is contained in:
parent
3b5708e7e6
commit
2e3964763a
|
@ -1,3 +1,10 @@
|
||||||
|
2002-01-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
|
||||||
|
|
||||||
|
* pa-protos.h (reg_before_reload_operand): New function prototype.
|
||||||
|
* pa.c (reg_before_reload_operand): New function implementation.
|
||||||
|
* pa.md (decrement_and_branch_until_zero, movb): Use it. Change "!*m"
|
||||||
|
contraints to "*m".
|
||||||
|
|
||||||
2002-01-21 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
|
2002-01-21 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
|
||||||
|
|
||||||
* combine.c (simplify_and_const_int): Properly sign-extend CONSTOP.
|
* combine.c (simplify_and_const_int): Properly sign-extend CONSTOP.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Prototypes for pa.c functions used in the md file & elsewhere.
|
/* Prototypes for pa.c functions used in the md file & elsewhere.
|
||||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU CC.
|
This file is part of GNU CC.
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ extern int ior_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int arith32_operand PARAMS ((rtx, enum machine_mode));
|
extern int arith32_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int uint32_operand PARAMS ((rtx, enum machine_mode));
|
extern int uint32_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int reg_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
|
extern int reg_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
|
||||||
|
extern int reg_before_reload_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int reg_or_0_operand PARAMS ((rtx, enum machine_mode));
|
extern int reg_or_0_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int reg_or_0_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
|
extern int reg_or_0_or_nonsymb_mem_operand PARAMS ((rtx, enum machine_mode));
|
||||||
extern int pre_cint_operand PARAMS ((rtx, enum machine_mode));
|
extern int pre_cint_operand PARAMS ((rtx, enum machine_mode));
|
||||||
|
|
|
@ -364,6 +364,28 @@ reg_or_0_or_nonsymb_mem_operand (op, mode)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 if the operand is a register operand or a non-symbolic memory
|
||||||
|
operand after reload. This predicate is used for branch patterns that
|
||||||
|
internally handle register reloading. We need to accept non-symbolic
|
||||||
|
memory operands after reload to ensure that the pattern is still valid
|
||||||
|
if reload didn't find a hard register for the operand. */
|
||||||
|
|
||||||
|
int
|
||||||
|
reg_before_reload_operand (op, mode)
|
||||||
|
register rtx op;
|
||||||
|
enum machine_mode mode;
|
||||||
|
{
|
||||||
|
if (register_operand (op, mode))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (reload_completed
|
||||||
|
&& memory_operand (op, mode)
|
||||||
|
&& ! symbolic_memory_operand (op, mode))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Accept any constant that can be moved in one instructions into a
|
/* Accept any constant that can be moved in one instructions into a
|
||||||
general register. */
|
general register. */
|
||||||
int
|
int
|
||||||
|
|
|
@ -6589,7 +6589,7 @@
|
||||||
(if_then_else
|
(if_then_else
|
||||||
(match_operator 2 "comparison_operator"
|
(match_operator 2 "comparison_operator"
|
||||||
[(plus:SI
|
[(plus:SI
|
||||||
(match_operand:SI 0 "reg_or_nonsymb_mem_operand" "+!r,!*f,!*m")
|
(match_operand:SI 0 "reg_before_reload_operand" "+!r,!*f,*m")
|
||||||
(match_operand:SI 1 "int5_operand" "L,L,L"))
|
(match_operand:SI 1 "int5_operand" "L,L,L"))
|
||||||
(const_int 0)])
|
(const_int 0)])
|
||||||
(label_ref (match_operand 3 "" ""))
|
(label_ref (match_operand 3 "" ""))
|
||||||
|
@ -6646,7 +6646,7 @@
|
||||||
[(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
|
[(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
|
||||||
(label_ref (match_operand 3 "" ""))
|
(label_ref (match_operand 3 "" ""))
|
||||||
(pc)))
|
(pc)))
|
||||||
(set (match_operand:SI 0 "register_operand" "=!r,!*f,!*m,!*q")
|
(set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*m,!*q")
|
||||||
(match_dup 1))]
|
(match_dup 1))]
|
||||||
""
|
""
|
||||||
"* return output_movb (operands, insn, which_alternative, 0); "
|
"* return output_movb (operands, insn, which_alternative, 0); "
|
||||||
|
@ -6692,7 +6692,7 @@
|
||||||
[(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
|
[(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
|
||||||
(pc)
|
(pc)
|
||||||
(label_ref (match_operand 3 "" ""))))
|
(label_ref (match_operand 3 "" ""))))
|
||||||
(set (match_operand:SI 0 "register_operand" "=!r,!*f,!*m,!*q")
|
(set (match_operand:SI 0 "reg_before_reload_operand" "=!r,!*f,*m,!*q")
|
||||||
(match_dup 1))]
|
(match_dup 1))]
|
||||||
""
|
""
|
||||||
"* return output_movb (operands, insn, which_alternative, 1); "
|
"* return output_movb (operands, insn, which_alternative, 1); "
|
||||||
|
|
Loading…
Reference in New Issue