aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-06-28 22:25:35 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2013-06-28 22:25:35 +0200
commit53c1275b31689ec674a94fcb2ed07ce0ad9f217c (patch)
tree8d538084e2178659059ea7a378be9e27f716f268 /gcc
parent1141ed3f71c8a82067dbbbed6ec87c607bfd0be9 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr57736.c41
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);
+}