From cb1fd5b43f7bd2b21e4418184f4b496a009fbd59 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 9 Jul 2015 17:18:44 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 +++++++++- gcc/config/i386/i386.md | 13 ++++++++----- gcc/config/i386/predicates.md | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr66814.c | 4 ++++ 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr66814.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14c55fc6f70..d5f7a25ba44 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-07-08 Uros Bizjak + + 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 * lto-streamer.h: Don't include target.h and alloc-pool.h. @@ -59,7 +67,7 @@ 2015-07-09 Marek Polacek 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 e7df31dd57c..1d43aaffbf4 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 2fa5db6074d..09505fc4f18 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 ec31dd7cb98..d0c561e231b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-07-09 Uros Bizjak + + PR target/66814 + * gcc.target/i386/pr66814.c: New test. + 2015-07-09 Szabolcs Nagy * 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 00000000000..4ac9d234ccb --- /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" -- 2.30.2