Home | History | Annotate | Download | only in X86
      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: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 
     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: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 
     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: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