]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/rdseed-schedule.ll
Vendor import of llvm trunk r321017:
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / rdseed-schedule.ll
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
9 declare {i16, i32} @llvm.x86.rdseed.16()
10 declare {i32, i32} @llvm.x86.rdseed.32()
11 declare {i64, i32} @llvm.x86.rdseed.64()
12
13 define 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:?]
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
48 define 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:?]
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
83 define 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:?]
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 }