1 ; RUN: llc < %s -march=x86-64 -mcpu=generic | FileCheck %s 2 ; RUN: llc < %s -march=x86 -mcpu=generic | FileCheck %s --check-prefix=CHECK --check-prefix=X86 3 4 ; Verify that we correctly lower ISD::READCYCLECOUNTER. 5 6 7 define i64 @test_builtin_readcyclecounter() { 8 %1 = tail call i64 @llvm.readcyclecounter() 9 ret i64 %1 10 } 11 ; CHECK-LABEL: test_builtin_readcyclecounter 12 ; CHECK: rdtsc 13 ; X86-NOT: shlq 14 ; X86-NOT: or 15 ; CHECK-NOT: mov 16 ; CHECK: ret 17 18 19 ; Verify that we correctly lower the Read Cycle Counter GCC x86 builtins 20 ; (i.e. RDTSC and RDTSCP). 21 22 define i64 @test_builtin_rdtsc() { 23 %1 = tail call i64 @llvm.x86.rdtsc() 24 ret i64 %1 25 } 26 ; CHECK-LABEL: test_builtin_rdtsc 27 ; CHECK: rdtsc 28 ; X86-NOT: shlq 29 ; X86-NOT: or 30 ; CHECK-NOT: mov 31 ; CHECK: ret 32 33 34 define i64 @test_builtin_rdtscp(i8* %A) { 35 %1 = tail call i64 @llvm.x86.rdtscp(i8* %A) 36 ret i64 %1 37 } 38 ; CHECK-LABEL: test_builtin_rdtscp 39 ; CHECK: rdtscp 40 ; X86-NOT: shlq 41 ; CHECK: movl %ecx, (%{{[a-z0-9]+}}) 42 ; X86-NOT: shlq 43 ; CHECK: ret 44 45 46 declare i64 @llvm.readcyclecounter() 47 declare i64 @llvm.x86.rdtscp(i8*) 48 declare i64 @llvm.x86.rdtsc() 49 50