1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s 3 4define void @bzero_4_heap(ptr nocapture %c) { 5; CHECK-LABEL: bzero_4_heap: 6; CHECK: // %bb.0: 7; CHECK-NEXT: str wzr, [x0] 8; CHECK-NEXT: ret 9 call void @llvm.memset.p0.i64(ptr align 4 %c, i8 0, i64 4, i1 false) 10 ret void 11} 12 13define void @bzero_8_heap(ptr nocapture %c) { 14; CHECK-LABEL: bzero_8_heap: 15; CHECK: // %bb.0: 16; CHECK-NEXT: str xzr, [x0] 17; CHECK-NEXT: ret 18 call void @llvm.memset.p0.i64(ptr align 8 %c, i8 0, i64 8, i1 false) 19 ret void 20} 21 22define void @bzero_12_heap(ptr nocapture %c) { 23; CHECK-LABEL: bzero_12_heap: 24; CHECK: // %bb.0: 25; CHECK-NEXT: str wzr, [x0, #8] 26; CHECK-NEXT: str xzr, [x0] 27; CHECK-NEXT: ret 28 call void @llvm.memset.p0.i64(ptr align 8 %c, i8 0, i64 12, i1 false) 29 ret void 30} 31 32define void @bzero_16_heap(ptr nocapture %c) { 33; CHECK-LABEL: bzero_16_heap: 34; CHECK: // %bb.0: 35; CHECK-NEXT: stp xzr, xzr, [x0] 36; CHECK-NEXT: ret 37 call void @llvm.memset.p0.i64(ptr align 8 %c, i8 0, i64 16, i1 false) 38 ret void 39} 40 41define void @bzero_32_heap(ptr nocapture %c) { 42; CHECK-LABEL: bzero_32_heap: 43; CHECK: // %bb.0: 44; CHECK-NEXT: movi v0.2d, #0000000000000000 45; CHECK-NEXT: stp q0, q0, [x0] 46; CHECK-NEXT: ret 47 call void @llvm.memset.p0.i64(ptr align 8 %c, i8 0, i64 32, i1 false) 48 ret void 49} 50 51define void @bzero_64_heap(ptr nocapture %c) { 52; CHECK-LABEL: bzero_64_heap: 53; CHECK: // %bb.0: 54; CHECK-NEXT: movi v0.2d, #0000000000000000 55; CHECK-NEXT: stp q0, q0, [x0] 56; CHECK-NEXT: stp q0, q0, [x0, #32] 57; CHECK-NEXT: ret 58 call void @llvm.memset.p0.i64(ptr align 8 %c, i8 0, i64 64, i1 false) 59 ret void 60} 61 62define void @bzero_4_stack() { 63; CHECK-LABEL: bzero_4_stack: 64; CHECK: // %bb.0: 65; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 66; CHECK-NEXT: .cfi_def_cfa_offset 16 67; CHECK-NEXT: .cfi_offset w30, -16 68; CHECK-NEXT: add x0, sp, #12 69; CHECK-NEXT: str wzr, [sp, #12] 70; CHECK-NEXT: bl something 71; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 72; CHECK-NEXT: ret 73 %buf = alloca [4 x i8], align 1 74 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 4, i1 false) 75 call void @something(ptr %buf) 76 ret void 77} 78 79define void @bzero_8_stack() { 80; CHECK-LABEL: bzero_8_stack: 81; CHECK: // %bb.0: 82; CHECK-NEXT: stp x30, xzr, [sp, #-16]! // 8-byte Folded Spill 83; CHECK-NEXT: .cfi_def_cfa_offset 16 84; CHECK-NEXT: .cfi_offset w30, -16 85; CHECK-NEXT: add x0, sp, #8 86; CHECK-NEXT: bl something 87; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 88; CHECK-NEXT: ret 89 %buf = alloca [8 x i8], align 1 90 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 8, i1 false) 91 call void @something(ptr %buf) 92 ret void 93} 94 95define void @bzero_12_stack() { 96; CHECK-LABEL: bzero_12_stack: 97; CHECK: // %bb.0: 98; CHECK-NEXT: sub sp, sp, #32 99; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill 100; CHECK-NEXT: .cfi_def_cfa_offset 32 101; CHECK-NEXT: .cfi_offset w30, -16 102; CHECK-NEXT: mov x0, sp 103; CHECK-NEXT: str wzr, [sp, #8] 104; CHECK-NEXT: str xzr, [sp] 105; CHECK-NEXT: bl something 106; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 107; CHECK-NEXT: add sp, sp, #32 108; CHECK-NEXT: ret 109 %buf = alloca [12 x i8], align 1 110 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 12, i1 false) 111 call void @something(ptr %buf) 112 ret void 113} 114 115define void @bzero_16_stack() { 116; CHECK-LABEL: bzero_16_stack: 117; CHECK: // %bb.0: 118; CHECK-NEXT: sub sp, sp, #32 119; CHECK-NEXT: stp xzr, x30, [sp, #8] // 8-byte Folded Spill 120; CHECK-NEXT: .cfi_def_cfa_offset 32 121; CHECK-NEXT: .cfi_offset w30, -16 122; CHECK-NEXT: mov x0, sp 123; CHECK-NEXT: str xzr, [sp] 124; CHECK-NEXT: bl something 125; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 126; CHECK-NEXT: add sp, sp, #32 127; CHECK-NEXT: ret 128 %buf = alloca [16 x i8], align 1 129 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 16, i1 false) 130 call void @something(ptr %buf) 131 ret void 132} 133 134define void @bzero_20_stack() { 135; CHECK-LABEL: bzero_20_stack: 136; CHECK: // %bb.0: 137; CHECK-NEXT: sub sp, sp, #48 138; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 139; CHECK-NEXT: .cfi_def_cfa_offset 48 140; CHECK-NEXT: .cfi_offset w30, -16 141; CHECK-NEXT: add x0, sp, #8 142; CHECK-NEXT: stp xzr, xzr, [sp, #8] 143; CHECK-NEXT: str wzr, [sp, #24] 144; CHECK-NEXT: bl something 145; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 146; CHECK-NEXT: add sp, sp, #48 147; CHECK-NEXT: ret 148 %buf = alloca [20 x i8], align 1 149 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 20, i1 false) 150 call void @something(ptr %buf) 151 ret void 152} 153 154define void @bzero_26_stack() { 155; CHECK-LABEL: bzero_26_stack: 156; CHECK: // %bb.0: 157; CHECK-NEXT: sub sp, sp, #48 158; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 159; CHECK-NEXT: .cfi_def_cfa_offset 48 160; CHECK-NEXT: .cfi_offset w30, -16 161; CHECK-NEXT: mov x0, sp 162; CHECK-NEXT: stp xzr, xzr, [sp] 163; CHECK-NEXT: strh wzr, [sp, #24] 164; CHECK-NEXT: str xzr, [sp, #16] 165; CHECK-NEXT: bl something 166; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 167; CHECK-NEXT: add sp, sp, #48 168; CHECK-NEXT: ret 169 %buf = alloca [26 x i8], align 1 170 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 26, i1 false) 171 call void @something(ptr %buf) 172 ret void 173} 174 175define void @bzero_32_stack() { 176; CHECK-LABEL: bzero_32_stack: 177; CHECK: // %bb.0: 178; CHECK-NEXT: sub sp, sp, #48 179; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 180; CHECK-NEXT: .cfi_def_cfa_offset 48 181; CHECK-NEXT: .cfi_offset w30, -16 182; CHECK-NEXT: movi v0.2d, #0000000000000000 183; CHECK-NEXT: mov x0, sp 184; CHECK-NEXT: stp q0, q0, [sp] 185; CHECK-NEXT: bl something 186; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 187; CHECK-NEXT: add sp, sp, #48 188; CHECK-NEXT: ret 189 %buf = alloca [32 x i8], align 1 190 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 32, i1 false) 191 call void @something(ptr %buf) 192 ret void 193} 194 195define void @bzero_40_stack() { 196; CHECK-LABEL: bzero_40_stack: 197; CHECK: // %bb.0: 198; CHECK-NEXT: sub sp, sp, #64 199; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill 200; CHECK-NEXT: .cfi_def_cfa_offset 64 201; CHECK-NEXT: .cfi_offset w30, -16 202; CHECK-NEXT: movi v0.2d, #0000000000000000 203; CHECK-NEXT: mov x0, sp 204; CHECK-NEXT: str xzr, [sp, #32] 205; CHECK-NEXT: stp q0, q0, [sp] 206; CHECK-NEXT: bl something 207; CHECK-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload 208; CHECK-NEXT: add sp, sp, #64 209; CHECK-NEXT: ret 210 %buf = alloca [40 x i8], align 1 211 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 40, i1 false) 212 call void @something(ptr %buf) 213 ret void 214} 215 216define void @bzero_64_stack() { 217; CHECK-LABEL: bzero_64_stack: 218; CHECK: // %bb.0: 219; CHECK-NEXT: sub sp, sp, #80 220; CHECK-NEXT: str x30, [sp, #64] // 8-byte Folded Spill 221; CHECK-NEXT: .cfi_def_cfa_offset 80 222; CHECK-NEXT: .cfi_offset w30, -16 223; CHECK-NEXT: movi v0.2d, #0000000000000000 224; CHECK-NEXT: mov x0, sp 225; CHECK-NEXT: stp q0, q0, [sp] 226; CHECK-NEXT: stp q0, q0, [sp, #32] 227; CHECK-NEXT: bl something 228; CHECK-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload 229; CHECK-NEXT: add sp, sp, #80 230; CHECK-NEXT: ret 231 %buf = alloca [64 x i8], align 1 232 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 64, i1 false) 233 call void @something(ptr %buf) 234 ret void 235} 236 237define void @bzero_72_stack() { 238; CHECK-LABEL: bzero_72_stack: 239; CHECK: // %bb.0: 240; CHECK-NEXT: sub sp, sp, #96 241; CHECK-NEXT: str x30, [sp, #80] // 8-byte Folded Spill 242; CHECK-NEXT: .cfi_def_cfa_offset 96 243; CHECK-NEXT: .cfi_offset w30, -16 244; CHECK-NEXT: movi v0.2d, #0000000000000000 245; CHECK-NEXT: mov x0, sp 246; CHECK-NEXT: str xzr, [sp, #64] 247; CHECK-NEXT: stp q0, q0, [sp] 248; CHECK-NEXT: stp q0, q0, [sp, #32] 249; CHECK-NEXT: bl something 250; CHECK-NEXT: ldr x30, [sp, #80] // 8-byte Folded Reload 251; CHECK-NEXT: add sp, sp, #96 252; CHECK-NEXT: ret 253 %buf = alloca [72 x i8], align 1 254 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 72, i1 false) 255 call void @something(ptr %buf) 256 ret void 257} 258 259define void @bzero_128_stack() { 260; CHECK-LABEL: bzero_128_stack: 261; CHECK: // %bb.0: 262; CHECK-NEXT: sub sp, sp, #144 263; CHECK-NEXT: str x30, [sp, #128] // 8-byte Folded Spill 264; CHECK-NEXT: .cfi_def_cfa_offset 144 265; CHECK-NEXT: .cfi_offset w30, -16 266; CHECK-NEXT: movi v0.2d, #0000000000000000 267; CHECK-NEXT: mov x0, sp 268; CHECK-NEXT: stp q0, q0, [sp] 269; CHECK-NEXT: stp q0, q0, [sp, #32] 270; CHECK-NEXT: stp q0, q0, [sp, #64] 271; CHECK-NEXT: stp q0, q0, [sp, #96] 272; CHECK-NEXT: bl something 273; CHECK-NEXT: ldr x30, [sp, #128] // 8-byte Folded Reload 274; CHECK-NEXT: add sp, sp, #144 275; CHECK-NEXT: ret 276 %buf = alloca [128 x i8], align 1 277 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 128, i1 false) 278 call void @something(ptr %buf) 279 ret void 280} 281 282define void @bzero_256_stack() { 283; CHECK-LABEL: bzero_256_stack: 284; CHECK: // %bb.0: 285; CHECK-NEXT: sub sp, sp, #272 286; CHECK-NEXT: stp x29, x30, [sp, #256] // 16-byte Folded Spill 287; CHECK-NEXT: .cfi_def_cfa_offset 272 288; CHECK-NEXT: .cfi_offset w30, -8 289; CHECK-NEXT: .cfi_offset w29, -16 290; CHECK-NEXT: movi v0.2d, #0000000000000000 291; CHECK-NEXT: mov x0, sp 292; CHECK-NEXT: stp q0, q0, [sp] 293; CHECK-NEXT: stp q0, q0, [sp, #32] 294; CHECK-NEXT: stp q0, q0, [sp, #64] 295; CHECK-NEXT: stp q0, q0, [sp, #96] 296; CHECK-NEXT: stp q0, q0, [sp, #128] 297; CHECK-NEXT: stp q0, q0, [sp, #160] 298; CHECK-NEXT: stp q0, q0, [sp, #192] 299; CHECK-NEXT: stp q0, q0, [sp, #224] 300; CHECK-NEXT: bl something 301; CHECK-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload 302; CHECK-NEXT: add sp, sp, #272 303; CHECK-NEXT: ret 304 %buf = alloca [256 x i8], align 1 305 call void @llvm.memset.p0.i32(ptr %buf, i8 0, i32 256, i1 false) 306 call void @something(ptr %buf) 307 ret void 308} 309 310define void @memset_4_stack() { 311; CHECK-LABEL: memset_4_stack: 312; CHECK: // %bb.0: 313; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 314; CHECK-NEXT: .cfi_def_cfa_offset 16 315; CHECK-NEXT: .cfi_offset w30, -16 316; CHECK-NEXT: mov w8, #-1431655766 317; CHECK-NEXT: add x0, sp, #12 318; CHECK-NEXT: str w8, [sp, #12] 319; CHECK-NEXT: bl something 320; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 321; CHECK-NEXT: ret 322 %buf = alloca [4 x i8], align 1 323 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 4, i1 false) 324 call void @something(ptr %buf) 325 ret void 326} 327 328define void @memset_8_stack() { 329; CHECK-LABEL: memset_8_stack: 330; CHECK: // %bb.0: 331; CHECK-NEXT: .cfi_def_cfa_offset 16 332; CHECK-NEXT: .cfi_offset w30, -16 333; CHECK-NEXT: mov x8, #-6148914691236517206 334; CHECK-NEXT: stp x30, x8, [sp, #-16]! // 8-byte Folded Spill 335; CHECK-NEXT: add x0, sp, #8 336; CHECK-NEXT: bl something 337; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 338; CHECK-NEXT: ret 339 %buf = alloca [8 x i8], align 1 340 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 8, i1 false) 341 call void @something(ptr %buf) 342 ret void 343} 344 345define void @memset_12_stack() { 346; CHECK-LABEL: memset_12_stack: 347; CHECK: // %bb.0: 348; CHECK-NEXT: sub sp, sp, #32 349; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill 350; CHECK-NEXT: .cfi_def_cfa_offset 32 351; CHECK-NEXT: .cfi_offset w30, -16 352; CHECK-NEXT: mov x8, #-6148914691236517206 353; CHECK-NEXT: mov x0, sp 354; CHECK-NEXT: str x8, [sp] 355; CHECK-NEXT: str w8, [sp, #8] 356; CHECK-NEXT: bl something 357; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 358; CHECK-NEXT: add sp, sp, #32 359; CHECK-NEXT: ret 360 %buf = alloca [12 x i8], align 1 361 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 12, i1 false) 362 call void @something(ptr %buf) 363 ret void 364} 365 366define void @memset_16_stack() { 367; CHECK-LABEL: memset_16_stack: 368; CHECK: // %bb.0: 369; CHECK-NEXT: sub sp, sp, #32 370; CHECK-NEXT: .cfi_def_cfa_offset 32 371; CHECK-NEXT: .cfi_offset w30, -16 372; CHECK-NEXT: mov x8, #-6148914691236517206 373; CHECK-NEXT: mov x0, sp 374; CHECK-NEXT: stp x8, x30, [sp, #8] // 8-byte Folded Spill 375; CHECK-NEXT: str x8, [sp] 376; CHECK-NEXT: bl something 377; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 378; CHECK-NEXT: add sp, sp, #32 379; CHECK-NEXT: ret 380 %buf = alloca [16 x i8], align 1 381 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 16, i1 false) 382 call void @something(ptr %buf) 383 ret void 384} 385 386define void @memset_20_stack() { 387; CHECK-LABEL: memset_20_stack: 388; CHECK: // %bb.0: 389; CHECK-NEXT: sub sp, sp, #48 390; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 391; CHECK-NEXT: .cfi_def_cfa_offset 48 392; CHECK-NEXT: .cfi_offset w30, -16 393; CHECK-NEXT: mov x8, #-6148914691236517206 394; CHECK-NEXT: add x0, sp, #8 395; CHECK-NEXT: stp x8, x8, [sp, #8] 396; CHECK-NEXT: str w8, [sp, #24] 397; CHECK-NEXT: bl something 398; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 399; CHECK-NEXT: add sp, sp, #48 400; CHECK-NEXT: ret 401 %buf = alloca [20 x i8], align 1 402 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 20, i1 false) 403 call void @something(ptr %buf) 404 ret void 405} 406 407define void @memset_26_stack() { 408; CHECK-LABEL: memset_26_stack: 409; CHECK: // %bb.0: 410; CHECK-NEXT: sub sp, sp, #48 411; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 412; CHECK-NEXT: .cfi_def_cfa_offset 48 413; CHECK-NEXT: .cfi_offset w30, -16 414; CHECK-NEXT: mov x8, #-6148914691236517206 415; CHECK-NEXT: mov x0, sp 416; CHECK-NEXT: stp x8, x8, [sp, #8] 417; CHECK-NEXT: str x8, [sp] 418; CHECK-NEXT: strh w8, [sp, #24] 419; CHECK-NEXT: bl something 420; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 421; CHECK-NEXT: add sp, sp, #48 422; CHECK-NEXT: ret 423 %buf = alloca [26 x i8], align 1 424 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 26, i1 false) 425 call void @something(ptr %buf) 426 ret void 427} 428 429define void @memset_32_stack() { 430; CHECK-LABEL: memset_32_stack: 431; CHECK: // %bb.0: 432; CHECK-NEXT: sub sp, sp, #48 433; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill 434; CHECK-NEXT: .cfi_def_cfa_offset 48 435; CHECK-NEXT: .cfi_offset w30, -16 436; CHECK-NEXT: movi v0.16b, #170 437; CHECK-NEXT: mov x0, sp 438; CHECK-NEXT: stp q0, q0, [sp] 439; CHECK-NEXT: bl something 440; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload 441; CHECK-NEXT: add sp, sp, #48 442; CHECK-NEXT: ret 443 %buf = alloca [32 x i8], align 1 444 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 32, i1 false) 445 call void @something(ptr %buf) 446 ret void 447} 448 449define void @memset_40_stack() { 450; CHECK-LABEL: memset_40_stack: 451; CHECK: // %bb.0: 452; CHECK-NEXT: sub sp, sp, #64 453; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill 454; CHECK-NEXT: .cfi_def_cfa_offset 64 455; CHECK-NEXT: .cfi_offset w30, -16 456; CHECK-NEXT: movi v0.16b, #170 457; CHECK-NEXT: mov x8, #-6148914691236517206 458; CHECK-NEXT: mov x0, sp 459; CHECK-NEXT: str x8, [sp, #32] 460; CHECK-NEXT: stp q0, q0, [sp] 461; CHECK-NEXT: bl something 462; CHECK-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload 463; CHECK-NEXT: add sp, sp, #64 464; CHECK-NEXT: ret 465 %buf = alloca [40 x i8], align 1 466 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 40, i1 false) 467 call void @something(ptr %buf) 468 ret void 469} 470 471define void @memset_64_stack() { 472; CHECK-LABEL: memset_64_stack: 473; CHECK: // %bb.0: 474; CHECK-NEXT: sub sp, sp, #80 475; CHECK-NEXT: str x30, [sp, #64] // 8-byte Folded Spill 476; CHECK-NEXT: .cfi_def_cfa_offset 80 477; CHECK-NEXT: .cfi_offset w30, -16 478; CHECK-NEXT: movi v0.16b, #170 479; CHECK-NEXT: mov x0, sp 480; CHECK-NEXT: stp q0, q0, [sp] 481; CHECK-NEXT: stp q0, q0, [sp, #32] 482; CHECK-NEXT: bl something 483; CHECK-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload 484; CHECK-NEXT: add sp, sp, #80 485; CHECK-NEXT: ret 486 %buf = alloca [64 x i8], align 1 487 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 64, i1 false) 488 call void @something(ptr %buf) 489 ret void 490} 491 492define void @memset_72_stack() { 493; CHECK-LABEL: memset_72_stack: 494; CHECK: // %bb.0: 495; CHECK-NEXT: sub sp, sp, #96 496; CHECK-NEXT: str x30, [sp, #80] // 8-byte Folded Spill 497; CHECK-NEXT: .cfi_def_cfa_offset 96 498; CHECK-NEXT: .cfi_offset w30, -16 499; CHECK-NEXT: movi v0.16b, #170 500; CHECK-NEXT: mov x8, #-6148914691236517206 501; CHECK-NEXT: mov x0, sp 502; CHECK-NEXT: str x8, [sp, #64] 503; CHECK-NEXT: stp q0, q0, [sp] 504; CHECK-NEXT: stp q0, q0, [sp, #32] 505; CHECK-NEXT: bl something 506; CHECK-NEXT: ldr x30, [sp, #80] // 8-byte Folded Reload 507; CHECK-NEXT: add sp, sp, #96 508; CHECK-NEXT: ret 509 %buf = alloca [72 x i8], align 1 510 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 72, i1 false) 511 call void @something(ptr %buf) 512 ret void 513} 514 515define void @memset_128_stack() { 516; CHECK-LABEL: memset_128_stack: 517; CHECK: // %bb.0: 518; CHECK-NEXT: sub sp, sp, #144 519; CHECK-NEXT: str x30, [sp, #128] // 8-byte Folded Spill 520; CHECK-NEXT: .cfi_def_cfa_offset 144 521; CHECK-NEXT: .cfi_offset w30, -16 522; CHECK-NEXT: movi v0.16b, #170 523; CHECK-NEXT: mov x0, sp 524; CHECK-NEXT: stp q0, q0, [sp] 525; CHECK-NEXT: stp q0, q0, [sp, #32] 526; CHECK-NEXT: stp q0, q0, [sp, #64] 527; CHECK-NEXT: stp q0, q0, [sp, #96] 528; CHECK-NEXT: bl something 529; CHECK-NEXT: ldr x30, [sp, #128] // 8-byte Folded Reload 530; CHECK-NEXT: add sp, sp, #144 531; CHECK-NEXT: ret 532 %buf = alloca [128 x i8], align 1 533 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 128, i1 false) 534 call void @something(ptr %buf) 535 ret void 536} 537 538define void @memset_256_stack() { 539; CHECK-LABEL: memset_256_stack: 540; CHECK: // %bb.0: 541; CHECK-NEXT: sub sp, sp, #272 542; CHECK-NEXT: stp x29, x30, [sp, #256] // 16-byte Folded Spill 543; CHECK-NEXT: .cfi_def_cfa_offset 272 544; CHECK-NEXT: .cfi_offset w30, -8 545; CHECK-NEXT: .cfi_offset w29, -16 546; CHECK-NEXT: movi v0.16b, #170 547; CHECK-NEXT: mov x0, sp 548; CHECK-NEXT: stp q0, q0, [sp] 549; CHECK-NEXT: stp q0, q0, [sp, #32] 550; CHECK-NEXT: stp q0, q0, [sp, #64] 551; CHECK-NEXT: stp q0, q0, [sp, #96] 552; CHECK-NEXT: stp q0, q0, [sp, #128] 553; CHECK-NEXT: stp q0, q0, [sp, #160] 554; CHECK-NEXT: stp q0, q0, [sp, #192] 555; CHECK-NEXT: stp q0, q0, [sp, #224] 556; CHECK-NEXT: bl something 557; CHECK-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload 558; CHECK-NEXT: add sp, sp, #272 559; CHECK-NEXT: ret 560 %buf = alloca [256 x i8], align 1 561 call void @llvm.memset.p0.i32(ptr %buf, i8 -86, i32 256, i1 false) 562 call void @something(ptr %buf) 563 ret void 564} 565 566declare void @something(ptr) 567declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1) nounwind 568declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind 569