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>
|
||||
|
||||
* 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.
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
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 uint32_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_or_nonsymb_mem_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 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
|
||||
general register. */
|
||||
int
|
||||
|
@ -6589,7 +6589,7 @@
|
||||
(if_then_else
|
||||
(match_operator 2 "comparison_operator"
|
||||
[(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"))
|
||||
(const_int 0)])
|
||||
(label_ref (match_operand 3 "" ""))
|
||||
@ -6646,7 +6646,7 @@
|
||||
[(match_operand:SI 1 "register_operand" "r,r,r,r") (const_int 0)])
|
||||
(label_ref (match_operand 3 "" ""))
|
||||
(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))]
|
||||
""
|
||||
"* 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)])
|
||||
(pc)
|
||||
(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))]
|
||||
""
|
||||
"* return output_movb (operands, insn, which_alternative, 1); "
|
||||
|
Loading…
Reference in New Issue
Block a user