From: Uros Bizjak Date: Fri, 17 Jul 2015 18:44:33 +0000 (+0200) Subject: backport: re PR target/66814 (ICE: gcc.target/i386/avx512f-klogic-2.c) X-Git-Tag: releases/gcc-4.9.4~697 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04e624350d764d6246f408d7d2eec5a1a19c2e24;p=thirdparty%2Fgcc.git backport: re PR target/66814 (ICE: gcc.target/i386/avx512f-klogic-2.c) Backport from mainline: 2015-07-10 Uros Bizjak * config/i386/sse.md (movdi_to_sse): Use gen_lowpart and gen_higpart instead of gen_rtx_SUBREG. * config/i386/i386.md (floatdi2_i387_with_xmm splitter): Ditto. (read-modify peephole2): Use gen_lowpart instead of gen_rtx_SUBREG for operand 5. 2015-06-17 Uros Bizjak Backport from mainline: 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. testsuite/ChangeLog: Backport from mainline: 2015-07-09 Uros Bizjak PR target/66814 * gcc.target/i386/pr66814.c: New test. From-SVN: r225961 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8dc08bda5184..4a52f55a1b31 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2015-06-17 Uros Bizjak + + Backport from mainline: + 2015-07-10 Uros Bizjak + + * config/i386/sse.md (movdi_to_sse): Use gen_lowpart + and gen_higpart instead of gen_rtx_SUBREG. + * config/i386/i386.md + (floatdi2_i387_with_xmm splitter): Ditto. + (read-modify peephole2): Use gen_lowpart instead of + gen_rtx_SUBREG for operand 5. + +2015-06-17 Uros Bizjak + + Backport from mainline: + 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-10 Mantas Mikaitis * config/arm/arm.h (TARGET_NEON_FP): Remove conditional definition, @@ -8,8 +31,8 @@ 2015-07-09 Iain Sandoe PR target/66523 - * config/darwin.c (darwin_mark_decl_preserved): Exclude 'L' label names from - preservation. + * config/darwin.c (darwin_mark_decl_preserved): Exclude 'L' label + names from preservation. 2015-07-07 Kaz Kojima diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b43044384279..823d825d875a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4901,11 +4901,11 @@ /* The DImode arrived in a pair of integral registers (e.g. %edx:%eax). Assemble the 64-bit DImode value in an xmm register. */ emit_insn (gen_sse2_loadld (operands[3], CONST0_RTX (V4SImode), - gen_rtx_SUBREG (SImode, operands[1], 0))); + gen_lowpart (SImode, operands[1]))); emit_insn (gen_sse2_loadld (operands[4], CONST0_RTX (V4SImode), - gen_rtx_SUBREG (SImode, operands[1], 4))); + gen_highpart (SImode, operands[1]))); emit_insn (gen_vec_interleave_lowv4si (operands[3], operands[3], - operands[4])); + operands[4])); operands[3] = gen_rtx_REG (DImode, REGNO (operands[3])); }) @@ -16906,8 +16906,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]) @@ -17051,8 +17051,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)]))]) @@ -17200,7 +17202,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))])] @@ -17221,6 +17223,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))])] @@ -17588,11 +17591,13 @@ operands[1] = gen_rtx_PLUS (word_mode, base, gen_rtx_MULT (word_mode, index, GEN_INT (scale))); - operands[5] = base; if (mode != word_mode) operands[1] = gen_rtx_SUBREG (mode, operands[1], 0); + + operands[5] = base; if (op1mode != word_mode) - operands[5] = gen_rtx_SUBREG (op1mode, operands[5], 0); + operands[5] = gen_lowpart (op1mode, operands[5]); + operands[0] = dest; }) diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 4ba2e6fbbca9..4647cd7320f7 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -37,6 +37,12 @@ (and (match_code "reg") (match_test "GENERAL_REG_P (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/config/i386/sse.md b/gcc/config/i386/sse.md index 8f5120f2ef73..3e35268fc9c8 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -872,9 +872,9 @@ /* The DImode arrived in a pair of integral registers (e.g. %edx:%eax). Assemble the 64-bit DImode value in an xmm register. */ emit_insn (gen_sse2_loadld (operands[0], CONST0_RTX (V4SImode), - gen_rtx_SUBREG (SImode, operands[1], 0))); + gen_lowpart (SImode, operands[1]))); emit_insn (gen_sse2_loadld (operands[2], CONST0_RTX (V4SImode), - gen_rtx_SUBREG (SImode, operands[1], 4))); + gen_highpart (SImode, operands[1]))); emit_insn (gen_vec_interleave_lowv4si (operands[0], operands[0], operands[2])); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 043b4b728211..cbb60c390714 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-06-17 Uros Bizjak + + Backport from mainline: + 2015-07-09 Uros Bizjak + + PR target/66814 + * gcc.target/i386/pr66814.c: New test. + 2015-07-16 Marek Polacek 2015-07-08 Marek Polacek diff --git a/gcc/testsuite/gcc.target/i386/pr66814.c b/gcc/testsuite/gcc.target/i386/pr66814.c new file mode 100644 index 000000000000..4ac9d234ccbb --- /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"