From: Jakub Jelinek Date: Fri, 28 Jun 2013 20:25:35 +0000 (+0200) Subject: re PR target/57736 (ICE in emit_move_insn with __builtin_ia32_rdtsc) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=53c1275b31689ec674a94fcb2ed07ce0ad9f217c;p=gcc.git re PR target/57736 (ICE in emit_move_insn with __builtin_ia32_rdtsc) PR target/57736 * config/i386/i386.c (ix86_expand_builtin): If target == NULL and mode is VOIDmode, don't create a VOIDmode pseudo to copy result into. * gcc.target/i386/pr57736.c: New test. From-SVN: r200555 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ac6e1b3d26..4a2c28190b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-06-28 Jakub Jelinek + + PR target/57736 + * config/i386/i386.c (ix86_expand_builtin): If target == NULL + and mode is VOIDmode, don't create a VOIDmode pseudo to copy result + into. + 2013-06-28 Balaji V. Iyer * builtins.def: Fixed the function type of CILKPLUS_BUILTIN. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 2a65fc2a6de..3dbaddfa1bb 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -32218,7 +32218,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, } if (target == 0) - target = gen_reg_rtx (mode); + { + /* mode is VOIDmode if __builtin_rd* has been called + without lhs. */ + if (mode == VOIDmode) + return target; + target = gen_reg_rtx (mode); + } if (TARGET_64BIT) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b9a61801a27..28874b0f28f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-28 Jakub Jelinek + + PR target/57736 + * gcc.target/i386/pr57736.c: New test. + 2013-06-28 Balaji V. Iyer * c-c++-common/cilk-plus/AN/decl-ptr-colon.c (main): Made this testcase diff --git a/gcc/testsuite/gcc.target/i386/pr57736.c b/gcc/testsuite/gcc.target/i386/pr57736.c new file mode 100644 index 00000000000..120e5dc3a47 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr57736.c @@ -0,0 +1,41 @@ +/* PR target/57736 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include + +unsigned long long +f1 (void) +{ + return __rdtsc (); +} + +unsigned long long +f2 (unsigned int *x) +{ + return __rdtscp (x); +} + +unsigned long long +f3 (unsigned int x) +{ + return __rdpmc (x); +} + +void +f4 (void) +{ + __rdtsc (); +} + +void +f5 (unsigned int *x) +{ + __rdtscp (x); +} + +void +f6 (unsigned int x) +{ + __rdpmc (x); +}