• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+rdseed | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=goldmont | FileCheck %s --check-prefix=CHECK --check-prefix=GOLDMONT
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
8
9declare {i16, i32} @llvm.x86.rdseed.16()
10declare {i32, i32} @llvm.x86.rdseed.32()
11declare {i64, i32} @llvm.x86.rdseed.64()
12
13define i16 @test_rdseed_16(i16* %random_val) {
14; GENERIC-LABEL: test_rdseed_16:
15; GENERIC:       # %bb.0:
16; GENERIC-NEXT:    rdseedw %ax # sched: [100:0.33]
17; GENERIC-NEXT:    retq # sched: [1:1.00]
18;
19; GOLDMONT-LABEL: test_rdseed_16:
20; GOLDMONT:       # %bb.0:
21; GOLDMONT-NEXT:    rdseedw %ax # sched: [100:1.00]
22; GOLDMONT-NEXT:    retq # sched: [4:1.00]
23;
24; BROADWELL-LABEL: test_rdseed_16:
25; BROADWELL:       # %bb.0:
26; BROADWELL-NEXT:    rdseedw %ax # sched: [100:0.25]
27; BROADWELL-NEXT:    retq # sched: [7:1.00]
28;
29; SKYLAKE-LABEL: test_rdseed_16:
30; SKYLAKE:       # %bb.0:
31; SKYLAKE-NEXT:    rdseedw %ax # sched: [100:0.25]
32; SKYLAKE-NEXT:    retq # sched: [7:1.00]
33;
34; SKX-LABEL: test_rdseed_16:
35; SKX:       # %bb.0:
36; SKX-NEXT:    rdseedw %ax # sched: [100:0.25]
37; SKX-NEXT:    retq # sched: [7:1.00]
38;
39; ZNVER1-LABEL: test_rdseed_16:
40; ZNVER1:       # %bb.0:
41; ZNVER1-NEXT:    rdseedw %ax # sched: [100:0.25]
42; ZNVER1-NEXT:    retq # sched: [1:0.50]
43  %call = call {i16, i32} @llvm.x86.rdseed.16()
44  %randval = extractvalue {i16, i32} %call, 0
45  ret i16 %randval
46}
47
48define i32 @test_rdseed_32(i16* %random_val) {
49; GENERIC-LABEL: test_rdseed_32:
50; GENERIC:       # %bb.0:
51; GENERIC-NEXT:    rdseedl %eax # sched: [100:0.33]
52; GENERIC-NEXT:    retq # sched: [1:1.00]
53;
54; GOLDMONT-LABEL: test_rdseed_32:
55; GOLDMONT:       # %bb.0:
56; GOLDMONT-NEXT:    rdseedl %eax # sched: [100:1.00]
57; GOLDMONT-NEXT:    retq # sched: [4:1.00]
58;
59; BROADWELL-LABEL: test_rdseed_32:
60; BROADWELL:       # %bb.0:
61; BROADWELL-NEXT:    rdseedl %eax # sched: [100:0.25]
62; BROADWELL-NEXT:    retq # sched: [7:1.00]
63;
64; SKYLAKE-LABEL: test_rdseed_32:
65; SKYLAKE:       # %bb.0:
66; SKYLAKE-NEXT:    rdseedl %eax # sched: [100:0.25]
67; SKYLAKE-NEXT:    retq # sched: [7:1.00]
68;
69; SKX-LABEL: test_rdseed_32:
70; SKX:       # %bb.0:
71; SKX-NEXT:    rdseedl %eax # sched: [100:0.25]
72; SKX-NEXT:    retq # sched: [7:1.00]
73;
74; ZNVER1-LABEL: test_rdseed_32:
75; ZNVER1:       # %bb.0:
76; ZNVER1-NEXT:    rdseedl %eax # sched: [100:0.25]
77; ZNVER1-NEXT:    retq # sched: [1:0.50]
78  %call = call {i32, i32} @llvm.x86.rdseed.32()
79  %randval = extractvalue {i32, i32} %call, 0
80  ret i32 %randval
81}
82
83define i64 @test_rdseed_64(i64* %random_val) {
84; GENERIC-LABEL: test_rdseed_64:
85; GENERIC:       # %bb.0:
86; GENERIC-NEXT:    rdseedq %rax # sched: [100:0.33]
87; GENERIC-NEXT:    retq # sched: [1:1.00]
88;
89; GOLDMONT-LABEL: test_rdseed_64:
90; GOLDMONT:       # %bb.0:
91; GOLDMONT-NEXT:    rdseedq %rax # sched: [100:1.00]
92; GOLDMONT-NEXT:    retq # sched: [4:1.00]
93;
94; BROADWELL-LABEL: test_rdseed_64:
95; BROADWELL:       # %bb.0:
96; BROADWELL-NEXT:    rdseedq %rax # sched: [100:0.25]
97; BROADWELL-NEXT:    retq # sched: [7:1.00]
98;
99; SKYLAKE-LABEL: test_rdseed_64:
100; SKYLAKE:       # %bb.0:
101; SKYLAKE-NEXT:    rdseedq %rax # sched: [100:0.25]
102; SKYLAKE-NEXT:    retq # sched: [7:1.00]
103;
104; SKX-LABEL: test_rdseed_64:
105; SKX:       # %bb.0:
106; SKX-NEXT:    rdseedq %rax # sched: [100:0.25]
107; SKX-NEXT:    retq # sched: [7:1.00]
108;
109; ZNVER1-LABEL: test_rdseed_64:
110; ZNVER1:       # %bb.0:
111; ZNVER1-NEXT:    rdseedq %rax # sched: [100:0.25]
112; ZNVER1-NEXT:    retq # sched: [1:0.50]
113  %call = call {i64, i32} @llvm.x86.rdseed.64()
114  %randval = extractvalue {i64, i32} %call, 0
115  ret i64 %randval
116}
117