74 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mcpu=generic | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=generic | FileCheck %s --check-prefix=X644 5; Verify that we correctly lower ISD::READCYCLECOUNTER.6 7 8define i64 @test_builtin_readcyclecounter() {9; X86-LABEL: test_builtin_readcyclecounter:10; X86: # %bb.0:11; X86-NEXT: rdtsc12; X86-NEXT: retl13;14; X64-LABEL: test_builtin_readcyclecounter:15; X64: # %bb.0:16; X64-NEXT: rdtsc17; X64-NEXT: shlq $32, %rdx18; X64-NEXT: orq %rdx, %rax19; X64-NEXT: retq20 %1 = tail call i64 @llvm.readcyclecounter()21 ret i64 %122}23 24; Verify that we correctly lower the Read Cycle Counter GCC x86 builtins25; (i.e. RDTSC and RDTSCP).26 27define i64 @test_builtin_rdtsc() {28; X86-LABEL: test_builtin_rdtsc:29; X86: # %bb.0:30; X86-NEXT: rdtsc31; X86-NEXT: retl32;33; X64-LABEL: test_builtin_rdtsc:34; X64: # %bb.0:35; X64-NEXT: rdtsc36; X64-NEXT: shlq $32, %rdx37; X64-NEXT: orq %rdx, %rax38; X64-NEXT: retq39 %1 = tail call i64 @llvm.x86.rdtsc()40 ret i64 %141}42 43define i64 @test_builtin_rdtscp(ptr %A) {44; X86-LABEL: test_builtin_rdtscp:45; X86: # %bb.0:46; X86-NEXT: pushl %esi47; X86-NEXT: .cfi_def_cfa_offset 848; X86-NEXT: .cfi_offset %esi, -849; X86-NEXT: movl {{[0-9]+}}(%esp), %esi50; X86-NEXT: rdtscp51; X86-NEXT: movl %ecx, (%esi)52; X86-NEXT: popl %esi53; X86-NEXT: .cfi_def_cfa_offset 454; X86-NEXT: retl55;56; X64-LABEL: test_builtin_rdtscp:57; X64: # %bb.0:58; X64-NEXT: rdtscp59; X64-NEXT: shlq $32, %rdx60; X64-NEXT: orq %rdx, %rax61; X64-NEXT: movl %ecx, (%rdi)62; X64-NEXT: retq63 %1 = call { i64, i32 } @llvm.x86.rdtscp()64 %2 = extractvalue { i64, i32 } %1, 165 store i32 %2, ptr %A, align 166 %3 = extractvalue { i64, i32 } %1, 067 ret i64 %368}69 70declare i64 @llvm.readcyclecounter()71declare { i64, i32 } @llvm.x86.rdtscp()72declare i64 @llvm.x86.rdtsc()73 74