[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-07 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

--- Comment #5 from Michael Meissner  ---
Author: meissner
Date: Wed Dec  7 23:52:05 2016
New Revision: 243418

URL: https://gcc.gnu.org/viewcvs?rev=243418=gcc=rev
Log:
[gcc]
2016-12-07  Michael Meissner  

PR target/72717
* config/rs6000/rs6000.c (rs6000_expand_vector_init): If the
V2DImode elements are SUBREG's convert the result into DImode
rather than failing in emit_move_insn.

[gcc/testsuite]
2016-12-07  Michael Meissner  

PR target/72717
* gcc.target/powerpc/pr72717.c: New test.


Added:
trunk/gcc/testsuite/gcc.target/powerpc/pr72717.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/rs6000/rs6000.c
trunk/gcc/testsuite/ChangeLog

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-07 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

--- Comment #4 from Segher Boessenkool  ---
That works I guess...  Please test on BE and 32-bit as well.  Oh, and
no parens in  a = (b) ? c : d;  (for simple b at least).

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-06 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

--- Comment #3 from Michael Meissner  ---
Created attachment 40270
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40270=edit
Proposed patch

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-06 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

Michael Meissner  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 CC||dje at gcc dot gnu.org,
   ||segher at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |meissner at gcc dot 
gnu.org

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-06 Thread aldyh at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

Aldy Hernandez  changed:

   What|Removed |Added

 CC||aldyh at gcc dot gnu.org,
   ||meissner at gcc dot gnu.org

--- Comment #2 from Aldy Hernandez  ---
FWIW:

emit_move_insn() is trying to emit a move from an SI to a DI and dying:

#1  0x107a4e24 in emit_move_insn (x=0x3fffb58bd8f0, y=0x3fffb58bd8a8)
at /home/aldyh/gcc/gcc/expr.c:3696
(gdb) call debug_rtx(x)
(reg:DI 179)
(gdb) call debug_rtx(y)
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
(gdb) 

This comes via rs6000_expand_vector_init():

  /* Double word values on VSX can use xxpermdi or lxvdsx.  */
  if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
{
  rtx op0 = XVECEXP (vals, 0, 0);
  rtx op1 = XVECEXP (vals, 0, 1);
  if (all_same)
{
  if (!MEM_P (op0) && !REG_P (op0))
=>  op0 = force_reg (inner_mode, op0);
  if (mode == V2DFmode)
emit_insn (gen_vsx_splat_v2df (target, op0));
  else
emit_insn (gen_vsx_splat_v2di (target, op0));

...where we have:

(gdb) p inner_mode
$4 = DImode
(gdb) call debug_rtx(vals)
(parallel:V2DI [
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
])
(gdb) p inner_mode
$5 = DImode
(gdb) call debug_rtx(op0)  
   
  (subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-12-01 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le

2016-09-11 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717

Andrew Pinski  changed:

   What|Removed |Added

   Target Milestone|--- |5.5