diff options
Diffstat (limited to 'test/CodeGen/X86/rdtsc.ll')
-rw-r--r-- | test/CodeGen/X86/rdtsc.ll | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/test/CodeGen/X86/rdtsc.ll b/test/CodeGen/X86/rdtsc.ll index f21a44c..dba614a 100644 --- a/test/CodeGen/X86/rdtsc.ll +++ b/test/CodeGen/X86/rdtsc.ll @@ -1,8 +1,49 @@ -; RUN: llc < %s -march=x86 | grep rdtsc -; RUN: llc < %s -march=x86-64 | grep rdtsc -declare i64 @llvm.readcyclecounter() +; RUN: llc < %s -march=x86-64 -mcpu=generic | FileCheck %s +; RUN: llc < %s -march=x86 -mcpu=generic | FileCheck %s --check-prefix=CHECK --check-prefix=X86 + +; Verify that we correctly lower ISD::READCYCLECOUNTER. + + +define i64 @test_builtin_readcyclecounter() { + %1 = tail call i64 @llvm.readcyclecounter() + ret i64 %1 +} +; CHECK-LABEL: test_builtin_readcyclecounter +; CHECK: rdtsc +; X86-NOT: shlq +; X86-NOT: or +; CHECK-NOT: mov +; CHECK: ret + + +; Verify that we correctly lower the Read Cycle Counter GCC x86 builtins +; (i.e. RDTSC and RDTSCP). -define i64 @foo() { - %tmp.1 = call i64 @llvm.readcyclecounter( ) ; <i64> [#uses=1] - ret i64 %tmp.1 +define i64 @test_builtin_rdtsc() { + %1 = tail call i64 @llvm.x86.rdtsc() + ret i64 %1 } +; CHECK-LABEL: test_builtin_rdtsc +; CHECK: rdtsc +; X86-NOT: shlq +; X86-NOT: or +; CHECK-NOT: mov +; CHECK: ret + + +define i64 @test_builtin_rdtscp(i8* %A) { + %1 = tail call i64 @llvm.x86.rdtscp(i8* %A) + ret i64 %1 +} +; CHECK-LABEL: test_builtin_rdtscp +; CHECK: rdtscp +; X86-NOT: shlq +; CHECK: movl %ecx, (%{{[a-z0-9]+}}) +; X86-NOT: shlq +; CHECK: ret + + +declare i64 @llvm.readcyclecounter() +declare i64 @llvm.x86.rdtscp(i8*) +declare i64 @llvm.x86.rdtsc() + |