From: Uros Bizjak Date: Wed, 23 Apr 2014 17:53:56 +0000 (+0200) Subject: backport: re PR target/60909 (ICE: in extract_insn, at recog.c:2202 (unrecognizable... X-Git-Tag: releases/gcc-4.8.3~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17a533808c66f2e8d442131ae888cd7953a05de9;p=thirdparty%2Fgcc.git backport: re PR target/60909 (ICE: in extract_insn, at recog.c:2202 (unrecognizable insn) with -mrdrnd and __builtin_ia32_rdrand32_step()) Backport from mainline 2014-04-21 Uros Bizjak PR target/60909 * config/i386/i386.c (ix86_expand_builtin) : Use temporary register for target RTX. : Ditto. testsuite/ChangeLog: Backport from mainline 2014-04-21 Uros Bizjak PR target/60909 * gcc.target/i386/pr60909-1.c: New test. * gcc.target/i386/pr60909-2.c: Ditto. From-SVN: r209715 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6ef4c16b3880..73f7a5936764 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2014-04-23 Uros Bizjak + + Backport from mainline + 2014-04-21 Uros Bizjak + + PR target/60909 + * config/i386/i386.c (ix86_expand_builtin) + : Use temporary + register for target RTX. + : Ditto. + 2014-04-23 Richard Biener Backport from mainline diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e3d45a69f4b1..6243f1067881 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32059,7 +32059,8 @@ rdrand_step: else op2 = gen_rtx_SUBREG (SImode, op0, 0); - if (target == 0) + if (target == 0 + || !register_operand (target, SImode)) target = gen_reg_rtx (SImode); pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG), @@ -32101,7 +32102,8 @@ rdseed_step: const0_rtx); emit_insn (gen_rtx_SET (VOIDmode, op2, pat)); - if (target == 0) + if (target == 0 + || !register_operand (target, SImode)) target = gen_reg_rtx (SImode); emit_insn (gen_zero_extendqisi2 (target, op2)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index daa6363d5e21..b0331f3e1fda 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2014-04-23 Uros Bizjak + + Backport from mainline + 2014-04-21 Uros Bizjak + + PR target/60909 + * gcc.target/i386/pr60909-1.c: New test. + * gcc.target/i386/pr60909-2.c: Ditto. + 2014-04-23 Richard Biener Backport from mainline diff --git a/gcc/testsuite/gcc.target/i386/pr60909-1.c b/gcc/testsuite/gcc.target/i386/pr60909-1.c new file mode 100644 index 000000000000..5a1ac3c0f6c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr60909-1.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-mrdrnd" } */ + +extern void bar (int); + +void +foo (unsigned *u) +{ + int i = __builtin_ia32_rdrand32_step (u); + bar (i); +} diff --git a/gcc/testsuite/gcc.target/i386/pr60909-2.c b/gcc/testsuite/gcc.target/i386/pr60909-2.c new file mode 100644 index 000000000000..dd356685ba90 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr60909-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-mrdseed" } */ + +extern void bar (int); + +void +foo (unsigned *u) +{ + int i = __builtin_ia32_rdseed_si_step (u); + bar (i); +}