1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s -check-prefix=RV32I 4; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s -check-prefix=RV64I 6 7declare void @callee(i8*) 8 9define void @caller32() { 10; RV32I-LABEL: caller32: 11; RV32I: # %bb.0: 12; RV32I-NEXT: addi sp, sp, -32 13; RV32I-NEXT: .cfi_def_cfa_offset 32 14; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 15; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 16; RV32I-NEXT: .cfi_offset ra, -4 17; RV32I-NEXT: .cfi_offset s0, -8 18; RV32I-NEXT: addi s0, sp, 32 19; RV32I-NEXT: .cfi_def_cfa s0, 0 20; RV32I-NEXT: andi sp, sp, -32 21; RV32I-NEXT: mv a0, sp 22; RV32I-NEXT: call callee@plt 23; RV32I-NEXT: addi sp, s0, -32 24; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 25; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 26; RV32I-NEXT: addi sp, sp, 32 27; RV32I-NEXT: ret 28; 29; RV64I-LABEL: caller32: 30; RV64I: # %bb.0: 31; RV64I-NEXT: addi sp, sp, -32 32; RV64I-NEXT: .cfi_def_cfa_offset 32 33; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 34; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 35; RV64I-NEXT: .cfi_offset ra, -8 36; RV64I-NEXT: .cfi_offset s0, -16 37; RV64I-NEXT: addi s0, sp, 32 38; RV64I-NEXT: .cfi_def_cfa s0, 0 39; RV64I-NEXT: andi sp, sp, -32 40; RV64I-NEXT: mv a0, sp 41; RV64I-NEXT: call callee@plt 42; RV64I-NEXT: addi sp, s0, -32 43; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 44; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 45; RV64I-NEXT: addi sp, sp, 32 46; RV64I-NEXT: ret 47 %1 = alloca i8, align 32 48 call void @callee(i8* %1) 49 ret void 50} 51 52define void @caller_no_realign32() "no-realign-stack" { 53; RV32I-LABEL: caller_no_realign32: 54; RV32I: # %bb.0: 55; RV32I-NEXT: addi sp, sp, -16 56; RV32I-NEXT: .cfi_def_cfa_offset 16 57; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 58; RV32I-NEXT: .cfi_offset ra, -4 59; RV32I-NEXT: mv a0, sp 60; RV32I-NEXT: call callee@plt 61; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 62; RV32I-NEXT: addi sp, sp, 16 63; RV32I-NEXT: ret 64; 65; RV64I-LABEL: caller_no_realign32: 66; RV64I: # %bb.0: 67; RV64I-NEXT: addi sp, sp, -16 68; RV64I-NEXT: .cfi_def_cfa_offset 16 69; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 70; RV64I-NEXT: .cfi_offset ra, -8 71; RV64I-NEXT: mv a0, sp 72; RV64I-NEXT: call callee@plt 73; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 74; RV64I-NEXT: addi sp, sp, 16 75; RV64I-NEXT: ret 76 %1 = alloca i8, align 32 77 call void @callee(i8* %1) 78 ret void 79} 80 81define void @caller64() { 82; RV32I-LABEL: caller64: 83; RV32I: # %bb.0: 84; RV32I-NEXT: addi sp, sp, -64 85; RV32I-NEXT: .cfi_def_cfa_offset 64 86; RV32I-NEXT: sw ra, 60(sp) # 4-byte Folded Spill 87; RV32I-NEXT: sw s0, 56(sp) # 4-byte Folded Spill 88; RV32I-NEXT: .cfi_offset ra, -4 89; RV32I-NEXT: .cfi_offset s0, -8 90; RV32I-NEXT: addi s0, sp, 64 91; RV32I-NEXT: .cfi_def_cfa s0, 0 92; RV32I-NEXT: andi sp, sp, -64 93; RV32I-NEXT: mv a0, sp 94; RV32I-NEXT: call callee@plt 95; RV32I-NEXT: addi sp, s0, -64 96; RV32I-NEXT: lw ra, 60(sp) # 4-byte Folded Reload 97; RV32I-NEXT: lw s0, 56(sp) # 4-byte Folded Reload 98; RV32I-NEXT: addi sp, sp, 64 99; RV32I-NEXT: ret 100; 101; RV64I-LABEL: caller64: 102; RV64I: # %bb.0: 103; RV64I-NEXT: addi sp, sp, -64 104; RV64I-NEXT: .cfi_def_cfa_offset 64 105; RV64I-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 106; RV64I-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 107; RV64I-NEXT: .cfi_offset ra, -8 108; RV64I-NEXT: .cfi_offset s0, -16 109; RV64I-NEXT: addi s0, sp, 64 110; RV64I-NEXT: .cfi_def_cfa s0, 0 111; RV64I-NEXT: andi sp, sp, -64 112; RV64I-NEXT: mv a0, sp 113; RV64I-NEXT: call callee@plt 114; RV64I-NEXT: addi sp, s0, -64 115; RV64I-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 116; RV64I-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 117; RV64I-NEXT: addi sp, sp, 64 118; RV64I-NEXT: ret 119 %1 = alloca i8, align 64 120 call void @callee(i8* %1) 121 ret void 122} 123 124define void @caller_no_realign64() "no-realign-stack" { 125; RV32I-LABEL: caller_no_realign64: 126; RV32I: # %bb.0: 127; RV32I-NEXT: addi sp, sp, -16 128; RV32I-NEXT: .cfi_def_cfa_offset 16 129; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 130; RV32I-NEXT: .cfi_offset ra, -4 131; RV32I-NEXT: mv a0, sp 132; RV32I-NEXT: call callee@plt 133; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 134; RV32I-NEXT: addi sp, sp, 16 135; RV32I-NEXT: ret 136; 137; RV64I-LABEL: caller_no_realign64: 138; RV64I: # %bb.0: 139; RV64I-NEXT: addi sp, sp, -16 140; RV64I-NEXT: .cfi_def_cfa_offset 16 141; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 142; RV64I-NEXT: .cfi_offset ra, -8 143; RV64I-NEXT: mv a0, sp 144; RV64I-NEXT: call callee@plt 145; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 146; RV64I-NEXT: addi sp, sp, 16 147; RV64I-NEXT: ret 148 %1 = alloca i8, align 64 149 call void @callee(i8* %1) 150 ret void 151} 152 153define void @caller128() { 154; RV32I-LABEL: caller128: 155; RV32I: # %bb.0: 156; RV32I-NEXT: addi sp, sp, -128 157; RV32I-NEXT: .cfi_def_cfa_offset 128 158; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 159; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 160; RV32I-NEXT: .cfi_offset ra, -4 161; RV32I-NEXT: .cfi_offset s0, -8 162; RV32I-NEXT: addi s0, sp, 128 163; RV32I-NEXT: .cfi_def_cfa s0, 0 164; RV32I-NEXT: andi sp, sp, -128 165; RV32I-NEXT: mv a0, sp 166; RV32I-NEXT: call callee@plt 167; RV32I-NEXT: addi sp, s0, -128 168; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 169; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 170; RV32I-NEXT: addi sp, sp, 128 171; RV32I-NEXT: ret 172; 173; RV64I-LABEL: caller128: 174; RV64I: # %bb.0: 175; RV64I-NEXT: addi sp, sp, -128 176; RV64I-NEXT: .cfi_def_cfa_offset 128 177; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill 178; RV64I-NEXT: sd s0, 112(sp) # 8-byte Folded Spill 179; RV64I-NEXT: .cfi_offset ra, -8 180; RV64I-NEXT: .cfi_offset s0, -16 181; RV64I-NEXT: addi s0, sp, 128 182; RV64I-NEXT: .cfi_def_cfa s0, 0 183; RV64I-NEXT: andi sp, sp, -128 184; RV64I-NEXT: mv a0, sp 185; RV64I-NEXT: call callee@plt 186; RV64I-NEXT: addi sp, s0, -128 187; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload 188; RV64I-NEXT: ld s0, 112(sp) # 8-byte Folded Reload 189; RV64I-NEXT: addi sp, sp, 128 190; RV64I-NEXT: ret 191 %1 = alloca i8, align 128 192 call void @callee(i8* %1) 193 ret void 194} 195 196define void @caller_no_realign128() "no-realign-stack" { 197; RV32I-LABEL: caller_no_realign128: 198; RV32I: # %bb.0: 199; RV32I-NEXT: addi sp, sp, -16 200; RV32I-NEXT: .cfi_def_cfa_offset 16 201; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 202; RV32I-NEXT: .cfi_offset ra, -4 203; RV32I-NEXT: mv a0, sp 204; RV32I-NEXT: call callee@plt 205; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 206; RV32I-NEXT: addi sp, sp, 16 207; RV32I-NEXT: ret 208; 209; RV64I-LABEL: caller_no_realign128: 210; RV64I: # %bb.0: 211; RV64I-NEXT: addi sp, sp, -16 212; RV64I-NEXT: .cfi_def_cfa_offset 16 213; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 214; RV64I-NEXT: .cfi_offset ra, -8 215; RV64I-NEXT: mv a0, sp 216; RV64I-NEXT: call callee@plt 217; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 218; RV64I-NEXT: addi sp, sp, 16 219; RV64I-NEXT: ret 220 %1 = alloca i8, align 128 221 call void @callee(i8* %1) 222 ret void 223} 224 225define void @caller256() { 226; RV32I-LABEL: caller256: 227; RV32I: # %bb.0: 228; RV32I-NEXT: addi sp, sp, -256 229; RV32I-NEXT: .cfi_def_cfa_offset 256 230; RV32I-NEXT: sw ra, 252(sp) # 4-byte Folded Spill 231; RV32I-NEXT: sw s0, 248(sp) # 4-byte Folded Spill 232; RV32I-NEXT: .cfi_offset ra, -4 233; RV32I-NEXT: .cfi_offset s0, -8 234; RV32I-NEXT: addi s0, sp, 256 235; RV32I-NEXT: .cfi_def_cfa s0, 0 236; RV32I-NEXT: andi sp, sp, -256 237; RV32I-NEXT: mv a0, sp 238; RV32I-NEXT: call callee@plt 239; RV32I-NEXT: addi sp, s0, -256 240; RV32I-NEXT: lw ra, 252(sp) # 4-byte Folded Reload 241; RV32I-NEXT: lw s0, 248(sp) # 4-byte Folded Reload 242; RV32I-NEXT: addi sp, sp, 256 243; RV32I-NEXT: ret 244; 245; RV64I-LABEL: caller256: 246; RV64I: # %bb.0: 247; RV64I-NEXT: addi sp, sp, -256 248; RV64I-NEXT: .cfi_def_cfa_offset 256 249; RV64I-NEXT: sd ra, 248(sp) # 8-byte Folded Spill 250; RV64I-NEXT: sd s0, 240(sp) # 8-byte Folded Spill 251; RV64I-NEXT: .cfi_offset ra, -8 252; RV64I-NEXT: .cfi_offset s0, -16 253; RV64I-NEXT: addi s0, sp, 256 254; RV64I-NEXT: .cfi_def_cfa s0, 0 255; RV64I-NEXT: andi sp, sp, -256 256; RV64I-NEXT: mv a0, sp 257; RV64I-NEXT: call callee@plt 258; RV64I-NEXT: addi sp, s0, -256 259; RV64I-NEXT: ld ra, 248(sp) # 8-byte Folded Reload 260; RV64I-NEXT: ld s0, 240(sp) # 8-byte Folded Reload 261; RV64I-NEXT: addi sp, sp, 256 262; RV64I-NEXT: ret 263 %1 = alloca i8, align 256 264 call void @callee(i8* %1) 265 ret void 266} 267 268define void @caller_no_realign256() "no-realign-stack" { 269; RV32I-LABEL: caller_no_realign256: 270; RV32I: # %bb.0: 271; RV32I-NEXT: addi sp, sp, -16 272; RV32I-NEXT: .cfi_def_cfa_offset 16 273; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 274; RV32I-NEXT: .cfi_offset ra, -4 275; RV32I-NEXT: mv a0, sp 276; RV32I-NEXT: call callee@plt 277; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 278; RV32I-NEXT: addi sp, sp, 16 279; RV32I-NEXT: ret 280; 281; RV64I-LABEL: caller_no_realign256: 282; RV64I: # %bb.0: 283; RV64I-NEXT: addi sp, sp, -16 284; RV64I-NEXT: .cfi_def_cfa_offset 16 285; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 286; RV64I-NEXT: .cfi_offset ra, -8 287; RV64I-NEXT: mv a0, sp 288; RV64I-NEXT: call callee@plt 289; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 290; RV64I-NEXT: addi sp, sp, 16 291; RV64I-NEXT: ret 292 %1 = alloca i8, align 256 293 call void @callee(i8* %1) 294 ret void 295} 296 297define void @caller512() { 298; RV32I-LABEL: caller512: 299; RV32I: # %bb.0: 300; RV32I-NEXT: addi sp, sp, -1024 301; RV32I-NEXT: .cfi_def_cfa_offset 1024 302; RV32I-NEXT: sw ra, 1020(sp) # 4-byte Folded Spill 303; RV32I-NEXT: sw s0, 1016(sp) # 4-byte Folded Spill 304; RV32I-NEXT: .cfi_offset ra, -4 305; RV32I-NEXT: .cfi_offset s0, -8 306; RV32I-NEXT: addi s0, sp, 1024 307; RV32I-NEXT: .cfi_def_cfa s0, 0 308; RV32I-NEXT: andi sp, sp, -512 309; RV32I-NEXT: addi a0, sp, 512 310; RV32I-NEXT: call callee@plt 311; RV32I-NEXT: addi sp, s0, -1024 312; RV32I-NEXT: lw ra, 1020(sp) # 4-byte Folded Reload 313; RV32I-NEXT: lw s0, 1016(sp) # 4-byte Folded Reload 314; RV32I-NEXT: addi sp, sp, 1024 315; RV32I-NEXT: ret 316; 317; RV64I-LABEL: caller512: 318; RV64I: # %bb.0: 319; RV64I-NEXT: addi sp, sp, -1024 320; RV64I-NEXT: .cfi_def_cfa_offset 1024 321; RV64I-NEXT: sd ra, 1016(sp) # 8-byte Folded Spill 322; RV64I-NEXT: sd s0, 1008(sp) # 8-byte Folded Spill 323; RV64I-NEXT: .cfi_offset ra, -8 324; RV64I-NEXT: .cfi_offset s0, -16 325; RV64I-NEXT: addi s0, sp, 1024 326; RV64I-NEXT: .cfi_def_cfa s0, 0 327; RV64I-NEXT: andi sp, sp, -512 328; RV64I-NEXT: addi a0, sp, 512 329; RV64I-NEXT: call callee@plt 330; RV64I-NEXT: addi sp, s0, -1024 331; RV64I-NEXT: ld ra, 1016(sp) # 8-byte Folded Reload 332; RV64I-NEXT: ld s0, 1008(sp) # 8-byte Folded Reload 333; RV64I-NEXT: addi sp, sp, 1024 334; RV64I-NEXT: ret 335 %1 = alloca i8, align 512 336 call void @callee(i8* %1) 337 ret void 338} 339 340define void @caller_no_realign512() "no-realign-stack" { 341; RV32I-LABEL: caller_no_realign512: 342; RV32I: # %bb.0: 343; RV32I-NEXT: addi sp, sp, -16 344; RV32I-NEXT: .cfi_def_cfa_offset 16 345; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 346; RV32I-NEXT: .cfi_offset ra, -4 347; RV32I-NEXT: mv a0, sp 348; RV32I-NEXT: call callee@plt 349; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 350; RV32I-NEXT: addi sp, sp, 16 351; RV32I-NEXT: ret 352; 353; RV64I-LABEL: caller_no_realign512: 354; RV64I: # %bb.0: 355; RV64I-NEXT: addi sp, sp, -16 356; RV64I-NEXT: .cfi_def_cfa_offset 16 357; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 358; RV64I-NEXT: .cfi_offset ra, -8 359; RV64I-NEXT: mv a0, sp 360; RV64I-NEXT: call callee@plt 361; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 362; RV64I-NEXT: addi sp, sp, 16 363; RV64I-NEXT: ret 364 %1 = alloca i8, align 512 365 call void @callee(i8* %1) 366 ret void 367} 368 369define void @caller1024() { 370; RV32I-LABEL: caller1024: 371; RV32I: # %bb.0: 372; RV32I-NEXT: addi sp, sp, -2032 373; RV32I-NEXT: .cfi_def_cfa_offset 2032 374; RV32I-NEXT: sw ra, 2028(sp) # 4-byte Folded Spill 375; RV32I-NEXT: sw s0, 2024(sp) # 4-byte Folded Spill 376; RV32I-NEXT: .cfi_offset ra, -4 377; RV32I-NEXT: .cfi_offset s0, -8 378; RV32I-NEXT: addi s0, sp, 2032 379; RV32I-NEXT: .cfi_def_cfa s0, 0 380; RV32I-NEXT: addi sp, sp, -16 381; RV32I-NEXT: andi sp, sp, -1024 382; RV32I-NEXT: addi a0, sp, 1024 383; RV32I-NEXT: call callee@plt 384; RV32I-NEXT: addi sp, s0, -2048 385; RV32I-NEXT: addi sp, sp, 16 386; RV32I-NEXT: lw ra, 2028(sp) # 4-byte Folded Reload 387; RV32I-NEXT: lw s0, 2024(sp) # 4-byte Folded Reload 388; RV32I-NEXT: addi sp, sp, 2032 389; RV32I-NEXT: ret 390; 391; RV64I-LABEL: caller1024: 392; RV64I: # %bb.0: 393; RV64I-NEXT: addi sp, sp, -2032 394; RV64I-NEXT: .cfi_def_cfa_offset 2032 395; RV64I-NEXT: sd ra, 2024(sp) # 8-byte Folded Spill 396; RV64I-NEXT: sd s0, 2016(sp) # 8-byte Folded Spill 397; RV64I-NEXT: .cfi_offset ra, -8 398; RV64I-NEXT: .cfi_offset s0, -16 399; RV64I-NEXT: addi s0, sp, 2032 400; RV64I-NEXT: .cfi_def_cfa s0, 0 401; RV64I-NEXT: addi sp, sp, -16 402; RV64I-NEXT: andi sp, sp, -1024 403; RV64I-NEXT: addi a0, sp, 1024 404; RV64I-NEXT: call callee@plt 405; RV64I-NEXT: addi sp, s0, -2048 406; RV64I-NEXT: addi sp, sp, 16 407; RV64I-NEXT: ld ra, 2024(sp) # 8-byte Folded Reload 408; RV64I-NEXT: ld s0, 2016(sp) # 8-byte Folded Reload 409; RV64I-NEXT: addi sp, sp, 2032 410; RV64I-NEXT: ret 411 %1 = alloca i8, align 1024 412 call void @callee(i8* %1) 413 ret void 414} 415 416define void @caller_no_realign1024() "no-realign-stack" { 417; RV32I-LABEL: caller_no_realign1024: 418; RV32I: # %bb.0: 419; RV32I-NEXT: addi sp, sp, -16 420; RV32I-NEXT: .cfi_def_cfa_offset 16 421; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 422; RV32I-NEXT: .cfi_offset ra, -4 423; RV32I-NEXT: mv a0, sp 424; RV32I-NEXT: call callee@plt 425; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 426; RV32I-NEXT: addi sp, sp, 16 427; RV32I-NEXT: ret 428; 429; RV64I-LABEL: caller_no_realign1024: 430; RV64I: # %bb.0: 431; RV64I-NEXT: addi sp, sp, -16 432; RV64I-NEXT: .cfi_def_cfa_offset 16 433; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 434; RV64I-NEXT: .cfi_offset ra, -8 435; RV64I-NEXT: mv a0, sp 436; RV64I-NEXT: call callee@plt 437; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 438; RV64I-NEXT: addi sp, sp, 16 439; RV64I-NEXT: ret 440 %1 = alloca i8, align 1024 441 call void @callee(i8* %1) 442 ret void 443} 444 445define void @caller2048() { 446; RV32I-LABEL: caller2048: 447; RV32I: # %bb.0: 448; RV32I-NEXT: addi sp, sp, -2032 449; RV32I-NEXT: .cfi_def_cfa_offset 2032 450; RV32I-NEXT: sw ra, 2028(sp) # 4-byte Folded Spill 451; RV32I-NEXT: sw s0, 2024(sp) # 4-byte Folded Spill 452; RV32I-NEXT: .cfi_offset ra, -4 453; RV32I-NEXT: .cfi_offset s0, -8 454; RV32I-NEXT: addi s0, sp, 2032 455; RV32I-NEXT: .cfi_def_cfa s0, 0 456; RV32I-NEXT: lui a0, 1 457; RV32I-NEXT: addi a0, a0, -2032 458; RV32I-NEXT: sub sp, sp, a0 459; RV32I-NEXT: andi sp, sp, -2048 460; RV32I-NEXT: lui a0, 1 461; RV32I-NEXT: addi a0, a0, -2048 462; RV32I-NEXT: add a0, sp, a0 463; RV32I-NEXT: call callee@plt 464; RV32I-NEXT: lui a0, 1 465; RV32I-NEXT: sub sp, s0, a0 466; RV32I-NEXT: lui a0, 1 467; RV32I-NEXT: addi a0, a0, -2032 468; RV32I-NEXT: add sp, sp, a0 469; RV32I-NEXT: lw ra, 2028(sp) # 4-byte Folded Reload 470; RV32I-NEXT: lw s0, 2024(sp) # 4-byte Folded Reload 471; RV32I-NEXT: addi sp, sp, 2032 472; RV32I-NEXT: ret 473; 474; RV64I-LABEL: caller2048: 475; RV64I: # %bb.0: 476; RV64I-NEXT: addi sp, sp, -2032 477; RV64I-NEXT: .cfi_def_cfa_offset 2032 478; RV64I-NEXT: sd ra, 2024(sp) # 8-byte Folded Spill 479; RV64I-NEXT: sd s0, 2016(sp) # 8-byte Folded Spill 480; RV64I-NEXT: .cfi_offset ra, -8 481; RV64I-NEXT: .cfi_offset s0, -16 482; RV64I-NEXT: addi s0, sp, 2032 483; RV64I-NEXT: .cfi_def_cfa s0, 0 484; RV64I-NEXT: lui a0, 1 485; RV64I-NEXT: addiw a0, a0, -2032 486; RV64I-NEXT: sub sp, sp, a0 487; RV64I-NEXT: andi sp, sp, -2048 488; RV64I-NEXT: lui a0, 1 489; RV64I-NEXT: addiw a0, a0, -2048 490; RV64I-NEXT: add a0, sp, a0 491; RV64I-NEXT: call callee@plt 492; RV64I-NEXT: lui a0, 1 493; RV64I-NEXT: sub sp, s0, a0 494; RV64I-NEXT: lui a0, 1 495; RV64I-NEXT: addiw a0, a0, -2032 496; RV64I-NEXT: add sp, sp, a0 497; RV64I-NEXT: ld ra, 2024(sp) # 8-byte Folded Reload 498; RV64I-NEXT: ld s0, 2016(sp) # 8-byte Folded Reload 499; RV64I-NEXT: addi sp, sp, 2032 500; RV64I-NEXT: ret 501 %1 = alloca i8, align 2048 502 call void @callee(i8* %1) 503 ret void 504} 505 506define void @caller_no_realign2048() "no-realign-stack" { 507; RV32I-LABEL: caller_no_realign2048: 508; RV32I: # %bb.0: 509; RV32I-NEXT: addi sp, sp, -16 510; RV32I-NEXT: .cfi_def_cfa_offset 16 511; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 512; RV32I-NEXT: .cfi_offset ra, -4 513; RV32I-NEXT: mv a0, sp 514; RV32I-NEXT: call callee@plt 515; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 516; RV32I-NEXT: addi sp, sp, 16 517; RV32I-NEXT: ret 518; 519; RV64I-LABEL: caller_no_realign2048: 520; RV64I: # %bb.0: 521; RV64I-NEXT: addi sp, sp, -16 522; RV64I-NEXT: .cfi_def_cfa_offset 16 523; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 524; RV64I-NEXT: .cfi_offset ra, -8 525; RV64I-NEXT: mv a0, sp 526; RV64I-NEXT: call callee@plt 527; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 528; RV64I-NEXT: addi sp, sp, 16 529; RV64I-NEXT: ret 530 %1 = alloca i8, align 2048 531 call void @callee(i8* %1) 532 ret void 533} 534 535define void @caller4096() { 536; RV32I-LABEL: caller4096: 537; RV32I: # %bb.0: 538; RV32I-NEXT: addi sp, sp, -2032 539; RV32I-NEXT: .cfi_def_cfa_offset 2032 540; RV32I-NEXT: sw ra, 2028(sp) # 4-byte Folded Spill 541; RV32I-NEXT: sw s0, 2024(sp) # 4-byte Folded Spill 542; RV32I-NEXT: .cfi_offset ra, -4 543; RV32I-NEXT: .cfi_offset s0, -8 544; RV32I-NEXT: addi s0, sp, 2032 545; RV32I-NEXT: .cfi_def_cfa s0, 0 546; RV32I-NEXT: lui a0, 2 547; RV32I-NEXT: addi a0, a0, -2032 548; RV32I-NEXT: sub sp, sp, a0 549; RV32I-NEXT: srli a0, sp, 12 550; RV32I-NEXT: slli sp, a0, 12 551; RV32I-NEXT: lui a0, 1 552; RV32I-NEXT: add a0, sp, a0 553; RV32I-NEXT: call callee@plt 554; RV32I-NEXT: lui a0, 2 555; RV32I-NEXT: sub sp, s0, a0 556; RV32I-NEXT: lui a0, 2 557; RV32I-NEXT: addi a0, a0, -2032 558; RV32I-NEXT: add sp, sp, a0 559; RV32I-NEXT: lw ra, 2028(sp) # 4-byte Folded Reload 560; RV32I-NEXT: lw s0, 2024(sp) # 4-byte Folded Reload 561; RV32I-NEXT: addi sp, sp, 2032 562; RV32I-NEXT: ret 563; 564; RV64I-LABEL: caller4096: 565; RV64I: # %bb.0: 566; RV64I-NEXT: addi sp, sp, -2032 567; RV64I-NEXT: .cfi_def_cfa_offset 2032 568; RV64I-NEXT: sd ra, 2024(sp) # 8-byte Folded Spill 569; RV64I-NEXT: sd s0, 2016(sp) # 8-byte Folded Spill 570; RV64I-NEXT: .cfi_offset ra, -8 571; RV64I-NEXT: .cfi_offset s0, -16 572; RV64I-NEXT: addi s0, sp, 2032 573; RV64I-NEXT: .cfi_def_cfa s0, 0 574; RV64I-NEXT: lui a0, 2 575; RV64I-NEXT: addiw a0, a0, -2032 576; RV64I-NEXT: sub sp, sp, a0 577; RV64I-NEXT: srli a0, sp, 12 578; RV64I-NEXT: slli sp, a0, 12 579; RV64I-NEXT: lui a0, 1 580; RV64I-NEXT: add a0, sp, a0 581; RV64I-NEXT: call callee@plt 582; RV64I-NEXT: lui a0, 2 583; RV64I-NEXT: sub sp, s0, a0 584; RV64I-NEXT: lui a0, 2 585; RV64I-NEXT: addiw a0, a0, -2032 586; RV64I-NEXT: add sp, sp, a0 587; RV64I-NEXT: ld ra, 2024(sp) # 8-byte Folded Reload 588; RV64I-NEXT: ld s0, 2016(sp) # 8-byte Folded Reload 589; RV64I-NEXT: addi sp, sp, 2032 590; RV64I-NEXT: ret 591 %1 = alloca i8, align 4096 592 call void @callee(i8* %1) 593 ret void 594} 595 596define void @caller_no_realign4096() "no-realign-stack" { 597; RV32I-LABEL: caller_no_realign4096: 598; RV32I: # %bb.0: 599; RV32I-NEXT: addi sp, sp, -16 600; RV32I-NEXT: .cfi_def_cfa_offset 16 601; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 602; RV32I-NEXT: .cfi_offset ra, -4 603; RV32I-NEXT: mv a0, sp 604; RV32I-NEXT: call callee@plt 605; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 606; RV32I-NEXT: addi sp, sp, 16 607; RV32I-NEXT: ret 608; 609; RV64I-LABEL: caller_no_realign4096: 610; RV64I: # %bb.0: 611; RV64I-NEXT: addi sp, sp, -16 612; RV64I-NEXT: .cfi_def_cfa_offset 16 613; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 614; RV64I-NEXT: .cfi_offset ra, -8 615; RV64I-NEXT: mv a0, sp 616; RV64I-NEXT: call callee@plt 617; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 618; RV64I-NEXT: addi sp, sp, 16 619; RV64I-NEXT: ret 620 %1 = alloca i8, align 4096 621 call void @callee(i8* %1) 622 ret void 623} 624