From 71639485e7b113d9542bcb555d4430d90711fadc Mon Sep 17 00:00:00 2001
From: Sebastian Peryt <sebastian.peryt@intel.com>
Date: Mon, 15 Jan 2018 14:32:40 +0300
Subject: [PATCH] PR83546

---
 gcc/config/i386/i386.c                  |  2 +-
 gcc/testsuite/gcc.target/i386/pr83546.c | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr83546.c

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 9ac4ad6..9f18e84 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3474,7 +3474,7 @@ ix86_option_override_internal (bool main_args_p,
 #define PTA_BONNELL \
   (PTA_CORE2 | PTA_MOVBE)
 #define PTA_SILVERMONT \
-  (PTA_WESTMERE | PTA_MOVBE)
+  (PTA_WESTMERE | PTA_MOVBE | PTA_RDRND)
 #define PTA_KNM \
   (PTA_KNL | PTA_AVX5124VNNIW | PTA_AVX5124FMAPS | PTA_AVX512VPOPCNTDQ)
 
diff --git a/gcc/testsuite/gcc.target/i386/pr83546.c b/gcc/testsuite/gcc.target/i386/pr83546.c
new file mode 100644
index 0000000..fe00daa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr83546.c
@@ -0,0 +1,18 @@
+/* PR target/83546 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=silvermont" } */
+
+int test (void)
+{
+  unsigned int number = 0;
+  int result0, result1, result2, result3;
+
+  result0 = __builtin_ia32_rdrand32_step (&number);
+  result1 = __builtin_ia32_rdrand32_step (&number);
+  result2 = __builtin_ia32_rdrand32_step (&number);
+  result3 = __builtin_ia32_rdrand32_step (&number);
+
+  return result0 + result1 +result2 + result3;
+}
+
+/* { dg-final { scan-assembler-times "rdrand" 4 } } */
-- 
2.5.5

