Commit 94252ac2 by Jakub Jelinek

re PR target/46088 (ICE: SIGSEGV in ix86_binary_operator_ok (i386.c:15025) with…

re PR target/46088 (ICE: SIGSEGV in ix86_binary_operator_ok (i386.c:15025) with -Os -fnon-call-exceptions -fpeel-loops)

	PR target/46088
	* config/i386/i386.md (*ashl<mode>3_cconly,
	*<shiftrt_insn><mode>3_cconly): Don't use ix86_binary_operator_ok,
	change nonimmediate_operand predicate to register_operand.

	* gcc.dg/pr46088.c: New test.

From-SVN: r166635
parent 8fb15466
2010-11-12 Jakub Jelinek <jakub@redhat.com>
PR target/46088
* config/i386/i386.md (*ashl<mode>3_cconly,
*<shiftrt_insn><mode>3_cconly): Don't use ix86_binary_operator_ok,
change nonimmediate_operand predicate to register_operand.
2010-11-11 Paolo Bonzini <bonzini@gnu.org> 2010-11-11 Paolo Bonzini <bonzini@gnu.org>
* Makefile.in (gengtype-lex.c): Include bconfig.h first. * Makefile.in (gengtype-lex.c): Include bconfig.h first.
...@@ -9714,7 +9714,7 @@ ...@@ -9714,7 +9714,7 @@
(define_insn "*ashl<mode>3_cconly" (define_insn "*ashl<mode>3_cconly"
[(set (reg FLAGS_REG) [(set (reg FLAGS_REG)
(compare (compare
(ashift:SWI (match_operand:SWI 1 "nonimmediate_operand" "0") (ashift:SWI (match_operand:SWI 1 "register_operand" "0")
(match_operand:QI 2 "<shift_immediate_operand>" "<S>")) (match_operand:QI 2 "<shift_immediate_operand>" "<S>"))
(const_int 0))) (const_int 0)))
(clobber (match_scratch:SWI 0 "=<r>"))] (clobber (match_scratch:SWI 0 "=<r>"))]
...@@ -9723,8 +9723,7 @@ ...@@ -9723,8 +9723,7 @@
|| (operands[2] == const1_rtx || (operands[2] == const1_rtx
&& (TARGET_SHIFT1 && (TARGET_SHIFT1
|| TARGET_DOUBLE_WITH_ADD))) || TARGET_DOUBLE_WITH_ADD)))
&& ix86_match_ccmode (insn, CCGOCmode) && ix86_match_ccmode (insn, CCGOCmode)"
&& ix86_binary_operator_ok (ASHIFT, <MODE>mode, operands)"
{ {
switch (get_attr_type (insn)) switch (get_attr_type (insn))
{ {
...@@ -10081,7 +10080,7 @@ ...@@ -10081,7 +10080,7 @@
[(set (reg FLAGS_REG) [(set (reg FLAGS_REG)
(compare (compare
(any_shiftrt:SWI (any_shiftrt:SWI
(match_operand:SWI 1 "nonimmediate_operand" "0") (match_operand:SWI 1 "register_operand" "0")
(match_operand:QI 2 "<shift_immediate_operand>" "<S>")) (match_operand:QI 2 "<shift_immediate_operand>" "<S>"))
(const_int 0))) (const_int 0)))
(clobber (match_scratch:SWI 0 "=<r>"))] (clobber (match_scratch:SWI 0 "=<r>"))]
...@@ -10089,8 +10088,7 @@ ...@@ -10089,8 +10088,7 @@
|| !TARGET_PARTIAL_FLAG_REG_STALL || !TARGET_PARTIAL_FLAG_REG_STALL
|| (operands[2] == const1_rtx || (operands[2] == const1_rtx
&& TARGET_SHIFT1)) && TARGET_SHIFT1))
&& ix86_match_ccmode (insn, CCGOCmode) && ix86_match_ccmode (insn, CCGOCmode)"
&& ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
{ {
if (operands[2] == const1_rtx if (operands[2] == const1_rtx
&& (TARGET_SHIFT1 || optimize_function_for_size_p (cfun))) && (TARGET_SHIFT1 || optimize_function_for_size_p (cfun)))
......
/* PR target/46088 */
/* { dg-do compile } */
/* { dg-options "-Os -fnon-call-exceptions -fpeel-loops" } */
extern void bar (void);
void
foo (int i)
{
if (i >> 3)
bar ();
}
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