141 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s3 4define void @tiny_memset_to_rep_stos(ptr %ptr) minsize nounwind {5; CHECK-LABEL: tiny_memset_to_rep_stos:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: andq $0, (%rdi)8; CHECK-NEXT: retq9entry:10 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 8, i1 false)11 ret void12}13 14define void @small_memset_to_rep_stos(ptr %ptr) minsize nounwind {15; CHECK-LABEL: small_memset_to_rep_stos:16; CHECK: # %bb.0: # %entry17; CHECK-NEXT: pushq $3218; CHECK-NEXT: popq %rcx19; CHECK-NEXT: xorl %eax, %eax20; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)21; CHECK-NEXT: retq22entry:23 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 128, i1 false)24 ret void25}26 27define void @medium_memset_to_rep_stos(ptr %ptr) minsize nounwind {28; CHECK-LABEL: medium_memset_to_rep_stos:29; CHECK: # %bb.0: # %entry30; CHECK-NEXT: movl $128, %ecx31; CHECK-NEXT: xorl %eax, %eax32; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)33; CHECK-NEXT: retq34entry:35 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 512, i1 false)36 ret void37}38 39define void @large_memset_to_rep_stos(ptr %ptr) minsize nounwind {40; CHECK-LABEL: large_memset_to_rep_stos:41; CHECK: # %bb.0: # %entry42; CHECK-NEXT: movl $1024, %ecx # imm = 0x40043; CHECK-NEXT: xorl %eax, %eax44; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)45; CHECK-NEXT: retq46entry:47 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 4096, i1 false)48 ret void49}50 51define void @huge_memset_to_rep_stos(ptr %ptr) minsize nounwind {52; CHECK-LABEL: huge_memset_to_rep_stos:53; CHECK: # %bb.0: # %entry54; CHECK-NEXT: movl $2048, %ecx # imm = 0x80055; CHECK-NEXT: xorl %eax, %eax56; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)57; CHECK-NEXT: retq58entry:59 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 8192, i1 false)60 ret void61}62 63define void @odd_length_memset_to_rep_stos(ptr %ptr) minsize nounwind {64; CHECK-LABEL: odd_length_memset_to_rep_stos:65; CHECK: # %bb.0: # %entry66; CHECK-NEXT: movl $255, %ecx67; CHECK-NEXT: xorl %eax, %eax68; CHECK-NEXT: rep;stosb %al, %es:(%rdi)69; CHECK-NEXT: retq70entry:71 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 255, i1 false)72 ret void73}74 75define void @align_1_memset_to_rep_stos(ptr %ptr) minsize nounwind {76; CHECK-LABEL: align_1_memset_to_rep_stos:77; CHECK: # %bb.0: # %entry78; CHECK-NEXT: pushq $6479; CHECK-NEXT: popq %rcx80; CHECK-NEXT: xorl %eax, %eax81; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)82; CHECK-NEXT: retq83entry:84 call void @llvm.memset.p0.i32(ptr align 1 %ptr, i8 0, i32 256, i1 false)85 ret void86}87 88define void @align_2_memset_to_rep_stos(ptr %ptr) minsize nounwind {89; CHECK-LABEL: align_2_memset_to_rep_stos:90; CHECK: # %bb.0: # %entry91; CHECK-NEXT: pushq $6492; CHECK-NEXT: popq %rcx93; CHECK-NEXT: xorl %eax, %eax94; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)95; CHECK-NEXT: retq96entry:97 call void @llvm.memset.p0.i32(ptr align 2 %ptr, i8 0, i32 256, i1 false)98 ret void99}100 101define void @align_4_memset_to_rep_stos(ptr %ptr) minsize nounwind {102; CHECK-LABEL: align_4_memset_to_rep_stos:103; CHECK: # %bb.0: # %entry104; CHECK-NEXT: pushq $64105; CHECK-NEXT: popq %rcx106; CHECK-NEXT: xorl %eax, %eax107; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)108; CHECK-NEXT: retq109entry:110 call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 256, i1 false)111 ret void112}113 114define void @align_8_memset_to_rep_stos(ptr %ptr) minsize nounwind {115; CHECK-LABEL: align_8_memset_to_rep_stos:116; CHECK: # %bb.0: # %entry117; CHECK-NEXT: pushq $64118; CHECK-NEXT: popq %rcx119; CHECK-NEXT: xorl %eax, %eax120; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)121; CHECK-NEXT: retq122entry:123 call void @llvm.memset.p0.i32(ptr align 8 %ptr, i8 0, i32 256, i1 false)124 ret void125}126 127define void @small_memset_to_rep_stos_64(ptr %ptr) minsize nounwind {128; CHECK-LABEL: small_memset_to_rep_stos_64:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: pushq $32131; CHECK-NEXT: popq %rcx132; CHECK-NEXT: xorl %eax, %eax133; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)134; CHECK-NEXT: retq135entry:136 call void @llvm.memset.p0.i64(ptr align 8 %ptr, i8 0, i64 128, i1 false)137 ret void138}139 140declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1)141