1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown-linux | FileCheck %s --check-prefix=X86 3; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=core2 | FileCheck %s --check-prefix=CORE2 4; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=nehalem | FileCheck %s --check-prefix=NEHALEM 5; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=sandybridge | FileCheck %s --check-prefix=SANDYBRIDGE 6; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=skylake | FileCheck %s --check-prefix=SKYLAKE 7; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=knl | FileCheck %s --check-prefix=KNL 8 9 10declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind 11 12define void @memset_0(ptr %a) nounwind { 13; X86-LABEL: memset_0: 14; X86: # %bb.0: # %entry 15; X86-NEXT: retl 16; 17; CORE2-LABEL: memset_0: 18; CORE2: # %bb.0: # %entry 19; CORE2-NEXT: retq 20; 21; NEHALEM-LABEL: memset_0: 22; NEHALEM: # %bb.0: # %entry 23; NEHALEM-NEXT: retq 24; 25; SANDYBRIDGE-LABEL: memset_0: 26; SANDYBRIDGE: # %bb.0: # %entry 27; SANDYBRIDGE-NEXT: retq 28; 29; SKYLAKE-LABEL: memset_0: 30; SKYLAKE: # %bb.0: # %entry 31; SKYLAKE-NEXT: retq 32; 33; KNL-LABEL: memset_0: 34; KNL: # %bb.0: # %entry 35; KNL-NEXT: retq 36entry: 37 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 0, i1 false) 38 ret void 39} 40 41define void @memset_4(ptr %a) nounwind { 42; X86-LABEL: memset_4: 43; X86: # %bb.0: # %entry 44; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 45; X86-NEXT: movl $0, (%eax) 46; X86-NEXT: retl 47; 48; CORE2-LABEL: memset_4: 49; CORE2: # %bb.0: # %entry 50; CORE2-NEXT: movl $0, (%rdi) 51; CORE2-NEXT: retq 52; 53; NEHALEM-LABEL: memset_4: 54; NEHALEM: # %bb.0: # %entry 55; NEHALEM-NEXT: movl $0, (%rdi) 56; NEHALEM-NEXT: retq 57; 58; SANDYBRIDGE-LABEL: memset_4: 59; SANDYBRIDGE: # %bb.0: # %entry 60; SANDYBRIDGE-NEXT: movl $0, (%rdi) 61; SANDYBRIDGE-NEXT: retq 62; 63; SKYLAKE-LABEL: memset_4: 64; SKYLAKE: # %bb.0: # %entry 65; SKYLAKE-NEXT: movl $0, (%rdi) 66; SKYLAKE-NEXT: retq 67; 68; KNL-LABEL: memset_4: 69; KNL: # %bb.0: # %entry 70; KNL-NEXT: movl $0, (%rdi) 71; KNL-NEXT: retq 72entry: 73 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 4, i1 false) 74 ret void 75} 76 77define void @memset_5(ptr %a) nounwind { 78; X86-LABEL: memset_5: 79; X86: # %bb.0: # %entry 80; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 81; X86-NEXT: movb $0, 4(%eax) 82; X86-NEXT: movl $0, (%eax) 83; X86-NEXT: retl 84; 85; CORE2-LABEL: memset_5: 86; CORE2: # %bb.0: # %entry 87; CORE2-NEXT: movb $0, 4(%rdi) 88; CORE2-NEXT: movl $0, (%rdi) 89; CORE2-NEXT: retq 90; 91; NEHALEM-LABEL: memset_5: 92; NEHALEM: # %bb.0: # %entry 93; NEHALEM-NEXT: movb $0, 4(%rdi) 94; NEHALEM-NEXT: movl $0, (%rdi) 95; NEHALEM-NEXT: retq 96; 97; SANDYBRIDGE-LABEL: memset_5: 98; SANDYBRIDGE: # %bb.0: # %entry 99; SANDYBRIDGE-NEXT: movb $0, 4(%rdi) 100; SANDYBRIDGE-NEXT: movl $0, (%rdi) 101; SANDYBRIDGE-NEXT: retq 102; 103; SKYLAKE-LABEL: memset_5: 104; SKYLAKE: # %bb.0: # %entry 105; SKYLAKE-NEXT: movb $0, 4(%rdi) 106; SKYLAKE-NEXT: movl $0, (%rdi) 107; SKYLAKE-NEXT: retq 108; 109; KNL-LABEL: memset_5: 110; KNL: # %bb.0: # %entry 111; KNL-NEXT: movb $0, 4(%rdi) 112; KNL-NEXT: movl $0, (%rdi) 113; KNL-NEXT: retq 114entry: 115 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 5, i1 false) 116 ret void 117} 118 119define void @memset_7(ptr %a) nounwind { 120; X86-LABEL: memset_7: 121; X86: # %bb.0: # %entry 122; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 123; X86-NEXT: movl $0, 3(%eax) 124; X86-NEXT: movl $0, (%eax) 125; X86-NEXT: retl 126; 127; CORE2-LABEL: memset_7: 128; CORE2: # %bb.0: # %entry 129; CORE2-NEXT: movl $0, 3(%rdi) 130; CORE2-NEXT: movl $0, (%rdi) 131; CORE2-NEXT: retq 132; 133; NEHALEM-LABEL: memset_7: 134; NEHALEM: # %bb.0: # %entry 135; NEHALEM-NEXT: movl $0, 3(%rdi) 136; NEHALEM-NEXT: movl $0, (%rdi) 137; NEHALEM-NEXT: retq 138; 139; SANDYBRIDGE-LABEL: memset_7: 140; SANDYBRIDGE: # %bb.0: # %entry 141; SANDYBRIDGE-NEXT: movl $0, 3(%rdi) 142; SANDYBRIDGE-NEXT: movl $0, (%rdi) 143; SANDYBRIDGE-NEXT: retq 144; 145; SKYLAKE-LABEL: memset_7: 146; SKYLAKE: # %bb.0: # %entry 147; SKYLAKE-NEXT: movl $0, 3(%rdi) 148; SKYLAKE-NEXT: movl $0, (%rdi) 149; SKYLAKE-NEXT: retq 150; 151; KNL-LABEL: memset_7: 152; KNL: # %bb.0: # %entry 153; KNL-NEXT: movl $0, 3(%rdi) 154; KNL-NEXT: movl $0, (%rdi) 155; KNL-NEXT: retq 156entry: 157 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 7, i1 false) 158 ret void 159} 160 161define void @memset_8(ptr %a) nounwind { 162; X86-LABEL: memset_8: 163; X86: # %bb.0: # %entry 164; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 165; X86-NEXT: movl $0, 4(%eax) 166; X86-NEXT: movl $0, (%eax) 167; X86-NEXT: retl 168; 169; CORE2-LABEL: memset_8: 170; CORE2: # %bb.0: # %entry 171; CORE2-NEXT: movq $0, (%rdi) 172; CORE2-NEXT: retq 173; 174; NEHALEM-LABEL: memset_8: 175; NEHALEM: # %bb.0: # %entry 176; NEHALEM-NEXT: movq $0, (%rdi) 177; NEHALEM-NEXT: retq 178; 179; SANDYBRIDGE-LABEL: memset_8: 180; SANDYBRIDGE: # %bb.0: # %entry 181; SANDYBRIDGE-NEXT: movq $0, (%rdi) 182; SANDYBRIDGE-NEXT: retq 183; 184; SKYLAKE-LABEL: memset_8: 185; SKYLAKE: # %bb.0: # %entry 186; SKYLAKE-NEXT: movq $0, (%rdi) 187; SKYLAKE-NEXT: retq 188; 189; KNL-LABEL: memset_8: 190; KNL: # %bb.0: # %entry 191; KNL-NEXT: movq $0, (%rdi) 192; KNL-NEXT: retq 193entry: 194 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 8, i1 false) 195 ret void 196} 197 198define void @memset_11(ptr %a) nounwind { 199; X86-LABEL: memset_11: 200; X86: # %bb.0: # %entry 201; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 202; X86-NEXT: movl $0, 7(%eax) 203; X86-NEXT: movl $0, 4(%eax) 204; X86-NEXT: movl $0, (%eax) 205; X86-NEXT: retl 206; 207; CORE2-LABEL: memset_11: 208; CORE2: # %bb.0: # %entry 209; CORE2-NEXT: movl $0, 7(%rdi) 210; CORE2-NEXT: movq $0, (%rdi) 211; CORE2-NEXT: retq 212; 213; NEHALEM-LABEL: memset_11: 214; NEHALEM: # %bb.0: # %entry 215; NEHALEM-NEXT: movl $0, 7(%rdi) 216; NEHALEM-NEXT: movq $0, (%rdi) 217; NEHALEM-NEXT: retq 218; 219; SANDYBRIDGE-LABEL: memset_11: 220; SANDYBRIDGE: # %bb.0: # %entry 221; SANDYBRIDGE-NEXT: movl $0, 7(%rdi) 222; SANDYBRIDGE-NEXT: movq $0, (%rdi) 223; SANDYBRIDGE-NEXT: retq 224; 225; SKYLAKE-LABEL: memset_11: 226; SKYLAKE: # %bb.0: # %entry 227; SKYLAKE-NEXT: movl $0, 7(%rdi) 228; SKYLAKE-NEXT: movq $0, (%rdi) 229; SKYLAKE-NEXT: retq 230; 231; KNL-LABEL: memset_11: 232; KNL: # %bb.0: # %entry 233; KNL-NEXT: movl $0, 7(%rdi) 234; KNL-NEXT: movq $0, (%rdi) 235; KNL-NEXT: retq 236entry: 237 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 11, i1 false) 238 ret void 239} 240 241define void @memset_13(ptr %a) nounwind { 242; X86-LABEL: memset_13: 243; X86: # %bb.0: # %entry 244; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 245; X86-NEXT: movb $0, 12(%eax) 246; X86-NEXT: movl $0, 8(%eax) 247; X86-NEXT: movl $0, 4(%eax) 248; X86-NEXT: movl $0, (%eax) 249; X86-NEXT: retl 250; 251; CORE2-LABEL: memset_13: 252; CORE2: # %bb.0: # %entry 253; CORE2-NEXT: movq $0, 5(%rdi) 254; CORE2-NEXT: movq $0, (%rdi) 255; CORE2-NEXT: retq 256; 257; NEHALEM-LABEL: memset_13: 258; NEHALEM: # %bb.0: # %entry 259; NEHALEM-NEXT: movq $0, 5(%rdi) 260; NEHALEM-NEXT: movq $0, (%rdi) 261; NEHALEM-NEXT: retq 262; 263; SANDYBRIDGE-LABEL: memset_13: 264; SANDYBRIDGE: # %bb.0: # %entry 265; SANDYBRIDGE-NEXT: movq $0, 5(%rdi) 266; SANDYBRIDGE-NEXT: movq $0, (%rdi) 267; SANDYBRIDGE-NEXT: retq 268; 269; SKYLAKE-LABEL: memset_13: 270; SKYLAKE: # %bb.0: # %entry 271; SKYLAKE-NEXT: movq $0, 5(%rdi) 272; SKYLAKE-NEXT: movq $0, (%rdi) 273; SKYLAKE-NEXT: retq 274; 275; KNL-LABEL: memset_13: 276; KNL: # %bb.0: # %entry 277; KNL-NEXT: movq $0, 5(%rdi) 278; KNL-NEXT: movq $0, (%rdi) 279; KNL-NEXT: retq 280entry: 281 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 13, i1 false) 282 ret void 283} 284 285define void @memset_15(ptr %a) nounwind { 286; X86-LABEL: memset_15: 287; X86: # %bb.0: # %entry 288; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 289; X86-NEXT: movl $0, 11(%eax) 290; X86-NEXT: movl $0, 8(%eax) 291; X86-NEXT: movl $0, 4(%eax) 292; X86-NEXT: movl $0, (%eax) 293; X86-NEXT: retl 294; 295; CORE2-LABEL: memset_15: 296; CORE2: # %bb.0: # %entry 297; CORE2-NEXT: movq $0, 7(%rdi) 298; CORE2-NEXT: movq $0, (%rdi) 299; CORE2-NEXT: retq 300; 301; NEHALEM-LABEL: memset_15: 302; NEHALEM: # %bb.0: # %entry 303; NEHALEM-NEXT: movq $0, 7(%rdi) 304; NEHALEM-NEXT: movq $0, (%rdi) 305; NEHALEM-NEXT: retq 306; 307; SANDYBRIDGE-LABEL: memset_15: 308; SANDYBRIDGE: # %bb.0: # %entry 309; SANDYBRIDGE-NEXT: movq $0, 7(%rdi) 310; SANDYBRIDGE-NEXT: movq $0, (%rdi) 311; SANDYBRIDGE-NEXT: retq 312; 313; SKYLAKE-LABEL: memset_15: 314; SKYLAKE: # %bb.0: # %entry 315; SKYLAKE-NEXT: movq $0, 7(%rdi) 316; SKYLAKE-NEXT: movq $0, (%rdi) 317; SKYLAKE-NEXT: retq 318; 319; KNL-LABEL: memset_15: 320; KNL: # %bb.0: # %entry 321; KNL-NEXT: movq $0, 7(%rdi) 322; KNL-NEXT: movq $0, (%rdi) 323; KNL-NEXT: retq 324entry: 325 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 15, i1 false) 326 ret void 327} 328 329define void @memset_16(ptr %a) nounwind { 330; X86-LABEL: memset_16: 331; X86: # %bb.0: # %entry 332; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 333; X86-NEXT: movl $0, 12(%eax) 334; X86-NEXT: movl $0, 8(%eax) 335; X86-NEXT: movl $0, 4(%eax) 336; X86-NEXT: movl $0, (%eax) 337; X86-NEXT: retl 338; 339; CORE2-LABEL: memset_16: 340; CORE2: # %bb.0: # %entry 341; CORE2-NEXT: movq $0, 8(%rdi) 342; CORE2-NEXT: movq $0, (%rdi) 343; CORE2-NEXT: retq 344; 345; NEHALEM-LABEL: memset_16: 346; NEHALEM: # %bb.0: # %entry 347; NEHALEM-NEXT: xorps %xmm0, %xmm0 348; NEHALEM-NEXT: movups %xmm0, (%rdi) 349; NEHALEM-NEXT: retq 350; 351; SANDYBRIDGE-LABEL: memset_16: 352; SANDYBRIDGE: # %bb.0: # %entry 353; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 354; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 355; SANDYBRIDGE-NEXT: retq 356; 357; SKYLAKE-LABEL: memset_16: 358; SKYLAKE: # %bb.0: # %entry 359; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 360; SKYLAKE-NEXT: vmovups %xmm0, (%rdi) 361; SKYLAKE-NEXT: retq 362; 363; KNL-LABEL: memset_16: 364; KNL: # %bb.0: # %entry 365; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 366; KNL-NEXT: vmovups %xmm0, (%rdi) 367; KNL-NEXT: retq 368entry: 369 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 16, i1 false) 370 ret void 371} 372 373define void @memset_17(ptr %a) nounwind { 374; X86-LABEL: memset_17: 375; X86: # %bb.0: # %entry 376; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 377; X86-NEXT: movb $0, 16(%eax) 378; X86-NEXT: movl $0, 12(%eax) 379; X86-NEXT: movl $0, 8(%eax) 380; X86-NEXT: movl $0, 4(%eax) 381; X86-NEXT: movl $0, (%eax) 382; X86-NEXT: retl 383; 384; CORE2-LABEL: memset_17: 385; CORE2: # %bb.0: # %entry 386; CORE2-NEXT: movb $0, 16(%rdi) 387; CORE2-NEXT: movq $0, 8(%rdi) 388; CORE2-NEXT: movq $0, (%rdi) 389; CORE2-NEXT: retq 390; 391; NEHALEM-LABEL: memset_17: 392; NEHALEM: # %bb.0: # %entry 393; NEHALEM-NEXT: xorps %xmm0, %xmm0 394; NEHALEM-NEXT: movups %xmm0, (%rdi) 395; NEHALEM-NEXT: movb $0, 16(%rdi) 396; NEHALEM-NEXT: retq 397; 398; SANDYBRIDGE-LABEL: memset_17: 399; SANDYBRIDGE: # %bb.0: # %entry 400; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 401; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 402; SANDYBRIDGE-NEXT: movb $0, 16(%rdi) 403; SANDYBRIDGE-NEXT: retq 404; 405; SKYLAKE-LABEL: memset_17: 406; SKYLAKE: # %bb.0: # %entry 407; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 408; SKYLAKE-NEXT: vmovups %xmm0, (%rdi) 409; SKYLAKE-NEXT: movb $0, 16(%rdi) 410; SKYLAKE-NEXT: retq 411; 412; KNL-LABEL: memset_17: 413; KNL: # %bb.0: # %entry 414; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 415; KNL-NEXT: vmovups %xmm0, (%rdi) 416; KNL-NEXT: movb $0, 16(%rdi) 417; KNL-NEXT: retq 418entry: 419 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 17, i1 false) 420 ret void 421} 422 423define void @memset_19(ptr %a) nounwind { 424; X86-LABEL: memset_19: 425; X86: # %bb.0: # %entry 426; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 427; X86-NEXT: movl $0, 15(%eax) 428; X86-NEXT: movl $0, 12(%eax) 429; X86-NEXT: movl $0, 8(%eax) 430; X86-NEXT: movl $0, 4(%eax) 431; X86-NEXT: movl $0, (%eax) 432; X86-NEXT: retl 433; 434; CORE2-LABEL: memset_19: 435; CORE2: # %bb.0: # %entry 436; CORE2-NEXT: movl $0, 15(%rdi) 437; CORE2-NEXT: movq $0, 8(%rdi) 438; CORE2-NEXT: movq $0, (%rdi) 439; CORE2-NEXT: retq 440; 441; NEHALEM-LABEL: memset_19: 442; NEHALEM: # %bb.0: # %entry 443; NEHALEM-NEXT: xorps %xmm0, %xmm0 444; NEHALEM-NEXT: movups %xmm0, (%rdi) 445; NEHALEM-NEXT: movl $0, 15(%rdi) 446; NEHALEM-NEXT: retq 447; 448; SANDYBRIDGE-LABEL: memset_19: 449; SANDYBRIDGE: # %bb.0: # %entry 450; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 451; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 452; SANDYBRIDGE-NEXT: movl $0, 15(%rdi) 453; SANDYBRIDGE-NEXT: retq 454; 455; SKYLAKE-LABEL: memset_19: 456; SKYLAKE: # %bb.0: # %entry 457; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 458; SKYLAKE-NEXT: vmovups %xmm0, (%rdi) 459; SKYLAKE-NEXT: movl $0, 15(%rdi) 460; SKYLAKE-NEXT: retq 461; 462; KNL-LABEL: memset_19: 463; KNL: # %bb.0: # %entry 464; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 465; KNL-NEXT: vmovups %xmm0, (%rdi) 466; KNL-NEXT: movl $0, 15(%rdi) 467; KNL-NEXT: retq 468entry: 469 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 19, i1 false) 470 ret void 471} 472 473define void @memset_31(ptr %a) nounwind { 474; X86-LABEL: memset_31: 475; X86: # %bb.0: # %entry 476; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 477; X86-NEXT: movl $0, 27(%eax) 478; X86-NEXT: movl $0, 24(%eax) 479; X86-NEXT: movl $0, 20(%eax) 480; X86-NEXT: movl $0, 16(%eax) 481; X86-NEXT: movl $0, 12(%eax) 482; X86-NEXT: movl $0, 8(%eax) 483; X86-NEXT: movl $0, 4(%eax) 484; X86-NEXT: movl $0, (%eax) 485; X86-NEXT: retl 486; 487; CORE2-LABEL: memset_31: 488; CORE2: # %bb.0: # %entry 489; CORE2-NEXT: movq $0, 23(%rdi) 490; CORE2-NEXT: movq $0, 16(%rdi) 491; CORE2-NEXT: movq $0, 8(%rdi) 492; CORE2-NEXT: movq $0, (%rdi) 493; CORE2-NEXT: retq 494; 495; NEHALEM-LABEL: memset_31: 496; NEHALEM: # %bb.0: # %entry 497; NEHALEM-NEXT: xorps %xmm0, %xmm0 498; NEHALEM-NEXT: movups %xmm0, 15(%rdi) 499; NEHALEM-NEXT: movups %xmm0, (%rdi) 500; NEHALEM-NEXT: retq 501; 502; SANDYBRIDGE-LABEL: memset_31: 503; SANDYBRIDGE: # %bb.0: # %entry 504; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 505; SANDYBRIDGE-NEXT: vmovups %xmm0, 15(%rdi) 506; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 507; SANDYBRIDGE-NEXT: retq 508; 509; SKYLAKE-LABEL: memset_31: 510; SKYLAKE: # %bb.0: # %entry 511; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 512; SKYLAKE-NEXT: vmovups %xmm0, 15(%rdi) 513; SKYLAKE-NEXT: vmovups %xmm0, (%rdi) 514; SKYLAKE-NEXT: retq 515; 516; KNL-LABEL: memset_31: 517; KNL: # %bb.0: # %entry 518; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 519; KNL-NEXT: vmovups %xmm0, 15(%rdi) 520; KNL-NEXT: vmovups %xmm0, (%rdi) 521; KNL-NEXT: retq 522entry: 523 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 31, i1 false) 524 ret void 525} 526 527define void @memset_32(ptr %a) nounwind { 528; X86-LABEL: memset_32: 529; X86: # %bb.0: # %entry 530; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 531; X86-NEXT: movl $0, 28(%eax) 532; X86-NEXT: movl $0, 24(%eax) 533; X86-NEXT: movl $0, 20(%eax) 534; X86-NEXT: movl $0, 16(%eax) 535; X86-NEXT: movl $0, 12(%eax) 536; X86-NEXT: movl $0, 8(%eax) 537; X86-NEXT: movl $0, 4(%eax) 538; X86-NEXT: movl $0, (%eax) 539; X86-NEXT: retl 540; 541; CORE2-LABEL: memset_32: 542; CORE2: # %bb.0: # %entry 543; CORE2-NEXT: movq $0, 24(%rdi) 544; CORE2-NEXT: movq $0, 16(%rdi) 545; CORE2-NEXT: movq $0, 8(%rdi) 546; CORE2-NEXT: movq $0, (%rdi) 547; CORE2-NEXT: retq 548; 549; NEHALEM-LABEL: memset_32: 550; NEHALEM: # %bb.0: # %entry 551; NEHALEM-NEXT: xorps %xmm0, %xmm0 552; NEHALEM-NEXT: movups %xmm0, 16(%rdi) 553; NEHALEM-NEXT: movups %xmm0, (%rdi) 554; NEHALEM-NEXT: retq 555; 556; SANDYBRIDGE-LABEL: memset_32: 557; SANDYBRIDGE: # %bb.0: # %entry 558; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 559; SANDYBRIDGE-NEXT: vmovups %xmm0, 16(%rdi) 560; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 561; SANDYBRIDGE-NEXT: retq 562; 563; SKYLAKE-LABEL: memset_32: 564; SKYLAKE: # %bb.0: # %entry 565; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 566; SKYLAKE-NEXT: vmovups %ymm0, (%rdi) 567; SKYLAKE-NEXT: vzeroupper 568; SKYLAKE-NEXT: retq 569; 570; KNL-LABEL: memset_32: 571; KNL: # %bb.0: # %entry 572; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 573; KNL-NEXT: vmovups %ymm0, (%rdi) 574; KNL-NEXT: retq 575entry: 576 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 32, i1 false) 577 ret void 578} 579 580define void @memset_32_align32(ptr %a) nounwind { 581; X86-LABEL: memset_32_align32: 582; X86: # %bb.0: # %entry 583; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 584; X86-NEXT: movl $0, 28(%eax) 585; X86-NEXT: movl $0, 24(%eax) 586; X86-NEXT: movl $0, 20(%eax) 587; X86-NEXT: movl $0, 16(%eax) 588; X86-NEXT: movl $0, 12(%eax) 589; X86-NEXT: movl $0, 8(%eax) 590; X86-NEXT: movl $0, 4(%eax) 591; X86-NEXT: movl $0, (%eax) 592; X86-NEXT: retl 593; 594; CORE2-LABEL: memset_32_align32: 595; CORE2: # %bb.0: # %entry 596; CORE2-NEXT: xorps %xmm0, %xmm0 597; CORE2-NEXT: movaps %xmm0, 16(%rdi) 598; CORE2-NEXT: movaps %xmm0, (%rdi) 599; CORE2-NEXT: retq 600; 601; NEHALEM-LABEL: memset_32_align32: 602; NEHALEM: # %bb.0: # %entry 603; NEHALEM-NEXT: xorps %xmm0, %xmm0 604; NEHALEM-NEXT: movaps %xmm0, 16(%rdi) 605; NEHALEM-NEXT: movaps %xmm0, (%rdi) 606; NEHALEM-NEXT: retq 607; 608; SANDYBRIDGE-LABEL: memset_32_align32: 609; SANDYBRIDGE: # %bb.0: # %entry 610; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 611; SANDYBRIDGE-NEXT: vmovaps %ymm0, (%rdi) 612; SANDYBRIDGE-NEXT: vzeroupper 613; SANDYBRIDGE-NEXT: retq 614; 615; SKYLAKE-LABEL: memset_32_align32: 616; SKYLAKE: # %bb.0: # %entry 617; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 618; SKYLAKE-NEXT: vmovaps %ymm0, (%rdi) 619; SKYLAKE-NEXT: vzeroupper 620; SKYLAKE-NEXT: retq 621; 622; KNL-LABEL: memset_32_align32: 623; KNL: # %bb.0: # %entry 624; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 625; KNL-NEXT: vmovaps %ymm0, (%rdi) 626; KNL-NEXT: retq 627entry: 628 call void @llvm.memset.p0.i64(ptr align 32 %a, i8 0, i64 32, i1 false) 629 ret void 630} 631 632 633define void @memset_35(ptr %a) nounwind { 634; X86-LABEL: memset_35: 635; X86: # %bb.0: # %entry 636; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 637; X86-NEXT: movl $0, 31(%eax) 638; X86-NEXT: movl $0, 28(%eax) 639; X86-NEXT: movl $0, 24(%eax) 640; X86-NEXT: movl $0, 20(%eax) 641; X86-NEXT: movl $0, 16(%eax) 642; X86-NEXT: movl $0, 12(%eax) 643; X86-NEXT: movl $0, 8(%eax) 644; X86-NEXT: movl $0, 4(%eax) 645; X86-NEXT: movl $0, (%eax) 646; X86-NEXT: retl 647; 648; CORE2-LABEL: memset_35: 649; CORE2: # %bb.0: # %entry 650; CORE2-NEXT: movl $0, 31(%rdi) 651; CORE2-NEXT: movq $0, 24(%rdi) 652; CORE2-NEXT: movq $0, 16(%rdi) 653; CORE2-NEXT: movq $0, 8(%rdi) 654; CORE2-NEXT: movq $0, (%rdi) 655; CORE2-NEXT: retq 656; 657; NEHALEM-LABEL: memset_35: 658; NEHALEM: # %bb.0: # %entry 659; NEHALEM-NEXT: xorps %xmm0, %xmm0 660; NEHALEM-NEXT: movups %xmm0, 16(%rdi) 661; NEHALEM-NEXT: movups %xmm0, (%rdi) 662; NEHALEM-NEXT: movl $0, 31(%rdi) 663; NEHALEM-NEXT: retq 664; 665; SANDYBRIDGE-LABEL: memset_35: 666; SANDYBRIDGE: # %bb.0: # %entry 667; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 668; SANDYBRIDGE-NEXT: vmovups %xmm0, 16(%rdi) 669; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 670; SANDYBRIDGE-NEXT: movl $0, 31(%rdi) 671; SANDYBRIDGE-NEXT: retq 672; 673; SKYLAKE-LABEL: memset_35: 674; SKYLAKE: # %bb.0: # %entry 675; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 676; SKYLAKE-NEXT: vmovups %ymm0, (%rdi) 677; SKYLAKE-NEXT: movl $0, 31(%rdi) 678; SKYLAKE-NEXT: vzeroupper 679; SKYLAKE-NEXT: retq 680; 681; KNL-LABEL: memset_35: 682; KNL: # %bb.0: # %entry 683; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 684; KNL-NEXT: vmovups %ymm0, (%rdi) 685; KNL-NEXT: movl $0, 31(%rdi) 686; KNL-NEXT: retq 687entry: 688 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 35, i1 false) 689 ret void 690} 691 692define void @memset_64(ptr %a) nounwind { 693; X86-LABEL: memset_64: 694; X86: # %bb.0: # %entry 695; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 696; X86-NEXT: movl $0, 60(%eax) 697; X86-NEXT: movl $0, 56(%eax) 698; X86-NEXT: movl $0, 52(%eax) 699; X86-NEXT: movl $0, 48(%eax) 700; X86-NEXT: movl $0, 44(%eax) 701; X86-NEXT: movl $0, 40(%eax) 702; X86-NEXT: movl $0, 36(%eax) 703; X86-NEXT: movl $0, 32(%eax) 704; X86-NEXT: movl $0, 28(%eax) 705; X86-NEXT: movl $0, 24(%eax) 706; X86-NEXT: movl $0, 20(%eax) 707; X86-NEXT: movl $0, 16(%eax) 708; X86-NEXT: movl $0, 12(%eax) 709; X86-NEXT: movl $0, 8(%eax) 710; X86-NEXT: movl $0, 4(%eax) 711; X86-NEXT: movl $0, (%eax) 712; X86-NEXT: retl 713; 714; CORE2-LABEL: memset_64: 715; CORE2: # %bb.0: # %entry 716; CORE2-NEXT: movq $0, 56(%rdi) 717; CORE2-NEXT: movq $0, 48(%rdi) 718; CORE2-NEXT: movq $0, 40(%rdi) 719; CORE2-NEXT: movq $0, 32(%rdi) 720; CORE2-NEXT: movq $0, 24(%rdi) 721; CORE2-NEXT: movq $0, 16(%rdi) 722; CORE2-NEXT: movq $0, 8(%rdi) 723; CORE2-NEXT: movq $0, (%rdi) 724; CORE2-NEXT: retq 725; 726; NEHALEM-LABEL: memset_64: 727; NEHALEM: # %bb.0: # %entry 728; NEHALEM-NEXT: xorps %xmm0, %xmm0 729; NEHALEM-NEXT: movups %xmm0, 48(%rdi) 730; NEHALEM-NEXT: movups %xmm0, 32(%rdi) 731; NEHALEM-NEXT: movups %xmm0, 16(%rdi) 732; NEHALEM-NEXT: movups %xmm0, (%rdi) 733; NEHALEM-NEXT: retq 734; 735; SANDYBRIDGE-LABEL: memset_64: 736; SANDYBRIDGE: # %bb.0: # %entry 737; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 738; SANDYBRIDGE-NEXT: vmovups %xmm0, 16(%rdi) 739; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi) 740; SANDYBRIDGE-NEXT: vmovups %xmm0, 48(%rdi) 741; SANDYBRIDGE-NEXT: vmovups %xmm0, 32(%rdi) 742; SANDYBRIDGE-NEXT: retq 743; 744; SKYLAKE-LABEL: memset_64: 745; SKYLAKE: # %bb.0: # %entry 746; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 747; SKYLAKE-NEXT: vmovups %ymm0, 32(%rdi) 748; SKYLAKE-NEXT: vmovups %ymm0, (%rdi) 749; SKYLAKE-NEXT: vzeroupper 750; SKYLAKE-NEXT: retq 751; 752; KNL-LABEL: memset_64: 753; KNL: # %bb.0: # %entry 754; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 755; KNL-NEXT: vmovups %zmm0, (%rdi) 756; KNL-NEXT: retq 757entry: 758 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 64, i1 false) 759 ret void 760} 761 762define void @memset_64_align64(ptr %a) nounwind { 763; X86-LABEL: memset_64_align64: 764; X86: # %bb.0: # %entry 765; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 766; X86-NEXT: movl $0, 60(%eax) 767; X86-NEXT: movl $0, 56(%eax) 768; X86-NEXT: movl $0, 52(%eax) 769; X86-NEXT: movl $0, 48(%eax) 770; X86-NEXT: movl $0, 44(%eax) 771; X86-NEXT: movl $0, 40(%eax) 772; X86-NEXT: movl $0, 36(%eax) 773; X86-NEXT: movl $0, 32(%eax) 774; X86-NEXT: movl $0, 28(%eax) 775; X86-NEXT: movl $0, 24(%eax) 776; X86-NEXT: movl $0, 20(%eax) 777; X86-NEXT: movl $0, 16(%eax) 778; X86-NEXT: movl $0, 12(%eax) 779; X86-NEXT: movl $0, 8(%eax) 780; X86-NEXT: movl $0, 4(%eax) 781; X86-NEXT: movl $0, (%eax) 782; X86-NEXT: retl 783; 784; CORE2-LABEL: memset_64_align64: 785; CORE2: # %bb.0: # %entry 786; CORE2-NEXT: xorps %xmm0, %xmm0 787; CORE2-NEXT: movaps %xmm0, 48(%rdi) 788; CORE2-NEXT: movaps %xmm0, 32(%rdi) 789; CORE2-NEXT: movaps %xmm0, 16(%rdi) 790; CORE2-NEXT: movaps %xmm0, (%rdi) 791; CORE2-NEXT: retq 792; 793; NEHALEM-LABEL: memset_64_align64: 794; NEHALEM: # %bb.0: # %entry 795; NEHALEM-NEXT: xorps %xmm0, %xmm0 796; NEHALEM-NEXT: movaps %xmm0, 48(%rdi) 797; NEHALEM-NEXT: movaps %xmm0, 32(%rdi) 798; NEHALEM-NEXT: movaps %xmm0, 16(%rdi) 799; NEHALEM-NEXT: movaps %xmm0, (%rdi) 800; NEHALEM-NEXT: retq 801; 802; SANDYBRIDGE-LABEL: memset_64_align64: 803; SANDYBRIDGE: # %bb.0: # %entry 804; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0 805; SANDYBRIDGE-NEXT: vmovaps %ymm0, 32(%rdi) 806; SANDYBRIDGE-NEXT: vmovaps %ymm0, (%rdi) 807; SANDYBRIDGE-NEXT: vzeroupper 808; SANDYBRIDGE-NEXT: retq 809; 810; SKYLAKE-LABEL: memset_64_align64: 811; SKYLAKE: # %bb.0: # %entry 812; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0 813; SKYLAKE-NEXT: vmovaps %ymm0, 32(%rdi) 814; SKYLAKE-NEXT: vmovaps %ymm0, (%rdi) 815; SKYLAKE-NEXT: vzeroupper 816; SKYLAKE-NEXT: retq 817; 818; KNL-LABEL: memset_64_align64: 819; KNL: # %bb.0: # %entry 820; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0 821; KNL-NEXT: vmovaps %zmm0, (%rdi) 822; KNL-NEXT: retq 823entry: 824 call void @llvm.memset.p0.i64(ptr align 64 %a, i8 0, i64 64, i1 false) 825 ret void 826} 827