aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2015-07-09 17:18:44 +0200
committerUros Bizjak <uros@gcc.gnu.org>2015-07-09 17:18:44 +0200
commitcb1fd5b43f7bd2b21e4418184f4b496a009fbd59 (patch)
tree73878e0f492e76abdc5799c87dc803ba0ac89b0d
parent09bae928c56997afe3e13e9fee3328afc1c9d9e8 (diff)
downloadgcc-cb1fd5b43f7bd2b21e4418184f4b496a009fbd59.zip
gcc-cb1fd5b43f7bd2b21e4418184f4b496a009fbd59.tar.gz
gcc-cb1fd5b43f7bd2b21e4418184f4b496a009fbd59.tar.bz2
re PR target/66814 (ICE: gcc.target/i386/avx512f-klogic-2.c)
PR target/66814 * config/i386/predicates.md (nonimmediate_gr_operand): New predicate. * config/i386/i386.md (not peephole2): Use nonimmediate_gr_operand. (varous peephole2s): Use {GENERAL,SSE,MMX}_REGNO_P instead of {GENERAL_SSE_MMX}_REG_P where appropriate. testsuite/ChangeLog: PR target/66814 * gcc.target/i386/pr66814.c: New test. From-SVN: r225616
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.md13
-rw-r--r--gcc/config/i386/predicates.md6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr66814.c4
5 files changed, 32 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14c55fc..d5f7a25 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-07-08 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/66814
+ * config/i386/predicates.md (nonimmediate_gr_operand): New predicate.
+ * config/i386/i386.md (not peephole2): Use nonimmediate_gr_operand.
+ (varous peephole2s): Use {GENERAL,SSE,MMX}_REGNO_P instead of
+ {GENERAL_SSE_MMX}_REG_P where appropriate.
+
2015-07-09 Andrew MacLeod <amacleod@redhat.com>
* lto-streamer.h: Don't include target.h and alloc-pool.h.
@@ -59,7 +67,7 @@
2015-07-09 Marek Polacek <polacek@redhat.com>
PR tree-optimization/66718
- * Makefile.in (OBJS): Add gimple-laddress.o.
+ * Makefile.in (OBJS): Add gimple-laddress.o.
* passes.def: Schedule pass_laddress.
* timevar.def (DEFTIMEVAR): Add TV_GIMPLE_LADDRESS.
* tree-pass.h (make_pass_laddress): Declare.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index e7df31d..1d43aaf 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -17379,8 +17379,8 @@
;; lifetime information then.
(define_peephole2
- [(set (match_operand:SWI124 0 "nonimmediate_operand")
- (not:SWI124 (match_operand:SWI124 1 "nonimmediate_operand")))]
+ [(set (match_operand:SWI124 0 "nonimmediate_gr_operand")
+ (not:SWI124 (match_operand:SWI124 1 "nonimmediate_gr_operand")))]
"optimize_insn_for_speed_p ()
&& ((TARGET_NOT_UNPAIRABLE
&& (!MEM_P (operands[0])
@@ -17524,8 +17524,10 @@
[(match_dup 0)
(match_operand 2 "memory_operand")]))]
"REGNO (operands[0]) != REGNO (operands[1])
- && ((MMX_REG_P (operands[0]) && MMX_REG_P (operands[1]))
- || (SSE_REG_P (operands[0]) && SSE_REG_P (operands[1])))"
+ && ((MMX_REGNO_P (REGNO (operands[0]))
+ && MMX_REGNO_P (REGNO (operands[1])))
+ || (SSE_REGNO_P (REGNO (operands[0]))
+ && SSE_REGNO_P (REGNO (operands[1]))))"
[(set (match_dup 0) (match_dup 2))
(set (match_dup 0)
(match_op_dup 3 [(match_dup 0) (match_dup 1)]))])
@@ -17673,7 +17675,7 @@
(match_operand 1 "const0_operand"))]
"GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
&& (! TARGET_USE_MOV0 || optimize_insn_for_size_p ())
- && GENERAL_REG_P (operands[0])
+ && GENERAL_REGNO_P (REGNO (operands[0]))
&& peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 0) (const_int 0))
(clobber (reg:CC FLAGS_REG))])]
@@ -17694,6 +17696,7 @@
[(set (match_operand:SWI248 0 "register_operand")
(const_int -1))]
"(optimize_insn_for_size_p () || TARGET_MOVE_M1_VIA_OR)
+ && GENERAL_REGNO_P (REGNO (operands[0]))
&& peep2_regno_dead_p (0, FLAGS_REG)"
[(parallel [(set (match_dup 0) (const_int -1))
(clobber (reg:CC FLAGS_REG))])]
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 2fa5db6..09505fc 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -37,6 +37,12 @@
(and (match_code "reg")
(match_test "GENERAL_REGNO_P (REGNO (op))")))
+;; True if the operand is a nonimmediate operand with GENERAL class register.
+(define_predicate "nonimmediate_gr_operand"
+ (if_then_else (match_code "reg")
+ (match_test "GENERAL_REGNO_P (REGNO (op))")
+ (match_operand 0 "nonimmediate_operand")))
+
;; Return true if OP is a register operand other than an i387 fp register.
(define_predicate "register_and_not_fp_reg_operand"
(and (match_code "reg")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ec31dd7..d0c561e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-09 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/66814
+ * gcc.target/i386/pr66814.c: New test.
+
2015-07-09 Szabolcs Nagy <szabolcs.nagy@arm.com>
* gcc.target/aarch64/fnmul-1.c: Fix whitespace.
diff --git a/gcc/testsuite/gcc.target/i386/pr66814.c b/gcc/testsuite/gcc.target/i386/pr66814.c
new file mode 100644
index 0000000..4ac9d23
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr66814.c
@@ -0,0 +1,4 @@
+/* { dg-do compile { target { ia32 } } } */
+/* { dg-options "-march=i586 -mavx512f -O2" } */
+
+#include "avx512f-klogic-2.c"