[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #8 from Uroš Bizjak  ---
*** Bug 91453 has been marked as a duplicate of this bug. ***

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #7 from Richard Biener  ---
Author: rguenth
Date: Thu Aug 15 12:44:23 2019
New Revision: 274535

URL: https://gcc.gnu.org/viewcvs?rev=274535=gcc=rev
Log:
2019-08-15  Richard Biener  

PR target/91454
* config/i386/i386-features.c (gen_gpr_to_xmm_move_src): New
helper.
(general_scalar_chain::make_vector_copies): Use it.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386-features.c

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

Richard Biener  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #6 from Richard Biener  ---
Fixed.

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #5 from Richard Biener  ---
(In reply to Richard Biener from comment #4)
> Btw, remove_partial_avx_dependency suggests the VEC_MERGE/DUPLICATE form
> is canonical for V2DFmode ... (is it?).

Not according to

typedef double v2di __attribute__((vector_size(16)));

v2di foo (double x)
{
  return (v2di) { x, 0. };
}

which produces

(insn 6 3 7 2 (set (reg:V2DF 85)
(vec_concat:V2DF (reg/v:DF 83 [ x ])
(const_double:DF 0.0 [0x0.0p+0]))) "t.c":5:10 3056 {vec_concatv2df}
 (nil))

but maybe the merge/duplicate pattern also exists.

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #4 from Richard Biener  ---
Btw, remove_partial_avx_dependency suggests the VEC_MERGE/DUPLICATE form
is canonical for V2DFmode ... (is it?).

Otherwise untested fix:

Index: gcc/config/i386/i386-features.c
===
--- gcc/config/i386/i386-features.c (revision 274504)
+++ gcc/config/i386/i386-features.c (working copy)
@@ -658,6 +658,25 @@ scalar_chain::emit_conversion_insns (rtx
   emit_insn_after (insns, BB_HEAD (new_bb));
 }

+/* Generate the canonical SET_SRC to move GPR to a VMODE vector register,
+   zeroing the upper parts.  */
+
+static rtx
+gen_gpr_to_xmm_move_src (enum machine_mode vmode, rtx gpr)
+{
+  switch (GET_MODE_NUNITS (vmode))
+{
+case 1:
+  return gen_rtx_SUBREG (vmode, gpr, 0);
+case 2:
+  return gen_rtx_VEC_CONCAT (vmode, gpr,
+CONST0_RTX (GET_MODE_INNER (vmode)));
+default:
+  return gen_rtx_VEC_MERGE (vmode, gen_rtx_VEC_DUPLICATE (vmode, gpr),
+   CONST0_RTX (vmode), GEN_INT
(HOST_WIDE_INT_1U));
+}
+}
+
 /* Make vector copies for all register REGNO definitions
and replace its uses in a chain.  */

@@ -684,13 +703,8 @@ general_scalar_chain::make_vector_copies
  }
else
  emit_move_insn (tmp, reg);
-   emit_insn (gen_rtx_SET
-   (gen_rtx_SUBREG (vmode, vreg, 0),
-gen_rtx_VEC_MERGE (vmode,
-   gen_rtx_VEC_DUPLICATE (vmode,
-  tmp),
-   CONST0_RTX (vmode),
-   GEN_INT (HOST_WIDE_INT_1U;
+   emit_insn (gen_rtx_SET (gen_rtx_SUBREG (vmode, vreg, 0),
+   gen_gpr_to_xmm_move_src (vmode, tmp)));
  }
else if (!TARGET_64BIT && smode == DImode)
  {
@@ -720,13 +734,8 @@ general_scalar_chain::make_vector_copies
  }
  }
else
- emit_insn (gen_rtx_SET
-  (gen_rtx_SUBREG (vmode, vreg, 0),
-   gen_rtx_VEC_MERGE (vmode,
-  gen_rtx_VEC_DUPLICATE (vmode,
- reg),
-  CONST0_RTX (vmode),
-  GEN_INT (HOST_WIDE_INT_1U;
+ emit_insn (gen_rtx_SET (gen_rtx_SUBREG (vmode, vreg, 0),
+ gen_gpr_to_xmm_move_src (vmode, reg)));
rtx_insn *seq = get_insns ();
end_sequence ();
rtx_insn *insn = DF_REF_INSN (ref);

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

Richard Biener  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #3 from Richard Biener  ---
Instead we seem to use

(insn 6 3 7 2 (set (reg:V2DI 85)
(vec_concat:V2DI (reg/v:DI 83 [ x ])
(const_int 0 [0]))) "t.c":5:10 4212 {*vec_concatv2di_0}
 (nil))

bah.  Is there a helper abstracting the canonical forms for this?

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #2 from Richard Biener  ---
Looks like we miss a pattern for

(insn 162 16 163 2 (set (subreg:V2DI (reg:DI 169) 0)
(vec_merge:V2DI (vec_duplicate:V2DI (reg:DI 101 [ ubound.0 ]))
(const_vector:V2DI [
(const_int 0 [0]) repeated x2
])
(const_int 1 [0x1]))) "t.f90":8:0 -1
 (nil))

?  I expected that this canonical form for movq gpr, %xmm is handled?

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

--- Comment #1 from Martin Liška  ---
Another issues caused by the revision:

$ gfortran /home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/power_8.f90
-fno-ivopts -Os -m32 -mtune=athlon-tbird
/home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/power_8.f90:63:0:

   63 | end program p
  | 
Error: unrecognizable insn:
(insn 289 288 63 7 (set (subreg:V2DI (reg:DI 202) 0)
(vec_merge:V2DI (vec_duplicate:V2DI (mem/c:DI (plus:SI (reg/f:SI 19
frame)
(const_int -8 [0xfff8])) [0  S8 A64]))
(const_vector:V2DI [
(const_int 0 [0]) repeated x2
])
(const_int 1 [0x1])))
"/home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/power_8.f90":20:0 -1
 (nil))
during RTL pass: subreg3
/home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/power_8.f90:63:0:
internal compiler error: in extract_insn, at recog.c:2310
0x6b6b2f _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/home/marxin/Programming/gcc/gcc/rtl-error.c:108
0x6b6b4b _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
/home/marxin/Programming/gcc/gcc/rtl-error.c:116
0x6b4cd3 extract_insn(rtx_insn*)
/home/marxin/Programming/gcc/gcc/recog.c:2310
0x172de67 decompose_multiword_subregs
/home/marxin/Programming/gcc/gcc/lower-subreg.c:1540
0x172ef9d execute
/home/marxin/Programming/gcc/gcc/lower-subreg.c:1808

$ gcc
/home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c
-m32 -mtune=k6-2 -Ofast
during RTL pass: pro_and_epilogue
/home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c:
In function ‘main’:
/home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c:43:1:
internal compiler error: in ix86_expand_epilogue, at config/i386/i386.c:8974
   43 | }
  | ^
0x765f5f ix86_expand_epilogue(int)
/home/marxin/Programming/gcc/gcc/config/i386/i386.c:8974
0x1402340 gen_epilogue()
/home/marxin/Programming/gcc/gcc/config/i386/i386.md:12970
0x10f0f98 target_gen_epilogue
/home/marxin/Programming/gcc/gcc/config/i386/i386.md:12469
0xad20b8 make_epilogue_seq
/home/marxin/Programming/gcc/gcc/function.c:5762
0xad21bb thread_prologue_and_epilogue_insns()
/home/marxin/Programming/gcc/gcc/function.c:5844
0xad28b2 rest_of_handle_thread_prologue_and_epilogue
/home/marxin/Programming/gcc/gcc/function.c:6334
0xad28b2 execute
/home/marxin/Programming/gcc/gcc/function.c:6376

[Bug target/91454] [10 Regression] ICE in get_attr_avx_partial_xmm_update, at config/i386/i386.md:1804 since r274481

2019-08-15 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91454

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2019-08-15
  Known to work||9.1.0
   Target Milestone|--- |10.0
 Ever confirmed|0   |1
  Known to fail||10.0