[Bug target/85473] internal compiler error: in emit_move_insn, at expr.c:3722
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
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 PerytPR 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
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 Perytgcc/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
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
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
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.