xref: /llvm-project/llvm/test/CodeGen/X86/rdpru.ll (revision 02e4186d0b3508e79d78b0ec844518b13a3fe9ea)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-- -mattr=+rdpru | FileCheck %s --check-prefix=X86
3; RUN: llc < %s -mtriple=i686-- -mattr=+rdpru -fast-isel | FileCheck %s --check-prefix=X86
4; RUN: llc < %s -mtriple=x86_64-- -mattr=+rdpru | FileCheck %s --check-prefix=X64
5; RUN: llc < %s -mtriple=x86_64-- -mattr=+rdpru -fast-isel | FileCheck %s --check-prefix=X64
6; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver2 | FileCheck %s --check-prefix=X64
7; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver3 -fast-isel | FileCheck %s --check-prefix=X64
8; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver4 -fast-isel | FileCheck %s --check-prefix=X64
9; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver5 -fast-isel | FileCheck %s --check-prefix=X64
10
11define void @rdpru_asm() {
12; X86-LABEL: rdpru_asm:
13; X86:       # %bb.0: # %entry
14; X86-NEXT:    #APP
15; X86-NEXT:    rdpru
16; X86-NEXT:    #NO_APP
17; X86-NEXT:    retl
18;
19; X64-LABEL: rdpru_asm:
20; X64:       # %bb.0: # %entry
21; X64-NEXT:    #APP
22; X64-NEXT:    rdpru
23; X64-NEXT:    #NO_APP
24; X64-NEXT:    retq
25entry:
26  call void asm sideeffect "rdpru", "~{dirflag},~{fpsr},~{flags}"()
27  ret void
28}
29
30define i64 @rdpru_param(i32 %regid) local_unnamed_addr {
31; X86-LABEL: rdpru_param:
32; X86:       # %bb.0: # %entry
33; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
34; X86-NEXT:    rdpru
35; X86-NEXT:    retl
36;
37; X64-LABEL: rdpru_param:
38; X64:       # %bb.0: # %entry
39; X64-NEXT:    movl %edi, %ecx
40; X64-NEXT:    rdpru
41; X64-NEXT:    shlq $32, %rdx
42; X64-NEXT:    orq %rdx, %rax
43; X64-NEXT:    retq
44entry:
45  %0 = tail call i64 @llvm.x86.rdpru(i32 %regid)
46  ret i64 %0
47}
48
49define i64 @rdpru_mperf() local_unnamed_addr {
50; X86-LABEL: rdpru_mperf:
51; X86:       # %bb.0: # %entry
52; X86-NEXT:    xorl %ecx, %ecx
53; X86-NEXT:    rdpru
54; X86-NEXT:    retl
55;
56; X64-LABEL: rdpru_mperf:
57; X64:       # %bb.0: # %entry
58; X64-NEXT:    xorl %ecx, %ecx
59; X64-NEXT:    rdpru
60; X64-NEXT:    shlq $32, %rdx
61; X64-NEXT:    orq %rdx, %rax
62; X64-NEXT:    retq
63entry:
64  %0 = tail call i64 @llvm.x86.rdpru(i32 0)
65  ret i64 %0
66}
67
68define i64 @rdpru_aperf() local_unnamed_addr {
69; X86-LABEL: rdpru_aperf:
70; X86:       # %bb.0: # %entry
71; X86-NEXT:    movl $1, %ecx
72; X86-NEXT:    rdpru
73; X86-NEXT:    retl
74;
75; X64-LABEL: rdpru_aperf:
76; X64:       # %bb.0: # %entry
77; X64-NEXT:    movl $1, %ecx
78; X64-NEXT:    rdpru
79; X64-NEXT:    shlq $32, %rdx
80; X64-NEXT:    orq %rdx, %rax
81; X64-NEXT:    retq
82entry:
83  %0 = tail call i64 @llvm.x86.rdpru(i32 1)
84  ret i64 %0
85}
86
87declare i64 @llvm.x86.rdpru(i32)
88