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