summaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-01-10 21:28:24 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-01-10 21:28:24 +0000
commit4b5189c1a1c93074d14bb026ae7419abc73c76e0 (patch)
tree65a4f02cdf64046c0d61de2ad4b69a61ac81be83 /gcc/ifcvt.c
parent6f120a3808c902d0e845ecd0896bff646b4dc585 (diff)
downloadgcc-4b5189c1a1c93074d14bb026ae7419abc73c76e0.tar.gz
Fri Jan 10 22:05:35 CET 2003 Jan Hubicka <jh@suse.cz>
* ifcvt.c (noce_try_addcc): Do not call emit_conditional_add with weird operands. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61169 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r--gcc/ifcvt.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 3cf01942da7..21a7e648319 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -882,26 +882,30 @@ noce_try_addcc (if_info)
enum rtx_code code = reversed_comparison_code (cond, if_info->jump);
/* First try to use addcc pattern. */
- start_sequence ();
- target = emit_conditional_add (if_info->x, code,
- XEXP (cond, 0), XEXP (cond, 1),
- VOIDmode,
- if_info->b, XEXP (if_info->a, 1),
- GET_MODE (if_info->x),
- (code == LTU || code == GEU
- || code == LEU || code == GTU));
- if (target)
+ if (general_operand (XEXP (cond, 0), VOIDmode)
+ && general_operand (XEXP (cond, 1), VOIDmode))
{
- if (target != if_info->x)
- noce_emit_move_insn (if_info->x, target);
+ start_sequence ();
+ target = emit_conditional_add (if_info->x, code,
+ XEXP (cond, 0), XEXP (cond, 1),
+ VOIDmode,
+ if_info->b, XEXP (if_info->a, 1),
+ GET_MODE (if_info->x),
+ (code == LTU || code == GEU
+ || code == LEU || code == GTU));
+ if (target)
+ {
+ if (target != if_info->x)
+ noce_emit_move_insn (if_info->x, target);
- seq = get_insns ();
+ seq = get_insns ();
+ end_sequence ();
+ emit_insn_before_scope (seq, if_info->jump,
+ INSN_SCOPE (if_info->insn_a));
+ return TRUE;
+ }
end_sequence ();
- emit_insn_before_scope (seq, if_info->jump,
- INSN_SCOPE (if_info->insn_a));
- return TRUE;
}
- end_sequence ();
/* If that fails, construct conditional increment or decrement using
setcc. */