blob: 183aec59f9d86158d1a8cc4fd1d6a33d7dfbacb7 [file] [log] [blame]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +00001; 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=+rdrnd | 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=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=IVY
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
10
11declare {i16, i32} @llvm.x86.rdrand.16()
12declare {i32, i32} @llvm.x86.rdrand.32()
13declare {i64, i32} @llvm.x86.rdrand.64()
14
15define i16 @test_rdrand_16(i16* %random_val) {
16; GENERIC-LABEL: test_rdrand_16:
17; GENERIC: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000018; GENERIC-NEXT: rdrandw %ax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000019; GENERIC-NEXT: retq # sched: [1:1.00]
20;
21; GOLDMONT-LABEL: test_rdrand_16:
22; GOLDMONT: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000023; GOLDMONT-NEXT: rdrandw %ax # sched: [100:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000024; GOLDMONT-NEXT: retq # sched: [4:1.00]
25;
26; IVY-LABEL: test_rdrand_16:
27; IVY: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000028; IVY-NEXT: rdrandw %ax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000029; IVY-NEXT: retq # sched: [1:1.00]
30;
31; HASWELL-LABEL: test_rdrand_16:
32; HASWELL: # %bb.0:
33; HASWELL-NEXT: rdrandw %ax # sched: [1:5.33]
Gadi Haber2cf601f2017-12-08 09:48:44 +000034; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000035;
36; BROADWELL-LABEL: test_rdrand_16:
37; BROADWELL: # %bb.0:
38; BROADWELL-NEXT: rdrandw %ax # sched: [9:1.00]
39; BROADWELL-NEXT: retq # sched: [7:1.00]
40;
41; SKYLAKE-LABEL: test_rdrand_16:
42; SKYLAKE: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000043; SKYLAKE-NEXT: rdrandw %ax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000044; SKYLAKE-NEXT: retq # sched: [7:1.00]
45;
46; SKX-LABEL: test_rdrand_16:
47; SKX: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000048; SKX-NEXT: rdrandw %ax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000049; SKX-NEXT: retq # sched: [7:1.00]
50;
51; ZNVER1-LABEL: test_rdrand_16:
52; ZNVER1: # %bb.0:
53; ZNVER1-NEXT: rdrandw %ax # sched: [100:?]
54; ZNVER1-NEXT: retq # sched: [1:0.50]
55 %call = call {i16, i32} @llvm.x86.rdrand.16()
56 %randval = extractvalue {i16, i32} %call, 0
57 ret i16 %randval
58}
59
60define i32 @test_rdrand_32(i32* %random_val) {
61; GENERIC-LABEL: test_rdrand_32:
62; GENERIC: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000063; GENERIC-NEXT: rdrandl %eax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000064; GENERIC-NEXT: retq # sched: [1:1.00]
65;
66; GOLDMONT-LABEL: test_rdrand_32:
67; GOLDMONT: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000068; GOLDMONT-NEXT: rdrandl %eax # sched: [100:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000069; GOLDMONT-NEXT: retq # sched: [4:1.00]
70;
71; IVY-LABEL: test_rdrand_32:
72; IVY: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000073; IVY-NEXT: rdrandl %eax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000074; IVY-NEXT: retq # sched: [1:1.00]
75;
76; HASWELL-LABEL: test_rdrand_32:
77; HASWELL: # %bb.0:
78; HASWELL-NEXT: rdrandl %eax # sched: [1:5.33]
Gadi Haber2cf601f2017-12-08 09:48:44 +000079; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000080;
81; BROADWELL-LABEL: test_rdrand_32:
82; BROADWELL: # %bb.0:
83; BROADWELL-NEXT: rdrandl %eax # sched: [9:1.00]
84; BROADWELL-NEXT: retq # sched: [7:1.00]
85;
86; SKYLAKE-LABEL: test_rdrand_32:
87; SKYLAKE: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000088; SKYLAKE-NEXT: rdrandl %eax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000089; SKYLAKE-NEXT: retq # sched: [7:1.00]
90;
91; SKX-LABEL: test_rdrand_32:
92; SKX: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +000093; SKX-NEXT: rdrandl %eax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +000094; SKX-NEXT: retq # sched: [7:1.00]
95;
96; ZNVER1-LABEL: test_rdrand_32:
97; ZNVER1: # %bb.0:
98; ZNVER1-NEXT: rdrandl %eax # sched: [100:?]
99; ZNVER1-NEXT: retq # sched: [1:0.50]
100 %call = call {i32, i32} @llvm.x86.rdrand.32()
101 %randval = extractvalue {i32, i32} %call, 0
102 ret i32 %randval
103}
104
105define i64 @test_rdrand_64(i64* %random_val) {
106; GENERIC-LABEL: test_rdrand_64:
107; GENERIC: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +0000108; GENERIC-NEXT: rdrandq %rax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000109; GENERIC-NEXT: retq # sched: [1:1.00]
110;
111; GOLDMONT-LABEL: test_rdrand_64:
112; GOLDMONT: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +0000113; GOLDMONT-NEXT: rdrandq %rax # sched: [100:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000114; GOLDMONT-NEXT: retq # sched: [4:1.00]
115;
116; IVY-LABEL: test_rdrand_64:
117; IVY: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +0000118; IVY-NEXT: rdrandq %rax # sched: [100:0.33]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000119; IVY-NEXT: retq # sched: [1:1.00]
120;
121; HASWELL-LABEL: test_rdrand_64:
122; HASWELL: # %bb.0:
123; HASWELL-NEXT: rdrandq %rax # sched: [1:5.33]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000124; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000125;
126; BROADWELL-LABEL: test_rdrand_64:
127; BROADWELL: # %bb.0:
128; BROADWELL-NEXT: rdrandq %rax # sched: [9:1.00]
129; BROADWELL-NEXT: retq # sched: [7:1.00]
130;
131; SKYLAKE-LABEL: test_rdrand_64:
132; SKYLAKE: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +0000133; SKYLAKE-NEXT: rdrandq %rax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000134; SKYLAKE-NEXT: retq # sched: [7:1.00]
135;
136; SKX-LABEL: test_rdrand_64:
137; SKX: # %bb.0:
Simon Pilgrim60411d92017-12-07 14:18:48 +0000138; SKX-NEXT: rdrandq %rax # sched: [100:0.25]
Simon Pilgrimeb87fe62017-12-07 13:46:47 +0000139; SKX-NEXT: retq # sched: [7:1.00]
140;
141; ZNVER1-LABEL: test_rdrand_64:
142; ZNVER1: # %bb.0:
143; ZNVER1-NEXT: rdrandq %rax # sched: [100:?]
144; ZNVER1-NEXT: retq # sched: [1:0.50]
145 %call = call {i64, i32} @llvm.x86.rdrand.64()
146 %randval = extractvalue {i64, i32} %call, 0
147 ret i64 %randval
148}