re PR target/15433 (ICE, cannot split insn)

PR target/15433
	* i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix
	operand numbering in the output template.
	(SSE DF cmov 0 splitter): The conditional is VOIDmode.

From-SVN: r83305
This commit is contained in:
Jan Hubicka 2004-06-17 21:53:56 +02:00 committed by Jan Hubicka
parent 2df6cea5dc
commit 0620be185d
3 changed files with 20 additions and 4 deletions

View File

@ -1,3 +1,14 @@
2004-06-17 Jan Hubicka <jh@suse.cz>
PR target/15433
* i386.md (SSE SF cmov 0 splitter): The conditional is VOIDmode; fix
operand numbering in the output template.
(SSE DF cmov 0 splitter): The conditional is VOIDmode.
2004-06-17 Jan Hubicka <jh@suse.cz>
* except.c (can_throw_internal): Recognize RESX expresisons.
2004-06-17 Jan Hubicka <jh@suse.cz>
* cfgbuild.c (make_edges): Do not use label_value_list.

View File

@ -18191,7 +18191,7 @@
(define_split
[(set (match_operand:SF 0 "register_operand" "")
(if_then_else (match_operator:SF 1 "comparison_operator"
(if_then_else (match_operator 1 "comparison_operator"
[(match_operand:SF 4 "nonimmediate_operand" "")
(match_operand:SF 5 "nonimmediate_operand" "")])
(match_operand:SF 2 "nonmemory_operand" "")
@ -18217,19 +18217,19 @@
if (const0_operand (operands[2], GET_MODE (operands[2])))
{
operands[7] = operands[3];
operands[6] = gen_rtx_NOT (V4SFmode, operands[5]);
operands[6] = gen_rtx_NOT (V4SFmode, operands[8]);
}
else
{
operands[7] = operands[2];
operands[6] = operands[0];
operands[6] = operands[8];
}
operands[7] = simplify_gen_subreg (V4SFmode, operands[7], SFmode, 0);
})
(define_split
[(set (match_operand:DF 0 "register_operand" "")
(if_then_else (match_operator:DF 1 "comparison_operator"
(if_then_else (match_operator 1 "comparison_operator"
[(match_operand:DF 4 "nonimmediate_operand" "")
(match_operand:DF 5 "nonimmediate_operand" "")])
(match_operand:DF 2 "nonmemory_operand" "")

View File

@ -3114,6 +3114,11 @@ can_throw_internal (rtx insn)
if (! INSN_P (insn))
return false;
if (GET_CODE (insn) == JUMP_INSN
&& GET_CODE (PATTERN (insn)) == RESX
&& XINT (PATTERN (insn), 0) > 0)
return can_throw_internal_1 (XINT (PATTERN (insn), 0));
if (GET_CODE (insn) == INSN
&& GET_CODE (PATTERN (insn)) == SEQUENCE)
insn = XVECEXP (PATTERN (insn), 0, 0);