297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=-neon | FileCheck %s --check-prefixes=ALL,GPR3; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -mattr=neon | FileCheck %s --check-prefixes=ALL,NEON4 5declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind6declare void @llvm.memset.inline.p0.i64(ptr nocapture, i8, i64, i1) nounwind7 8; /////////////////////////////////////////////////////////////////////////////9 10define void @memset_1(ptr %a, i8 %value) nounwind {11; ALL-LABEL: memset_1:12; ALL: // %bb.0:13; ALL-NEXT: strb w1, [x0]14; ALL-NEXT: ret15 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 1, i1 0)16 ret void17}18 19define void @memset_2(ptr %a, i8 %value) nounwind {20; ALL-LABEL: memset_2:21; ALL: // %bb.0:22; ALL-NEXT: bfi w1, w1, #8, #2423; ALL-NEXT: strh w1, [x0]24; ALL-NEXT: ret25 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 2, i1 0)26 ret void27}28 29define void @memset_4(ptr %a, i8 %value) nounwind {30; ALL-LABEL: memset_4:31; ALL: // %bb.0:32; ALL-NEXT: mov w8, #1684300933; ALL-NEXT: and w9, w1, #0xff34; ALL-NEXT: mul w8, w9, w835; ALL-NEXT: str w8, [x0]36; ALL-NEXT: ret37 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 4, i1 0)38 ret void39}40 41define void @memset_8(ptr %a, i8 %value) nounwind {42; ALL-LABEL: memset_8:43; ALL: // %bb.0:44; ALL-NEXT: // kill: def $w1 killed $w1 def $x145; ALL-NEXT: mov x8, #7234017283807667346; ALL-NEXT: and x9, x1, #0xff47; ALL-NEXT: mul x8, x9, x848; ALL-NEXT: str x8, [x0]49; ALL-NEXT: ret50 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 8, i1 0)51 ret void52}53 54define void @memset_16(ptr %a, i8 %value) nounwind {55; ALL-LABEL: memset_16:56; ALL: // %bb.0:57; ALL-NEXT: // kill: def $w1 killed $w1 def $x158; ALL-NEXT: mov x8, #7234017283807667359; ALL-NEXT: and x9, x1, #0xff60; ALL-NEXT: mul x8, x9, x861; ALL-NEXT: stp x8, x8, [x0]62; ALL-NEXT: ret63 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 16, i1 0)64 ret void65}66 67define void @memset_32(ptr %a, i8 %value) nounwind {68; GPR-LABEL: memset_32:69; GPR: // %bb.0:70; GPR-NEXT: // kill: def $w1 killed $w1 def $x171; GPR-NEXT: mov x8, #7234017283807667372; GPR-NEXT: and x9, x1, #0xff73; GPR-NEXT: mul x8, x9, x874; GPR-NEXT: stp x8, x8, [x0, #16]75; GPR-NEXT: stp x8, x8, [x0]76; GPR-NEXT: ret77;78; NEON-LABEL: memset_32:79; NEON: // %bb.0:80; NEON-NEXT: dup v0.16b, w181; NEON-NEXT: stp q0, q0, [x0]82; NEON-NEXT: ret83 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 32, i1 0)84 ret void85}86 87define void @memset_64(ptr %a, i8 %value) nounwind {88; GPR-LABEL: memset_64:89; GPR: // %bb.0:90; GPR-NEXT: // kill: def $w1 killed $w1 def $x191; GPR-NEXT: mov x8, #7234017283807667392; GPR-NEXT: and x9, x1, #0xff93; GPR-NEXT: mul x8, x9, x894; GPR-NEXT: stp x8, x8, [x0, #48]95; GPR-NEXT: stp x8, x8, [x0, #32]96; GPR-NEXT: stp x8, x8, [x0, #16]97; GPR-NEXT: stp x8, x8, [x0]98; GPR-NEXT: ret99;100; NEON-LABEL: memset_64:101; NEON: // %bb.0:102; NEON-NEXT: dup v0.16b, w1103; NEON-NEXT: stp q0, q0, [x0]104; NEON-NEXT: stp q0, q0, [x0, #32]105; NEON-NEXT: ret106 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 64, i1 0)107 ret void108}109 110; /////////////////////////////////////////////////////////////////////////////111 112define void @aligned_memset_16(ptr align 16 %a, i8 %value) nounwind {113; ALL-LABEL: aligned_memset_16:114; ALL: // %bb.0:115; ALL-NEXT: // kill: def $w1 killed $w1 def $x1116; ALL-NEXT: mov x8, #72340172838076673117; ALL-NEXT: and x9, x1, #0xff118; ALL-NEXT: mul x8, x9, x8119; ALL-NEXT: stp x8, x8, [x0]120; ALL-NEXT: ret121 tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 %value, i64 16, i1 0)122 ret void123}124 125define void @aligned_memset_32(ptr align 32 %a, i8 %value) nounwind {126; GPR-LABEL: aligned_memset_32:127; GPR: // %bb.0:128; GPR-NEXT: // kill: def $w1 killed $w1 def $x1129; GPR-NEXT: mov x8, #72340172838076673130; GPR-NEXT: and x9, x1, #0xff131; GPR-NEXT: mul x8, x9, x8132; GPR-NEXT: stp x8, x8, [x0, #16]133; GPR-NEXT: stp x8, x8, [x0]134; GPR-NEXT: ret135;136; NEON-LABEL: aligned_memset_32:137; NEON: // %bb.0:138; NEON-NEXT: dup v0.16b, w1139; NEON-NEXT: stp q0, q0, [x0]140; NEON-NEXT: ret141 tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 %value, i64 32, i1 0)142 ret void143}144 145define void @aligned_memset_64(ptr align 64 %a, i8 %value) nounwind {146; GPR-LABEL: aligned_memset_64:147; GPR: // %bb.0:148; GPR-NEXT: // kill: def $w1 killed $w1 def $x1149; GPR-NEXT: mov x8, #72340172838076673150; GPR-NEXT: and x9, x1, #0xff151; GPR-NEXT: mul x8, x9, x8152; GPR-NEXT: stp x8, x8, [x0, #48]153; GPR-NEXT: stp x8, x8, [x0, #32]154; GPR-NEXT: stp x8, x8, [x0, #16]155; GPR-NEXT: stp x8, x8, [x0]156; GPR-NEXT: ret157;158; NEON-LABEL: aligned_memset_64:159; NEON: // %bb.0:160; NEON-NEXT: dup v0.16b, w1161; NEON-NEXT: stp q0, q0, [x0]162; NEON-NEXT: stp q0, q0, [x0, #32]163; NEON-NEXT: ret164 tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 %value, i64 64, i1 0)165 ret void166}167 168; /////////////////////////////////////////////////////////////////////////////169 170define void @bzero_1(ptr %a) nounwind {171; ALL-LABEL: bzero_1:172; ALL: // %bb.0:173; ALL-NEXT: strb wzr, [x0]174; ALL-NEXT: ret175 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 1, i1 0)176 ret void177}178 179define void @bzero_2(ptr %a) nounwind {180; ALL-LABEL: bzero_2:181; ALL: // %bb.0:182; ALL-NEXT: strh wzr, [x0]183; ALL-NEXT: ret184 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 2, i1 0)185 ret void186}187 188define void @bzero_4(ptr %a) nounwind {189; ALL-LABEL: bzero_4:190; ALL: // %bb.0:191; ALL-NEXT: str wzr, [x0]192; ALL-NEXT: ret193 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 4, i1 0)194 ret void195}196 197define void @bzero_8(ptr %a) nounwind {198; ALL-LABEL: bzero_8:199; ALL: // %bb.0:200; ALL-NEXT: str xzr, [x0]201; ALL-NEXT: ret202 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 8, i1 0)203 ret void204}205 206define void @bzero_16(ptr %a) nounwind {207; ALL-LABEL: bzero_16:208; ALL: // %bb.0:209; ALL-NEXT: stp xzr, xzr, [x0]210; ALL-NEXT: ret211 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 16, i1 0)212 ret void213}214 215define void @bzero_32(ptr %a) nounwind {216; GPR-LABEL: bzero_32:217; GPR: // %bb.0:218; GPR-NEXT: adrp x8, .LCPI15_0219; GPR-NEXT: ldr q0, [x8, :lo12:.LCPI15_0]220; GPR-NEXT: stp q0, q0, [x0]221; GPR-NEXT: ret222;223; NEON-LABEL: bzero_32:224; NEON: // %bb.0:225; NEON-NEXT: movi v0.2d, #0000000000000000226; NEON-NEXT: stp q0, q0, [x0]227; NEON-NEXT: ret228 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 32, i1 0)229 ret void230}231 232define void @bzero_64(ptr %a) nounwind {233; GPR-LABEL: bzero_64:234; GPR: // %bb.0:235; GPR-NEXT: adrp x8, .LCPI16_0236; GPR-NEXT: ldr q0, [x8, :lo12:.LCPI16_0]237; GPR-NEXT: stp q0, q0, [x0]238; GPR-NEXT: stp q0, q0, [x0, #32]239; GPR-NEXT: ret240;241; NEON-LABEL: bzero_64:242; NEON: // %bb.0:243; NEON-NEXT: movi v0.2d, #0000000000000000244; NEON-NEXT: stp q0, q0, [x0]245; NEON-NEXT: stp q0, q0, [x0, #32]246; NEON-NEXT: ret247 tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 64, i1 0)248 ret void249}250 251; /////////////////////////////////////////////////////////////////////////////252 253define void @aligned_bzero_16(ptr %a) nounwind {254; ALL-LABEL: aligned_bzero_16:255; ALL: // %bb.0:256; ALL-NEXT: stp xzr, xzr, [x0]257; ALL-NEXT: ret258 tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 0, i64 16, i1 0)259 ret void260}261 262define void @aligned_bzero_32(ptr %a) nounwind {263; GPR-LABEL: aligned_bzero_32:264; GPR: // %bb.0:265; GPR-NEXT: adrp x8, .LCPI18_0266; GPR-NEXT: ldr q0, [x8, :lo12:.LCPI18_0]267; GPR-NEXT: stp q0, q0, [x0]268; GPR-NEXT: ret269;270; NEON-LABEL: aligned_bzero_32:271; NEON: // %bb.0:272; NEON-NEXT: movi v0.2d, #0000000000000000273; NEON-NEXT: stp q0, q0, [x0]274; NEON-NEXT: ret275 tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 0, i64 32, i1 0)276 ret void277}278 279define void @aligned_bzero_64(ptr %a) nounwind {280; GPR-LABEL: aligned_bzero_64:281; GPR: // %bb.0:282; GPR-NEXT: adrp x8, .LCPI19_0283; GPR-NEXT: ldr q0, [x8, :lo12:.LCPI19_0]284; GPR-NEXT: stp q0, q0, [x0]285; GPR-NEXT: stp q0, q0, [x0, #32]286; GPR-NEXT: ret287;288; NEON-LABEL: aligned_bzero_64:289; NEON: // %bb.0:290; NEON-NEXT: movi v0.2d, #0000000000000000291; NEON-NEXT: stp q0, q0, [x0]292; NEON-NEXT: stp q0, q0, [x0, #32]293; NEON-NEXT: ret294 tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 0, i64 64, i1 0)295 ret void296}297