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