1 ; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s 2 3 ; CHECK-LABEL: tail_memcpy 4 ; CHECK: jmp memcpy 5 define void @tail_memcpy(i8* nocapture %p, i8* nocapture readonly %q, i32 %n) #0 { 6 entry: 7 tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false) 8 ret void 9 } 10 11 ; CHECK-LABEL: tail_memmove 12 ; CHECK: jmp memmove 13 define void @tail_memmove(i8* nocapture %p, i8* nocapture readonly %q, i32 %n) #0 { 14 entry: 15 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false) 16 ret void 17 } 18 19 ; CHECK-LABEL: tail_memset 20 ; CHECK: jmp memset 21 define void @tail_memset(i8* nocapture %p, i8 %c, i32 %n) #0 { 22 entry: 23 tail call void @llvm.memset.p0i8.i32(i8* %p, i8 %c, i32 %n, i1 false) 24 ret void 25 } 26 27 ; CHECK-LABEL: tail_memcpy_ret 28 ; CHECK: jmp memcpy 29 define i8* @tail_memcpy_ret(i8* nocapture %p, i8* nocapture readonly %q, i32 %n) #0 { 30 entry: 31 tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false) 32 ret i8* %p 33 } 34 35 ; CHECK-LABEL: tail_memmove_ret 36 ; CHECK: jmp memmove 37 define i8* @tail_memmove_ret(i8* nocapture %p, i8* nocapture readonly %q, i32 %n) #0 { 38 entry: 39 tail call void @llvm.memmove.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false) 40 ret i8* %p 41 } 42 43 ; CHECK-LABEL: tail_memset_ret 44 ; CHECK: jmp memset 45 define i8* @tail_memset_ret(i8* nocapture %p, i8 %c, i32 %n) #0 { 46 entry: 47 tail call void @llvm.memset.p0i8.i32(i8* %p, i8 %c, i32 %n, i1 false) 48 ret i8* %p 49 } 50 51 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) #0 52 declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) #0 53 declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1) #0 54 55 attributes #0 = { nounwind } 56