[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / memset-minsize.ll
blobd66500ea31a0d6b4d0d16b78899e2be01d32e12e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
4 define void @tiny_memset_to_rep_stos(ptr %ptr) minsize nounwind {
5 ; CHECK-LABEL: tiny_memset_to_rep_stos:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    andq $0, (%rdi)
8 ; CHECK-NEXT:    retq
9 entry:
10   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 8, i1 false)
11   ret void
14 define void @small_memset_to_rep_stos(ptr %ptr) minsize nounwind {
15 ; CHECK-LABEL: small_memset_to_rep_stos:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    pushq $32
18 ; CHECK-NEXT:    popq %rcx
19 ; CHECK-NEXT:    xorl %eax, %eax
20 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
21 ; CHECK-NEXT:    retq
22 entry:
23   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 128, i1 false)
24   ret void
27 define void @medium_memset_to_rep_stos(ptr %ptr) minsize nounwind {
28 ; CHECK-LABEL: medium_memset_to_rep_stos:
29 ; CHECK:       # %bb.0: # %entry
30 ; CHECK-NEXT:    movl $128, %ecx
31 ; CHECK-NEXT:    xorl %eax, %eax
32 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
33 ; CHECK-NEXT:    retq
34 entry:
35   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 512, i1 false)
36   ret void
39 define void @large_memset_to_rep_stos(ptr %ptr) minsize nounwind {
40 ; CHECK-LABEL: large_memset_to_rep_stos:
41 ; CHECK:       # %bb.0: # %entry
42 ; CHECK-NEXT:    movl $1024, %ecx # imm = 0x400
43 ; CHECK-NEXT:    xorl %eax, %eax
44 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
45 ; CHECK-NEXT:    retq
46 entry:
47   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 4096, i1 false)
48   ret void
51 define void @huge_memset_to_rep_stos(ptr %ptr) minsize nounwind {
52 ; CHECK-LABEL: huge_memset_to_rep_stos:
53 ; CHECK:       # %bb.0: # %entry
54 ; CHECK-NEXT:    movl $2048, %ecx # imm = 0x800
55 ; CHECK-NEXT:    xorl %eax, %eax
56 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
57 ; CHECK-NEXT:    retq
58 entry:
59   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 8192, i1 false)
60   ret void
63 define void @odd_length_memset_to_rep_stos(ptr %ptr) minsize nounwind {
64 ; CHECK-LABEL: odd_length_memset_to_rep_stos:
65 ; CHECK:       # %bb.0: # %entry
66 ; CHECK-NEXT:    movl $255, %ecx
67 ; CHECK-NEXT:    xorl %eax, %eax
68 ; CHECK-NEXT:    rep;stosb %al, %es:(%rdi)
69 ; CHECK-NEXT:    retq
70 entry:
71   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 255, i1 false)
72   ret void
75 define void @align_1_memset_to_rep_stos(ptr %ptr) minsize nounwind {
76 ; CHECK-LABEL: align_1_memset_to_rep_stos:
77 ; CHECK:       # %bb.0: # %entry
78 ; CHECK-NEXT:    pushq $64
79 ; CHECK-NEXT:    popq %rcx
80 ; CHECK-NEXT:    xorl %eax, %eax
81 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
82 ; CHECK-NEXT:    retq
83 entry:
84   call void @llvm.memset.p0.i32(ptr align 1 %ptr, i8 0, i32 256, i1 false)
85   ret void
88 define void @align_2_memset_to_rep_stos(ptr %ptr) minsize nounwind {
89 ; CHECK-LABEL: align_2_memset_to_rep_stos:
90 ; CHECK:       # %bb.0: # %entry
91 ; CHECK-NEXT:    pushq $64
92 ; CHECK-NEXT:    popq %rcx
93 ; CHECK-NEXT:    xorl %eax, %eax
94 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
95 ; CHECK-NEXT:    retq
96 entry:
97   call void @llvm.memset.p0.i32(ptr align 2 %ptr, i8 0, i32 256, i1 false)
98   ret void
101 define void @align_4_memset_to_rep_stos(ptr %ptr) minsize nounwind {
102 ; CHECK-LABEL: align_4_memset_to_rep_stos:
103 ; CHECK:       # %bb.0: # %entry
104 ; CHECK-NEXT:    pushq $64
105 ; CHECK-NEXT:    popq %rcx
106 ; CHECK-NEXT:    xorl %eax, %eax
107 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
108 ; CHECK-NEXT:    retq
109 entry:
110   call void @llvm.memset.p0.i32(ptr align 4 %ptr, i8 0, i32 256, i1 false)
111   ret void
114 define void @align_8_memset_to_rep_stos(ptr %ptr) minsize nounwind {
115 ; CHECK-LABEL: align_8_memset_to_rep_stos:
116 ; CHECK:       # %bb.0: # %entry
117 ; CHECK-NEXT:    pushq $64
118 ; CHECK-NEXT:    popq %rcx
119 ; CHECK-NEXT:    xorl %eax, %eax
120 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
121 ; CHECK-NEXT:    retq
122 entry:
123   call void @llvm.memset.p0.i32(ptr align 8 %ptr, i8 0, i32 256, i1 false)
124   ret void
127 define void @small_memset_to_rep_stos_64(ptr %ptr) minsize nounwind {
128 ; CHECK-LABEL: small_memset_to_rep_stos_64:
129 ; CHECK:       # %bb.0: # %entry
130 ; CHECK-NEXT:    pushq $32
131 ; CHECK-NEXT:    popq %rcx
132 ; CHECK-NEXT:    xorl %eax, %eax
133 ; CHECK-NEXT:    rep;stosl %eax, %es:(%rdi)
134 ; CHECK-NEXT:    retq
135 entry:
136   call void @llvm.memset.p0.i64(ptr align 8 %ptr, i8 0, i64 128, i1 false)
137   ret void
140 declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1)