xref: /llvm-project/llvm/test/CodeGen/X86/memset-vs-memset-inline.ll (revision adc6a9e8189cc0a8a02a2fcea3f820ea2b402251)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=core2 | FileCheck %s
3
4declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
5declare void @llvm.memset.inline.p0.i64(ptr nocapture, i8, i64, i1) nounwind
6
7define void @test1(ptr %a, i8 %value) nounwind {
8; CHECK-LABEL: test1:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    movzbl %sil, %eax
11; CHECK-NEXT:    movabsq $72340172838076673, %rcx # imm = 0x101010101010101
12; CHECK-NEXT:    imulq %rax, %rcx
13; CHECK-NEXT:    movq %rcx, (%rdi)
14; CHECK-NEXT:    retq
15  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 8, i1 0)
16  ret void
17}
18
19define void @regular_memset_calls_external_function(ptr %a, i8 %value) nounwind {
20; CHECK-LABEL: regular_memset_calls_external_function:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:    movl $1024, %edx # imm = 0x400
23; CHECK-NEXT:    jmp memset@PLT # TAILCALL
24  tail call void @llvm.memset.p0.i64(ptr %a, i8 %value, i64 1024, i1 0)
25  ret void
26}
27
28define void @inlined_set_doesnt_call_external_function(ptr %a, i8 %value) nounwind {
29; CHECK-LABEL: inlined_set_doesnt_call_external_function:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    movzbl %sil, %ecx
32; CHECK-NEXT:    movabsq $72340172838076673, %rax # imm = 0x101010101010101
33; CHECK-NEXT:    imulq %rcx, %rax
34; CHECK-NEXT:    movq %rax, 1016(%rdi)
35; CHECK-NEXT:    movq %rax, 1008(%rdi)
36; CHECK-NEXT:    movq %rax, 1000(%rdi)
37; CHECK-NEXT:    movq %rax, 992(%rdi)
38; CHECK-NEXT:    movq %rax, 984(%rdi)
39; CHECK-NEXT:    movq %rax, 976(%rdi)
40; CHECK-NEXT:    movq %rax, 968(%rdi)
41; CHECK-NEXT:    movq %rax, 960(%rdi)
42; CHECK-NEXT:    movq %rax, 952(%rdi)
43; CHECK-NEXT:    movq %rax, 944(%rdi)
44; CHECK-NEXT:    movq %rax, 936(%rdi)
45; CHECK-NEXT:    movq %rax, 928(%rdi)
46; CHECK-NEXT:    movq %rax, 920(%rdi)
47; CHECK-NEXT:    movq %rax, 912(%rdi)
48; CHECK-NEXT:    movq %rax, 904(%rdi)
49; CHECK-NEXT:    movq %rax, 896(%rdi)
50; CHECK-NEXT:    movq %rax, 888(%rdi)
51; CHECK-NEXT:    movq %rax, 880(%rdi)
52; CHECK-NEXT:    movq %rax, 872(%rdi)
53; CHECK-NEXT:    movq %rax, 864(%rdi)
54; CHECK-NEXT:    movq %rax, 856(%rdi)
55; CHECK-NEXT:    movq %rax, 848(%rdi)
56; CHECK-NEXT:    movq %rax, 840(%rdi)
57; CHECK-NEXT:    movq %rax, 832(%rdi)
58; CHECK-NEXT:    movq %rax, 824(%rdi)
59; CHECK-NEXT:    movq %rax, 816(%rdi)
60; CHECK-NEXT:    movq %rax, 808(%rdi)
61; CHECK-NEXT:    movq %rax, 800(%rdi)
62; CHECK-NEXT:    movq %rax, 792(%rdi)
63; CHECK-NEXT:    movq %rax, 784(%rdi)
64; CHECK-NEXT:    movq %rax, 776(%rdi)
65; CHECK-NEXT:    movq %rax, 768(%rdi)
66; CHECK-NEXT:    movq %rax, 760(%rdi)
67; CHECK-NEXT:    movq %rax, 752(%rdi)
68; CHECK-NEXT:    movq %rax, 744(%rdi)
69; CHECK-NEXT:    movq %rax, 736(%rdi)
70; CHECK-NEXT:    movq %rax, 728(%rdi)
71; CHECK-NEXT:    movq %rax, 720(%rdi)
72; CHECK-NEXT:    movq %rax, 712(%rdi)
73; CHECK-NEXT:    movq %rax, 704(%rdi)
74; CHECK-NEXT:    movq %rax, 696(%rdi)
75; CHECK-NEXT:    movq %rax, 688(%rdi)
76; CHECK-NEXT:    movq %rax, 680(%rdi)
77; CHECK-NEXT:    movq %rax, 672(%rdi)
78; CHECK-NEXT:    movq %rax, 664(%rdi)
79; CHECK-NEXT:    movq %rax, 656(%rdi)
80; CHECK-NEXT:    movq %rax, 648(%rdi)
81; CHECK-NEXT:    movq %rax, 640(%rdi)
82; CHECK-NEXT:    movq %rax, 632(%rdi)
83; CHECK-NEXT:    movq %rax, 624(%rdi)
84; CHECK-NEXT:    movq %rax, 616(%rdi)
85; CHECK-NEXT:    movq %rax, 608(%rdi)
86; CHECK-NEXT:    movq %rax, 600(%rdi)
87; CHECK-NEXT:    movq %rax, 592(%rdi)
88; CHECK-NEXT:    movq %rax, 584(%rdi)
89; CHECK-NEXT:    movq %rax, 576(%rdi)
90; CHECK-NEXT:    movq %rax, 568(%rdi)
91; CHECK-NEXT:    movq %rax, 560(%rdi)
92; CHECK-NEXT:    movq %rax, 552(%rdi)
93; CHECK-NEXT:    movq %rax, 544(%rdi)
94; CHECK-NEXT:    movq %rax, 536(%rdi)
95; CHECK-NEXT:    movq %rax, 528(%rdi)
96; CHECK-NEXT:    movq %rax, 520(%rdi)
97; CHECK-NEXT:    movq %rax, 512(%rdi)
98; CHECK-NEXT:    movq %rax, 504(%rdi)
99; CHECK-NEXT:    movq %rax, 496(%rdi)
100; CHECK-NEXT:    movq %rax, 488(%rdi)
101; CHECK-NEXT:    movq %rax, 480(%rdi)
102; CHECK-NEXT:    movq %rax, 472(%rdi)
103; CHECK-NEXT:    movq %rax, 464(%rdi)
104; CHECK-NEXT:    movq %rax, 456(%rdi)
105; CHECK-NEXT:    movq %rax, 448(%rdi)
106; CHECK-NEXT:    movq %rax, 440(%rdi)
107; CHECK-NEXT:    movq %rax, 432(%rdi)
108; CHECK-NEXT:    movq %rax, 424(%rdi)
109; CHECK-NEXT:    movq %rax, 416(%rdi)
110; CHECK-NEXT:    movq %rax, 408(%rdi)
111; CHECK-NEXT:    movq %rax, 400(%rdi)
112; CHECK-NEXT:    movq %rax, 392(%rdi)
113; CHECK-NEXT:    movq %rax, 384(%rdi)
114; CHECK-NEXT:    movq %rax, 376(%rdi)
115; CHECK-NEXT:    movq %rax, 368(%rdi)
116; CHECK-NEXT:    movq %rax, 360(%rdi)
117; CHECK-NEXT:    movq %rax, 352(%rdi)
118; CHECK-NEXT:    movq %rax, 344(%rdi)
119; CHECK-NEXT:    movq %rax, 336(%rdi)
120; CHECK-NEXT:    movq %rax, 328(%rdi)
121; CHECK-NEXT:    movq %rax, 320(%rdi)
122; CHECK-NEXT:    movq %rax, 312(%rdi)
123; CHECK-NEXT:    movq %rax, 304(%rdi)
124; CHECK-NEXT:    movq %rax, 296(%rdi)
125; CHECK-NEXT:    movq %rax, 288(%rdi)
126; CHECK-NEXT:    movq %rax, 280(%rdi)
127; CHECK-NEXT:    movq %rax, 272(%rdi)
128; CHECK-NEXT:    movq %rax, 264(%rdi)
129; CHECK-NEXT:    movq %rax, 256(%rdi)
130; CHECK-NEXT:    movq %rax, 248(%rdi)
131; CHECK-NEXT:    movq %rax, 240(%rdi)
132; CHECK-NEXT:    movq %rax, 232(%rdi)
133; CHECK-NEXT:    movq %rax, 224(%rdi)
134; CHECK-NEXT:    movq %rax, 216(%rdi)
135; CHECK-NEXT:    movq %rax, 208(%rdi)
136; CHECK-NEXT:    movq %rax, 200(%rdi)
137; CHECK-NEXT:    movq %rax, 192(%rdi)
138; CHECK-NEXT:    movq %rax, 184(%rdi)
139; CHECK-NEXT:    movq %rax, 176(%rdi)
140; CHECK-NEXT:    movq %rax, 168(%rdi)
141; CHECK-NEXT:    movq %rax, 160(%rdi)
142; CHECK-NEXT:    movq %rax, 152(%rdi)
143; CHECK-NEXT:    movq %rax, 144(%rdi)
144; CHECK-NEXT:    movq %rax, 136(%rdi)
145; CHECK-NEXT:    movq %rax, 128(%rdi)
146; CHECK-NEXT:    movq %rax, 120(%rdi)
147; CHECK-NEXT:    movq %rax, 112(%rdi)
148; CHECK-NEXT:    movq %rax, 104(%rdi)
149; CHECK-NEXT:    movq %rax, 96(%rdi)
150; CHECK-NEXT:    movq %rax, 88(%rdi)
151; CHECK-NEXT:    movq %rax, 80(%rdi)
152; CHECK-NEXT:    movq %rax, 72(%rdi)
153; CHECK-NEXT:    movq %rax, 64(%rdi)
154; CHECK-NEXT:    movq %rax, 56(%rdi)
155; CHECK-NEXT:    movq %rax, 48(%rdi)
156; CHECK-NEXT:    movq %rax, 40(%rdi)
157; CHECK-NEXT:    movq %rax, 32(%rdi)
158; CHECK-NEXT:    movq %rax, 24(%rdi)
159; CHECK-NEXT:    movq %rax, 16(%rdi)
160; CHECK-NEXT:    movq %rax, 8(%rdi)
161; CHECK-NEXT:    movq %rax, (%rdi)
162; CHECK-NEXT:    retq
163  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 1024, i1 0)
164  ret void
165}
166
167define void @memset_inlined_insize(ptr %a) nounwind minsize {
168; CHECK-LABEL: memset_inlined_insize:
169; CHECK:       # %bb.0:
170; CHECK-NEXT:    movl $1024, %ecx # imm = 0x400
171; CHECK-NEXT:    movb $42, %al
172; CHECK-NEXT:    rep;stosb %al, %es:(%rdi)
173; CHECK-NEXT:    retq
174  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 42, i64 1024, i1 0)
175  ret void
176}
177