[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-25 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

H.J. Lu  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED
   Target Milestone|--- |8.0

--- Comment #6 from H.J. Lu  ---
Fixed for GCC 8.

[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-25 Thread hjl at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

--- Comment #5 from hjl at gcc dot gnu.org  ---
Author: hjl
Date: Wed Apr 25 17:31:20 2018
New Revision: 259654

URL: https://gcc.gnu.org/viewcvs?rev=259654=gcc=rev
Log:
x86: Correct movdir64b builtin function

gcc/ChangeLog:

Backport from mainline
2018-04-25  Sebastian Peryt  

PR target/85473
* config/i386/i386.c (ix86_expand_builtin): Change memory
operand to XI, extend p0 to Pmode.
* config/i386/i386.md: Change unspec volatile and operand
1 mode to XI, change operand 0 mode to P.

gcc/testsuite/ChangeLog:

Backport from mainline
2018-04-25  Sebastian Peryt  

PR target/85473
* gcc.target/i386/pr85473-1.c: New test.
* gcc.target/i386/pr85473-2.c: New test.

Added:
branches/gcc-8-branch/gcc/testsuite/gcc.target/i386/pr85473-1.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/i386/pr85473-2.c
Modified:
branches/gcc-8-branch/gcc/ChangeLog
branches/gcc-8-branch/gcc/config/i386/i386.c
branches/gcc-8-branch/gcc/config/i386/i386.md
branches/gcc-8-branch/gcc/testsuite/ChangeLog

[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-25 Thread speryt at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

--- Comment #4 from speryt at gcc dot gnu.org ---
Author: speryt
Date: Wed Apr 25 12:39:57 2018
New Revision: 259648

URL: https://gcc.gnu.org/viewcvs?rev=259648=gcc=rev
Log:
2018-04-25  Sebastian Peryt  

gcc/ChangeLog:

PR target/85473
* config/i386/i386.c (ix86_expand_builtin): Change memory
operand to XI, extend p0 to Pmode.
* config/i386/i386.md: Change unspec volatile and operand
1 mode to XI, change operand 0 mode to P.

gcc/testsuite/ChangeLog:

PR target/85473
* gcc.target/i386/pr85473-1.c: New test.
* gcc.target/i386/pr85473-2.c: New test.


Added:
trunk/gcc/testsuite/gcc.target/i386/pr85473-1.c
trunk/gcc/testsuite/gcc.target/i386/pr85473-2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/i386/i386.c
trunk/gcc/config/i386/i386.md
trunk/gcc/testsuite/ChangeLog

[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-20 Thread sebastian.peryt at intel dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

--- Comment #3 from Sebastian Peryt  ---
Proposed patch sent to ML:
https://gcc.gnu.org/ml/gcc-patches/2018-04/msg01011.html

[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-19 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

--- Comment #2 from H.J. Lu  ---
Something like this

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index dc80b34f302..99feb5ea629 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -37141,11 +37141,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx
subtarget,
   arg1 = CALL_EXPR_ARG (exp, 1);
   op0 = expand_normal (arg0);
   op1 = expand_normal (arg1);
-  mode0 = (TARGET_64BIT ? DImode : SImode);

-  op0 = force_reg (mode0, op0);
-  if (!memory_operand (op1, mode0))
-  op1 = gen_rtx_MEM (mode0, op1);
+  op0 = ix86_zero_extend_to_Pmode (op0);
+  if (!memory_operand (op1, XImode))
+  op1 = gen_rtx_MEM (XImode, op1);

   insn = (TARGET_64BIT
  ? gen_movdir64b_di (op0, op1)
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index a134ca88014..d01e3c631b5 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -20697,8 +20697,8 @@
   [(set_attr "type" "other")])

 (define_insn "movdir64b_"
-  [(unspec_volatile:SWI48[(match_operand:SWI48 0 "register_operand" "r")
-  (match_operand:SWI48 1 "memory_operand")]
+  [(unspec_volatile:XI [(match_operand:P 0 "register_operand" "r")
+  (match_operand:XI 1 "memory_operand")]
   UNSPECV_MOVDIR64B)]
   "TARGET_MOVDIR64B"
   "movdir64b\t{%1, %0|%0, %1}"

[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722

2018-04-19 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85473

H.J. Lu  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2018-04-19
 Ever confirmed|0   |1

--- Comment #1 from H.J. Lu  ---
movdir64 stores 64 byte.  But it doesn't show:

(define_insn "movdir64b_"
  [(unspec_volatile:SWI48[(match_operand:SWI48 0 "register_operand" "r")
(match_operand:SWI48 1 "memory_operand")]
 UNSPECV_MOVDIR64B)]
  "TARGET_MOVDIR64B"
  "movdir64b\t{%1, %0|%0, %1}"
  [(set_attr "type" "other")])

Here register is used as address.