[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / rdseed.ll
blob5cdd84233cb0f85256c5275ec7163d8252abcd13
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mcpu=core-avx-i -mattr=+rdseed | FileCheck %s --check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=core-avx-i -mattr=+rdseed | FileCheck %s --check-prefix=X64
5 declare {i16, i32} @llvm.x86.rdseed.16()
6 declare {i32, i32} @llvm.x86.rdseed.32()
8 define i32 @_rdseed16_step(ptr %random_val) {
9 ; X86-LABEL: _rdseed16_step:
10 ; X86:       # %bb.0:
11 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
12 ; X86-NEXT:    rdseedw %ax
13 ; X86-NEXT:    movzwl %ax, %edx
14 ; X86-NEXT:    movl $1, %eax
15 ; X86-NEXT:    cmovael %edx, %eax
16 ; X86-NEXT:    movw %dx, (%ecx)
17 ; X86-NEXT:    retl
19 ; X64-LABEL: _rdseed16_step:
20 ; X64:       # %bb.0:
21 ; X64-NEXT:    rdseedw %ax
22 ; X64-NEXT:    movzwl %ax, %ecx
23 ; X64-NEXT:    movl $1, %eax
24 ; X64-NEXT:    cmovael %ecx, %eax
25 ; X64-NEXT:    movw %cx, (%rdi)
26 ; X64-NEXT:    retq
27   %call = call {i16, i32} @llvm.x86.rdseed.16()
28   %randval = extractvalue {i16, i32} %call, 0
29   store i16 %randval, ptr %random_val
30   %isvalid = extractvalue {i16, i32} %call, 1
31   ret i32 %isvalid
34 define i32 @_rdseed32_step(ptr %random_val) {
35 ; X86-LABEL: _rdseed32_step:
36 ; X86:       # %bb.0:
37 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
38 ; X86-NEXT:    rdseedl %edx
39 ; X86-NEXT:    movl $1, %eax
40 ; X86-NEXT:    cmovael %edx, %eax
41 ; X86-NEXT:    movl %edx, (%ecx)
42 ; X86-NEXT:    retl
44 ; X64-LABEL: _rdseed32_step:
45 ; X64:       # %bb.0:
46 ; X64-NEXT:    rdseedl %ecx
47 ; X64-NEXT:    movl $1, %eax
48 ; X64-NEXT:    cmovael %ecx, %eax
49 ; X64-NEXT:    movl %ecx, (%rdi)
50 ; X64-NEXT:    retq
51   %call = call {i32, i32} @llvm.x86.rdseed.32()
52   %randval = extractvalue {i32, i32} %call, 0
53   store i32 %randval, ptr %random_val
54   %isvalid = extractvalue {i32, i32} %call, 1
55   ret i32 %isvalid