diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-06-28 22:25:35 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-06-28 22:25:35 +0200 |
commit | 53c1275b31689ec674a94fcb2ed07ce0ad9f217c (patch) | |
tree | 8d538084e2178659059ea7a378be9e27f716f268 /gcc | |
parent | 1141ed3f71c8a82067dbbbed6ec87c607bfd0be9 (diff) | |
download | gcc-53c1275b31689ec674a94fcb2ed07ce0ad9f217c.zip gcc-53c1275b31689ec674a94fcb2ed07ce0ad9f217c.tar.gz gcc-53c1275b31689ec674a94fcb2ed07ce0ad9f217c.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr57736.c | 41 |
4 files changed, 60 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ac6e1b..4a2c281 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-06-28 Jakub Jelinek <jakub@redhat.com> + + 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 <balaji.v.iyer@intel.com> * builtins.def: Fixed the function type of CILKPLUS_BUILTIN. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 2a65fc2..3dbaddf 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 b9a6180..28874b0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-28 Jakub Jelinek <jakub@redhat.com> + + PR target/57736 + * gcc.target/i386/pr57736.c: New test. + 2013-06-28 Balaji V. Iyer <balaji.v.iyer@intel.com> * 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 0000000..120e5dc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr57736.c @@ -0,0 +1,41 @@ +/* PR target/57736 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <x86intrin.h> + +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); +} |