827 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-linux | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=core2 | FileCheck %s --check-prefix=CORE24; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=nehalem | FileCheck %s --check-prefix=NEHALEM5; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=sandybridge | FileCheck %s --check-prefix=SANDYBRIDGE6; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=skylake | FileCheck %s --check-prefix=SKYLAKE7; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=knl | FileCheck %s --check-prefix=KNL8 9 10declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind11 12define void @memset_0(ptr %a) nounwind {13; X86-LABEL: memset_0:14; X86: # %bb.0: # %entry15; X86-NEXT: retl16;17; CORE2-LABEL: memset_0:18; CORE2: # %bb.0: # %entry19; CORE2-NEXT: retq20;21; NEHALEM-LABEL: memset_0:22; NEHALEM: # %bb.0: # %entry23; NEHALEM-NEXT: retq24;25; SANDYBRIDGE-LABEL: memset_0:26; SANDYBRIDGE: # %bb.0: # %entry27; SANDYBRIDGE-NEXT: retq28;29; SKYLAKE-LABEL: memset_0:30; SKYLAKE: # %bb.0: # %entry31; SKYLAKE-NEXT: retq32;33; KNL-LABEL: memset_0:34; KNL: # %bb.0: # %entry35; KNL-NEXT: retq36entry:37 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 0, i1 false)38 ret void39}40 41define void @memset_4(ptr %a) nounwind {42; X86-LABEL: memset_4:43; X86: # %bb.0: # %entry44; X86-NEXT: movl {{[0-9]+}}(%esp), %eax45; X86-NEXT: movl $0, (%eax)46; X86-NEXT: retl47;48; CORE2-LABEL: memset_4:49; CORE2: # %bb.0: # %entry50; CORE2-NEXT: movl $0, (%rdi)51; CORE2-NEXT: retq52;53; NEHALEM-LABEL: memset_4:54; NEHALEM: # %bb.0: # %entry55; NEHALEM-NEXT: movl $0, (%rdi)56; NEHALEM-NEXT: retq57;58; SANDYBRIDGE-LABEL: memset_4:59; SANDYBRIDGE: # %bb.0: # %entry60; SANDYBRIDGE-NEXT: movl $0, (%rdi)61; SANDYBRIDGE-NEXT: retq62;63; SKYLAKE-LABEL: memset_4:64; SKYLAKE: # %bb.0: # %entry65; SKYLAKE-NEXT: movl $0, (%rdi)66; SKYLAKE-NEXT: retq67;68; KNL-LABEL: memset_4:69; KNL: # %bb.0: # %entry70; KNL-NEXT: movl $0, (%rdi)71; KNL-NEXT: retq72entry:73 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 4, i1 false)74 ret void75}76 77define void @memset_5(ptr %a) nounwind {78; X86-LABEL: memset_5:79; X86: # %bb.0: # %entry80; X86-NEXT: movl {{[0-9]+}}(%esp), %eax81; X86-NEXT: movb $0, 4(%eax)82; X86-NEXT: movl $0, (%eax)83; X86-NEXT: retl84;85; CORE2-LABEL: memset_5:86; CORE2: # %bb.0: # %entry87; CORE2-NEXT: movb $0, 4(%rdi)88; CORE2-NEXT: movl $0, (%rdi)89; CORE2-NEXT: retq90;91; NEHALEM-LABEL: memset_5:92; NEHALEM: # %bb.0: # %entry93; NEHALEM-NEXT: movb $0, 4(%rdi)94; NEHALEM-NEXT: movl $0, (%rdi)95; NEHALEM-NEXT: retq96;97; SANDYBRIDGE-LABEL: memset_5:98; SANDYBRIDGE: # %bb.0: # %entry99; SANDYBRIDGE-NEXT: movb $0, 4(%rdi)100; SANDYBRIDGE-NEXT: movl $0, (%rdi)101; SANDYBRIDGE-NEXT: retq102;103; SKYLAKE-LABEL: memset_5:104; SKYLAKE: # %bb.0: # %entry105; SKYLAKE-NEXT: movb $0, 4(%rdi)106; SKYLAKE-NEXT: movl $0, (%rdi)107; SKYLAKE-NEXT: retq108;109; KNL-LABEL: memset_5:110; KNL: # %bb.0: # %entry111; KNL-NEXT: movb $0, 4(%rdi)112; KNL-NEXT: movl $0, (%rdi)113; KNL-NEXT: retq114entry:115 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 5, i1 false)116 ret void117}118 119define void @memset_7(ptr %a) nounwind {120; X86-LABEL: memset_7:121; X86: # %bb.0: # %entry122; X86-NEXT: movl {{[0-9]+}}(%esp), %eax123; X86-NEXT: movl $0, 3(%eax)124; X86-NEXT: movl $0, (%eax)125; X86-NEXT: retl126;127; CORE2-LABEL: memset_7:128; CORE2: # %bb.0: # %entry129; CORE2-NEXT: movl $0, 3(%rdi)130; CORE2-NEXT: movl $0, (%rdi)131; CORE2-NEXT: retq132;133; NEHALEM-LABEL: memset_7:134; NEHALEM: # %bb.0: # %entry135; NEHALEM-NEXT: movl $0, 3(%rdi)136; NEHALEM-NEXT: movl $0, (%rdi)137; NEHALEM-NEXT: retq138;139; SANDYBRIDGE-LABEL: memset_7:140; SANDYBRIDGE: # %bb.0: # %entry141; SANDYBRIDGE-NEXT: movl $0, 3(%rdi)142; SANDYBRIDGE-NEXT: movl $0, (%rdi)143; SANDYBRIDGE-NEXT: retq144;145; SKYLAKE-LABEL: memset_7:146; SKYLAKE: # %bb.0: # %entry147; SKYLAKE-NEXT: movl $0, 3(%rdi)148; SKYLAKE-NEXT: movl $0, (%rdi)149; SKYLAKE-NEXT: retq150;151; KNL-LABEL: memset_7:152; KNL: # %bb.0: # %entry153; KNL-NEXT: movl $0, 3(%rdi)154; KNL-NEXT: movl $0, (%rdi)155; KNL-NEXT: retq156entry:157 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 7, i1 false)158 ret void159}160 161define void @memset_8(ptr %a) nounwind {162; X86-LABEL: memset_8:163; X86: # %bb.0: # %entry164; X86-NEXT: movl {{[0-9]+}}(%esp), %eax165; X86-NEXT: movl $0, 4(%eax)166; X86-NEXT: movl $0, (%eax)167; X86-NEXT: retl168;169; CORE2-LABEL: memset_8:170; CORE2: # %bb.0: # %entry171; CORE2-NEXT: movq $0, (%rdi)172; CORE2-NEXT: retq173;174; NEHALEM-LABEL: memset_8:175; NEHALEM: # %bb.0: # %entry176; NEHALEM-NEXT: movq $0, (%rdi)177; NEHALEM-NEXT: retq178;179; SANDYBRIDGE-LABEL: memset_8:180; SANDYBRIDGE: # %bb.0: # %entry181; SANDYBRIDGE-NEXT: movq $0, (%rdi)182; SANDYBRIDGE-NEXT: retq183;184; SKYLAKE-LABEL: memset_8:185; SKYLAKE: # %bb.0: # %entry186; SKYLAKE-NEXT: movq $0, (%rdi)187; SKYLAKE-NEXT: retq188;189; KNL-LABEL: memset_8:190; KNL: # %bb.0: # %entry191; KNL-NEXT: movq $0, (%rdi)192; KNL-NEXT: retq193entry:194 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 8, i1 false)195 ret void196}197 198define void @memset_11(ptr %a) nounwind {199; X86-LABEL: memset_11:200; X86: # %bb.0: # %entry201; X86-NEXT: movl {{[0-9]+}}(%esp), %eax202; X86-NEXT: movl $0, 7(%eax)203; X86-NEXT: movl $0, 4(%eax)204; X86-NEXT: movl $0, (%eax)205; X86-NEXT: retl206;207; CORE2-LABEL: memset_11:208; CORE2: # %bb.0: # %entry209; CORE2-NEXT: movl $0, 7(%rdi)210; CORE2-NEXT: movq $0, (%rdi)211; CORE2-NEXT: retq212;213; NEHALEM-LABEL: memset_11:214; NEHALEM: # %bb.0: # %entry215; NEHALEM-NEXT: movl $0, 7(%rdi)216; NEHALEM-NEXT: movq $0, (%rdi)217; NEHALEM-NEXT: retq218;219; SANDYBRIDGE-LABEL: memset_11:220; SANDYBRIDGE: # %bb.0: # %entry221; SANDYBRIDGE-NEXT: movl $0, 7(%rdi)222; SANDYBRIDGE-NEXT: movq $0, (%rdi)223; SANDYBRIDGE-NEXT: retq224;225; SKYLAKE-LABEL: memset_11:226; SKYLAKE: # %bb.0: # %entry227; SKYLAKE-NEXT: movl $0, 7(%rdi)228; SKYLAKE-NEXT: movq $0, (%rdi)229; SKYLAKE-NEXT: retq230;231; KNL-LABEL: memset_11:232; KNL: # %bb.0: # %entry233; KNL-NEXT: movl $0, 7(%rdi)234; KNL-NEXT: movq $0, (%rdi)235; KNL-NEXT: retq236entry:237 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 11, i1 false)238 ret void239}240 241define void @memset_13(ptr %a) nounwind {242; X86-LABEL: memset_13:243; X86: # %bb.0: # %entry244; X86-NEXT: movl {{[0-9]+}}(%esp), %eax245; 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: retl250;251; CORE2-LABEL: memset_13:252; CORE2: # %bb.0: # %entry253; CORE2-NEXT: movq $0, 5(%rdi)254; CORE2-NEXT: movq $0, (%rdi)255; CORE2-NEXT: retq256;257; NEHALEM-LABEL: memset_13:258; NEHALEM: # %bb.0: # %entry259; NEHALEM-NEXT: movq $0, 5(%rdi)260; NEHALEM-NEXT: movq $0, (%rdi)261; NEHALEM-NEXT: retq262;263; SANDYBRIDGE-LABEL: memset_13:264; SANDYBRIDGE: # %bb.0: # %entry265; SANDYBRIDGE-NEXT: movq $0, 5(%rdi)266; SANDYBRIDGE-NEXT: movq $0, (%rdi)267; SANDYBRIDGE-NEXT: retq268;269; SKYLAKE-LABEL: memset_13:270; SKYLAKE: # %bb.0: # %entry271; SKYLAKE-NEXT: movq $0, 5(%rdi)272; SKYLAKE-NEXT: movq $0, (%rdi)273; SKYLAKE-NEXT: retq274;275; KNL-LABEL: memset_13:276; KNL: # %bb.0: # %entry277; KNL-NEXT: movq $0, 5(%rdi)278; KNL-NEXT: movq $0, (%rdi)279; KNL-NEXT: retq280entry:281 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 13, i1 false)282 ret void283}284 285define void @memset_15(ptr %a) nounwind {286; X86-LABEL: memset_15:287; X86: # %bb.0: # %entry288; X86-NEXT: movl {{[0-9]+}}(%esp), %eax289; 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: retl294;295; CORE2-LABEL: memset_15:296; CORE2: # %bb.0: # %entry297; CORE2-NEXT: movq $0, 7(%rdi)298; CORE2-NEXT: movq $0, (%rdi)299; CORE2-NEXT: retq300;301; NEHALEM-LABEL: memset_15:302; NEHALEM: # %bb.0: # %entry303; NEHALEM-NEXT: movq $0, 7(%rdi)304; NEHALEM-NEXT: movq $0, (%rdi)305; NEHALEM-NEXT: retq306;307; SANDYBRIDGE-LABEL: memset_15:308; SANDYBRIDGE: # %bb.0: # %entry309; SANDYBRIDGE-NEXT: movq $0, 7(%rdi)310; SANDYBRIDGE-NEXT: movq $0, (%rdi)311; SANDYBRIDGE-NEXT: retq312;313; SKYLAKE-LABEL: memset_15:314; SKYLAKE: # %bb.0: # %entry315; SKYLAKE-NEXT: movq $0, 7(%rdi)316; SKYLAKE-NEXT: movq $0, (%rdi)317; SKYLAKE-NEXT: retq318;319; KNL-LABEL: memset_15:320; KNL: # %bb.0: # %entry321; KNL-NEXT: movq $0, 7(%rdi)322; KNL-NEXT: movq $0, (%rdi)323; KNL-NEXT: retq324entry:325 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 15, i1 false)326 ret void327}328 329define void @memset_16(ptr %a) nounwind {330; X86-LABEL: memset_16:331; X86: # %bb.0: # %entry332; X86-NEXT: movl {{[0-9]+}}(%esp), %eax333; 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: retl338;339; CORE2-LABEL: memset_16:340; CORE2: # %bb.0: # %entry341; CORE2-NEXT: movq $0, 8(%rdi)342; CORE2-NEXT: movq $0, (%rdi)343; CORE2-NEXT: retq344;345; NEHALEM-LABEL: memset_16:346; NEHALEM: # %bb.0: # %entry347; NEHALEM-NEXT: xorps %xmm0, %xmm0348; NEHALEM-NEXT: movups %xmm0, (%rdi)349; NEHALEM-NEXT: retq350;351; SANDYBRIDGE-LABEL: memset_16:352; SANDYBRIDGE: # %bb.0: # %entry353; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0354; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)355; SANDYBRIDGE-NEXT: retq356;357; SKYLAKE-LABEL: memset_16:358; SKYLAKE: # %bb.0: # %entry359; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0360; SKYLAKE-NEXT: vmovups %xmm0, (%rdi)361; SKYLAKE-NEXT: retq362;363; KNL-LABEL: memset_16:364; KNL: # %bb.0: # %entry365; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0366; KNL-NEXT: vmovups %xmm0, (%rdi)367; KNL-NEXT: retq368entry:369 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 16, i1 false)370 ret void371}372 373define void @memset_17(ptr %a) nounwind {374; X86-LABEL: memset_17:375; X86: # %bb.0: # %entry376; X86-NEXT: movl {{[0-9]+}}(%esp), %eax377; 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: retl383;384; CORE2-LABEL: memset_17:385; CORE2: # %bb.0: # %entry386; CORE2-NEXT: movb $0, 16(%rdi)387; CORE2-NEXT: movq $0, 8(%rdi)388; CORE2-NEXT: movq $0, (%rdi)389; CORE2-NEXT: retq390;391; NEHALEM-LABEL: memset_17:392; NEHALEM: # %bb.0: # %entry393; NEHALEM-NEXT: xorps %xmm0, %xmm0394; NEHALEM-NEXT: movups %xmm0, (%rdi)395; NEHALEM-NEXT: movb $0, 16(%rdi)396; NEHALEM-NEXT: retq397;398; SANDYBRIDGE-LABEL: memset_17:399; SANDYBRIDGE: # %bb.0: # %entry400; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0401; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)402; SANDYBRIDGE-NEXT: movb $0, 16(%rdi)403; SANDYBRIDGE-NEXT: retq404;405; SKYLAKE-LABEL: memset_17:406; SKYLAKE: # %bb.0: # %entry407; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0408; SKYLAKE-NEXT: vmovups %xmm0, (%rdi)409; SKYLAKE-NEXT: movb $0, 16(%rdi)410; SKYLAKE-NEXT: retq411;412; KNL-LABEL: memset_17:413; KNL: # %bb.0: # %entry414; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0415; KNL-NEXT: vmovups %xmm0, (%rdi)416; KNL-NEXT: movb $0, 16(%rdi)417; KNL-NEXT: retq418entry:419 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 17, i1 false)420 ret void421}422 423define void @memset_19(ptr %a) nounwind {424; X86-LABEL: memset_19:425; X86: # %bb.0: # %entry426; X86-NEXT: movl {{[0-9]+}}(%esp), %eax427; 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: retl433;434; CORE2-LABEL: memset_19:435; CORE2: # %bb.0: # %entry436; CORE2-NEXT: movl $0, 15(%rdi)437; CORE2-NEXT: movq $0, 8(%rdi)438; CORE2-NEXT: movq $0, (%rdi)439; CORE2-NEXT: retq440;441; NEHALEM-LABEL: memset_19:442; NEHALEM: # %bb.0: # %entry443; NEHALEM-NEXT: xorps %xmm0, %xmm0444; NEHALEM-NEXT: movups %xmm0, (%rdi)445; NEHALEM-NEXT: movl $0, 15(%rdi)446; NEHALEM-NEXT: retq447;448; SANDYBRIDGE-LABEL: memset_19:449; SANDYBRIDGE: # %bb.0: # %entry450; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0451; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)452; SANDYBRIDGE-NEXT: movl $0, 15(%rdi)453; SANDYBRIDGE-NEXT: retq454;455; SKYLAKE-LABEL: memset_19:456; SKYLAKE: # %bb.0: # %entry457; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0458; SKYLAKE-NEXT: vmovups %xmm0, (%rdi)459; SKYLAKE-NEXT: movl $0, 15(%rdi)460; SKYLAKE-NEXT: retq461;462; KNL-LABEL: memset_19:463; KNL: # %bb.0: # %entry464; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0465; KNL-NEXT: vmovups %xmm0, (%rdi)466; KNL-NEXT: movl $0, 15(%rdi)467; KNL-NEXT: retq468entry:469 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 19, i1 false)470 ret void471}472 473define void @memset_31(ptr %a) nounwind {474; X86-LABEL: memset_31:475; X86: # %bb.0: # %entry476; X86-NEXT: movl {{[0-9]+}}(%esp), %eax477; 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: retl486;487; CORE2-LABEL: memset_31:488; CORE2: # %bb.0: # %entry489; 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: retq494;495; NEHALEM-LABEL: memset_31:496; NEHALEM: # %bb.0: # %entry497; NEHALEM-NEXT: xorps %xmm0, %xmm0498; NEHALEM-NEXT: movups %xmm0, 15(%rdi)499; NEHALEM-NEXT: movups %xmm0, (%rdi)500; NEHALEM-NEXT: retq501;502; SANDYBRIDGE-LABEL: memset_31:503; SANDYBRIDGE: # %bb.0: # %entry504; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0505; SANDYBRIDGE-NEXT: vmovups %xmm0, 15(%rdi)506; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)507; SANDYBRIDGE-NEXT: retq508;509; SKYLAKE-LABEL: memset_31:510; SKYLAKE: # %bb.0: # %entry511; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0512; SKYLAKE-NEXT: vmovups %xmm0, 15(%rdi)513; SKYLAKE-NEXT: vmovups %xmm0, (%rdi)514; SKYLAKE-NEXT: retq515;516; KNL-LABEL: memset_31:517; KNL: # %bb.0: # %entry518; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0519; KNL-NEXT: vmovups %xmm0, 15(%rdi)520; KNL-NEXT: vmovups %xmm0, (%rdi)521; KNL-NEXT: retq522entry:523 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 31, i1 false)524 ret void525}526 527define void @memset_32(ptr %a) nounwind {528; X86-LABEL: memset_32:529; X86: # %bb.0: # %entry530; X86-NEXT: movl {{[0-9]+}}(%esp), %eax531; 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: retl540;541; CORE2-LABEL: memset_32:542; CORE2: # %bb.0: # %entry543; 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: retq548;549; NEHALEM-LABEL: memset_32:550; NEHALEM: # %bb.0: # %entry551; NEHALEM-NEXT: xorps %xmm0, %xmm0552; NEHALEM-NEXT: movups %xmm0, 16(%rdi)553; NEHALEM-NEXT: movups %xmm0, (%rdi)554; NEHALEM-NEXT: retq555;556; SANDYBRIDGE-LABEL: memset_32:557; SANDYBRIDGE: # %bb.0: # %entry558; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0559; SANDYBRIDGE-NEXT: vmovups %xmm0, 16(%rdi)560; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)561; SANDYBRIDGE-NEXT: retq562;563; SKYLAKE-LABEL: memset_32:564; SKYLAKE: # %bb.0: # %entry565; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0566; SKYLAKE-NEXT: vmovups %ymm0, (%rdi)567; SKYLAKE-NEXT: vzeroupper568; SKYLAKE-NEXT: retq569;570; KNL-LABEL: memset_32:571; KNL: # %bb.0: # %entry572; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0573; KNL-NEXT: vmovups %ymm0, (%rdi)574; KNL-NEXT: retq575entry:576 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 32, i1 false)577 ret void578}579 580define void @memset_32_align32(ptr %a) nounwind {581; X86-LABEL: memset_32_align32:582; X86: # %bb.0: # %entry583; X86-NEXT: movl {{[0-9]+}}(%esp), %eax584; 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: retl593;594; CORE2-LABEL: memset_32_align32:595; CORE2: # %bb.0: # %entry596; CORE2-NEXT: xorps %xmm0, %xmm0597; CORE2-NEXT: movaps %xmm0, 16(%rdi)598; CORE2-NEXT: movaps %xmm0, (%rdi)599; CORE2-NEXT: retq600;601; NEHALEM-LABEL: memset_32_align32:602; NEHALEM: # %bb.0: # %entry603; NEHALEM-NEXT: xorps %xmm0, %xmm0604; NEHALEM-NEXT: movaps %xmm0, 16(%rdi)605; NEHALEM-NEXT: movaps %xmm0, (%rdi)606; NEHALEM-NEXT: retq607;608; SANDYBRIDGE-LABEL: memset_32_align32:609; SANDYBRIDGE: # %bb.0: # %entry610; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0611; SANDYBRIDGE-NEXT: vmovaps %ymm0, (%rdi)612; SANDYBRIDGE-NEXT: vzeroupper613; SANDYBRIDGE-NEXT: retq614;615; SKYLAKE-LABEL: memset_32_align32:616; SKYLAKE: # %bb.0: # %entry617; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0618; SKYLAKE-NEXT: vmovaps %ymm0, (%rdi)619; SKYLAKE-NEXT: vzeroupper620; SKYLAKE-NEXT: retq621;622; KNL-LABEL: memset_32_align32:623; KNL: # %bb.0: # %entry624; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0625; KNL-NEXT: vmovaps %ymm0, (%rdi)626; KNL-NEXT: retq627entry:628 call void @llvm.memset.p0.i64(ptr align 32 %a, i8 0, i64 32, i1 false)629 ret void630}631 632 633define void @memset_35(ptr %a) nounwind {634; X86-LABEL: memset_35:635; X86: # %bb.0: # %entry636; X86-NEXT: movl {{[0-9]+}}(%esp), %eax637; 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: retl647;648; CORE2-LABEL: memset_35:649; CORE2: # %bb.0: # %entry650; 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: retq656;657; NEHALEM-LABEL: memset_35:658; NEHALEM: # %bb.0: # %entry659; NEHALEM-NEXT: xorps %xmm0, %xmm0660; NEHALEM-NEXT: movups %xmm0, 16(%rdi)661; NEHALEM-NEXT: movups %xmm0, (%rdi)662; NEHALEM-NEXT: movl $0, 31(%rdi)663; NEHALEM-NEXT: retq664;665; SANDYBRIDGE-LABEL: memset_35:666; SANDYBRIDGE: # %bb.0: # %entry667; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0668; SANDYBRIDGE-NEXT: vmovups %xmm0, 16(%rdi)669; SANDYBRIDGE-NEXT: vmovups %xmm0, (%rdi)670; SANDYBRIDGE-NEXT: movl $0, 31(%rdi)671; SANDYBRIDGE-NEXT: retq672;673; SKYLAKE-LABEL: memset_35:674; SKYLAKE: # %bb.0: # %entry675; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0676; SKYLAKE-NEXT: vmovups %ymm0, (%rdi)677; SKYLAKE-NEXT: movl $0, 31(%rdi)678; SKYLAKE-NEXT: vzeroupper679; SKYLAKE-NEXT: retq680;681; KNL-LABEL: memset_35:682; KNL: # %bb.0: # %entry683; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0684; KNL-NEXT: vmovups %ymm0, (%rdi)685; KNL-NEXT: movl $0, 31(%rdi)686; KNL-NEXT: retq687entry:688 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 35, i1 false)689 ret void690}691 692define void @memset_64(ptr %a) nounwind {693; X86-LABEL: memset_64:694; X86: # %bb.0: # %entry695; X86-NEXT: movl {{[0-9]+}}(%esp), %eax696; 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: retl713;714; CORE2-LABEL: memset_64:715; CORE2: # %bb.0: # %entry716; 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: retq725;726; NEHALEM-LABEL: memset_64:727; NEHALEM: # %bb.0: # %entry728; NEHALEM-NEXT: xorps %xmm0, %xmm0729; 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: retq734;735; SANDYBRIDGE-LABEL: memset_64:736; SANDYBRIDGE: # %bb.0: # %entry737; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0738; 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: retq743;744; SKYLAKE-LABEL: memset_64:745; SKYLAKE: # %bb.0: # %entry746; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0747; SKYLAKE-NEXT: vmovups %ymm0, 32(%rdi)748; SKYLAKE-NEXT: vmovups %ymm0, (%rdi)749; SKYLAKE-NEXT: vzeroupper750; SKYLAKE-NEXT: retq751;752; KNL-LABEL: memset_64:753; KNL: # %bb.0: # %entry754; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0755; KNL-NEXT: vmovups %zmm0, (%rdi)756; KNL-NEXT: retq757entry:758 call void @llvm.memset.p0.i64(ptr %a, i8 0, i64 64, i1 false)759 ret void760}761 762define void @memset_64_align64(ptr %a) nounwind {763; X86-LABEL: memset_64_align64:764; X86: # %bb.0: # %entry765; X86-NEXT: movl {{[0-9]+}}(%esp), %eax766; 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: retl783;784; CORE2-LABEL: memset_64_align64:785; CORE2: # %bb.0: # %entry786; CORE2-NEXT: xorps %xmm0, %xmm0787; 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: retq792;793; NEHALEM-LABEL: memset_64_align64:794; NEHALEM: # %bb.0: # %entry795; NEHALEM-NEXT: xorps %xmm0, %xmm0796; 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: retq801;802; SANDYBRIDGE-LABEL: memset_64_align64:803; SANDYBRIDGE: # %bb.0: # %entry804; SANDYBRIDGE-NEXT: vxorps %xmm0, %xmm0, %xmm0805; SANDYBRIDGE-NEXT: vmovaps %ymm0, 32(%rdi)806; SANDYBRIDGE-NEXT: vmovaps %ymm0, (%rdi)807; SANDYBRIDGE-NEXT: vzeroupper808; SANDYBRIDGE-NEXT: retq809;810; SKYLAKE-LABEL: memset_64_align64:811; SKYLAKE: # %bb.0: # %entry812; SKYLAKE-NEXT: vxorps %xmm0, %xmm0, %xmm0813; SKYLAKE-NEXT: vmovaps %ymm0, 32(%rdi)814; SKYLAKE-NEXT: vmovaps %ymm0, (%rdi)815; SKYLAKE-NEXT: vzeroupper816; SKYLAKE-NEXT: retq817;818; KNL-LABEL: memset_64_align64:819; KNL: # %bb.0: # %entry820; KNL-NEXT: vxorps %xmm0, %xmm0, %xmm0821; KNL-NEXT: vmovaps %zmm0, (%rdi)822; KNL-NEXT: retq823entry:824 call void @llvm.memset.p0.i64(ptr align 64 %a, i8 0, i64 64, i1 false)825 ret void826}827