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