Commit 0ff27231 by Andreas Schwab Committed by Andreas Schwab

re PR target/78254 (FAIL: g++.dg/torture/pr77822.C -O3 -g (internal compiler error))

PR target/78254
* config/m68k/m68k.md: Reject out-of-range bit pos in bit-fields
insns operating on a register.

From-SVN: r241996
parent bfcb501d
2016-11-09 Andreas Schwab <schwab@suse.de>
PR target/78254
* config/m68k/m68k.md: Reject out-of-range bit pos in bit-fields
insns operating on a register.
2016-11-09 Richard Biener <rguenther@suse.de> 2016-11-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/78007 PR tree-optimization/78007
...@@ -706,7 +706,7 @@ ...@@ -706,7 +706,7 @@
(minus:SI (const_int 31) (minus:SI (const_int 31)
(match_operand:SI 1 "general_operand" "di"))) (match_operand:SI 1 "general_operand" "di")))
(const_int 0)))] (const_int 0)))]
"" "!(CONST_INT_P (operands[1]) && !IN_RANGE (INTVAL (operands[1]), 0, 31))"
{ {
return output_btst (operands, operands[1], operands[0], insn, 31); return output_btst (operands, operands[1], operands[0], insn, 31);
}) })
...@@ -765,9 +765,10 @@ ...@@ -765,9 +765,10 @@
(cc0) (cc0)
(compare (zero_extract:SI (match_operand:SI 0 "register_operand" "do") (compare (zero_extract:SI (match_operand:SI 0 "register_operand" "do")
(const_int 1) (const_int 1)
(match_operand:SI 1 "const_int_operand" "n")) (match_operand:SI 1 "const_int_operand" "n"))
(const_int 0)))] (const_int 0)))]
"!TARGET_COLDFIRE" "!TARGET_COLDFIRE
&& !(REG_P (operands[0]) && !IN_RANGE (INTVAL (operands[1]), 0, 31))"
{ {
if (GET_CODE (operands[0]) == MEM) if (GET_CODE (operands[0]) == MEM)
{ {
...@@ -790,7 +791,8 @@ ...@@ -790,7 +791,8 @@
(const_int 1) (const_int 1)
(match_operand:SI 1 "const_int_operand" "n")) (match_operand:SI 1 "const_int_operand" "n"))
(const_int 0)))] (const_int 0)))]
"TARGET_COLDFIRE" "TARGET_COLDFIRE
&& !(REG_P (operands[0]) && !IN_RANGE (INTVAL (operands[1]), 0, 31))"
{ {
if (GET_CODE (operands[0]) == MEM) if (GET_CODE (operands[0]) == MEM)
{ {
...@@ -5397,6 +5399,7 @@ ...@@ -5397,6 +5399,7 @@
(match_operand:SI 2 "const_int_operand" "n")) (match_operand:SI 2 "const_int_operand" "n"))
(match_operand:SI 3 "register_operand" "d"))] (match_operand:SI 3 "register_operand" "d"))]
"TARGET_68020 && TARGET_BITFIELD "TARGET_68020 && TARGET_BITFIELD
&& IN_RANGE (INTVAL (operands[2]), 0, 31)
&& (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16) && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
&& INTVAL (operands[2]) % INTVAL (operands[1]) == 0" && INTVAL (operands[2]) % INTVAL (operands[1]) == 0"
{ {
...@@ -5438,6 +5441,7 @@ ...@@ -5438,6 +5441,7 @@
(match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n")))] (match_operand:SI 3 "const_int_operand" "n")))]
"TARGET_68020 && TARGET_BITFIELD "TARGET_68020 && TARGET_BITFIELD
&& IN_RANGE (INTVAL (operands[3]), 0, 31)
&& (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16) && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
&& INTVAL (operands[3]) % INTVAL (operands[2]) == 0" && INTVAL (operands[3]) % INTVAL (operands[2]) == 0"
{ {
...@@ -5480,6 +5484,7 @@ ...@@ -5480,6 +5484,7 @@
(match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n")))] (match_operand:SI 3 "const_int_operand" "n")))]
"TARGET_68020 && TARGET_BITFIELD "TARGET_68020 && TARGET_BITFIELD
&& IN_RANGE (INTVAL (operands[3]), 0, 31)
&& (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16) && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
&& INTVAL (operands[3]) % INTVAL (operands[2]) == 0" && INTVAL (operands[3]) % INTVAL (operands[2]) == 0"
{ {
...@@ -5610,7 +5615,7 @@ ...@@ -5610,7 +5615,7 @@
(sign_extract:SI (match_operand:SI 1 "register_operand" "d") (sign_extract:SI (match_operand:SI 1 "register_operand" "d")
(match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n")))] (match_operand:SI 3 "const_int_operand" "n")))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD && IN_RANGE (INTVAL (operands[3]), 0, 31)"
"bfexts %1{%b3:%b2},%0") "bfexts %1{%b3:%b2},%0")
(define_insn "*extv_bfextu_reg" (define_insn "*extv_bfextu_reg"
...@@ -5618,7 +5623,7 @@ ...@@ -5618,7 +5623,7 @@
(zero_extract:SI (match_operand:SI 1 "register_operand" "d") (zero_extract:SI (match_operand:SI 1 "register_operand" "d")
(match_operand:SI 2 "const_int_operand" "n") (match_operand:SI 2 "const_int_operand" "n")
(match_operand:SI 3 "const_int_operand" "n")))] (match_operand:SI 3 "const_int_operand" "n")))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD && IN_RANGE (INTVAL (operands[3]), 0, 31)"
{ {
if (GET_CODE (operands[2]) == CONST_INT) if (GET_CODE (operands[2]) == CONST_INT)
{ {
...@@ -5637,7 +5642,7 @@ ...@@ -5637,7 +5642,7 @@
(match_operand:SI 1 "const_int_operand" "n") (match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n")) (match_operand:SI 2 "const_int_operand" "n"))
(const_int 0))] (const_int 0))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD && IN_RANGE (INTVAL (operands[2]), 0, 31)"
{ {
CC_STATUS_INIT; CC_STATUS_INIT;
return "bfclr %0{%b2:%b1}"; return "bfclr %0{%b2:%b1}";
...@@ -5648,7 +5653,7 @@ ...@@ -5648,7 +5653,7 @@
(match_operand:SI 1 "const_int_operand" "n") (match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n")) (match_operand:SI 2 "const_int_operand" "n"))
(const_int -1))] (const_int -1))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD && IN_RANGE (INTVAL (operands[2]), 0, 31)"
{ {
CC_STATUS_INIT; CC_STATUS_INIT;
return "bfset %0{%b2:%b1}"; return "bfset %0{%b2:%b1}";
...@@ -5659,7 +5664,7 @@ ...@@ -5659,7 +5664,7 @@
(match_operand:SI 1 "const_int_operand" "n") (match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n")) (match_operand:SI 2 "const_int_operand" "n"))
(match_operand:SI 3 "register_operand" "d"))] (match_operand:SI 3 "register_operand" "d"))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD && IN_RANGE (INTVAL (operands[2]), 0, 31)"
{ {
#if 0 #if 0
/* These special cases are now recognized by a specific pattern. */ /* These special cases are now recognized by a specific pattern. */
...@@ -5707,7 +5712,8 @@ ...@@ -5707,7 +5712,8 @@
(match_operand:SI 1 "const_int_operand" "n") (match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "general_operand" "dn")) (match_operand:SI 2 "general_operand" "dn"))
(const_int 0)))] (const_int 0)))]
"TARGET_68020 && TARGET_BITFIELD" "TARGET_68020 && TARGET_BITFIELD
&& !(CONST_INT_P (operands[2]) && !IN_RANGE (INTVAL (operands[2]), 0, 31))"
{ {
if (operands[1] == const1_rtx if (operands[1] == const1_rtx
&& GET_CODE (operands[2]) == CONST_INT) && GET_CODE (operands[2]) == CONST_INT)
......
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