1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -mtriple=riscv32 -mattr=+zcmp -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s -check-prefixes=RV32IZCMP 4; RUN: llc -mtriple=riscv64 -mattr=+zcmp -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s -check-prefixes=RV64IZCMP 6; RUN: llc -mtriple=riscv32 -mattr=+zcmp,+save-restore \ 7; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV32IZCMP-SR 8; RUN: llc -mtriple=riscv64 -mattr=+zcmp,+save-restore \ 9; RUN: -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV64IZCMP-SR 10; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 11; RUN: | FileCheck -check-prefixes=RV32I %s 12; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 13; RUN: | FileCheck -check-prefixes=RV64I %s 14 15declare void @test(ptr) 16declare void @callee_void(ptr) 17declare i32 @callee(ptr) 18 19define i32 @foo() { 20; RV32IZCMP-LABEL: foo: 21; RV32IZCMP: # %bb.0: 22; RV32IZCMP-NEXT: cm.push {ra}, -64 23; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64 24; RV32IZCMP-NEXT: .cfi_offset ra, -4 25; RV32IZCMP-NEXT: addi sp, sp, -464 26; RV32IZCMP-NEXT: .cfi_def_cfa_offset 528 27; RV32IZCMP-NEXT: mv a0, sp 28; RV32IZCMP-NEXT: call test 29; RV32IZCMP-NEXT: addi sp, sp, 464 30; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64 31; RV32IZCMP-NEXT: cm.popretz {ra}, 64 32; 33; RV64IZCMP-LABEL: foo: 34; RV64IZCMP: # %bb.0: 35; RV64IZCMP-NEXT: cm.push {ra}, -64 36; RV64IZCMP-NEXT: .cfi_def_cfa_offset 64 37; RV64IZCMP-NEXT: .cfi_offset ra, -8 38; RV64IZCMP-NEXT: addi sp, sp, -464 39; RV64IZCMP-NEXT: .cfi_def_cfa_offset 528 40; RV64IZCMP-NEXT: mv a0, sp 41; RV64IZCMP-NEXT: call test 42; RV64IZCMP-NEXT: addi sp, sp, 464 43; RV64IZCMP-NEXT: .cfi_def_cfa_offset 64 44; RV64IZCMP-NEXT: cm.popretz {ra}, 64 45; 46; RV32IZCMP-SR-LABEL: foo: 47; RV32IZCMP-SR: # %bb.0: 48; RV32IZCMP-SR-NEXT: cm.push {ra}, -64 49; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 50; RV32IZCMP-SR-NEXT: .cfi_offset ra, -4 51; RV32IZCMP-SR-NEXT: addi sp, sp, -464 52; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 528 53; RV32IZCMP-SR-NEXT: mv a0, sp 54; RV32IZCMP-SR-NEXT: call test 55; RV32IZCMP-SR-NEXT: addi sp, sp, 464 56; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 57; RV32IZCMP-SR-NEXT: cm.popretz {ra}, 64 58; 59; RV64IZCMP-SR-LABEL: foo: 60; RV64IZCMP-SR: # %bb.0: 61; RV64IZCMP-SR-NEXT: cm.push {ra}, -64 62; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 63; RV64IZCMP-SR-NEXT: .cfi_offset ra, -8 64; RV64IZCMP-SR-NEXT: addi sp, sp, -464 65; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 528 66; RV64IZCMP-SR-NEXT: mv a0, sp 67; RV64IZCMP-SR-NEXT: call test 68; RV64IZCMP-SR-NEXT: addi sp, sp, 464 69; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 70; RV64IZCMP-SR-NEXT: cm.popretz {ra}, 64 71; 72; RV32I-LABEL: foo: 73; RV32I: # %bb.0: 74; RV32I-NEXT: addi sp, sp, -528 75; RV32I-NEXT: .cfi_def_cfa_offset 528 76; RV32I-NEXT: sw ra, 524(sp) # 4-byte Folded Spill 77; RV32I-NEXT: .cfi_offset ra, -4 78; RV32I-NEXT: addi a0, sp, 12 79; RV32I-NEXT: call test 80; RV32I-NEXT: li a0, 0 81; RV32I-NEXT: lw ra, 524(sp) # 4-byte Folded Reload 82; RV32I-NEXT: .cfi_restore ra 83; RV32I-NEXT: addi sp, sp, 528 84; RV32I-NEXT: .cfi_def_cfa_offset 0 85; RV32I-NEXT: ret 86; 87; RV64I-LABEL: foo: 88; RV64I: # %bb.0: 89; RV64I-NEXT: addi sp, sp, -528 90; RV64I-NEXT: .cfi_def_cfa_offset 528 91; RV64I-NEXT: sd ra, 520(sp) # 8-byte Folded Spill 92; RV64I-NEXT: .cfi_offset ra, -8 93; RV64I-NEXT: addi a0, sp, 8 94; RV64I-NEXT: call test 95; RV64I-NEXT: li a0, 0 96; RV64I-NEXT: ld ra, 520(sp) # 8-byte Folded Reload 97; RV64I-NEXT: .cfi_restore ra 98; RV64I-NEXT: addi sp, sp, 528 99; RV64I-NEXT: .cfi_def_cfa_offset 0 100; RV64I-NEXT: ret 101 %1 = alloca [512 x i8] 102 %2 = getelementptr [512 x i8], ptr %1, i32 0, i32 0 103 call void @test(ptr %2) 104 ret i32 0 105} 106 107define i32 @pushpopret0(i32 signext %size){ 108; RV32IZCMP-LABEL: pushpopret0: 109; RV32IZCMP: # %bb.0: # %entry 110; RV32IZCMP-NEXT: cm.push {ra, s0}, -16 111; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16 112; RV32IZCMP-NEXT: .cfi_offset ra, -8 113; RV32IZCMP-NEXT: .cfi_offset s0, -4 114; RV32IZCMP-NEXT: addi s0, sp, 16 115; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 116; RV32IZCMP-NEXT: addi a0, a0, 15 117; RV32IZCMP-NEXT: andi a0, a0, -16 118; RV32IZCMP-NEXT: sub a0, sp, a0 119; RV32IZCMP-NEXT: mv sp, a0 120; RV32IZCMP-NEXT: call callee_void 121; RV32IZCMP-NEXT: addi sp, s0, -16 122; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 123; RV32IZCMP-NEXT: cm.popretz {ra, s0}, 16 124; 125; RV64IZCMP-LABEL: pushpopret0: 126; RV64IZCMP: # %bb.0: # %entry 127; RV64IZCMP-NEXT: cm.push {ra, s0}, -16 128; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16 129; RV64IZCMP-NEXT: .cfi_offset ra, -16 130; RV64IZCMP-NEXT: .cfi_offset s0, -8 131; RV64IZCMP-NEXT: addi s0, sp, 16 132; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 133; RV64IZCMP-NEXT: slli a0, a0, 32 134; RV64IZCMP-NEXT: srli a0, a0, 32 135; RV64IZCMP-NEXT: addi a0, a0, 15 136; RV64IZCMP-NEXT: andi a0, a0, -16 137; RV64IZCMP-NEXT: sub a0, sp, a0 138; RV64IZCMP-NEXT: mv sp, a0 139; RV64IZCMP-NEXT: call callee_void 140; RV64IZCMP-NEXT: addi sp, s0, -16 141; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 142; RV64IZCMP-NEXT: cm.popretz {ra, s0}, 16 143; 144; RV32IZCMP-SR-LABEL: pushpopret0: 145; RV32IZCMP-SR: # %bb.0: # %entry 146; RV32IZCMP-SR-NEXT: cm.push {ra, s0}, -16 147; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 148; RV32IZCMP-SR-NEXT: .cfi_offset ra, -8 149; RV32IZCMP-SR-NEXT: .cfi_offset s0, -4 150; RV32IZCMP-SR-NEXT: addi s0, sp, 16 151; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 152; RV32IZCMP-SR-NEXT: addi a0, a0, 15 153; RV32IZCMP-SR-NEXT: andi a0, a0, -16 154; RV32IZCMP-SR-NEXT: sub a0, sp, a0 155; RV32IZCMP-SR-NEXT: mv sp, a0 156; RV32IZCMP-SR-NEXT: call callee_void 157; RV32IZCMP-SR-NEXT: addi sp, s0, -16 158; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 159; RV32IZCMP-SR-NEXT: cm.popretz {ra, s0}, 16 160; 161; RV64IZCMP-SR-LABEL: pushpopret0: 162; RV64IZCMP-SR: # %bb.0: # %entry 163; RV64IZCMP-SR-NEXT: cm.push {ra, s0}, -16 164; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 165; RV64IZCMP-SR-NEXT: .cfi_offset ra, -16 166; RV64IZCMP-SR-NEXT: .cfi_offset s0, -8 167; RV64IZCMP-SR-NEXT: addi s0, sp, 16 168; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 169; RV64IZCMP-SR-NEXT: slli a0, a0, 32 170; RV64IZCMP-SR-NEXT: srli a0, a0, 32 171; RV64IZCMP-SR-NEXT: addi a0, a0, 15 172; RV64IZCMP-SR-NEXT: andi a0, a0, -16 173; RV64IZCMP-SR-NEXT: sub a0, sp, a0 174; RV64IZCMP-SR-NEXT: mv sp, a0 175; RV64IZCMP-SR-NEXT: call callee_void 176; RV64IZCMP-SR-NEXT: addi sp, s0, -16 177; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 178; RV64IZCMP-SR-NEXT: cm.popretz {ra, s0}, 16 179; 180; RV32I-LABEL: pushpopret0: 181; RV32I: # %bb.0: # %entry 182; RV32I-NEXT: addi sp, sp, -16 183; RV32I-NEXT: .cfi_def_cfa_offset 16 184; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 185; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 186; RV32I-NEXT: .cfi_offset ra, -4 187; RV32I-NEXT: .cfi_offset s0, -8 188; RV32I-NEXT: addi s0, sp, 16 189; RV32I-NEXT: .cfi_def_cfa s0, 0 190; RV32I-NEXT: addi a0, a0, 15 191; RV32I-NEXT: andi a0, a0, -16 192; RV32I-NEXT: sub a0, sp, a0 193; RV32I-NEXT: mv sp, a0 194; RV32I-NEXT: call callee_void 195; RV32I-NEXT: li a0, 0 196; RV32I-NEXT: addi sp, s0, -16 197; RV32I-NEXT: .cfi_def_cfa sp, 16 198; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 199; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 200; RV32I-NEXT: .cfi_restore ra 201; RV32I-NEXT: .cfi_restore s0 202; RV32I-NEXT: addi sp, sp, 16 203; RV32I-NEXT: .cfi_def_cfa_offset 0 204; RV32I-NEXT: ret 205; 206; RV64I-LABEL: pushpopret0: 207; RV64I: # %bb.0: # %entry 208; RV64I-NEXT: addi sp, sp, -16 209; RV64I-NEXT: .cfi_def_cfa_offset 16 210; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 211; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 212; RV64I-NEXT: .cfi_offset ra, -8 213; RV64I-NEXT: .cfi_offset s0, -16 214; RV64I-NEXT: addi s0, sp, 16 215; RV64I-NEXT: .cfi_def_cfa s0, 0 216; RV64I-NEXT: slli a0, a0, 32 217; RV64I-NEXT: srli a0, a0, 32 218; RV64I-NEXT: addi a0, a0, 15 219; RV64I-NEXT: andi a0, a0, -16 220; RV64I-NEXT: sub a0, sp, a0 221; RV64I-NEXT: mv sp, a0 222; RV64I-NEXT: call callee_void 223; RV64I-NEXT: li a0, 0 224; RV64I-NEXT: addi sp, s0, -16 225; RV64I-NEXT: .cfi_def_cfa sp, 16 226; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 227; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 228; RV64I-NEXT: .cfi_restore ra 229; RV64I-NEXT: .cfi_restore s0 230; RV64I-NEXT: addi sp, sp, 16 231; RV64I-NEXT: .cfi_def_cfa_offset 0 232; RV64I-NEXT: ret 233entry: 234 %0 = alloca i8, i32 %size, align 16 235 call void @callee_void(ptr nonnull %0) 236 ret i32 0 237} 238 239define i32 @pushpopret1(i32 signext %size) { 240; RV32IZCMP-LABEL: pushpopret1: 241; RV32IZCMP: # %bb.0: # %entry 242; RV32IZCMP-NEXT: cm.push {ra, s0}, -16 243; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16 244; RV32IZCMP-NEXT: .cfi_offset ra, -8 245; RV32IZCMP-NEXT: .cfi_offset s0, -4 246; RV32IZCMP-NEXT: addi s0, sp, 16 247; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 248; RV32IZCMP-NEXT: addi a0, a0, 15 249; RV32IZCMP-NEXT: andi a0, a0, -16 250; RV32IZCMP-NEXT: sub a0, sp, a0 251; RV32IZCMP-NEXT: mv sp, a0 252; RV32IZCMP-NEXT: call callee_void 253; RV32IZCMP-NEXT: li a0, 1 254; RV32IZCMP-NEXT: addi sp, s0, -16 255; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 256; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 257; 258; RV64IZCMP-LABEL: pushpopret1: 259; RV64IZCMP: # %bb.0: # %entry 260; RV64IZCMP-NEXT: cm.push {ra, s0}, -16 261; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16 262; RV64IZCMP-NEXT: .cfi_offset ra, -16 263; RV64IZCMP-NEXT: .cfi_offset s0, -8 264; RV64IZCMP-NEXT: addi s0, sp, 16 265; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 266; RV64IZCMP-NEXT: slli a0, a0, 32 267; RV64IZCMP-NEXT: srli a0, a0, 32 268; RV64IZCMP-NEXT: addi a0, a0, 15 269; RV64IZCMP-NEXT: andi a0, a0, -16 270; RV64IZCMP-NEXT: sub a0, sp, a0 271; RV64IZCMP-NEXT: mv sp, a0 272; RV64IZCMP-NEXT: call callee_void 273; RV64IZCMP-NEXT: li a0, 1 274; RV64IZCMP-NEXT: addi sp, s0, -16 275; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 276; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 277; 278; RV32IZCMP-SR-LABEL: pushpopret1: 279; RV32IZCMP-SR: # %bb.0: # %entry 280; RV32IZCMP-SR-NEXT: cm.push {ra, s0}, -16 281; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 282; RV32IZCMP-SR-NEXT: .cfi_offset ra, -8 283; RV32IZCMP-SR-NEXT: .cfi_offset s0, -4 284; RV32IZCMP-SR-NEXT: addi s0, sp, 16 285; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 286; RV32IZCMP-SR-NEXT: addi a0, a0, 15 287; RV32IZCMP-SR-NEXT: andi a0, a0, -16 288; RV32IZCMP-SR-NEXT: sub a0, sp, a0 289; RV32IZCMP-SR-NEXT: mv sp, a0 290; RV32IZCMP-SR-NEXT: call callee_void 291; RV32IZCMP-SR-NEXT: li a0, 1 292; RV32IZCMP-SR-NEXT: addi sp, s0, -16 293; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 294; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 295; 296; RV64IZCMP-SR-LABEL: pushpopret1: 297; RV64IZCMP-SR: # %bb.0: # %entry 298; RV64IZCMP-SR-NEXT: cm.push {ra, s0}, -16 299; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 300; RV64IZCMP-SR-NEXT: .cfi_offset ra, -16 301; RV64IZCMP-SR-NEXT: .cfi_offset s0, -8 302; RV64IZCMP-SR-NEXT: addi s0, sp, 16 303; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 304; RV64IZCMP-SR-NEXT: slli a0, a0, 32 305; RV64IZCMP-SR-NEXT: srli a0, a0, 32 306; RV64IZCMP-SR-NEXT: addi a0, a0, 15 307; RV64IZCMP-SR-NEXT: andi a0, a0, -16 308; RV64IZCMP-SR-NEXT: sub a0, sp, a0 309; RV64IZCMP-SR-NEXT: mv sp, a0 310; RV64IZCMP-SR-NEXT: call callee_void 311; RV64IZCMP-SR-NEXT: li a0, 1 312; RV64IZCMP-SR-NEXT: addi sp, s0, -16 313; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 314; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 315; 316; RV32I-LABEL: pushpopret1: 317; RV32I: # %bb.0: # %entry 318; RV32I-NEXT: addi sp, sp, -16 319; RV32I-NEXT: .cfi_def_cfa_offset 16 320; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 321; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 322; RV32I-NEXT: .cfi_offset ra, -4 323; RV32I-NEXT: .cfi_offset s0, -8 324; RV32I-NEXT: addi s0, sp, 16 325; RV32I-NEXT: .cfi_def_cfa s0, 0 326; RV32I-NEXT: addi a0, a0, 15 327; RV32I-NEXT: andi a0, a0, -16 328; RV32I-NEXT: sub a0, sp, a0 329; RV32I-NEXT: mv sp, a0 330; RV32I-NEXT: call callee_void 331; RV32I-NEXT: li a0, 1 332; RV32I-NEXT: addi sp, s0, -16 333; RV32I-NEXT: .cfi_def_cfa sp, 16 334; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 335; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 336; RV32I-NEXT: .cfi_restore ra 337; RV32I-NEXT: .cfi_restore s0 338; RV32I-NEXT: addi sp, sp, 16 339; RV32I-NEXT: .cfi_def_cfa_offset 0 340; RV32I-NEXT: ret 341; 342; RV64I-LABEL: pushpopret1: 343; RV64I: # %bb.0: # %entry 344; RV64I-NEXT: addi sp, sp, -16 345; RV64I-NEXT: .cfi_def_cfa_offset 16 346; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 347; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 348; RV64I-NEXT: .cfi_offset ra, -8 349; RV64I-NEXT: .cfi_offset s0, -16 350; RV64I-NEXT: addi s0, sp, 16 351; RV64I-NEXT: .cfi_def_cfa s0, 0 352; RV64I-NEXT: slli a0, a0, 32 353; RV64I-NEXT: srli a0, a0, 32 354; RV64I-NEXT: addi a0, a0, 15 355; RV64I-NEXT: andi a0, a0, -16 356; RV64I-NEXT: sub a0, sp, a0 357; RV64I-NEXT: mv sp, a0 358; RV64I-NEXT: call callee_void 359; RV64I-NEXT: li a0, 1 360; RV64I-NEXT: addi sp, s0, -16 361; RV64I-NEXT: .cfi_def_cfa sp, 16 362; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 363; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 364; RV64I-NEXT: .cfi_restore ra 365; RV64I-NEXT: .cfi_restore s0 366; RV64I-NEXT: addi sp, sp, 16 367; RV64I-NEXT: .cfi_def_cfa_offset 0 368; RV64I-NEXT: ret 369entry: 370 %0 = alloca i8, i32 %size, align 16 371 call void @callee_void(ptr nonnull %0) 372 ret i32 1 373} 374 375define i32 @pushpopretneg1(i32 signext %size) { 376; RV32IZCMP-LABEL: pushpopretneg1: 377; RV32IZCMP: # %bb.0: # %entry 378; RV32IZCMP-NEXT: cm.push {ra, s0}, -16 379; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16 380; RV32IZCMP-NEXT: .cfi_offset ra, -8 381; RV32IZCMP-NEXT: .cfi_offset s0, -4 382; RV32IZCMP-NEXT: addi s0, sp, 16 383; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 384; RV32IZCMP-NEXT: addi a0, a0, 15 385; RV32IZCMP-NEXT: andi a0, a0, -16 386; RV32IZCMP-NEXT: sub a0, sp, a0 387; RV32IZCMP-NEXT: mv sp, a0 388; RV32IZCMP-NEXT: call callee_void 389; RV32IZCMP-NEXT: li a0, -1 390; RV32IZCMP-NEXT: addi sp, s0, -16 391; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 392; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 393; 394; RV64IZCMP-LABEL: pushpopretneg1: 395; RV64IZCMP: # %bb.0: # %entry 396; RV64IZCMP-NEXT: cm.push {ra, s0}, -16 397; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16 398; RV64IZCMP-NEXT: .cfi_offset ra, -16 399; RV64IZCMP-NEXT: .cfi_offset s0, -8 400; RV64IZCMP-NEXT: addi s0, sp, 16 401; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 402; RV64IZCMP-NEXT: slli a0, a0, 32 403; RV64IZCMP-NEXT: srli a0, a0, 32 404; RV64IZCMP-NEXT: addi a0, a0, 15 405; RV64IZCMP-NEXT: andi a0, a0, -16 406; RV64IZCMP-NEXT: sub a0, sp, a0 407; RV64IZCMP-NEXT: mv sp, a0 408; RV64IZCMP-NEXT: call callee_void 409; RV64IZCMP-NEXT: li a0, -1 410; RV64IZCMP-NEXT: addi sp, s0, -16 411; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 412; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 413; 414; RV32IZCMP-SR-LABEL: pushpopretneg1: 415; RV32IZCMP-SR: # %bb.0: # %entry 416; RV32IZCMP-SR-NEXT: cm.push {ra, s0}, -16 417; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 418; RV32IZCMP-SR-NEXT: .cfi_offset ra, -8 419; RV32IZCMP-SR-NEXT: .cfi_offset s0, -4 420; RV32IZCMP-SR-NEXT: addi s0, sp, 16 421; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 422; RV32IZCMP-SR-NEXT: addi a0, a0, 15 423; RV32IZCMP-SR-NEXT: andi a0, a0, -16 424; RV32IZCMP-SR-NEXT: sub a0, sp, a0 425; RV32IZCMP-SR-NEXT: mv sp, a0 426; RV32IZCMP-SR-NEXT: call callee_void 427; RV32IZCMP-SR-NEXT: li a0, -1 428; RV32IZCMP-SR-NEXT: addi sp, s0, -16 429; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 430; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 431; 432; RV64IZCMP-SR-LABEL: pushpopretneg1: 433; RV64IZCMP-SR: # %bb.0: # %entry 434; RV64IZCMP-SR-NEXT: cm.push {ra, s0}, -16 435; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 436; RV64IZCMP-SR-NEXT: .cfi_offset ra, -16 437; RV64IZCMP-SR-NEXT: .cfi_offset s0, -8 438; RV64IZCMP-SR-NEXT: addi s0, sp, 16 439; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 440; RV64IZCMP-SR-NEXT: slli a0, a0, 32 441; RV64IZCMP-SR-NEXT: srli a0, a0, 32 442; RV64IZCMP-SR-NEXT: addi a0, a0, 15 443; RV64IZCMP-SR-NEXT: andi a0, a0, -16 444; RV64IZCMP-SR-NEXT: sub a0, sp, a0 445; RV64IZCMP-SR-NEXT: mv sp, a0 446; RV64IZCMP-SR-NEXT: call callee_void 447; RV64IZCMP-SR-NEXT: li a0, -1 448; RV64IZCMP-SR-NEXT: addi sp, s0, -16 449; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 450; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 451; 452; RV32I-LABEL: pushpopretneg1: 453; RV32I: # %bb.0: # %entry 454; RV32I-NEXT: addi sp, sp, -16 455; RV32I-NEXT: .cfi_def_cfa_offset 16 456; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 457; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 458; RV32I-NEXT: .cfi_offset ra, -4 459; RV32I-NEXT: .cfi_offset s0, -8 460; RV32I-NEXT: addi s0, sp, 16 461; RV32I-NEXT: .cfi_def_cfa s0, 0 462; RV32I-NEXT: addi a0, a0, 15 463; RV32I-NEXT: andi a0, a0, -16 464; RV32I-NEXT: sub a0, sp, a0 465; RV32I-NEXT: mv sp, a0 466; RV32I-NEXT: call callee_void 467; RV32I-NEXT: li a0, -1 468; RV32I-NEXT: addi sp, s0, -16 469; RV32I-NEXT: .cfi_def_cfa sp, 16 470; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 471; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 472; RV32I-NEXT: .cfi_restore ra 473; RV32I-NEXT: .cfi_restore s0 474; RV32I-NEXT: addi sp, sp, 16 475; RV32I-NEXT: .cfi_def_cfa_offset 0 476; RV32I-NEXT: ret 477; 478; RV64I-LABEL: pushpopretneg1: 479; RV64I: # %bb.0: # %entry 480; RV64I-NEXT: addi sp, sp, -16 481; RV64I-NEXT: .cfi_def_cfa_offset 16 482; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 483; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 484; RV64I-NEXT: .cfi_offset ra, -8 485; RV64I-NEXT: .cfi_offset s0, -16 486; RV64I-NEXT: addi s0, sp, 16 487; RV64I-NEXT: .cfi_def_cfa s0, 0 488; RV64I-NEXT: slli a0, a0, 32 489; RV64I-NEXT: srli a0, a0, 32 490; RV64I-NEXT: addi a0, a0, 15 491; RV64I-NEXT: andi a0, a0, -16 492; RV64I-NEXT: sub a0, sp, a0 493; RV64I-NEXT: mv sp, a0 494; RV64I-NEXT: call callee_void 495; RV64I-NEXT: li a0, -1 496; RV64I-NEXT: addi sp, s0, -16 497; RV64I-NEXT: .cfi_def_cfa sp, 16 498; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 499; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 500; RV64I-NEXT: .cfi_restore ra 501; RV64I-NEXT: .cfi_restore s0 502; RV64I-NEXT: addi sp, sp, 16 503; RV64I-NEXT: .cfi_def_cfa_offset 0 504; RV64I-NEXT: ret 505entry: 506 %0 = alloca i8, i32 %size, align 16 507 call void @callee_void(ptr nonnull %0) 508 ret i32 -1 509} 510 511define i32 @pushpopret2(i32 signext %size) { 512; RV32IZCMP-LABEL: pushpopret2: 513; RV32IZCMP: # %bb.0: # %entry 514; RV32IZCMP-NEXT: cm.push {ra, s0}, -16 515; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16 516; RV32IZCMP-NEXT: .cfi_offset ra, -8 517; RV32IZCMP-NEXT: .cfi_offset s0, -4 518; RV32IZCMP-NEXT: addi s0, sp, 16 519; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 520; RV32IZCMP-NEXT: addi a0, a0, 15 521; RV32IZCMP-NEXT: andi a0, a0, -16 522; RV32IZCMP-NEXT: sub a0, sp, a0 523; RV32IZCMP-NEXT: mv sp, a0 524; RV32IZCMP-NEXT: call callee_void 525; RV32IZCMP-NEXT: li a0, 2 526; RV32IZCMP-NEXT: addi sp, s0, -16 527; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 528; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 529; 530; RV64IZCMP-LABEL: pushpopret2: 531; RV64IZCMP: # %bb.0: # %entry 532; RV64IZCMP-NEXT: cm.push {ra, s0}, -16 533; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16 534; RV64IZCMP-NEXT: .cfi_offset ra, -16 535; RV64IZCMP-NEXT: .cfi_offset s0, -8 536; RV64IZCMP-NEXT: addi s0, sp, 16 537; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 538; RV64IZCMP-NEXT: slli a0, a0, 32 539; RV64IZCMP-NEXT: srli a0, a0, 32 540; RV64IZCMP-NEXT: addi a0, a0, 15 541; RV64IZCMP-NEXT: andi a0, a0, -16 542; RV64IZCMP-NEXT: sub a0, sp, a0 543; RV64IZCMP-NEXT: mv sp, a0 544; RV64IZCMP-NEXT: call callee_void 545; RV64IZCMP-NEXT: li a0, 2 546; RV64IZCMP-NEXT: addi sp, s0, -16 547; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 548; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 549; 550; RV32IZCMP-SR-LABEL: pushpopret2: 551; RV32IZCMP-SR: # %bb.0: # %entry 552; RV32IZCMP-SR-NEXT: cm.push {ra, s0}, -16 553; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 554; RV32IZCMP-SR-NEXT: .cfi_offset ra, -8 555; RV32IZCMP-SR-NEXT: .cfi_offset s0, -4 556; RV32IZCMP-SR-NEXT: addi s0, sp, 16 557; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 558; RV32IZCMP-SR-NEXT: addi a0, a0, 15 559; RV32IZCMP-SR-NEXT: andi a0, a0, -16 560; RV32IZCMP-SR-NEXT: sub a0, sp, a0 561; RV32IZCMP-SR-NEXT: mv sp, a0 562; RV32IZCMP-SR-NEXT: call callee_void 563; RV32IZCMP-SR-NEXT: li a0, 2 564; RV32IZCMP-SR-NEXT: addi sp, s0, -16 565; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 566; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 567; 568; RV64IZCMP-SR-LABEL: pushpopret2: 569; RV64IZCMP-SR: # %bb.0: # %entry 570; RV64IZCMP-SR-NEXT: cm.push {ra, s0}, -16 571; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 572; RV64IZCMP-SR-NEXT: .cfi_offset ra, -16 573; RV64IZCMP-SR-NEXT: .cfi_offset s0, -8 574; RV64IZCMP-SR-NEXT: addi s0, sp, 16 575; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 576; RV64IZCMP-SR-NEXT: slli a0, a0, 32 577; RV64IZCMP-SR-NEXT: srli a0, a0, 32 578; RV64IZCMP-SR-NEXT: addi a0, a0, 15 579; RV64IZCMP-SR-NEXT: andi a0, a0, -16 580; RV64IZCMP-SR-NEXT: sub a0, sp, a0 581; RV64IZCMP-SR-NEXT: mv sp, a0 582; RV64IZCMP-SR-NEXT: call callee_void 583; RV64IZCMP-SR-NEXT: li a0, 2 584; RV64IZCMP-SR-NEXT: addi sp, s0, -16 585; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 586; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 587; 588; RV32I-LABEL: pushpopret2: 589; RV32I: # %bb.0: # %entry 590; RV32I-NEXT: addi sp, sp, -16 591; RV32I-NEXT: .cfi_def_cfa_offset 16 592; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 593; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 594; RV32I-NEXT: .cfi_offset ra, -4 595; RV32I-NEXT: .cfi_offset s0, -8 596; RV32I-NEXT: addi s0, sp, 16 597; RV32I-NEXT: .cfi_def_cfa s0, 0 598; RV32I-NEXT: addi a0, a0, 15 599; RV32I-NEXT: andi a0, a0, -16 600; RV32I-NEXT: sub a0, sp, a0 601; RV32I-NEXT: mv sp, a0 602; RV32I-NEXT: call callee_void 603; RV32I-NEXT: li a0, 2 604; RV32I-NEXT: addi sp, s0, -16 605; RV32I-NEXT: .cfi_def_cfa sp, 16 606; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 607; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 608; RV32I-NEXT: .cfi_restore ra 609; RV32I-NEXT: .cfi_restore s0 610; RV32I-NEXT: addi sp, sp, 16 611; RV32I-NEXT: .cfi_def_cfa_offset 0 612; RV32I-NEXT: ret 613; 614; RV64I-LABEL: pushpopret2: 615; RV64I: # %bb.0: # %entry 616; RV64I-NEXT: addi sp, sp, -16 617; RV64I-NEXT: .cfi_def_cfa_offset 16 618; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 619; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 620; RV64I-NEXT: .cfi_offset ra, -8 621; RV64I-NEXT: .cfi_offset s0, -16 622; RV64I-NEXT: addi s0, sp, 16 623; RV64I-NEXT: .cfi_def_cfa s0, 0 624; RV64I-NEXT: slli a0, a0, 32 625; RV64I-NEXT: srli a0, a0, 32 626; RV64I-NEXT: addi a0, a0, 15 627; RV64I-NEXT: andi a0, a0, -16 628; RV64I-NEXT: sub a0, sp, a0 629; RV64I-NEXT: mv sp, a0 630; RV64I-NEXT: call callee_void 631; RV64I-NEXT: li a0, 2 632; RV64I-NEXT: addi sp, s0, -16 633; RV64I-NEXT: .cfi_def_cfa sp, 16 634; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 635; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 636; RV64I-NEXT: .cfi_restore ra 637; RV64I-NEXT: .cfi_restore s0 638; RV64I-NEXT: addi sp, sp, 16 639; RV64I-NEXT: .cfi_def_cfa_offset 0 640; RV64I-NEXT: ret 641entry: 642 %0 = alloca i8, i32 %size, align 16 643 call void @callee_void(ptr nonnull %0) 644 ret i32 2 645} 646 647define dso_local i32 @tailcall(i32 signext %size) local_unnamed_addr #0 { 648; RV32IZCMP-LABEL: tailcall: 649; RV32IZCMP: # %bb.0: # %entry 650; RV32IZCMP-NEXT: cm.push {ra, s0}, -16 651; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16 652; RV32IZCMP-NEXT: .cfi_offset ra, -8 653; RV32IZCMP-NEXT: .cfi_offset s0, -4 654; RV32IZCMP-NEXT: addi s0, sp, 16 655; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 656; RV32IZCMP-NEXT: addi a0, a0, 15 657; RV32IZCMP-NEXT: andi a0, a0, -16 658; RV32IZCMP-NEXT: sub a0, sp, a0 659; RV32IZCMP-NEXT: mv sp, a0 660; RV32IZCMP-NEXT: addi sp, s0, -16 661; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 662; RV32IZCMP-NEXT: cm.pop {ra, s0}, 16 663; RV32IZCMP-NEXT: .cfi_restore ra 664; RV32IZCMP-NEXT: .cfi_restore s0 665; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 666; RV32IZCMP-NEXT: tail callee 667; 668; RV64IZCMP-LABEL: tailcall: 669; RV64IZCMP: # %bb.0: # %entry 670; RV64IZCMP-NEXT: cm.push {ra, s0}, -16 671; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16 672; RV64IZCMP-NEXT: .cfi_offset ra, -16 673; RV64IZCMP-NEXT: .cfi_offset s0, -8 674; RV64IZCMP-NEXT: addi s0, sp, 16 675; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 676; RV64IZCMP-NEXT: slli a0, a0, 32 677; RV64IZCMP-NEXT: srli a0, a0, 32 678; RV64IZCMP-NEXT: addi a0, a0, 15 679; RV64IZCMP-NEXT: andi a0, a0, -16 680; RV64IZCMP-NEXT: sub a0, sp, a0 681; RV64IZCMP-NEXT: mv sp, a0 682; RV64IZCMP-NEXT: addi sp, s0, -16 683; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 684; RV64IZCMP-NEXT: cm.pop {ra, s0}, 16 685; RV64IZCMP-NEXT: .cfi_restore ra 686; RV64IZCMP-NEXT: .cfi_restore s0 687; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 688; RV64IZCMP-NEXT: tail callee 689; 690; RV32IZCMP-SR-LABEL: tailcall: 691; RV32IZCMP-SR: # %bb.0: # %entry 692; RV32IZCMP-SR-NEXT: cm.push {ra, s0}, -16 693; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 694; RV32IZCMP-SR-NEXT: .cfi_offset ra, -8 695; RV32IZCMP-SR-NEXT: .cfi_offset s0, -4 696; RV32IZCMP-SR-NEXT: addi s0, sp, 16 697; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 698; RV32IZCMP-SR-NEXT: addi a0, a0, 15 699; RV32IZCMP-SR-NEXT: andi a0, a0, -16 700; RV32IZCMP-SR-NEXT: sub a0, sp, a0 701; RV32IZCMP-SR-NEXT: mv sp, a0 702; RV32IZCMP-SR-NEXT: addi sp, s0, -16 703; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 704; RV32IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 705; RV32IZCMP-SR-NEXT: .cfi_restore ra 706; RV32IZCMP-SR-NEXT: .cfi_restore s0 707; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 708; RV32IZCMP-SR-NEXT: tail callee 709; 710; RV64IZCMP-SR-LABEL: tailcall: 711; RV64IZCMP-SR: # %bb.0: # %entry 712; RV64IZCMP-SR-NEXT: cm.push {ra, s0}, -16 713; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 16 714; RV64IZCMP-SR-NEXT: .cfi_offset ra, -16 715; RV64IZCMP-SR-NEXT: .cfi_offset s0, -8 716; RV64IZCMP-SR-NEXT: addi s0, sp, 16 717; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 718; RV64IZCMP-SR-NEXT: slli a0, a0, 32 719; RV64IZCMP-SR-NEXT: srli a0, a0, 32 720; RV64IZCMP-SR-NEXT: addi a0, a0, 15 721; RV64IZCMP-SR-NEXT: andi a0, a0, -16 722; RV64IZCMP-SR-NEXT: sub a0, sp, a0 723; RV64IZCMP-SR-NEXT: mv sp, a0 724; RV64IZCMP-SR-NEXT: addi sp, s0, -16 725; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 726; RV64IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 727; RV64IZCMP-SR-NEXT: .cfi_restore ra 728; RV64IZCMP-SR-NEXT: .cfi_restore s0 729; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 730; RV64IZCMP-SR-NEXT: tail callee 731; 732; RV32I-LABEL: tailcall: 733; RV32I: # %bb.0: # %entry 734; RV32I-NEXT: addi sp, sp, -16 735; RV32I-NEXT: .cfi_def_cfa_offset 16 736; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 737; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 738; RV32I-NEXT: .cfi_offset ra, -4 739; RV32I-NEXT: .cfi_offset s0, -8 740; RV32I-NEXT: addi s0, sp, 16 741; RV32I-NEXT: .cfi_def_cfa s0, 0 742; RV32I-NEXT: addi a0, a0, 15 743; RV32I-NEXT: andi a0, a0, -16 744; RV32I-NEXT: sub a0, sp, a0 745; RV32I-NEXT: mv sp, a0 746; RV32I-NEXT: addi sp, s0, -16 747; RV32I-NEXT: .cfi_def_cfa sp, 16 748; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 749; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 750; RV32I-NEXT: .cfi_restore ra 751; RV32I-NEXT: .cfi_restore s0 752; RV32I-NEXT: addi sp, sp, 16 753; RV32I-NEXT: .cfi_def_cfa_offset 0 754; RV32I-NEXT: tail callee 755; 756; RV64I-LABEL: tailcall: 757; RV64I: # %bb.0: # %entry 758; RV64I-NEXT: addi sp, sp, -16 759; RV64I-NEXT: .cfi_def_cfa_offset 16 760; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 761; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 762; RV64I-NEXT: .cfi_offset ra, -8 763; RV64I-NEXT: .cfi_offset s0, -16 764; RV64I-NEXT: addi s0, sp, 16 765; RV64I-NEXT: .cfi_def_cfa s0, 0 766; RV64I-NEXT: slli a0, a0, 32 767; RV64I-NEXT: srli a0, a0, 32 768; RV64I-NEXT: addi a0, a0, 15 769; RV64I-NEXT: andi a0, a0, -16 770; RV64I-NEXT: sub a0, sp, a0 771; RV64I-NEXT: mv sp, a0 772; RV64I-NEXT: addi sp, s0, -16 773; RV64I-NEXT: .cfi_def_cfa sp, 16 774; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 775; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 776; RV64I-NEXT: .cfi_restore ra 777; RV64I-NEXT: .cfi_restore s0 778; RV64I-NEXT: addi sp, sp, 16 779; RV64I-NEXT: .cfi_def_cfa_offset 0 780; RV64I-NEXT: tail callee 781entry: 782 %0 = alloca i8, i32 %size, align 16 783 %1 = tail call i32 @callee(ptr nonnull %0) 784 ret i32 %1 785} 786 787@var = global [5 x i32] zeroinitializer 788define i32 @nocompress(i32 signext %size) { 789; RV32IZCMP-LABEL: nocompress: 790; RV32IZCMP: # %bb.0: # %entry 791; RV32IZCMP-NEXT: cm.push {ra, s0-s8}, -48 792; RV32IZCMP-NEXT: .cfi_def_cfa_offset 48 793; RV32IZCMP-NEXT: .cfi_offset ra, -40 794; RV32IZCMP-NEXT: .cfi_offset s0, -36 795; RV32IZCMP-NEXT: .cfi_offset s1, -32 796; RV32IZCMP-NEXT: .cfi_offset s2, -28 797; RV32IZCMP-NEXT: .cfi_offset s3, -24 798; RV32IZCMP-NEXT: .cfi_offset s4, -20 799; RV32IZCMP-NEXT: .cfi_offset s5, -16 800; RV32IZCMP-NEXT: .cfi_offset s6, -12 801; RV32IZCMP-NEXT: .cfi_offset s7, -8 802; RV32IZCMP-NEXT: .cfi_offset s8, -4 803; RV32IZCMP-NEXT: addi s0, sp, 48 804; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 805; RV32IZCMP-NEXT: addi a0, a0, 15 806; RV32IZCMP-NEXT: andi a0, a0, -16 807; RV32IZCMP-NEXT: sub s2, sp, a0 808; RV32IZCMP-NEXT: mv sp, s2 809; RV32IZCMP-NEXT: lui s1, %hi(var) 810; RV32IZCMP-NEXT: lw s3, %lo(var)(s1) 811; RV32IZCMP-NEXT: lw s4, %lo(var+4)(s1) 812; RV32IZCMP-NEXT: lw s5, %lo(var+8)(s1) 813; RV32IZCMP-NEXT: lw s6, %lo(var+12)(s1) 814; RV32IZCMP-NEXT: addi s7, s1, %lo(var) 815; RV32IZCMP-NEXT: lw s8, 16(s7) 816; RV32IZCMP-NEXT: mv a0, s2 817; RV32IZCMP-NEXT: call callee_void 818; RV32IZCMP-NEXT: sw s8, 16(s7) 819; RV32IZCMP-NEXT: sw s6, %lo(var+12)(s1) 820; RV32IZCMP-NEXT: sw s5, %lo(var+8)(s1) 821; RV32IZCMP-NEXT: sw s4, %lo(var+4)(s1) 822; RV32IZCMP-NEXT: sw s3, %lo(var)(s1) 823; RV32IZCMP-NEXT: mv a0, s2 824; RV32IZCMP-NEXT: addi sp, s0, -48 825; RV32IZCMP-NEXT: .cfi_def_cfa sp, 48 826; RV32IZCMP-NEXT: cm.pop {ra, s0-s8}, 48 827; RV32IZCMP-NEXT: .cfi_restore ra 828; RV32IZCMP-NEXT: .cfi_restore s0 829; RV32IZCMP-NEXT: .cfi_restore s1 830; RV32IZCMP-NEXT: .cfi_restore s2 831; RV32IZCMP-NEXT: .cfi_restore s3 832; RV32IZCMP-NEXT: .cfi_restore s4 833; RV32IZCMP-NEXT: .cfi_restore s5 834; RV32IZCMP-NEXT: .cfi_restore s6 835; RV32IZCMP-NEXT: .cfi_restore s7 836; RV32IZCMP-NEXT: .cfi_restore s8 837; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 838; RV32IZCMP-NEXT: tail callee 839; 840; RV64IZCMP-LABEL: nocompress: 841; RV64IZCMP: # %bb.0: # %entry 842; RV64IZCMP-NEXT: cm.push {ra, s0-s8}, -80 843; RV64IZCMP-NEXT: .cfi_def_cfa_offset 80 844; RV64IZCMP-NEXT: .cfi_offset ra, -80 845; RV64IZCMP-NEXT: .cfi_offset s0, -72 846; RV64IZCMP-NEXT: .cfi_offset s1, -64 847; RV64IZCMP-NEXT: .cfi_offset s2, -56 848; RV64IZCMP-NEXT: .cfi_offset s3, -48 849; RV64IZCMP-NEXT: .cfi_offset s4, -40 850; RV64IZCMP-NEXT: .cfi_offset s5, -32 851; RV64IZCMP-NEXT: .cfi_offset s6, -24 852; RV64IZCMP-NEXT: .cfi_offset s7, -16 853; RV64IZCMP-NEXT: .cfi_offset s8, -8 854; RV64IZCMP-NEXT: addi s0, sp, 80 855; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 856; RV64IZCMP-NEXT: slli a0, a0, 32 857; RV64IZCMP-NEXT: srli a0, a0, 32 858; RV64IZCMP-NEXT: addi a0, a0, 15 859; RV64IZCMP-NEXT: andi a0, a0, -16 860; RV64IZCMP-NEXT: sub s2, sp, a0 861; RV64IZCMP-NEXT: mv sp, s2 862; RV64IZCMP-NEXT: lui s1, %hi(var) 863; RV64IZCMP-NEXT: lw s3, %lo(var)(s1) 864; RV64IZCMP-NEXT: lw s4, %lo(var+4)(s1) 865; RV64IZCMP-NEXT: lw s5, %lo(var+8)(s1) 866; RV64IZCMP-NEXT: lw s6, %lo(var+12)(s1) 867; RV64IZCMP-NEXT: addi s7, s1, %lo(var) 868; RV64IZCMP-NEXT: lw s8, 16(s7) 869; RV64IZCMP-NEXT: mv a0, s2 870; RV64IZCMP-NEXT: call callee_void 871; RV64IZCMP-NEXT: sw s8, 16(s7) 872; RV64IZCMP-NEXT: sw s6, %lo(var+12)(s1) 873; RV64IZCMP-NEXT: sw s5, %lo(var+8)(s1) 874; RV64IZCMP-NEXT: sw s4, %lo(var+4)(s1) 875; RV64IZCMP-NEXT: sw s3, %lo(var)(s1) 876; RV64IZCMP-NEXT: mv a0, s2 877; RV64IZCMP-NEXT: addi sp, s0, -80 878; RV64IZCMP-NEXT: .cfi_def_cfa sp, 80 879; RV64IZCMP-NEXT: cm.pop {ra, s0-s8}, 80 880; RV64IZCMP-NEXT: .cfi_restore ra 881; RV64IZCMP-NEXT: .cfi_restore s0 882; RV64IZCMP-NEXT: .cfi_restore s1 883; RV64IZCMP-NEXT: .cfi_restore s2 884; RV64IZCMP-NEXT: .cfi_restore s3 885; RV64IZCMP-NEXT: .cfi_restore s4 886; RV64IZCMP-NEXT: .cfi_restore s5 887; RV64IZCMP-NEXT: .cfi_restore s6 888; RV64IZCMP-NEXT: .cfi_restore s7 889; RV64IZCMP-NEXT: .cfi_restore s8 890; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 891; RV64IZCMP-NEXT: tail callee 892; 893; RV32IZCMP-SR-LABEL: nocompress: 894; RV32IZCMP-SR: # %bb.0: # %entry 895; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s8}, -48 896; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 48 897; RV32IZCMP-SR-NEXT: .cfi_offset ra, -40 898; RV32IZCMP-SR-NEXT: .cfi_offset s0, -36 899; RV32IZCMP-SR-NEXT: .cfi_offset s1, -32 900; RV32IZCMP-SR-NEXT: .cfi_offset s2, -28 901; RV32IZCMP-SR-NEXT: .cfi_offset s3, -24 902; RV32IZCMP-SR-NEXT: .cfi_offset s4, -20 903; RV32IZCMP-SR-NEXT: .cfi_offset s5, -16 904; RV32IZCMP-SR-NEXT: .cfi_offset s6, -12 905; RV32IZCMP-SR-NEXT: .cfi_offset s7, -8 906; RV32IZCMP-SR-NEXT: .cfi_offset s8, -4 907; RV32IZCMP-SR-NEXT: addi s0, sp, 48 908; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 909; RV32IZCMP-SR-NEXT: addi a0, a0, 15 910; RV32IZCMP-SR-NEXT: andi a0, a0, -16 911; RV32IZCMP-SR-NEXT: sub s2, sp, a0 912; RV32IZCMP-SR-NEXT: mv sp, s2 913; RV32IZCMP-SR-NEXT: lui s1, %hi(var) 914; RV32IZCMP-SR-NEXT: lw s3, %lo(var)(s1) 915; RV32IZCMP-SR-NEXT: lw s4, %lo(var+4)(s1) 916; RV32IZCMP-SR-NEXT: lw s5, %lo(var+8)(s1) 917; RV32IZCMP-SR-NEXT: lw s6, %lo(var+12)(s1) 918; RV32IZCMP-SR-NEXT: addi s7, s1, %lo(var) 919; RV32IZCMP-SR-NEXT: lw s8, 16(s7) 920; RV32IZCMP-SR-NEXT: mv a0, s2 921; RV32IZCMP-SR-NEXT: call callee_void 922; RV32IZCMP-SR-NEXT: sw s8, 16(s7) 923; RV32IZCMP-SR-NEXT: sw s6, %lo(var+12)(s1) 924; RV32IZCMP-SR-NEXT: sw s5, %lo(var+8)(s1) 925; RV32IZCMP-SR-NEXT: sw s4, %lo(var+4)(s1) 926; RV32IZCMP-SR-NEXT: sw s3, %lo(var)(s1) 927; RV32IZCMP-SR-NEXT: mv a0, s2 928; RV32IZCMP-SR-NEXT: addi sp, s0, -48 929; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 48 930; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s8}, 48 931; RV32IZCMP-SR-NEXT: .cfi_restore ra 932; RV32IZCMP-SR-NEXT: .cfi_restore s0 933; RV32IZCMP-SR-NEXT: .cfi_restore s1 934; RV32IZCMP-SR-NEXT: .cfi_restore s2 935; RV32IZCMP-SR-NEXT: .cfi_restore s3 936; RV32IZCMP-SR-NEXT: .cfi_restore s4 937; RV32IZCMP-SR-NEXT: .cfi_restore s5 938; RV32IZCMP-SR-NEXT: .cfi_restore s6 939; RV32IZCMP-SR-NEXT: .cfi_restore s7 940; RV32IZCMP-SR-NEXT: .cfi_restore s8 941; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 942; RV32IZCMP-SR-NEXT: tail callee 943; 944; RV64IZCMP-SR-LABEL: nocompress: 945; RV64IZCMP-SR: # %bb.0: # %entry 946; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s8}, -80 947; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 80 948; RV64IZCMP-SR-NEXT: .cfi_offset ra, -80 949; RV64IZCMP-SR-NEXT: .cfi_offset s0, -72 950; RV64IZCMP-SR-NEXT: .cfi_offset s1, -64 951; RV64IZCMP-SR-NEXT: .cfi_offset s2, -56 952; RV64IZCMP-SR-NEXT: .cfi_offset s3, -48 953; RV64IZCMP-SR-NEXT: .cfi_offset s4, -40 954; RV64IZCMP-SR-NEXT: .cfi_offset s5, -32 955; RV64IZCMP-SR-NEXT: .cfi_offset s6, -24 956; RV64IZCMP-SR-NEXT: .cfi_offset s7, -16 957; RV64IZCMP-SR-NEXT: .cfi_offset s8, -8 958; RV64IZCMP-SR-NEXT: addi s0, sp, 80 959; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 960; RV64IZCMP-SR-NEXT: slli a0, a0, 32 961; RV64IZCMP-SR-NEXT: srli a0, a0, 32 962; RV64IZCMP-SR-NEXT: addi a0, a0, 15 963; RV64IZCMP-SR-NEXT: andi a0, a0, -16 964; RV64IZCMP-SR-NEXT: sub s2, sp, a0 965; RV64IZCMP-SR-NEXT: mv sp, s2 966; RV64IZCMP-SR-NEXT: lui s1, %hi(var) 967; RV64IZCMP-SR-NEXT: lw s3, %lo(var)(s1) 968; RV64IZCMP-SR-NEXT: lw s4, %lo(var+4)(s1) 969; RV64IZCMP-SR-NEXT: lw s5, %lo(var+8)(s1) 970; RV64IZCMP-SR-NEXT: lw s6, %lo(var+12)(s1) 971; RV64IZCMP-SR-NEXT: addi s7, s1, %lo(var) 972; RV64IZCMP-SR-NEXT: lw s8, 16(s7) 973; RV64IZCMP-SR-NEXT: mv a0, s2 974; RV64IZCMP-SR-NEXT: call callee_void 975; RV64IZCMP-SR-NEXT: sw s8, 16(s7) 976; RV64IZCMP-SR-NEXT: sw s6, %lo(var+12)(s1) 977; RV64IZCMP-SR-NEXT: sw s5, %lo(var+8)(s1) 978; RV64IZCMP-SR-NEXT: sw s4, %lo(var+4)(s1) 979; RV64IZCMP-SR-NEXT: sw s3, %lo(var)(s1) 980; RV64IZCMP-SR-NEXT: mv a0, s2 981; RV64IZCMP-SR-NEXT: addi sp, s0, -80 982; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 80 983; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s8}, 80 984; RV64IZCMP-SR-NEXT: .cfi_restore ra 985; RV64IZCMP-SR-NEXT: .cfi_restore s0 986; RV64IZCMP-SR-NEXT: .cfi_restore s1 987; RV64IZCMP-SR-NEXT: .cfi_restore s2 988; RV64IZCMP-SR-NEXT: .cfi_restore s3 989; RV64IZCMP-SR-NEXT: .cfi_restore s4 990; RV64IZCMP-SR-NEXT: .cfi_restore s5 991; RV64IZCMP-SR-NEXT: .cfi_restore s6 992; RV64IZCMP-SR-NEXT: .cfi_restore s7 993; RV64IZCMP-SR-NEXT: .cfi_restore s8 994; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 995; RV64IZCMP-SR-NEXT: tail callee 996; 997; RV32I-LABEL: nocompress: 998; RV32I: # %bb.0: # %entry 999; RV32I-NEXT: addi sp, sp, -48 1000; RV32I-NEXT: .cfi_def_cfa_offset 48 1001; RV32I-NEXT: sw ra, 44(sp) # 4-byte Folded Spill 1002; RV32I-NEXT: sw s0, 40(sp) # 4-byte Folded Spill 1003; RV32I-NEXT: sw s1, 36(sp) # 4-byte Folded Spill 1004; RV32I-NEXT: sw s2, 32(sp) # 4-byte Folded Spill 1005; RV32I-NEXT: sw s3, 28(sp) # 4-byte Folded Spill 1006; RV32I-NEXT: sw s4, 24(sp) # 4-byte Folded Spill 1007; RV32I-NEXT: sw s5, 20(sp) # 4-byte Folded Spill 1008; RV32I-NEXT: sw s6, 16(sp) # 4-byte Folded Spill 1009; RV32I-NEXT: sw s7, 12(sp) # 4-byte Folded Spill 1010; RV32I-NEXT: sw s8, 8(sp) # 4-byte Folded Spill 1011; RV32I-NEXT: .cfi_offset ra, -4 1012; RV32I-NEXT: .cfi_offset s0, -8 1013; RV32I-NEXT: .cfi_offset s1, -12 1014; RV32I-NEXT: .cfi_offset s2, -16 1015; RV32I-NEXT: .cfi_offset s3, -20 1016; RV32I-NEXT: .cfi_offset s4, -24 1017; RV32I-NEXT: .cfi_offset s5, -28 1018; RV32I-NEXT: .cfi_offset s6, -32 1019; RV32I-NEXT: .cfi_offset s7, -36 1020; RV32I-NEXT: .cfi_offset s8, -40 1021; RV32I-NEXT: addi s0, sp, 48 1022; RV32I-NEXT: .cfi_def_cfa s0, 0 1023; RV32I-NEXT: addi a0, a0, 15 1024; RV32I-NEXT: andi a0, a0, -16 1025; RV32I-NEXT: sub s1, sp, a0 1026; RV32I-NEXT: mv sp, s1 1027; RV32I-NEXT: lui s2, %hi(var) 1028; RV32I-NEXT: lw s3, %lo(var)(s2) 1029; RV32I-NEXT: lw s4, %lo(var+4)(s2) 1030; RV32I-NEXT: lw s5, %lo(var+8)(s2) 1031; RV32I-NEXT: lw s6, %lo(var+12)(s2) 1032; RV32I-NEXT: addi s7, s2, %lo(var) 1033; RV32I-NEXT: lw s8, 16(s7) 1034; RV32I-NEXT: mv a0, s1 1035; RV32I-NEXT: call callee_void 1036; RV32I-NEXT: sw s8, 16(s7) 1037; RV32I-NEXT: sw s6, %lo(var+12)(s2) 1038; RV32I-NEXT: sw s5, %lo(var+8)(s2) 1039; RV32I-NEXT: sw s4, %lo(var+4)(s2) 1040; RV32I-NEXT: sw s3, %lo(var)(s2) 1041; RV32I-NEXT: mv a0, s1 1042; RV32I-NEXT: addi sp, s0, -48 1043; RV32I-NEXT: .cfi_def_cfa sp, 48 1044; RV32I-NEXT: lw ra, 44(sp) # 4-byte Folded Reload 1045; RV32I-NEXT: lw s0, 40(sp) # 4-byte Folded Reload 1046; RV32I-NEXT: lw s1, 36(sp) # 4-byte Folded Reload 1047; RV32I-NEXT: lw s2, 32(sp) # 4-byte Folded Reload 1048; RV32I-NEXT: lw s3, 28(sp) # 4-byte Folded Reload 1049; RV32I-NEXT: lw s4, 24(sp) # 4-byte Folded Reload 1050; RV32I-NEXT: lw s5, 20(sp) # 4-byte Folded Reload 1051; RV32I-NEXT: lw s6, 16(sp) # 4-byte Folded Reload 1052; RV32I-NEXT: lw s7, 12(sp) # 4-byte Folded Reload 1053; RV32I-NEXT: lw s8, 8(sp) # 4-byte Folded Reload 1054; RV32I-NEXT: .cfi_restore ra 1055; RV32I-NEXT: .cfi_restore s0 1056; RV32I-NEXT: .cfi_restore s1 1057; RV32I-NEXT: .cfi_restore s2 1058; RV32I-NEXT: .cfi_restore s3 1059; RV32I-NEXT: .cfi_restore s4 1060; RV32I-NEXT: .cfi_restore s5 1061; RV32I-NEXT: .cfi_restore s6 1062; RV32I-NEXT: .cfi_restore s7 1063; RV32I-NEXT: .cfi_restore s8 1064; RV32I-NEXT: addi sp, sp, 48 1065; RV32I-NEXT: .cfi_def_cfa_offset 0 1066; RV32I-NEXT: tail callee 1067; 1068; RV64I-LABEL: nocompress: 1069; RV64I: # %bb.0: # %entry 1070; RV64I-NEXT: addi sp, sp, -80 1071; RV64I-NEXT: .cfi_def_cfa_offset 80 1072; RV64I-NEXT: sd ra, 72(sp) # 8-byte Folded Spill 1073; RV64I-NEXT: sd s0, 64(sp) # 8-byte Folded Spill 1074; RV64I-NEXT: sd s1, 56(sp) # 8-byte Folded Spill 1075; RV64I-NEXT: sd s2, 48(sp) # 8-byte Folded Spill 1076; RV64I-NEXT: sd s3, 40(sp) # 8-byte Folded Spill 1077; RV64I-NEXT: sd s4, 32(sp) # 8-byte Folded Spill 1078; RV64I-NEXT: sd s5, 24(sp) # 8-byte Folded Spill 1079; RV64I-NEXT: sd s6, 16(sp) # 8-byte Folded Spill 1080; RV64I-NEXT: sd s7, 8(sp) # 8-byte Folded Spill 1081; RV64I-NEXT: sd s8, 0(sp) # 8-byte Folded Spill 1082; RV64I-NEXT: .cfi_offset ra, -8 1083; RV64I-NEXT: .cfi_offset s0, -16 1084; RV64I-NEXT: .cfi_offset s1, -24 1085; RV64I-NEXT: .cfi_offset s2, -32 1086; RV64I-NEXT: .cfi_offset s3, -40 1087; RV64I-NEXT: .cfi_offset s4, -48 1088; RV64I-NEXT: .cfi_offset s5, -56 1089; RV64I-NEXT: .cfi_offset s6, -64 1090; RV64I-NEXT: .cfi_offset s7, -72 1091; RV64I-NEXT: .cfi_offset s8, -80 1092; RV64I-NEXT: addi s0, sp, 80 1093; RV64I-NEXT: .cfi_def_cfa s0, 0 1094; RV64I-NEXT: slli a0, a0, 32 1095; RV64I-NEXT: srli a0, a0, 32 1096; RV64I-NEXT: addi a0, a0, 15 1097; RV64I-NEXT: andi a0, a0, -16 1098; RV64I-NEXT: sub s1, sp, a0 1099; RV64I-NEXT: mv sp, s1 1100; RV64I-NEXT: lui s2, %hi(var) 1101; RV64I-NEXT: lw s3, %lo(var)(s2) 1102; RV64I-NEXT: lw s4, %lo(var+4)(s2) 1103; RV64I-NEXT: lw s5, %lo(var+8)(s2) 1104; RV64I-NEXT: lw s6, %lo(var+12)(s2) 1105; RV64I-NEXT: addi s7, s2, %lo(var) 1106; RV64I-NEXT: lw s8, 16(s7) 1107; RV64I-NEXT: mv a0, s1 1108; RV64I-NEXT: call callee_void 1109; RV64I-NEXT: sw s8, 16(s7) 1110; RV64I-NEXT: sw s6, %lo(var+12)(s2) 1111; RV64I-NEXT: sw s5, %lo(var+8)(s2) 1112; RV64I-NEXT: sw s4, %lo(var+4)(s2) 1113; RV64I-NEXT: sw s3, %lo(var)(s2) 1114; RV64I-NEXT: mv a0, s1 1115; RV64I-NEXT: addi sp, s0, -80 1116; RV64I-NEXT: .cfi_def_cfa sp, 80 1117; RV64I-NEXT: ld ra, 72(sp) # 8-byte Folded Reload 1118; RV64I-NEXT: ld s0, 64(sp) # 8-byte Folded Reload 1119; RV64I-NEXT: ld s1, 56(sp) # 8-byte Folded Reload 1120; RV64I-NEXT: ld s2, 48(sp) # 8-byte Folded Reload 1121; RV64I-NEXT: ld s3, 40(sp) # 8-byte Folded Reload 1122; RV64I-NEXT: ld s4, 32(sp) # 8-byte Folded Reload 1123; RV64I-NEXT: ld s5, 24(sp) # 8-byte Folded Reload 1124; RV64I-NEXT: ld s6, 16(sp) # 8-byte Folded Reload 1125; RV64I-NEXT: ld s7, 8(sp) # 8-byte Folded Reload 1126; RV64I-NEXT: ld s8, 0(sp) # 8-byte Folded Reload 1127; RV64I-NEXT: .cfi_restore ra 1128; RV64I-NEXT: .cfi_restore s0 1129; RV64I-NEXT: .cfi_restore s1 1130; RV64I-NEXT: .cfi_restore s2 1131; RV64I-NEXT: .cfi_restore s3 1132; RV64I-NEXT: .cfi_restore s4 1133; RV64I-NEXT: .cfi_restore s5 1134; RV64I-NEXT: .cfi_restore s6 1135; RV64I-NEXT: .cfi_restore s7 1136; RV64I-NEXT: .cfi_restore s8 1137; RV64I-NEXT: addi sp, sp, 80 1138; RV64I-NEXT: .cfi_def_cfa_offset 0 1139; RV64I-NEXT: tail callee 1140entry: 1141 %0 = alloca i8, i32 %size, align 16 1142 %val = load [5 x i32], ptr @var 1143 call void @callee_void(ptr nonnull %0) 1144 store volatile [5 x i32] %val, ptr @var 1145 %1 = tail call i32 @callee(ptr nonnull %0) 1146 ret i32 %1 1147} 1148 1149; Check that functions with varargs do not use save/restore code 1150 1151declare void @llvm.va_start(ptr) 1152declare void @llvm.va_end(ptr) 1153 1154define i32 @varargs(ptr %fmt, ...) nounwind { 1155; RV32IZCMP-LABEL: varargs: 1156; RV32IZCMP: # %bb.0: 1157; RV32IZCMP-NEXT: addi sp, sp, -48 1158; RV32IZCMP-NEXT: mv a0, a1 1159; RV32IZCMP-NEXT: sw a5, 36(sp) 1160; RV32IZCMP-NEXT: sw a6, 40(sp) 1161; RV32IZCMP-NEXT: sw a7, 44(sp) 1162; RV32IZCMP-NEXT: sw a1, 20(sp) 1163; RV32IZCMP-NEXT: sw a2, 24(sp) 1164; RV32IZCMP-NEXT: sw a3, 28(sp) 1165; RV32IZCMP-NEXT: sw a4, 32(sp) 1166; RV32IZCMP-NEXT: addi a1, sp, 24 1167; RV32IZCMP-NEXT: sw a1, 12(sp) 1168; RV32IZCMP-NEXT: addi sp, sp, 48 1169; RV32IZCMP-NEXT: ret 1170; 1171; RV64IZCMP-LABEL: varargs: 1172; RV64IZCMP: # %bb.0: 1173; RV64IZCMP-NEXT: addi sp, sp, -80 1174; RV64IZCMP-NEXT: sd a1, 24(sp) 1175; RV64IZCMP-NEXT: addi a0, sp, 28 1176; RV64IZCMP-NEXT: sd a0, 8(sp) 1177; RV64IZCMP-NEXT: lw a0, 24(sp) 1178; RV64IZCMP-NEXT: sd a5, 56(sp) 1179; RV64IZCMP-NEXT: sd a6, 64(sp) 1180; RV64IZCMP-NEXT: sd a7, 72(sp) 1181; RV64IZCMP-NEXT: sd a2, 32(sp) 1182; RV64IZCMP-NEXT: sd a3, 40(sp) 1183; RV64IZCMP-NEXT: sd a4, 48(sp) 1184; RV64IZCMP-NEXT: addi sp, sp, 80 1185; RV64IZCMP-NEXT: ret 1186; 1187; RV32IZCMP-SR-LABEL: varargs: 1188; RV32IZCMP-SR: # %bb.0: 1189; RV32IZCMP-SR-NEXT: addi sp, sp, -48 1190; RV32IZCMP-SR-NEXT: mv a0, a1 1191; RV32IZCMP-SR-NEXT: sw a5, 36(sp) 1192; RV32IZCMP-SR-NEXT: sw a6, 40(sp) 1193; RV32IZCMP-SR-NEXT: sw a7, 44(sp) 1194; RV32IZCMP-SR-NEXT: sw a1, 20(sp) 1195; RV32IZCMP-SR-NEXT: sw a2, 24(sp) 1196; RV32IZCMP-SR-NEXT: sw a3, 28(sp) 1197; RV32IZCMP-SR-NEXT: sw a4, 32(sp) 1198; RV32IZCMP-SR-NEXT: addi a1, sp, 24 1199; RV32IZCMP-SR-NEXT: sw a1, 12(sp) 1200; RV32IZCMP-SR-NEXT: addi sp, sp, 48 1201; RV32IZCMP-SR-NEXT: ret 1202; 1203; RV64IZCMP-SR-LABEL: varargs: 1204; RV64IZCMP-SR: # %bb.0: 1205; RV64IZCMP-SR-NEXT: addi sp, sp, -80 1206; RV64IZCMP-SR-NEXT: sd a1, 24(sp) 1207; RV64IZCMP-SR-NEXT: addi a0, sp, 28 1208; RV64IZCMP-SR-NEXT: sd a0, 8(sp) 1209; RV64IZCMP-SR-NEXT: lw a0, 24(sp) 1210; RV64IZCMP-SR-NEXT: sd a5, 56(sp) 1211; RV64IZCMP-SR-NEXT: sd a6, 64(sp) 1212; RV64IZCMP-SR-NEXT: sd a7, 72(sp) 1213; RV64IZCMP-SR-NEXT: sd a2, 32(sp) 1214; RV64IZCMP-SR-NEXT: sd a3, 40(sp) 1215; RV64IZCMP-SR-NEXT: sd a4, 48(sp) 1216; RV64IZCMP-SR-NEXT: addi sp, sp, 80 1217; RV64IZCMP-SR-NEXT: ret 1218; 1219; RV32I-LABEL: varargs: 1220; RV32I: # %bb.0: 1221; RV32I-NEXT: addi sp, sp, -48 1222; RV32I-NEXT: mv a0, a1 1223; RV32I-NEXT: sw a5, 36(sp) 1224; RV32I-NEXT: sw a6, 40(sp) 1225; RV32I-NEXT: sw a7, 44(sp) 1226; RV32I-NEXT: sw a1, 20(sp) 1227; RV32I-NEXT: sw a2, 24(sp) 1228; RV32I-NEXT: sw a3, 28(sp) 1229; RV32I-NEXT: sw a4, 32(sp) 1230; RV32I-NEXT: addi a1, sp, 24 1231; RV32I-NEXT: sw a1, 12(sp) 1232; RV32I-NEXT: addi sp, sp, 48 1233; RV32I-NEXT: ret 1234; 1235; RV64I-LABEL: varargs: 1236; RV64I: # %bb.0: 1237; RV64I-NEXT: addi sp, sp, -80 1238; RV64I-NEXT: sd a1, 24(sp) 1239; RV64I-NEXT: addi a0, sp, 28 1240; RV64I-NEXT: sd a0, 8(sp) 1241; RV64I-NEXT: lw a0, 24(sp) 1242; RV64I-NEXT: sd a5, 56(sp) 1243; RV64I-NEXT: sd a6, 64(sp) 1244; RV64I-NEXT: sd a7, 72(sp) 1245; RV64I-NEXT: sd a2, 32(sp) 1246; RV64I-NEXT: sd a3, 40(sp) 1247; RV64I-NEXT: sd a4, 48(sp) 1248; RV64I-NEXT: addi sp, sp, 80 1249; RV64I-NEXT: ret 1250 %va = alloca ptr 1251 call void @llvm.va_start(ptr %va) 1252 %argp.cur = load ptr, ptr %va 1253 %argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 4 1254 store ptr %argp.next, ptr %va 1255 %1 = load i32, ptr %argp.cur 1256 call void @llvm.va_end(ptr %va) 1257 ret i32 %1 1258} 1259 1260@var0 = global [18 x i32] zeroinitializer 1261 1262define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind { 1263; RV32IZCMP-LABEL: many_args: 1264; RV32IZCMP: # %bb.0: # %entry 1265; RV32IZCMP-NEXT: cm.push {ra, s0-s4}, -32 1266; RV32IZCMP-NEXT: lui a0, %hi(var0) 1267; RV32IZCMP-NEXT: lw a6, %lo(var0)(a0) 1268; RV32IZCMP-NEXT: lw a7, %lo(var0+4)(a0) 1269; RV32IZCMP-NEXT: lw t0, %lo(var0+8)(a0) 1270; RV32IZCMP-NEXT: lw t1, %lo(var0+12)(a0) 1271; RV32IZCMP-NEXT: addi a5, a0, %lo(var0) 1272; RV32IZCMP-NEXT: lw t2, 16(a5) 1273; RV32IZCMP-NEXT: lw t3, 20(a5) 1274; RV32IZCMP-NEXT: lw t4, 24(a5) 1275; RV32IZCMP-NEXT: lw t5, 28(a5) 1276; RV32IZCMP-NEXT: lw t6, 48(a5) 1277; RV32IZCMP-NEXT: lw s2, 52(a5) 1278; RV32IZCMP-NEXT: lw a3, 56(a5) 1279; RV32IZCMP-NEXT: lw a4, 60(a5) 1280; RV32IZCMP-NEXT: lw a1, 64(a5) 1281; RV32IZCMP-NEXT: lw s0, 68(a5) 1282; RV32IZCMP-NEXT: lw s3, 32(a5) 1283; RV32IZCMP-NEXT: lw s4, 36(a5) 1284; RV32IZCMP-NEXT: lw s1, 40(a5) 1285; RV32IZCMP-NEXT: lw a2, 44(a5) 1286; RV32IZCMP-NEXT: sw s0, 68(a5) 1287; RV32IZCMP-NEXT: sw a1, 64(a5) 1288; RV32IZCMP-NEXT: sw a4, 60(a5) 1289; RV32IZCMP-NEXT: sw a3, 56(a5) 1290; RV32IZCMP-NEXT: sw s2, 52(a5) 1291; RV32IZCMP-NEXT: sw t6, 48(a5) 1292; RV32IZCMP-NEXT: sw a2, 44(a5) 1293; RV32IZCMP-NEXT: sw s1, 40(a5) 1294; RV32IZCMP-NEXT: sw s4, 36(a5) 1295; RV32IZCMP-NEXT: sw s3, 32(a5) 1296; RV32IZCMP-NEXT: sw t5, 28(a5) 1297; RV32IZCMP-NEXT: sw t4, 24(a5) 1298; RV32IZCMP-NEXT: sw t3, 20(a5) 1299; RV32IZCMP-NEXT: sw t2, 16(a5) 1300; RV32IZCMP-NEXT: sw t1, %lo(var0+12)(a0) 1301; RV32IZCMP-NEXT: sw t0, %lo(var0+8)(a0) 1302; RV32IZCMP-NEXT: sw a7, %lo(var0+4)(a0) 1303; RV32IZCMP-NEXT: sw a6, %lo(var0)(a0) 1304; RV32IZCMP-NEXT: cm.popret {ra, s0-s4}, 32 1305; 1306; RV64IZCMP-LABEL: many_args: 1307; RV64IZCMP: # %bb.0: # %entry 1308; RV64IZCMP-NEXT: cm.push {ra, s0-s4}, -48 1309; RV64IZCMP-NEXT: lui a0, %hi(var0) 1310; RV64IZCMP-NEXT: lw a6, %lo(var0)(a0) 1311; RV64IZCMP-NEXT: lw a7, %lo(var0+4)(a0) 1312; RV64IZCMP-NEXT: lw t0, %lo(var0+8)(a0) 1313; RV64IZCMP-NEXT: lw t1, %lo(var0+12)(a0) 1314; RV64IZCMP-NEXT: addi a5, a0, %lo(var0) 1315; RV64IZCMP-NEXT: lw t2, 16(a5) 1316; RV64IZCMP-NEXT: lw t3, 20(a5) 1317; RV64IZCMP-NEXT: lw t4, 24(a5) 1318; RV64IZCMP-NEXT: lw t5, 28(a5) 1319; RV64IZCMP-NEXT: lw t6, 48(a5) 1320; RV64IZCMP-NEXT: lw s2, 52(a5) 1321; RV64IZCMP-NEXT: lw a3, 56(a5) 1322; RV64IZCMP-NEXT: lw a4, 60(a5) 1323; RV64IZCMP-NEXT: lw a1, 64(a5) 1324; RV64IZCMP-NEXT: lw s0, 68(a5) 1325; RV64IZCMP-NEXT: lw s3, 32(a5) 1326; RV64IZCMP-NEXT: lw s4, 36(a5) 1327; RV64IZCMP-NEXT: lw s1, 40(a5) 1328; RV64IZCMP-NEXT: lw a2, 44(a5) 1329; RV64IZCMP-NEXT: sw s0, 68(a5) 1330; RV64IZCMP-NEXT: sw a1, 64(a5) 1331; RV64IZCMP-NEXT: sw a4, 60(a5) 1332; RV64IZCMP-NEXT: sw a3, 56(a5) 1333; RV64IZCMP-NEXT: sw s2, 52(a5) 1334; RV64IZCMP-NEXT: sw t6, 48(a5) 1335; RV64IZCMP-NEXT: sw a2, 44(a5) 1336; RV64IZCMP-NEXT: sw s1, 40(a5) 1337; RV64IZCMP-NEXT: sw s4, 36(a5) 1338; RV64IZCMP-NEXT: sw s3, 32(a5) 1339; RV64IZCMP-NEXT: sw t5, 28(a5) 1340; RV64IZCMP-NEXT: sw t4, 24(a5) 1341; RV64IZCMP-NEXT: sw t3, 20(a5) 1342; RV64IZCMP-NEXT: sw t2, 16(a5) 1343; RV64IZCMP-NEXT: sw t1, %lo(var0+12)(a0) 1344; RV64IZCMP-NEXT: sw t0, %lo(var0+8)(a0) 1345; RV64IZCMP-NEXT: sw a7, %lo(var0+4)(a0) 1346; RV64IZCMP-NEXT: sw a6, %lo(var0)(a0) 1347; RV64IZCMP-NEXT: cm.popret {ra, s0-s4}, 48 1348; 1349; RV32IZCMP-SR-LABEL: many_args: 1350; RV32IZCMP-SR: # %bb.0: # %entry 1351; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s4}, -32 1352; RV32IZCMP-SR-NEXT: lui a0, %hi(var0) 1353; RV32IZCMP-SR-NEXT: lw a6, %lo(var0)(a0) 1354; RV32IZCMP-SR-NEXT: lw a7, %lo(var0+4)(a0) 1355; RV32IZCMP-SR-NEXT: lw t0, %lo(var0+8)(a0) 1356; RV32IZCMP-SR-NEXT: lw t1, %lo(var0+12)(a0) 1357; RV32IZCMP-SR-NEXT: addi a5, a0, %lo(var0) 1358; RV32IZCMP-SR-NEXT: lw t2, 16(a5) 1359; RV32IZCMP-SR-NEXT: lw t3, 20(a5) 1360; RV32IZCMP-SR-NEXT: lw t4, 24(a5) 1361; RV32IZCMP-SR-NEXT: lw t5, 28(a5) 1362; RV32IZCMP-SR-NEXT: lw t6, 48(a5) 1363; RV32IZCMP-SR-NEXT: lw s2, 52(a5) 1364; RV32IZCMP-SR-NEXT: lw a3, 56(a5) 1365; RV32IZCMP-SR-NEXT: lw a4, 60(a5) 1366; RV32IZCMP-SR-NEXT: lw a1, 64(a5) 1367; RV32IZCMP-SR-NEXT: lw s0, 68(a5) 1368; RV32IZCMP-SR-NEXT: lw s3, 32(a5) 1369; RV32IZCMP-SR-NEXT: lw s4, 36(a5) 1370; RV32IZCMP-SR-NEXT: lw s1, 40(a5) 1371; RV32IZCMP-SR-NEXT: lw a2, 44(a5) 1372; RV32IZCMP-SR-NEXT: sw s0, 68(a5) 1373; RV32IZCMP-SR-NEXT: sw a1, 64(a5) 1374; RV32IZCMP-SR-NEXT: sw a4, 60(a5) 1375; RV32IZCMP-SR-NEXT: sw a3, 56(a5) 1376; RV32IZCMP-SR-NEXT: sw s2, 52(a5) 1377; RV32IZCMP-SR-NEXT: sw t6, 48(a5) 1378; RV32IZCMP-SR-NEXT: sw a2, 44(a5) 1379; RV32IZCMP-SR-NEXT: sw s1, 40(a5) 1380; RV32IZCMP-SR-NEXT: sw s4, 36(a5) 1381; RV32IZCMP-SR-NEXT: sw s3, 32(a5) 1382; RV32IZCMP-SR-NEXT: sw t5, 28(a5) 1383; RV32IZCMP-SR-NEXT: sw t4, 24(a5) 1384; RV32IZCMP-SR-NEXT: sw t3, 20(a5) 1385; RV32IZCMP-SR-NEXT: sw t2, 16(a5) 1386; RV32IZCMP-SR-NEXT: sw t1, %lo(var0+12)(a0) 1387; RV32IZCMP-SR-NEXT: sw t0, %lo(var0+8)(a0) 1388; RV32IZCMP-SR-NEXT: sw a7, %lo(var0+4)(a0) 1389; RV32IZCMP-SR-NEXT: sw a6, %lo(var0)(a0) 1390; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s4}, 32 1391; 1392; RV64IZCMP-SR-LABEL: many_args: 1393; RV64IZCMP-SR: # %bb.0: # %entry 1394; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s4}, -48 1395; RV64IZCMP-SR-NEXT: lui a0, %hi(var0) 1396; RV64IZCMP-SR-NEXT: lw a6, %lo(var0)(a0) 1397; RV64IZCMP-SR-NEXT: lw a7, %lo(var0+4)(a0) 1398; RV64IZCMP-SR-NEXT: lw t0, %lo(var0+8)(a0) 1399; RV64IZCMP-SR-NEXT: lw t1, %lo(var0+12)(a0) 1400; RV64IZCMP-SR-NEXT: addi a5, a0, %lo(var0) 1401; RV64IZCMP-SR-NEXT: lw t2, 16(a5) 1402; RV64IZCMP-SR-NEXT: lw t3, 20(a5) 1403; RV64IZCMP-SR-NEXT: lw t4, 24(a5) 1404; RV64IZCMP-SR-NEXT: lw t5, 28(a5) 1405; RV64IZCMP-SR-NEXT: lw t6, 48(a5) 1406; RV64IZCMP-SR-NEXT: lw s2, 52(a5) 1407; RV64IZCMP-SR-NEXT: lw a3, 56(a5) 1408; RV64IZCMP-SR-NEXT: lw a4, 60(a5) 1409; RV64IZCMP-SR-NEXT: lw a1, 64(a5) 1410; RV64IZCMP-SR-NEXT: lw s0, 68(a5) 1411; RV64IZCMP-SR-NEXT: lw s3, 32(a5) 1412; RV64IZCMP-SR-NEXT: lw s4, 36(a5) 1413; RV64IZCMP-SR-NEXT: lw s1, 40(a5) 1414; RV64IZCMP-SR-NEXT: lw a2, 44(a5) 1415; RV64IZCMP-SR-NEXT: sw s0, 68(a5) 1416; RV64IZCMP-SR-NEXT: sw a1, 64(a5) 1417; RV64IZCMP-SR-NEXT: sw a4, 60(a5) 1418; RV64IZCMP-SR-NEXT: sw a3, 56(a5) 1419; RV64IZCMP-SR-NEXT: sw s2, 52(a5) 1420; RV64IZCMP-SR-NEXT: sw t6, 48(a5) 1421; RV64IZCMP-SR-NEXT: sw a2, 44(a5) 1422; RV64IZCMP-SR-NEXT: sw s1, 40(a5) 1423; RV64IZCMP-SR-NEXT: sw s4, 36(a5) 1424; RV64IZCMP-SR-NEXT: sw s3, 32(a5) 1425; RV64IZCMP-SR-NEXT: sw t5, 28(a5) 1426; RV64IZCMP-SR-NEXT: sw t4, 24(a5) 1427; RV64IZCMP-SR-NEXT: sw t3, 20(a5) 1428; RV64IZCMP-SR-NEXT: sw t2, 16(a5) 1429; RV64IZCMP-SR-NEXT: sw t1, %lo(var0+12)(a0) 1430; RV64IZCMP-SR-NEXT: sw t0, %lo(var0+8)(a0) 1431; RV64IZCMP-SR-NEXT: sw a7, %lo(var0+4)(a0) 1432; RV64IZCMP-SR-NEXT: sw a6, %lo(var0)(a0) 1433; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s4}, 48 1434; 1435; RV32I-LABEL: many_args: 1436; RV32I: # %bb.0: # %entry 1437; RV32I-NEXT: addi sp, sp, -32 1438; RV32I-NEXT: sw s0, 28(sp) # 4-byte Folded Spill 1439; RV32I-NEXT: sw s1, 24(sp) # 4-byte Folded Spill 1440; RV32I-NEXT: sw s2, 20(sp) # 4-byte Folded Spill 1441; RV32I-NEXT: sw s3, 16(sp) # 4-byte Folded Spill 1442; RV32I-NEXT: sw s4, 12(sp) # 4-byte Folded Spill 1443; RV32I-NEXT: lui a0, %hi(var0) 1444; RV32I-NEXT: lw a1, %lo(var0)(a0) 1445; RV32I-NEXT: lw a2, %lo(var0+4)(a0) 1446; RV32I-NEXT: lw a3, %lo(var0+8)(a0) 1447; RV32I-NEXT: lw a4, %lo(var0+12)(a0) 1448; RV32I-NEXT: addi a5, a0, %lo(var0) 1449; RV32I-NEXT: lw a6, 16(a5) 1450; RV32I-NEXT: lw a7, 20(a5) 1451; RV32I-NEXT: lw t0, 24(a5) 1452; RV32I-NEXT: lw t1, 28(a5) 1453; RV32I-NEXT: lw t2, 48(a5) 1454; RV32I-NEXT: lw t3, 52(a5) 1455; RV32I-NEXT: lw t4, 56(a5) 1456; RV32I-NEXT: lw t5, 60(a5) 1457; RV32I-NEXT: lw t6, 64(a5) 1458; RV32I-NEXT: lw s0, 68(a5) 1459; RV32I-NEXT: lw s1, 32(a5) 1460; RV32I-NEXT: lw s2, 36(a5) 1461; RV32I-NEXT: lw s3, 40(a5) 1462; RV32I-NEXT: lw s4, 44(a5) 1463; RV32I-NEXT: sw s0, 68(a5) 1464; RV32I-NEXT: sw t6, 64(a5) 1465; RV32I-NEXT: sw t5, 60(a5) 1466; RV32I-NEXT: sw t4, 56(a5) 1467; RV32I-NEXT: sw t3, 52(a5) 1468; RV32I-NEXT: sw t2, 48(a5) 1469; RV32I-NEXT: sw s4, 44(a5) 1470; RV32I-NEXT: sw s3, 40(a5) 1471; RV32I-NEXT: sw s2, 36(a5) 1472; RV32I-NEXT: sw s1, 32(a5) 1473; RV32I-NEXT: sw t1, 28(a5) 1474; RV32I-NEXT: sw t0, 24(a5) 1475; RV32I-NEXT: sw a7, 20(a5) 1476; RV32I-NEXT: sw a6, 16(a5) 1477; RV32I-NEXT: sw a4, %lo(var0+12)(a0) 1478; RV32I-NEXT: sw a3, %lo(var0+8)(a0) 1479; RV32I-NEXT: sw a2, %lo(var0+4)(a0) 1480; RV32I-NEXT: sw a1, %lo(var0)(a0) 1481; RV32I-NEXT: lw s0, 28(sp) # 4-byte Folded Reload 1482; RV32I-NEXT: lw s1, 24(sp) # 4-byte Folded Reload 1483; RV32I-NEXT: lw s2, 20(sp) # 4-byte Folded Reload 1484; RV32I-NEXT: lw s3, 16(sp) # 4-byte Folded Reload 1485; RV32I-NEXT: lw s4, 12(sp) # 4-byte Folded Reload 1486; RV32I-NEXT: addi sp, sp, 32 1487; RV32I-NEXT: ret 1488; 1489; RV64I-LABEL: many_args: 1490; RV64I: # %bb.0: # %entry 1491; RV64I-NEXT: addi sp, sp, -48 1492; RV64I-NEXT: sd s0, 40(sp) # 8-byte Folded Spill 1493; RV64I-NEXT: sd s1, 32(sp) # 8-byte Folded Spill 1494; RV64I-NEXT: sd s2, 24(sp) # 8-byte Folded Spill 1495; RV64I-NEXT: sd s3, 16(sp) # 8-byte Folded Spill 1496; RV64I-NEXT: sd s4, 8(sp) # 8-byte Folded Spill 1497; RV64I-NEXT: lui a0, %hi(var0) 1498; RV64I-NEXT: lw a1, %lo(var0)(a0) 1499; RV64I-NEXT: lw a2, %lo(var0+4)(a0) 1500; RV64I-NEXT: lw a3, %lo(var0+8)(a0) 1501; RV64I-NEXT: lw a4, %lo(var0+12)(a0) 1502; RV64I-NEXT: addi a5, a0, %lo(var0) 1503; RV64I-NEXT: lw a6, 16(a5) 1504; RV64I-NEXT: lw a7, 20(a5) 1505; RV64I-NEXT: lw t0, 24(a5) 1506; RV64I-NEXT: lw t1, 28(a5) 1507; RV64I-NEXT: lw t2, 48(a5) 1508; RV64I-NEXT: lw t3, 52(a5) 1509; RV64I-NEXT: lw t4, 56(a5) 1510; RV64I-NEXT: lw t5, 60(a5) 1511; RV64I-NEXT: lw t6, 64(a5) 1512; RV64I-NEXT: lw s0, 68(a5) 1513; RV64I-NEXT: lw s1, 32(a5) 1514; RV64I-NEXT: lw s2, 36(a5) 1515; RV64I-NEXT: lw s3, 40(a5) 1516; RV64I-NEXT: lw s4, 44(a5) 1517; RV64I-NEXT: sw s0, 68(a5) 1518; RV64I-NEXT: sw t6, 64(a5) 1519; RV64I-NEXT: sw t5, 60(a5) 1520; RV64I-NEXT: sw t4, 56(a5) 1521; RV64I-NEXT: sw t3, 52(a5) 1522; RV64I-NEXT: sw t2, 48(a5) 1523; RV64I-NEXT: sw s4, 44(a5) 1524; RV64I-NEXT: sw s3, 40(a5) 1525; RV64I-NEXT: sw s2, 36(a5) 1526; RV64I-NEXT: sw s1, 32(a5) 1527; RV64I-NEXT: sw t1, 28(a5) 1528; RV64I-NEXT: sw t0, 24(a5) 1529; RV64I-NEXT: sw a7, 20(a5) 1530; RV64I-NEXT: sw a6, 16(a5) 1531; RV64I-NEXT: sw a4, %lo(var0+12)(a0) 1532; RV64I-NEXT: sw a3, %lo(var0+8)(a0) 1533; RV64I-NEXT: sw a2, %lo(var0+4)(a0) 1534; RV64I-NEXT: sw a1, %lo(var0)(a0) 1535; RV64I-NEXT: ld s0, 40(sp) # 8-byte Folded Reload 1536; RV64I-NEXT: ld s1, 32(sp) # 8-byte Folded Reload 1537; RV64I-NEXT: ld s2, 24(sp) # 8-byte Folded Reload 1538; RV64I-NEXT: ld s3, 16(sp) # 8-byte Folded Reload 1539; RV64I-NEXT: ld s4, 8(sp) # 8-byte Folded Reload 1540; RV64I-NEXT: addi sp, sp, 48 1541; RV64I-NEXT: ret 1542entry: 1543 %val = load [18 x i32], ptr @var0 1544 store volatile [18 x i32] %val, ptr @var0 1545 ret void 1546} 1547 1548; Check that dynamic allocation calculations remain correct 1549 1550declare ptr @llvm.stacksave() 1551declare void @llvm.stackrestore(ptr) 1552declare void @notdead(ptr) 1553 1554define void @alloca(i32 %n) nounwind { 1555; RV32IZCMP-LABEL: alloca: 1556; RV32IZCMP: # %bb.0: 1557; RV32IZCMP-NEXT: cm.push {ra, s0-s1}, -16 1558; RV32IZCMP-NEXT: addi s0, sp, 16 1559; RV32IZCMP-NEXT: mv s1, sp 1560; RV32IZCMP-NEXT: addi a0, a0, 15 1561; RV32IZCMP-NEXT: andi a0, a0, -16 1562; RV32IZCMP-NEXT: sub a0, sp, a0 1563; RV32IZCMP-NEXT: mv sp, a0 1564; RV32IZCMP-NEXT: call notdead 1565; RV32IZCMP-NEXT: mv sp, s1 1566; RV32IZCMP-NEXT: addi sp, s0, -16 1567; RV32IZCMP-NEXT: cm.popret {ra, s0-s1}, 16 1568; 1569; RV64IZCMP-LABEL: alloca: 1570; RV64IZCMP: # %bb.0: 1571; RV64IZCMP-NEXT: cm.push {ra, s0-s1}, -32 1572; RV64IZCMP-NEXT: addi s0, sp, 32 1573; RV64IZCMP-NEXT: mv s1, sp 1574; RV64IZCMP-NEXT: slli a0, a0, 32 1575; RV64IZCMP-NEXT: srli a0, a0, 32 1576; RV64IZCMP-NEXT: addi a0, a0, 15 1577; RV64IZCMP-NEXT: andi a0, a0, -16 1578; RV64IZCMP-NEXT: sub a0, sp, a0 1579; RV64IZCMP-NEXT: mv sp, a0 1580; RV64IZCMP-NEXT: call notdead 1581; RV64IZCMP-NEXT: mv sp, s1 1582; RV64IZCMP-NEXT: addi sp, s0, -32 1583; RV64IZCMP-NEXT: cm.popret {ra, s0-s1}, 32 1584; 1585; RV32IZCMP-SR-LABEL: alloca: 1586; RV32IZCMP-SR: # %bb.0: 1587; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s1}, -16 1588; RV32IZCMP-SR-NEXT: addi s0, sp, 16 1589; RV32IZCMP-SR-NEXT: mv s1, sp 1590; RV32IZCMP-SR-NEXT: addi a0, a0, 15 1591; RV32IZCMP-SR-NEXT: andi a0, a0, -16 1592; RV32IZCMP-SR-NEXT: sub a0, sp, a0 1593; RV32IZCMP-SR-NEXT: mv sp, a0 1594; RV32IZCMP-SR-NEXT: call notdead 1595; RV32IZCMP-SR-NEXT: mv sp, s1 1596; RV32IZCMP-SR-NEXT: addi sp, s0, -16 1597; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 16 1598; 1599; RV64IZCMP-SR-LABEL: alloca: 1600; RV64IZCMP-SR: # %bb.0: 1601; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s1}, -32 1602; RV64IZCMP-SR-NEXT: addi s0, sp, 32 1603; RV64IZCMP-SR-NEXT: mv s1, sp 1604; RV64IZCMP-SR-NEXT: slli a0, a0, 32 1605; RV64IZCMP-SR-NEXT: srli a0, a0, 32 1606; RV64IZCMP-SR-NEXT: addi a0, a0, 15 1607; RV64IZCMP-SR-NEXT: andi a0, a0, -16 1608; RV64IZCMP-SR-NEXT: sub a0, sp, a0 1609; RV64IZCMP-SR-NEXT: mv sp, a0 1610; RV64IZCMP-SR-NEXT: call notdead 1611; RV64IZCMP-SR-NEXT: mv sp, s1 1612; RV64IZCMP-SR-NEXT: addi sp, s0, -32 1613; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 32 1614; 1615; RV32I-LABEL: alloca: 1616; RV32I: # %bb.0: 1617; RV32I-NEXT: addi sp, sp, -16 1618; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1619; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 1620; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 1621; RV32I-NEXT: addi s0, sp, 16 1622; RV32I-NEXT: mv s1, sp 1623; RV32I-NEXT: addi a0, a0, 15 1624; RV32I-NEXT: andi a0, a0, -16 1625; RV32I-NEXT: sub a0, sp, a0 1626; RV32I-NEXT: mv sp, a0 1627; RV32I-NEXT: call notdead 1628; RV32I-NEXT: mv sp, s1 1629; RV32I-NEXT: addi sp, s0, -16 1630; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1631; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 1632; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 1633; RV32I-NEXT: addi sp, sp, 16 1634; RV32I-NEXT: ret 1635; 1636; RV64I-LABEL: alloca: 1637; RV64I: # %bb.0: 1638; RV64I-NEXT: addi sp, sp, -32 1639; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 1640; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 1641; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 1642; RV64I-NEXT: addi s0, sp, 32 1643; RV64I-NEXT: mv s1, sp 1644; RV64I-NEXT: slli a0, a0, 32 1645; RV64I-NEXT: srli a0, a0, 32 1646; RV64I-NEXT: addi a0, a0, 15 1647; RV64I-NEXT: andi a0, a0, -16 1648; RV64I-NEXT: sub a0, sp, a0 1649; RV64I-NEXT: mv sp, a0 1650; RV64I-NEXT: call notdead 1651; RV64I-NEXT: mv sp, s1 1652; RV64I-NEXT: addi sp, s0, -32 1653; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 1654; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 1655; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 1656; RV64I-NEXT: addi sp, sp, 32 1657; RV64I-NEXT: ret 1658 %sp = call ptr @llvm.stacksave() 1659 %addr = alloca i8, i32 %n 1660 call void @notdead(ptr %addr) 1661 call void @llvm.stackrestore(ptr %sp) 1662 ret void 1663} 1664 1665declare i32 @foo_test_irq(...) 1666@var_test_irq = global [32 x i32] zeroinitializer 1667 1668define void @foo_with_irq() nounwind "interrupt"="user" { 1669; RV32IZCMP-LABEL: foo_with_irq: 1670; RV32IZCMP: # %bb.0: 1671; RV32IZCMP-NEXT: cm.push {ra}, -64 1672; RV32IZCMP-NEXT: addi sp, sp, -16 1673; RV32IZCMP-NEXT: sw t0, 60(sp) # 4-byte Folded Spill 1674; RV32IZCMP-NEXT: sw t1, 56(sp) # 4-byte Folded Spill 1675; RV32IZCMP-NEXT: sw t2, 52(sp) # 4-byte Folded Spill 1676; RV32IZCMP-NEXT: sw a0, 48(sp) # 4-byte Folded Spill 1677; RV32IZCMP-NEXT: sw a1, 44(sp) # 4-byte Folded Spill 1678; RV32IZCMP-NEXT: sw a2, 40(sp) # 4-byte Folded Spill 1679; RV32IZCMP-NEXT: sw a3, 36(sp) # 4-byte Folded Spill 1680; RV32IZCMP-NEXT: sw a4, 32(sp) # 4-byte Folded Spill 1681; RV32IZCMP-NEXT: sw a5, 28(sp) # 4-byte Folded Spill 1682; RV32IZCMP-NEXT: sw a6, 24(sp) # 4-byte Folded Spill 1683; RV32IZCMP-NEXT: sw a7, 20(sp) # 4-byte Folded Spill 1684; RV32IZCMP-NEXT: sw t3, 16(sp) # 4-byte Folded Spill 1685; RV32IZCMP-NEXT: sw t4, 12(sp) # 4-byte Folded Spill 1686; RV32IZCMP-NEXT: sw t5, 8(sp) # 4-byte Folded Spill 1687; RV32IZCMP-NEXT: sw t6, 4(sp) # 4-byte Folded Spill 1688; RV32IZCMP-NEXT: call foo_test_irq 1689; RV32IZCMP-NEXT: lw t0, 60(sp) # 4-byte Folded Reload 1690; RV32IZCMP-NEXT: lw t1, 56(sp) # 4-byte Folded Reload 1691; RV32IZCMP-NEXT: lw t2, 52(sp) # 4-byte Folded Reload 1692; RV32IZCMP-NEXT: lw a0, 48(sp) # 4-byte Folded Reload 1693; RV32IZCMP-NEXT: lw a1, 44(sp) # 4-byte Folded Reload 1694; RV32IZCMP-NEXT: lw a2, 40(sp) # 4-byte Folded Reload 1695; RV32IZCMP-NEXT: lw a3, 36(sp) # 4-byte Folded Reload 1696; RV32IZCMP-NEXT: lw a4, 32(sp) # 4-byte Folded Reload 1697; RV32IZCMP-NEXT: lw a5, 28(sp) # 4-byte Folded Reload 1698; RV32IZCMP-NEXT: lw a6, 24(sp) # 4-byte Folded Reload 1699; RV32IZCMP-NEXT: lw a7, 20(sp) # 4-byte Folded Reload 1700; RV32IZCMP-NEXT: lw t3, 16(sp) # 4-byte Folded Reload 1701; RV32IZCMP-NEXT: lw t4, 12(sp) # 4-byte Folded Reload 1702; RV32IZCMP-NEXT: lw t5, 8(sp) # 4-byte Folded Reload 1703; RV32IZCMP-NEXT: lw t6, 4(sp) # 4-byte Folded Reload 1704; RV32IZCMP-NEXT: addi sp, sp, 16 1705; RV32IZCMP-NEXT: cm.pop {ra}, 64 1706; RV32IZCMP-NEXT: mret 1707; 1708; RV64IZCMP-LABEL: foo_with_irq: 1709; RV64IZCMP: # %bb.0: 1710; RV64IZCMP-NEXT: cm.push {ra}, -64 1711; RV64IZCMP-NEXT: addi sp, sp, -80 1712; RV64IZCMP-NEXT: sd t0, 120(sp) # 8-byte Folded Spill 1713; RV64IZCMP-NEXT: sd t1, 112(sp) # 8-byte Folded Spill 1714; RV64IZCMP-NEXT: sd t2, 104(sp) # 8-byte Folded Spill 1715; RV64IZCMP-NEXT: sd a0, 96(sp) # 8-byte Folded Spill 1716; RV64IZCMP-NEXT: sd a1, 88(sp) # 8-byte Folded Spill 1717; RV64IZCMP-NEXT: sd a2, 80(sp) # 8-byte Folded Spill 1718; RV64IZCMP-NEXT: sd a3, 72(sp) # 8-byte Folded Spill 1719; RV64IZCMP-NEXT: sd a4, 64(sp) # 8-byte Folded Spill 1720; RV64IZCMP-NEXT: sd a5, 56(sp) # 8-byte Folded Spill 1721; RV64IZCMP-NEXT: sd a6, 48(sp) # 8-byte Folded Spill 1722; RV64IZCMP-NEXT: sd a7, 40(sp) # 8-byte Folded Spill 1723; RV64IZCMP-NEXT: sd t3, 32(sp) # 8-byte Folded Spill 1724; RV64IZCMP-NEXT: sd t4, 24(sp) # 8-byte Folded Spill 1725; RV64IZCMP-NEXT: sd t5, 16(sp) # 8-byte Folded Spill 1726; RV64IZCMP-NEXT: sd t6, 8(sp) # 8-byte Folded Spill 1727; RV64IZCMP-NEXT: call foo_test_irq 1728; RV64IZCMP-NEXT: ld t0, 120(sp) # 8-byte Folded Reload 1729; RV64IZCMP-NEXT: ld t1, 112(sp) # 8-byte Folded Reload 1730; RV64IZCMP-NEXT: ld t2, 104(sp) # 8-byte Folded Reload 1731; RV64IZCMP-NEXT: ld a0, 96(sp) # 8-byte Folded Reload 1732; RV64IZCMP-NEXT: ld a1, 88(sp) # 8-byte Folded Reload 1733; RV64IZCMP-NEXT: ld a2, 80(sp) # 8-byte Folded Reload 1734; RV64IZCMP-NEXT: ld a3, 72(sp) # 8-byte Folded Reload 1735; RV64IZCMP-NEXT: ld a4, 64(sp) # 8-byte Folded Reload 1736; RV64IZCMP-NEXT: ld a5, 56(sp) # 8-byte Folded Reload 1737; RV64IZCMP-NEXT: ld a6, 48(sp) # 8-byte Folded Reload 1738; RV64IZCMP-NEXT: ld a7, 40(sp) # 8-byte Folded Reload 1739; RV64IZCMP-NEXT: ld t3, 32(sp) # 8-byte Folded Reload 1740; RV64IZCMP-NEXT: ld t4, 24(sp) # 8-byte Folded Reload 1741; RV64IZCMP-NEXT: ld t5, 16(sp) # 8-byte Folded Reload 1742; RV64IZCMP-NEXT: ld t6, 8(sp) # 8-byte Folded Reload 1743; RV64IZCMP-NEXT: addi sp, sp, 80 1744; RV64IZCMP-NEXT: cm.pop {ra}, 64 1745; RV64IZCMP-NEXT: mret 1746; 1747; RV32IZCMP-SR-LABEL: foo_with_irq: 1748; RV32IZCMP-SR: # %bb.0: 1749; RV32IZCMP-SR-NEXT: cm.push {ra}, -64 1750; RV32IZCMP-SR-NEXT: addi sp, sp, -16 1751; RV32IZCMP-SR-NEXT: sw t0, 60(sp) # 4-byte Folded Spill 1752; RV32IZCMP-SR-NEXT: sw t1, 56(sp) # 4-byte Folded Spill 1753; RV32IZCMP-SR-NEXT: sw t2, 52(sp) # 4-byte Folded Spill 1754; RV32IZCMP-SR-NEXT: sw a0, 48(sp) # 4-byte Folded Spill 1755; RV32IZCMP-SR-NEXT: sw a1, 44(sp) # 4-byte Folded Spill 1756; RV32IZCMP-SR-NEXT: sw a2, 40(sp) # 4-byte Folded Spill 1757; RV32IZCMP-SR-NEXT: sw a3, 36(sp) # 4-byte Folded Spill 1758; RV32IZCMP-SR-NEXT: sw a4, 32(sp) # 4-byte Folded Spill 1759; RV32IZCMP-SR-NEXT: sw a5, 28(sp) # 4-byte Folded Spill 1760; RV32IZCMP-SR-NEXT: sw a6, 24(sp) # 4-byte Folded Spill 1761; RV32IZCMP-SR-NEXT: sw a7, 20(sp) # 4-byte Folded Spill 1762; RV32IZCMP-SR-NEXT: sw t3, 16(sp) # 4-byte Folded Spill 1763; RV32IZCMP-SR-NEXT: sw t4, 12(sp) # 4-byte Folded Spill 1764; RV32IZCMP-SR-NEXT: sw t5, 8(sp) # 4-byte Folded Spill 1765; RV32IZCMP-SR-NEXT: sw t6, 4(sp) # 4-byte Folded Spill 1766; RV32IZCMP-SR-NEXT: call foo_test_irq 1767; RV32IZCMP-SR-NEXT: lw t0, 60(sp) # 4-byte Folded Reload 1768; RV32IZCMP-SR-NEXT: lw t1, 56(sp) # 4-byte Folded Reload 1769; RV32IZCMP-SR-NEXT: lw t2, 52(sp) # 4-byte Folded Reload 1770; RV32IZCMP-SR-NEXT: lw a0, 48(sp) # 4-byte Folded Reload 1771; RV32IZCMP-SR-NEXT: lw a1, 44(sp) # 4-byte Folded Reload 1772; RV32IZCMP-SR-NEXT: lw a2, 40(sp) # 4-byte Folded Reload 1773; RV32IZCMP-SR-NEXT: lw a3, 36(sp) # 4-byte Folded Reload 1774; RV32IZCMP-SR-NEXT: lw a4, 32(sp) # 4-byte Folded Reload 1775; RV32IZCMP-SR-NEXT: lw a5, 28(sp) # 4-byte Folded Reload 1776; RV32IZCMP-SR-NEXT: lw a6, 24(sp) # 4-byte Folded Reload 1777; RV32IZCMP-SR-NEXT: lw a7, 20(sp) # 4-byte Folded Reload 1778; RV32IZCMP-SR-NEXT: lw t3, 16(sp) # 4-byte Folded Reload 1779; RV32IZCMP-SR-NEXT: lw t4, 12(sp) # 4-byte Folded Reload 1780; RV32IZCMP-SR-NEXT: lw t5, 8(sp) # 4-byte Folded Reload 1781; RV32IZCMP-SR-NEXT: lw t6, 4(sp) # 4-byte Folded Reload 1782; RV32IZCMP-SR-NEXT: addi sp, sp, 16 1783; RV32IZCMP-SR-NEXT: cm.pop {ra}, 64 1784; RV32IZCMP-SR-NEXT: mret 1785; 1786; RV64IZCMP-SR-LABEL: foo_with_irq: 1787; RV64IZCMP-SR: # %bb.0: 1788; RV64IZCMP-SR-NEXT: cm.push {ra}, -64 1789; RV64IZCMP-SR-NEXT: addi sp, sp, -80 1790; RV64IZCMP-SR-NEXT: sd t0, 120(sp) # 8-byte Folded Spill 1791; RV64IZCMP-SR-NEXT: sd t1, 112(sp) # 8-byte Folded Spill 1792; RV64IZCMP-SR-NEXT: sd t2, 104(sp) # 8-byte Folded Spill 1793; RV64IZCMP-SR-NEXT: sd a0, 96(sp) # 8-byte Folded Spill 1794; RV64IZCMP-SR-NEXT: sd a1, 88(sp) # 8-byte Folded Spill 1795; RV64IZCMP-SR-NEXT: sd a2, 80(sp) # 8-byte Folded Spill 1796; RV64IZCMP-SR-NEXT: sd a3, 72(sp) # 8-byte Folded Spill 1797; RV64IZCMP-SR-NEXT: sd a4, 64(sp) # 8-byte Folded Spill 1798; RV64IZCMP-SR-NEXT: sd a5, 56(sp) # 8-byte Folded Spill 1799; RV64IZCMP-SR-NEXT: sd a6, 48(sp) # 8-byte Folded Spill 1800; RV64IZCMP-SR-NEXT: sd a7, 40(sp) # 8-byte Folded Spill 1801; RV64IZCMP-SR-NEXT: sd t3, 32(sp) # 8-byte Folded Spill 1802; RV64IZCMP-SR-NEXT: sd t4, 24(sp) # 8-byte Folded Spill 1803; RV64IZCMP-SR-NEXT: sd t5, 16(sp) # 8-byte Folded Spill 1804; RV64IZCMP-SR-NEXT: sd t6, 8(sp) # 8-byte Folded Spill 1805; RV64IZCMP-SR-NEXT: call foo_test_irq 1806; RV64IZCMP-SR-NEXT: ld t0, 120(sp) # 8-byte Folded Reload 1807; RV64IZCMP-SR-NEXT: ld t1, 112(sp) # 8-byte Folded Reload 1808; RV64IZCMP-SR-NEXT: ld t2, 104(sp) # 8-byte Folded Reload 1809; RV64IZCMP-SR-NEXT: ld a0, 96(sp) # 8-byte Folded Reload 1810; RV64IZCMP-SR-NEXT: ld a1, 88(sp) # 8-byte Folded Reload 1811; RV64IZCMP-SR-NEXT: ld a2, 80(sp) # 8-byte Folded Reload 1812; RV64IZCMP-SR-NEXT: ld a3, 72(sp) # 8-byte Folded Reload 1813; RV64IZCMP-SR-NEXT: ld a4, 64(sp) # 8-byte Folded Reload 1814; RV64IZCMP-SR-NEXT: ld a5, 56(sp) # 8-byte Folded Reload 1815; RV64IZCMP-SR-NEXT: ld a6, 48(sp) # 8-byte Folded Reload 1816; RV64IZCMP-SR-NEXT: ld a7, 40(sp) # 8-byte Folded Reload 1817; RV64IZCMP-SR-NEXT: ld t3, 32(sp) # 8-byte Folded Reload 1818; RV64IZCMP-SR-NEXT: ld t4, 24(sp) # 8-byte Folded Reload 1819; RV64IZCMP-SR-NEXT: ld t5, 16(sp) # 8-byte Folded Reload 1820; RV64IZCMP-SR-NEXT: ld t6, 8(sp) # 8-byte Folded Reload 1821; RV64IZCMP-SR-NEXT: addi sp, sp, 80 1822; RV64IZCMP-SR-NEXT: cm.pop {ra}, 64 1823; RV64IZCMP-SR-NEXT: mret 1824; 1825; RV32I-LABEL: foo_with_irq: 1826; RV32I: # %bb.0: 1827; RV32I-NEXT: addi sp, sp, -64 1828; RV32I-NEXT: sw ra, 60(sp) # 4-byte Folded Spill 1829; RV32I-NEXT: sw t0, 56(sp) # 4-byte Folded Spill 1830; RV32I-NEXT: sw t1, 52(sp) # 4-byte Folded Spill 1831; RV32I-NEXT: sw t2, 48(sp) # 4-byte Folded Spill 1832; RV32I-NEXT: sw a0, 44(sp) # 4-byte Folded Spill 1833; RV32I-NEXT: sw a1, 40(sp) # 4-byte Folded Spill 1834; RV32I-NEXT: sw a2, 36(sp) # 4-byte Folded Spill 1835; RV32I-NEXT: sw a3, 32(sp) # 4-byte Folded Spill 1836; RV32I-NEXT: sw a4, 28(sp) # 4-byte Folded Spill 1837; RV32I-NEXT: sw a5, 24(sp) # 4-byte Folded Spill 1838; RV32I-NEXT: sw a6, 20(sp) # 4-byte Folded Spill 1839; RV32I-NEXT: sw a7, 16(sp) # 4-byte Folded Spill 1840; RV32I-NEXT: sw t3, 12(sp) # 4-byte Folded Spill 1841; RV32I-NEXT: sw t4, 8(sp) # 4-byte Folded Spill 1842; RV32I-NEXT: sw t5, 4(sp) # 4-byte Folded Spill 1843; RV32I-NEXT: sw t6, 0(sp) # 4-byte Folded Spill 1844; RV32I-NEXT: call foo_test_irq 1845; RV32I-NEXT: lw ra, 60(sp) # 4-byte Folded Reload 1846; RV32I-NEXT: lw t0, 56(sp) # 4-byte Folded Reload 1847; RV32I-NEXT: lw t1, 52(sp) # 4-byte Folded Reload 1848; RV32I-NEXT: lw t2, 48(sp) # 4-byte Folded Reload 1849; RV32I-NEXT: lw a0, 44(sp) # 4-byte Folded Reload 1850; RV32I-NEXT: lw a1, 40(sp) # 4-byte Folded Reload 1851; RV32I-NEXT: lw a2, 36(sp) # 4-byte Folded Reload 1852; RV32I-NEXT: lw a3, 32(sp) # 4-byte Folded Reload 1853; RV32I-NEXT: lw a4, 28(sp) # 4-byte Folded Reload 1854; RV32I-NEXT: lw a5, 24(sp) # 4-byte Folded Reload 1855; RV32I-NEXT: lw a6, 20(sp) # 4-byte Folded Reload 1856; RV32I-NEXT: lw a7, 16(sp) # 4-byte Folded Reload 1857; RV32I-NEXT: lw t3, 12(sp) # 4-byte Folded Reload 1858; RV32I-NEXT: lw t4, 8(sp) # 4-byte Folded Reload 1859; RV32I-NEXT: lw t5, 4(sp) # 4-byte Folded Reload 1860; RV32I-NEXT: lw t6, 0(sp) # 4-byte Folded Reload 1861; RV32I-NEXT: addi sp, sp, 64 1862; RV32I-NEXT: mret 1863; 1864; RV64I-LABEL: foo_with_irq: 1865; RV64I: # %bb.0: 1866; RV64I-NEXT: addi sp, sp, -128 1867; RV64I-NEXT: sd ra, 120(sp) # 8-byte Folded Spill 1868; RV64I-NEXT: sd t0, 112(sp) # 8-byte Folded Spill 1869; RV64I-NEXT: sd t1, 104(sp) # 8-byte Folded Spill 1870; RV64I-NEXT: sd t2, 96(sp) # 8-byte Folded Spill 1871; RV64I-NEXT: sd a0, 88(sp) # 8-byte Folded Spill 1872; RV64I-NEXT: sd a1, 80(sp) # 8-byte Folded Spill 1873; RV64I-NEXT: sd a2, 72(sp) # 8-byte Folded Spill 1874; RV64I-NEXT: sd a3, 64(sp) # 8-byte Folded Spill 1875; RV64I-NEXT: sd a4, 56(sp) # 8-byte Folded Spill 1876; RV64I-NEXT: sd a5, 48(sp) # 8-byte Folded Spill 1877; RV64I-NEXT: sd a6, 40(sp) # 8-byte Folded Spill 1878; RV64I-NEXT: sd a7, 32(sp) # 8-byte Folded Spill 1879; RV64I-NEXT: sd t3, 24(sp) # 8-byte Folded Spill 1880; RV64I-NEXT: sd t4, 16(sp) # 8-byte Folded Spill 1881; RV64I-NEXT: sd t5, 8(sp) # 8-byte Folded Spill 1882; RV64I-NEXT: sd t6, 0(sp) # 8-byte Folded Spill 1883; RV64I-NEXT: call foo_test_irq 1884; RV64I-NEXT: ld ra, 120(sp) # 8-byte Folded Reload 1885; RV64I-NEXT: ld t0, 112(sp) # 8-byte Folded Reload 1886; RV64I-NEXT: ld t1, 104(sp) # 8-byte Folded Reload 1887; RV64I-NEXT: ld t2, 96(sp) # 8-byte Folded Reload 1888; RV64I-NEXT: ld a0, 88(sp) # 8-byte Folded Reload 1889; RV64I-NEXT: ld a1, 80(sp) # 8-byte Folded Reload 1890; RV64I-NEXT: ld a2, 72(sp) # 8-byte Folded Reload 1891; RV64I-NEXT: ld a3, 64(sp) # 8-byte Folded Reload 1892; RV64I-NEXT: ld a4, 56(sp) # 8-byte Folded Reload 1893; RV64I-NEXT: ld a5, 48(sp) # 8-byte Folded Reload 1894; RV64I-NEXT: ld a6, 40(sp) # 8-byte Folded Reload 1895; RV64I-NEXT: ld a7, 32(sp) # 8-byte Folded Reload 1896; RV64I-NEXT: ld t3, 24(sp) # 8-byte Folded Reload 1897; RV64I-NEXT: ld t4, 16(sp) # 8-byte Folded Reload 1898; RV64I-NEXT: ld t5, 8(sp) # 8-byte Folded Reload 1899; RV64I-NEXT: ld t6, 0(sp) # 8-byte Folded Reload 1900; RV64I-NEXT: addi sp, sp, 128 1901; RV64I-NEXT: mret 1902 %call = call i32 @foo_test_irq() 1903 ret void 1904} 1905 1906define void @foo_no_irq() nounwind{ 1907; RV32IZCMP-LABEL: foo_no_irq: 1908; RV32IZCMP: # %bb.0: 1909; RV32IZCMP-NEXT: cm.push {ra}, -16 1910; RV32IZCMP-NEXT: call foo_test_irq 1911; RV32IZCMP-NEXT: cm.popret {ra}, 16 1912; 1913; RV64IZCMP-LABEL: foo_no_irq: 1914; RV64IZCMP: # %bb.0: 1915; RV64IZCMP-NEXT: cm.push {ra}, -16 1916; RV64IZCMP-NEXT: call foo_test_irq 1917; RV64IZCMP-NEXT: cm.popret {ra}, 16 1918; 1919; RV32IZCMP-SR-LABEL: foo_no_irq: 1920; RV32IZCMP-SR: # %bb.0: 1921; RV32IZCMP-SR-NEXT: cm.push {ra}, -16 1922; RV32IZCMP-SR-NEXT: call foo_test_irq 1923; RV32IZCMP-SR-NEXT: cm.popret {ra}, 16 1924; 1925; RV64IZCMP-SR-LABEL: foo_no_irq: 1926; RV64IZCMP-SR: # %bb.0: 1927; RV64IZCMP-SR-NEXT: cm.push {ra}, -16 1928; RV64IZCMP-SR-NEXT: call foo_test_irq 1929; RV64IZCMP-SR-NEXT: cm.popret {ra}, 16 1930; 1931; RV32I-LABEL: foo_no_irq: 1932; RV32I: # %bb.0: 1933; RV32I-NEXT: addi sp, sp, -16 1934; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1935; RV32I-NEXT: call foo_test_irq 1936; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1937; RV32I-NEXT: addi sp, sp, 16 1938; RV32I-NEXT: ret 1939; 1940; RV64I-LABEL: foo_no_irq: 1941; RV64I: # %bb.0: 1942; RV64I-NEXT: addi sp, sp, -16 1943; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1944; RV64I-NEXT: call foo_test_irq 1945; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1946; RV64I-NEXT: addi sp, sp, 16 1947; RV64I-NEXT: ret 1948 %call = call i32 @foo_test_irq() 1949 ret void 1950} 1951 1952define void @callee_with_irq() nounwind "interrupt"="user" { 1953; RV32IZCMP-LABEL: callee_with_irq: 1954; RV32IZCMP: # %bb.0: 1955; RV32IZCMP-NEXT: cm.push {ra, s0-s11}, -112 1956; RV32IZCMP-NEXT: addi sp, sp, -48 1957; RV32IZCMP-NEXT: sw t0, 92(sp) # 4-byte Folded Spill 1958; RV32IZCMP-NEXT: sw t1, 88(sp) # 4-byte Folded Spill 1959; RV32IZCMP-NEXT: sw t2, 84(sp) # 4-byte Folded Spill 1960; RV32IZCMP-NEXT: sw a0, 80(sp) # 4-byte Folded Spill 1961; RV32IZCMP-NEXT: sw a1, 76(sp) # 4-byte Folded Spill 1962; RV32IZCMP-NEXT: sw a2, 72(sp) # 4-byte Folded Spill 1963; RV32IZCMP-NEXT: sw a3, 68(sp) # 4-byte Folded Spill 1964; RV32IZCMP-NEXT: sw a4, 64(sp) # 4-byte Folded Spill 1965; RV32IZCMP-NEXT: sw a5, 60(sp) # 4-byte Folded Spill 1966; RV32IZCMP-NEXT: sw a6, 56(sp) # 4-byte Folded Spill 1967; RV32IZCMP-NEXT: sw a7, 52(sp) # 4-byte Folded Spill 1968; RV32IZCMP-NEXT: sw t3, 48(sp) # 4-byte Folded Spill 1969; RV32IZCMP-NEXT: sw t4, 44(sp) # 4-byte Folded Spill 1970; RV32IZCMP-NEXT: sw t5, 40(sp) # 4-byte Folded Spill 1971; RV32IZCMP-NEXT: sw t6, 36(sp) # 4-byte Folded Spill 1972; RV32IZCMP-NEXT: lui t0, %hi(var_test_irq) 1973; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq)(t0) 1974; RV32IZCMP-NEXT: sw a0, 32(sp) # 4-byte Folded Spill 1975; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+4)(t0) 1976; RV32IZCMP-NEXT: sw a0, 28(sp) # 4-byte Folded Spill 1977; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+8)(t0) 1978; RV32IZCMP-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 1979; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+12)(t0) 1980; RV32IZCMP-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 1981; RV32IZCMP-NEXT: addi a5, t0, %lo(var_test_irq) 1982; RV32IZCMP-NEXT: lw a0, 16(a5) 1983; RV32IZCMP-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 1984; RV32IZCMP-NEXT: lw a0, 20(a5) 1985; RV32IZCMP-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 1986; RV32IZCMP-NEXT: lw t4, 24(a5) 1987; RV32IZCMP-NEXT: lw t5, 28(a5) 1988; RV32IZCMP-NEXT: lw t6, 32(a5) 1989; RV32IZCMP-NEXT: lw s2, 36(a5) 1990; RV32IZCMP-NEXT: lw s3, 40(a5) 1991; RV32IZCMP-NEXT: lw s4, 44(a5) 1992; RV32IZCMP-NEXT: lw s5, 48(a5) 1993; RV32IZCMP-NEXT: lw s6, 52(a5) 1994; RV32IZCMP-NEXT: lw s7, 56(a5) 1995; RV32IZCMP-NEXT: lw s8, 60(a5) 1996; RV32IZCMP-NEXT: lw s9, 64(a5) 1997; RV32IZCMP-NEXT: lw s10, 68(a5) 1998; RV32IZCMP-NEXT: lw s11, 72(a5) 1999; RV32IZCMP-NEXT: lw ra, 76(a5) 2000; RV32IZCMP-NEXT: lw s1, 80(a5) 2001; RV32IZCMP-NEXT: lw t3, 84(a5) 2002; RV32IZCMP-NEXT: lw t2, 88(a5) 2003; RV32IZCMP-NEXT: lw t1, 92(a5) 2004; RV32IZCMP-NEXT: lw a7, 112(a5) 2005; RV32IZCMP-NEXT: lw s0, 116(a5) 2006; RV32IZCMP-NEXT: lw a3, 120(a5) 2007; RV32IZCMP-NEXT: lw a0, 124(a5) 2008; RV32IZCMP-NEXT: lw a6, 96(a5) 2009; RV32IZCMP-NEXT: lw a4, 100(a5) 2010; RV32IZCMP-NEXT: lw a2, 104(a5) 2011; RV32IZCMP-NEXT: lw a1, 108(a5) 2012; RV32IZCMP-NEXT: sw a0, 124(a5) 2013; RV32IZCMP-NEXT: sw a3, 120(a5) 2014; RV32IZCMP-NEXT: sw s0, 116(a5) 2015; RV32IZCMP-NEXT: sw a7, 112(a5) 2016; RV32IZCMP-NEXT: sw a1, 108(a5) 2017; RV32IZCMP-NEXT: sw a2, 104(a5) 2018; RV32IZCMP-NEXT: sw a4, 100(a5) 2019; RV32IZCMP-NEXT: sw a6, 96(a5) 2020; RV32IZCMP-NEXT: sw t1, 92(a5) 2021; RV32IZCMP-NEXT: sw t2, 88(a5) 2022; RV32IZCMP-NEXT: sw t3, 84(a5) 2023; RV32IZCMP-NEXT: sw s1, 80(a5) 2024; RV32IZCMP-NEXT: sw ra, 76(a5) 2025; RV32IZCMP-NEXT: sw s11, 72(a5) 2026; RV32IZCMP-NEXT: sw s10, 68(a5) 2027; RV32IZCMP-NEXT: sw s9, 64(a5) 2028; RV32IZCMP-NEXT: sw s8, 60(a5) 2029; RV32IZCMP-NEXT: sw s7, 56(a5) 2030; RV32IZCMP-NEXT: sw s6, 52(a5) 2031; RV32IZCMP-NEXT: sw s5, 48(a5) 2032; RV32IZCMP-NEXT: sw s4, 44(a5) 2033; RV32IZCMP-NEXT: sw s3, 40(a5) 2034; RV32IZCMP-NEXT: sw s2, 36(a5) 2035; RV32IZCMP-NEXT: sw t6, 32(a5) 2036; RV32IZCMP-NEXT: sw t5, 28(a5) 2037; RV32IZCMP-NEXT: sw t4, 24(a5) 2038; RV32IZCMP-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 2039; RV32IZCMP-NEXT: sw a0, 20(a5) 2040; RV32IZCMP-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 2041; RV32IZCMP-NEXT: sw a0, 16(a5) 2042; RV32IZCMP-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 2043; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2044; RV32IZCMP-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 2045; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2046; RV32IZCMP-NEXT: lw a0, 28(sp) # 4-byte Folded Reload 2047; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2048; RV32IZCMP-NEXT: lw a0, 32(sp) # 4-byte Folded Reload 2049; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) 2050; RV32IZCMP-NEXT: lw t0, 92(sp) # 4-byte Folded Reload 2051; RV32IZCMP-NEXT: lw t1, 88(sp) # 4-byte Folded Reload 2052; RV32IZCMP-NEXT: lw t2, 84(sp) # 4-byte Folded Reload 2053; RV32IZCMP-NEXT: lw a0, 80(sp) # 4-byte Folded Reload 2054; RV32IZCMP-NEXT: lw a1, 76(sp) # 4-byte Folded Reload 2055; RV32IZCMP-NEXT: lw a2, 72(sp) # 4-byte Folded Reload 2056; RV32IZCMP-NEXT: lw a3, 68(sp) # 4-byte Folded Reload 2057; RV32IZCMP-NEXT: lw a4, 64(sp) # 4-byte Folded Reload 2058; RV32IZCMP-NEXT: lw a5, 60(sp) # 4-byte Folded Reload 2059; RV32IZCMP-NEXT: lw a6, 56(sp) # 4-byte Folded Reload 2060; RV32IZCMP-NEXT: lw a7, 52(sp) # 4-byte Folded Reload 2061; RV32IZCMP-NEXT: lw t3, 48(sp) # 4-byte Folded Reload 2062; RV32IZCMP-NEXT: lw t4, 44(sp) # 4-byte Folded Reload 2063; RV32IZCMP-NEXT: lw t5, 40(sp) # 4-byte Folded Reload 2064; RV32IZCMP-NEXT: lw t6, 36(sp) # 4-byte Folded Reload 2065; RV32IZCMP-NEXT: addi sp, sp, 48 2066; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 112 2067; RV32IZCMP-NEXT: mret 2068; 2069; RV64IZCMP-LABEL: callee_with_irq: 2070; RV64IZCMP: # %bb.0: 2071; RV64IZCMP-NEXT: cm.push {ra, s0-s11}, -160 2072; RV64IZCMP-NEXT: addi sp, sp, -128 2073; RV64IZCMP-NEXT: sd t0, 168(sp) # 8-byte Folded Spill 2074; RV64IZCMP-NEXT: sd t1, 160(sp) # 8-byte Folded Spill 2075; RV64IZCMP-NEXT: sd t2, 152(sp) # 8-byte Folded Spill 2076; RV64IZCMP-NEXT: sd a0, 144(sp) # 8-byte Folded Spill 2077; RV64IZCMP-NEXT: sd a1, 136(sp) # 8-byte Folded Spill 2078; RV64IZCMP-NEXT: sd a2, 128(sp) # 8-byte Folded Spill 2079; RV64IZCMP-NEXT: sd a3, 120(sp) # 8-byte Folded Spill 2080; RV64IZCMP-NEXT: sd a4, 112(sp) # 8-byte Folded Spill 2081; RV64IZCMP-NEXT: sd a5, 104(sp) # 8-byte Folded Spill 2082; RV64IZCMP-NEXT: sd a6, 96(sp) # 8-byte Folded Spill 2083; RV64IZCMP-NEXT: sd a7, 88(sp) # 8-byte Folded Spill 2084; RV64IZCMP-NEXT: sd t3, 80(sp) # 8-byte Folded Spill 2085; RV64IZCMP-NEXT: sd t4, 72(sp) # 8-byte Folded Spill 2086; RV64IZCMP-NEXT: sd t5, 64(sp) # 8-byte Folded Spill 2087; RV64IZCMP-NEXT: sd t6, 56(sp) # 8-byte Folded Spill 2088; RV64IZCMP-NEXT: lui t0, %hi(var_test_irq) 2089; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq)(t0) 2090; RV64IZCMP-NEXT: sd a0, 48(sp) # 8-byte Folded Spill 2091; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2092; RV64IZCMP-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 2093; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2094; RV64IZCMP-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 2095; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2096; RV64IZCMP-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 2097; RV64IZCMP-NEXT: addi a5, t0, %lo(var_test_irq) 2098; RV64IZCMP-NEXT: lw a0, 16(a5) 2099; RV64IZCMP-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 2100; RV64IZCMP-NEXT: lw a0, 20(a5) 2101; RV64IZCMP-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 2102; RV64IZCMP-NEXT: lw t4, 24(a5) 2103; RV64IZCMP-NEXT: lw t5, 28(a5) 2104; RV64IZCMP-NEXT: lw t6, 32(a5) 2105; RV64IZCMP-NEXT: lw s2, 36(a5) 2106; RV64IZCMP-NEXT: lw s3, 40(a5) 2107; RV64IZCMP-NEXT: lw s4, 44(a5) 2108; RV64IZCMP-NEXT: lw s5, 48(a5) 2109; RV64IZCMP-NEXT: lw s6, 52(a5) 2110; RV64IZCMP-NEXT: lw s7, 56(a5) 2111; RV64IZCMP-NEXT: lw s8, 60(a5) 2112; RV64IZCMP-NEXT: lw s9, 64(a5) 2113; RV64IZCMP-NEXT: lw s10, 68(a5) 2114; RV64IZCMP-NEXT: lw s11, 72(a5) 2115; RV64IZCMP-NEXT: lw ra, 76(a5) 2116; RV64IZCMP-NEXT: lw s1, 80(a5) 2117; RV64IZCMP-NEXT: lw t3, 84(a5) 2118; RV64IZCMP-NEXT: lw t2, 88(a5) 2119; RV64IZCMP-NEXT: lw t1, 92(a5) 2120; RV64IZCMP-NEXT: lw a7, 112(a5) 2121; RV64IZCMP-NEXT: lw s0, 116(a5) 2122; RV64IZCMP-NEXT: lw a3, 120(a5) 2123; RV64IZCMP-NEXT: lw a0, 124(a5) 2124; RV64IZCMP-NEXT: lw a6, 96(a5) 2125; RV64IZCMP-NEXT: lw a4, 100(a5) 2126; RV64IZCMP-NEXT: lw a2, 104(a5) 2127; RV64IZCMP-NEXT: lw a1, 108(a5) 2128; RV64IZCMP-NEXT: sw a0, 124(a5) 2129; RV64IZCMP-NEXT: sw a3, 120(a5) 2130; RV64IZCMP-NEXT: sw s0, 116(a5) 2131; RV64IZCMP-NEXT: sw a7, 112(a5) 2132; RV64IZCMP-NEXT: sw a1, 108(a5) 2133; RV64IZCMP-NEXT: sw a2, 104(a5) 2134; RV64IZCMP-NEXT: sw a4, 100(a5) 2135; RV64IZCMP-NEXT: sw a6, 96(a5) 2136; RV64IZCMP-NEXT: sw t1, 92(a5) 2137; RV64IZCMP-NEXT: sw t2, 88(a5) 2138; RV64IZCMP-NEXT: sw t3, 84(a5) 2139; RV64IZCMP-NEXT: sw s1, 80(a5) 2140; RV64IZCMP-NEXT: sw ra, 76(a5) 2141; RV64IZCMP-NEXT: sw s11, 72(a5) 2142; RV64IZCMP-NEXT: sw s10, 68(a5) 2143; RV64IZCMP-NEXT: sw s9, 64(a5) 2144; RV64IZCMP-NEXT: sw s8, 60(a5) 2145; RV64IZCMP-NEXT: sw s7, 56(a5) 2146; RV64IZCMP-NEXT: sw s6, 52(a5) 2147; RV64IZCMP-NEXT: sw s5, 48(a5) 2148; RV64IZCMP-NEXT: sw s4, 44(a5) 2149; RV64IZCMP-NEXT: sw s3, 40(a5) 2150; RV64IZCMP-NEXT: sw s2, 36(a5) 2151; RV64IZCMP-NEXT: sw t6, 32(a5) 2152; RV64IZCMP-NEXT: sw t5, 28(a5) 2153; RV64IZCMP-NEXT: sw t4, 24(a5) 2154; RV64IZCMP-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 2155; RV64IZCMP-NEXT: sw a0, 20(a5) 2156; RV64IZCMP-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 2157; RV64IZCMP-NEXT: sw a0, 16(a5) 2158; RV64IZCMP-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 2159; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2160; RV64IZCMP-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 2161; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2162; RV64IZCMP-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 2163; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2164; RV64IZCMP-NEXT: ld a0, 48(sp) # 8-byte Folded Reload 2165; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) 2166; RV64IZCMP-NEXT: ld t0, 168(sp) # 8-byte Folded Reload 2167; RV64IZCMP-NEXT: ld t1, 160(sp) # 8-byte Folded Reload 2168; RV64IZCMP-NEXT: ld t2, 152(sp) # 8-byte Folded Reload 2169; RV64IZCMP-NEXT: ld a0, 144(sp) # 8-byte Folded Reload 2170; RV64IZCMP-NEXT: ld a1, 136(sp) # 8-byte Folded Reload 2171; RV64IZCMP-NEXT: ld a2, 128(sp) # 8-byte Folded Reload 2172; RV64IZCMP-NEXT: ld a3, 120(sp) # 8-byte Folded Reload 2173; RV64IZCMP-NEXT: ld a4, 112(sp) # 8-byte Folded Reload 2174; RV64IZCMP-NEXT: ld a5, 104(sp) # 8-byte Folded Reload 2175; RV64IZCMP-NEXT: ld a6, 96(sp) # 8-byte Folded Reload 2176; RV64IZCMP-NEXT: ld a7, 88(sp) # 8-byte Folded Reload 2177; RV64IZCMP-NEXT: ld t3, 80(sp) # 8-byte Folded Reload 2178; RV64IZCMP-NEXT: ld t4, 72(sp) # 8-byte Folded Reload 2179; RV64IZCMP-NEXT: ld t5, 64(sp) # 8-byte Folded Reload 2180; RV64IZCMP-NEXT: ld t6, 56(sp) # 8-byte Folded Reload 2181; RV64IZCMP-NEXT: addi sp, sp, 128 2182; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 160 2183; RV64IZCMP-NEXT: mret 2184; 2185; RV32IZCMP-SR-LABEL: callee_with_irq: 2186; RV32IZCMP-SR: # %bb.0: 2187; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -112 2188; RV32IZCMP-SR-NEXT: addi sp, sp, -48 2189; RV32IZCMP-SR-NEXT: sw t0, 92(sp) # 4-byte Folded Spill 2190; RV32IZCMP-SR-NEXT: sw t1, 88(sp) # 4-byte Folded Spill 2191; RV32IZCMP-SR-NEXT: sw t2, 84(sp) # 4-byte Folded Spill 2192; RV32IZCMP-SR-NEXT: sw a0, 80(sp) # 4-byte Folded Spill 2193; RV32IZCMP-SR-NEXT: sw a1, 76(sp) # 4-byte Folded Spill 2194; RV32IZCMP-SR-NEXT: sw a2, 72(sp) # 4-byte Folded Spill 2195; RV32IZCMP-SR-NEXT: sw a3, 68(sp) # 4-byte Folded Spill 2196; RV32IZCMP-SR-NEXT: sw a4, 64(sp) # 4-byte Folded Spill 2197; RV32IZCMP-SR-NEXT: sw a5, 60(sp) # 4-byte Folded Spill 2198; RV32IZCMP-SR-NEXT: sw a6, 56(sp) # 4-byte Folded Spill 2199; RV32IZCMP-SR-NEXT: sw a7, 52(sp) # 4-byte Folded Spill 2200; RV32IZCMP-SR-NEXT: sw t3, 48(sp) # 4-byte Folded Spill 2201; RV32IZCMP-SR-NEXT: sw t4, 44(sp) # 4-byte Folded Spill 2202; RV32IZCMP-SR-NEXT: sw t5, 40(sp) # 4-byte Folded Spill 2203; RV32IZCMP-SR-NEXT: sw t6, 36(sp) # 4-byte Folded Spill 2204; RV32IZCMP-SR-NEXT: lui t0, %hi(var_test_irq) 2205; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq)(t0) 2206; RV32IZCMP-SR-NEXT: sw a0, 32(sp) # 4-byte Folded Spill 2207; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2208; RV32IZCMP-SR-NEXT: sw a0, 28(sp) # 4-byte Folded Spill 2209; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2210; RV32IZCMP-SR-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 2211; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2212; RV32IZCMP-SR-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 2213; RV32IZCMP-SR-NEXT: addi a5, t0, %lo(var_test_irq) 2214; RV32IZCMP-SR-NEXT: lw a0, 16(a5) 2215; RV32IZCMP-SR-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 2216; RV32IZCMP-SR-NEXT: lw a0, 20(a5) 2217; RV32IZCMP-SR-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 2218; RV32IZCMP-SR-NEXT: lw t4, 24(a5) 2219; RV32IZCMP-SR-NEXT: lw t5, 28(a5) 2220; RV32IZCMP-SR-NEXT: lw t6, 32(a5) 2221; RV32IZCMP-SR-NEXT: lw s2, 36(a5) 2222; RV32IZCMP-SR-NEXT: lw s3, 40(a5) 2223; RV32IZCMP-SR-NEXT: lw s4, 44(a5) 2224; RV32IZCMP-SR-NEXT: lw s5, 48(a5) 2225; RV32IZCMP-SR-NEXT: lw s6, 52(a5) 2226; RV32IZCMP-SR-NEXT: lw s7, 56(a5) 2227; RV32IZCMP-SR-NEXT: lw s8, 60(a5) 2228; RV32IZCMP-SR-NEXT: lw s9, 64(a5) 2229; RV32IZCMP-SR-NEXT: lw s10, 68(a5) 2230; RV32IZCMP-SR-NEXT: lw s11, 72(a5) 2231; RV32IZCMP-SR-NEXT: lw ra, 76(a5) 2232; RV32IZCMP-SR-NEXT: lw s1, 80(a5) 2233; RV32IZCMP-SR-NEXT: lw t3, 84(a5) 2234; RV32IZCMP-SR-NEXT: lw t2, 88(a5) 2235; RV32IZCMP-SR-NEXT: lw t1, 92(a5) 2236; RV32IZCMP-SR-NEXT: lw a7, 112(a5) 2237; RV32IZCMP-SR-NEXT: lw s0, 116(a5) 2238; RV32IZCMP-SR-NEXT: lw a3, 120(a5) 2239; RV32IZCMP-SR-NEXT: lw a0, 124(a5) 2240; RV32IZCMP-SR-NEXT: lw a6, 96(a5) 2241; RV32IZCMP-SR-NEXT: lw a4, 100(a5) 2242; RV32IZCMP-SR-NEXT: lw a2, 104(a5) 2243; RV32IZCMP-SR-NEXT: lw a1, 108(a5) 2244; RV32IZCMP-SR-NEXT: sw a0, 124(a5) 2245; RV32IZCMP-SR-NEXT: sw a3, 120(a5) 2246; RV32IZCMP-SR-NEXT: sw s0, 116(a5) 2247; RV32IZCMP-SR-NEXT: sw a7, 112(a5) 2248; RV32IZCMP-SR-NEXT: sw a1, 108(a5) 2249; RV32IZCMP-SR-NEXT: sw a2, 104(a5) 2250; RV32IZCMP-SR-NEXT: sw a4, 100(a5) 2251; RV32IZCMP-SR-NEXT: sw a6, 96(a5) 2252; RV32IZCMP-SR-NEXT: sw t1, 92(a5) 2253; RV32IZCMP-SR-NEXT: sw t2, 88(a5) 2254; RV32IZCMP-SR-NEXT: sw t3, 84(a5) 2255; RV32IZCMP-SR-NEXT: sw s1, 80(a5) 2256; RV32IZCMP-SR-NEXT: sw ra, 76(a5) 2257; RV32IZCMP-SR-NEXT: sw s11, 72(a5) 2258; RV32IZCMP-SR-NEXT: sw s10, 68(a5) 2259; RV32IZCMP-SR-NEXT: sw s9, 64(a5) 2260; RV32IZCMP-SR-NEXT: sw s8, 60(a5) 2261; RV32IZCMP-SR-NEXT: sw s7, 56(a5) 2262; RV32IZCMP-SR-NEXT: sw s6, 52(a5) 2263; RV32IZCMP-SR-NEXT: sw s5, 48(a5) 2264; RV32IZCMP-SR-NEXT: sw s4, 44(a5) 2265; RV32IZCMP-SR-NEXT: sw s3, 40(a5) 2266; RV32IZCMP-SR-NEXT: sw s2, 36(a5) 2267; RV32IZCMP-SR-NEXT: sw t6, 32(a5) 2268; RV32IZCMP-SR-NEXT: sw t5, 28(a5) 2269; RV32IZCMP-SR-NEXT: sw t4, 24(a5) 2270; RV32IZCMP-SR-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 2271; RV32IZCMP-SR-NEXT: sw a0, 20(a5) 2272; RV32IZCMP-SR-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 2273; RV32IZCMP-SR-NEXT: sw a0, 16(a5) 2274; RV32IZCMP-SR-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 2275; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2276; RV32IZCMP-SR-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 2277; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2278; RV32IZCMP-SR-NEXT: lw a0, 28(sp) # 4-byte Folded Reload 2279; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2280; RV32IZCMP-SR-NEXT: lw a0, 32(sp) # 4-byte Folded Reload 2281; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) 2282; RV32IZCMP-SR-NEXT: lw t0, 92(sp) # 4-byte Folded Reload 2283; RV32IZCMP-SR-NEXT: lw t1, 88(sp) # 4-byte Folded Reload 2284; RV32IZCMP-SR-NEXT: lw t2, 84(sp) # 4-byte Folded Reload 2285; RV32IZCMP-SR-NEXT: lw a0, 80(sp) # 4-byte Folded Reload 2286; RV32IZCMP-SR-NEXT: lw a1, 76(sp) # 4-byte Folded Reload 2287; RV32IZCMP-SR-NEXT: lw a2, 72(sp) # 4-byte Folded Reload 2288; RV32IZCMP-SR-NEXT: lw a3, 68(sp) # 4-byte Folded Reload 2289; RV32IZCMP-SR-NEXT: lw a4, 64(sp) # 4-byte Folded Reload 2290; RV32IZCMP-SR-NEXT: lw a5, 60(sp) # 4-byte Folded Reload 2291; RV32IZCMP-SR-NEXT: lw a6, 56(sp) # 4-byte Folded Reload 2292; RV32IZCMP-SR-NEXT: lw a7, 52(sp) # 4-byte Folded Reload 2293; RV32IZCMP-SR-NEXT: lw t3, 48(sp) # 4-byte Folded Reload 2294; RV32IZCMP-SR-NEXT: lw t4, 44(sp) # 4-byte Folded Reload 2295; RV32IZCMP-SR-NEXT: lw t5, 40(sp) # 4-byte Folded Reload 2296; RV32IZCMP-SR-NEXT: lw t6, 36(sp) # 4-byte Folded Reload 2297; RV32IZCMP-SR-NEXT: addi sp, sp, 48 2298; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 112 2299; RV32IZCMP-SR-NEXT: mret 2300; 2301; RV64IZCMP-SR-LABEL: callee_with_irq: 2302; RV64IZCMP-SR: # %bb.0: 2303; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -160 2304; RV64IZCMP-SR-NEXT: addi sp, sp, -128 2305; RV64IZCMP-SR-NEXT: sd t0, 168(sp) # 8-byte Folded Spill 2306; RV64IZCMP-SR-NEXT: sd t1, 160(sp) # 8-byte Folded Spill 2307; RV64IZCMP-SR-NEXT: sd t2, 152(sp) # 8-byte Folded Spill 2308; RV64IZCMP-SR-NEXT: sd a0, 144(sp) # 8-byte Folded Spill 2309; RV64IZCMP-SR-NEXT: sd a1, 136(sp) # 8-byte Folded Spill 2310; RV64IZCMP-SR-NEXT: sd a2, 128(sp) # 8-byte Folded Spill 2311; RV64IZCMP-SR-NEXT: sd a3, 120(sp) # 8-byte Folded Spill 2312; RV64IZCMP-SR-NEXT: sd a4, 112(sp) # 8-byte Folded Spill 2313; RV64IZCMP-SR-NEXT: sd a5, 104(sp) # 8-byte Folded Spill 2314; RV64IZCMP-SR-NEXT: sd a6, 96(sp) # 8-byte Folded Spill 2315; RV64IZCMP-SR-NEXT: sd a7, 88(sp) # 8-byte Folded Spill 2316; RV64IZCMP-SR-NEXT: sd t3, 80(sp) # 8-byte Folded Spill 2317; RV64IZCMP-SR-NEXT: sd t4, 72(sp) # 8-byte Folded Spill 2318; RV64IZCMP-SR-NEXT: sd t5, 64(sp) # 8-byte Folded Spill 2319; RV64IZCMP-SR-NEXT: sd t6, 56(sp) # 8-byte Folded Spill 2320; RV64IZCMP-SR-NEXT: lui t0, %hi(var_test_irq) 2321; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq)(t0) 2322; RV64IZCMP-SR-NEXT: sd a0, 48(sp) # 8-byte Folded Spill 2323; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2324; RV64IZCMP-SR-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 2325; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2326; RV64IZCMP-SR-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 2327; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2328; RV64IZCMP-SR-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 2329; RV64IZCMP-SR-NEXT: addi a5, t0, %lo(var_test_irq) 2330; RV64IZCMP-SR-NEXT: lw a0, 16(a5) 2331; RV64IZCMP-SR-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 2332; RV64IZCMP-SR-NEXT: lw a0, 20(a5) 2333; RV64IZCMP-SR-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 2334; RV64IZCMP-SR-NEXT: lw t4, 24(a5) 2335; RV64IZCMP-SR-NEXT: lw t5, 28(a5) 2336; RV64IZCMP-SR-NEXT: lw t6, 32(a5) 2337; RV64IZCMP-SR-NEXT: lw s2, 36(a5) 2338; RV64IZCMP-SR-NEXT: lw s3, 40(a5) 2339; RV64IZCMP-SR-NEXT: lw s4, 44(a5) 2340; RV64IZCMP-SR-NEXT: lw s5, 48(a5) 2341; RV64IZCMP-SR-NEXT: lw s6, 52(a5) 2342; RV64IZCMP-SR-NEXT: lw s7, 56(a5) 2343; RV64IZCMP-SR-NEXT: lw s8, 60(a5) 2344; RV64IZCMP-SR-NEXT: lw s9, 64(a5) 2345; RV64IZCMP-SR-NEXT: lw s10, 68(a5) 2346; RV64IZCMP-SR-NEXT: lw s11, 72(a5) 2347; RV64IZCMP-SR-NEXT: lw ra, 76(a5) 2348; RV64IZCMP-SR-NEXT: lw s1, 80(a5) 2349; RV64IZCMP-SR-NEXT: lw t3, 84(a5) 2350; RV64IZCMP-SR-NEXT: lw t2, 88(a5) 2351; RV64IZCMP-SR-NEXT: lw t1, 92(a5) 2352; RV64IZCMP-SR-NEXT: lw a7, 112(a5) 2353; RV64IZCMP-SR-NEXT: lw s0, 116(a5) 2354; RV64IZCMP-SR-NEXT: lw a3, 120(a5) 2355; RV64IZCMP-SR-NEXT: lw a0, 124(a5) 2356; RV64IZCMP-SR-NEXT: lw a6, 96(a5) 2357; RV64IZCMP-SR-NEXT: lw a4, 100(a5) 2358; RV64IZCMP-SR-NEXT: lw a2, 104(a5) 2359; RV64IZCMP-SR-NEXT: lw a1, 108(a5) 2360; RV64IZCMP-SR-NEXT: sw a0, 124(a5) 2361; RV64IZCMP-SR-NEXT: sw a3, 120(a5) 2362; RV64IZCMP-SR-NEXT: sw s0, 116(a5) 2363; RV64IZCMP-SR-NEXT: sw a7, 112(a5) 2364; RV64IZCMP-SR-NEXT: sw a1, 108(a5) 2365; RV64IZCMP-SR-NEXT: sw a2, 104(a5) 2366; RV64IZCMP-SR-NEXT: sw a4, 100(a5) 2367; RV64IZCMP-SR-NEXT: sw a6, 96(a5) 2368; RV64IZCMP-SR-NEXT: sw t1, 92(a5) 2369; RV64IZCMP-SR-NEXT: sw t2, 88(a5) 2370; RV64IZCMP-SR-NEXT: sw t3, 84(a5) 2371; RV64IZCMP-SR-NEXT: sw s1, 80(a5) 2372; RV64IZCMP-SR-NEXT: sw ra, 76(a5) 2373; RV64IZCMP-SR-NEXT: sw s11, 72(a5) 2374; RV64IZCMP-SR-NEXT: sw s10, 68(a5) 2375; RV64IZCMP-SR-NEXT: sw s9, 64(a5) 2376; RV64IZCMP-SR-NEXT: sw s8, 60(a5) 2377; RV64IZCMP-SR-NEXT: sw s7, 56(a5) 2378; RV64IZCMP-SR-NEXT: sw s6, 52(a5) 2379; RV64IZCMP-SR-NEXT: sw s5, 48(a5) 2380; RV64IZCMP-SR-NEXT: sw s4, 44(a5) 2381; RV64IZCMP-SR-NEXT: sw s3, 40(a5) 2382; RV64IZCMP-SR-NEXT: sw s2, 36(a5) 2383; RV64IZCMP-SR-NEXT: sw t6, 32(a5) 2384; RV64IZCMP-SR-NEXT: sw t5, 28(a5) 2385; RV64IZCMP-SR-NEXT: sw t4, 24(a5) 2386; RV64IZCMP-SR-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 2387; RV64IZCMP-SR-NEXT: sw a0, 20(a5) 2388; RV64IZCMP-SR-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 2389; RV64IZCMP-SR-NEXT: sw a0, 16(a5) 2390; RV64IZCMP-SR-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 2391; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2392; RV64IZCMP-SR-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 2393; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2394; RV64IZCMP-SR-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 2395; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2396; RV64IZCMP-SR-NEXT: ld a0, 48(sp) # 8-byte Folded Reload 2397; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) 2398; RV64IZCMP-SR-NEXT: ld t0, 168(sp) # 8-byte Folded Reload 2399; RV64IZCMP-SR-NEXT: ld t1, 160(sp) # 8-byte Folded Reload 2400; RV64IZCMP-SR-NEXT: ld t2, 152(sp) # 8-byte Folded Reload 2401; RV64IZCMP-SR-NEXT: ld a0, 144(sp) # 8-byte Folded Reload 2402; RV64IZCMP-SR-NEXT: ld a1, 136(sp) # 8-byte Folded Reload 2403; RV64IZCMP-SR-NEXT: ld a2, 128(sp) # 8-byte Folded Reload 2404; RV64IZCMP-SR-NEXT: ld a3, 120(sp) # 8-byte Folded Reload 2405; RV64IZCMP-SR-NEXT: ld a4, 112(sp) # 8-byte Folded Reload 2406; RV64IZCMP-SR-NEXT: ld a5, 104(sp) # 8-byte Folded Reload 2407; RV64IZCMP-SR-NEXT: ld a6, 96(sp) # 8-byte Folded Reload 2408; RV64IZCMP-SR-NEXT: ld a7, 88(sp) # 8-byte Folded Reload 2409; RV64IZCMP-SR-NEXT: ld t3, 80(sp) # 8-byte Folded Reload 2410; RV64IZCMP-SR-NEXT: ld t4, 72(sp) # 8-byte Folded Reload 2411; RV64IZCMP-SR-NEXT: ld t5, 64(sp) # 8-byte Folded Reload 2412; RV64IZCMP-SR-NEXT: ld t6, 56(sp) # 8-byte Folded Reload 2413; RV64IZCMP-SR-NEXT: addi sp, sp, 128 2414; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 160 2415; RV64IZCMP-SR-NEXT: mret 2416; 2417; RV32I-LABEL: callee_with_irq: 2418; RV32I: # %bb.0: 2419; RV32I-NEXT: addi sp, sp, -144 2420; RV32I-NEXT: sw ra, 140(sp) # 4-byte Folded Spill 2421; RV32I-NEXT: sw t0, 136(sp) # 4-byte Folded Spill 2422; RV32I-NEXT: sw t1, 132(sp) # 4-byte Folded Spill 2423; RV32I-NEXT: sw t2, 128(sp) # 4-byte Folded Spill 2424; RV32I-NEXT: sw s0, 124(sp) # 4-byte Folded Spill 2425; RV32I-NEXT: sw s1, 120(sp) # 4-byte Folded Spill 2426; RV32I-NEXT: sw a0, 116(sp) # 4-byte Folded Spill 2427; RV32I-NEXT: sw a1, 112(sp) # 4-byte Folded Spill 2428; RV32I-NEXT: sw a2, 108(sp) # 4-byte Folded Spill 2429; RV32I-NEXT: sw a3, 104(sp) # 4-byte Folded Spill 2430; RV32I-NEXT: sw a4, 100(sp) # 4-byte Folded Spill 2431; RV32I-NEXT: sw a5, 96(sp) # 4-byte Folded Spill 2432; RV32I-NEXT: sw a6, 92(sp) # 4-byte Folded Spill 2433; RV32I-NEXT: sw a7, 88(sp) # 4-byte Folded Spill 2434; RV32I-NEXT: sw s2, 84(sp) # 4-byte Folded Spill 2435; RV32I-NEXT: sw s3, 80(sp) # 4-byte Folded Spill 2436; RV32I-NEXT: sw s4, 76(sp) # 4-byte Folded Spill 2437; RV32I-NEXT: sw s5, 72(sp) # 4-byte Folded Spill 2438; RV32I-NEXT: sw s6, 68(sp) # 4-byte Folded Spill 2439; RV32I-NEXT: sw s7, 64(sp) # 4-byte Folded Spill 2440; RV32I-NEXT: sw s8, 60(sp) # 4-byte Folded Spill 2441; RV32I-NEXT: sw s9, 56(sp) # 4-byte Folded Spill 2442; RV32I-NEXT: sw s10, 52(sp) # 4-byte Folded Spill 2443; RV32I-NEXT: sw s11, 48(sp) # 4-byte Folded Spill 2444; RV32I-NEXT: sw t3, 44(sp) # 4-byte Folded Spill 2445; RV32I-NEXT: sw t4, 40(sp) # 4-byte Folded Spill 2446; RV32I-NEXT: sw t5, 36(sp) # 4-byte Folded Spill 2447; RV32I-NEXT: sw t6, 32(sp) # 4-byte Folded Spill 2448; RV32I-NEXT: lui a7, %hi(var_test_irq) 2449; RV32I-NEXT: lw a0, %lo(var_test_irq)(a7) 2450; RV32I-NEXT: sw a0, 28(sp) # 4-byte Folded Spill 2451; RV32I-NEXT: lw a0, %lo(var_test_irq+4)(a7) 2452; RV32I-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 2453; RV32I-NEXT: lw a0, %lo(var_test_irq+8)(a7) 2454; RV32I-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 2455; RV32I-NEXT: lw a0, %lo(var_test_irq+12)(a7) 2456; RV32I-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 2457; RV32I-NEXT: addi a5, a7, %lo(var_test_irq) 2458; RV32I-NEXT: lw a0, 16(a5) 2459; RV32I-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 2460; RV32I-NEXT: lw a0, 20(a5) 2461; RV32I-NEXT: sw a0, 8(sp) # 4-byte Folded Spill 2462; RV32I-NEXT: lw t0, 24(a5) 2463; RV32I-NEXT: lw t1, 28(a5) 2464; RV32I-NEXT: lw t2, 32(a5) 2465; RV32I-NEXT: lw t3, 36(a5) 2466; RV32I-NEXT: lw t4, 40(a5) 2467; RV32I-NEXT: lw t5, 44(a5) 2468; RV32I-NEXT: lw t6, 48(a5) 2469; RV32I-NEXT: lw s0, 52(a5) 2470; RV32I-NEXT: lw s1, 56(a5) 2471; RV32I-NEXT: lw s2, 60(a5) 2472; RV32I-NEXT: lw s3, 64(a5) 2473; RV32I-NEXT: lw s4, 68(a5) 2474; RV32I-NEXT: lw s5, 72(a5) 2475; RV32I-NEXT: lw s6, 76(a5) 2476; RV32I-NEXT: lw s7, 80(a5) 2477; RV32I-NEXT: lw s8, 84(a5) 2478; RV32I-NEXT: lw s9, 88(a5) 2479; RV32I-NEXT: lw s10, 92(a5) 2480; RV32I-NEXT: lw s11, 112(a5) 2481; RV32I-NEXT: lw ra, 116(a5) 2482; RV32I-NEXT: lw a3, 120(a5) 2483; RV32I-NEXT: lw a0, 124(a5) 2484; RV32I-NEXT: lw a6, 96(a5) 2485; RV32I-NEXT: lw a4, 100(a5) 2486; RV32I-NEXT: lw a2, 104(a5) 2487; RV32I-NEXT: lw a1, 108(a5) 2488; RV32I-NEXT: sw a0, 124(a5) 2489; RV32I-NEXT: sw a3, 120(a5) 2490; RV32I-NEXT: sw ra, 116(a5) 2491; RV32I-NEXT: sw s11, 112(a5) 2492; RV32I-NEXT: sw a1, 108(a5) 2493; RV32I-NEXT: sw a2, 104(a5) 2494; RV32I-NEXT: sw a4, 100(a5) 2495; RV32I-NEXT: sw a6, 96(a5) 2496; RV32I-NEXT: sw s10, 92(a5) 2497; RV32I-NEXT: sw s9, 88(a5) 2498; RV32I-NEXT: sw s8, 84(a5) 2499; RV32I-NEXT: sw s7, 80(a5) 2500; RV32I-NEXT: sw s6, 76(a5) 2501; RV32I-NEXT: sw s5, 72(a5) 2502; RV32I-NEXT: sw s4, 68(a5) 2503; RV32I-NEXT: sw s3, 64(a5) 2504; RV32I-NEXT: sw s2, 60(a5) 2505; RV32I-NEXT: sw s1, 56(a5) 2506; RV32I-NEXT: sw s0, 52(a5) 2507; RV32I-NEXT: sw t6, 48(a5) 2508; RV32I-NEXT: sw t5, 44(a5) 2509; RV32I-NEXT: sw t4, 40(a5) 2510; RV32I-NEXT: sw t3, 36(a5) 2511; RV32I-NEXT: sw t2, 32(a5) 2512; RV32I-NEXT: sw t1, 28(a5) 2513; RV32I-NEXT: sw t0, 24(a5) 2514; RV32I-NEXT: lw a0, 8(sp) # 4-byte Folded Reload 2515; RV32I-NEXT: sw a0, 20(a5) 2516; RV32I-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 2517; RV32I-NEXT: sw a0, 16(a5) 2518; RV32I-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 2519; RV32I-NEXT: sw a0, %lo(var_test_irq+12)(a7) 2520; RV32I-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 2521; RV32I-NEXT: sw a0, %lo(var_test_irq+8)(a7) 2522; RV32I-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 2523; RV32I-NEXT: sw a0, %lo(var_test_irq+4)(a7) 2524; RV32I-NEXT: lw a0, 28(sp) # 4-byte Folded Reload 2525; RV32I-NEXT: sw a0, %lo(var_test_irq)(a7) 2526; RV32I-NEXT: lw ra, 140(sp) # 4-byte Folded Reload 2527; RV32I-NEXT: lw t0, 136(sp) # 4-byte Folded Reload 2528; RV32I-NEXT: lw t1, 132(sp) # 4-byte Folded Reload 2529; RV32I-NEXT: lw t2, 128(sp) # 4-byte Folded Reload 2530; RV32I-NEXT: lw s0, 124(sp) # 4-byte Folded Reload 2531; RV32I-NEXT: lw s1, 120(sp) # 4-byte Folded Reload 2532; RV32I-NEXT: lw a0, 116(sp) # 4-byte Folded Reload 2533; RV32I-NEXT: lw a1, 112(sp) # 4-byte Folded Reload 2534; RV32I-NEXT: lw a2, 108(sp) # 4-byte Folded Reload 2535; RV32I-NEXT: lw a3, 104(sp) # 4-byte Folded Reload 2536; RV32I-NEXT: lw a4, 100(sp) # 4-byte Folded Reload 2537; RV32I-NEXT: lw a5, 96(sp) # 4-byte Folded Reload 2538; RV32I-NEXT: lw a6, 92(sp) # 4-byte Folded Reload 2539; RV32I-NEXT: lw a7, 88(sp) # 4-byte Folded Reload 2540; RV32I-NEXT: lw s2, 84(sp) # 4-byte Folded Reload 2541; RV32I-NEXT: lw s3, 80(sp) # 4-byte Folded Reload 2542; RV32I-NEXT: lw s4, 76(sp) # 4-byte Folded Reload 2543; RV32I-NEXT: lw s5, 72(sp) # 4-byte Folded Reload 2544; RV32I-NEXT: lw s6, 68(sp) # 4-byte Folded Reload 2545; RV32I-NEXT: lw s7, 64(sp) # 4-byte Folded Reload 2546; RV32I-NEXT: lw s8, 60(sp) # 4-byte Folded Reload 2547; RV32I-NEXT: lw s9, 56(sp) # 4-byte Folded Reload 2548; RV32I-NEXT: lw s10, 52(sp) # 4-byte Folded Reload 2549; RV32I-NEXT: lw s11, 48(sp) # 4-byte Folded Reload 2550; RV32I-NEXT: lw t3, 44(sp) # 4-byte Folded Reload 2551; RV32I-NEXT: lw t4, 40(sp) # 4-byte Folded Reload 2552; RV32I-NEXT: lw t5, 36(sp) # 4-byte Folded Reload 2553; RV32I-NEXT: lw t6, 32(sp) # 4-byte Folded Reload 2554; RV32I-NEXT: addi sp, sp, 144 2555; RV32I-NEXT: mret 2556; 2557; RV64I-LABEL: callee_with_irq: 2558; RV64I: # %bb.0: 2559; RV64I-NEXT: addi sp, sp, -272 2560; RV64I-NEXT: sd ra, 264(sp) # 8-byte Folded Spill 2561; RV64I-NEXT: sd t0, 256(sp) # 8-byte Folded Spill 2562; RV64I-NEXT: sd t1, 248(sp) # 8-byte Folded Spill 2563; RV64I-NEXT: sd t2, 240(sp) # 8-byte Folded Spill 2564; RV64I-NEXT: sd s0, 232(sp) # 8-byte Folded Spill 2565; RV64I-NEXT: sd s1, 224(sp) # 8-byte Folded Spill 2566; RV64I-NEXT: sd a0, 216(sp) # 8-byte Folded Spill 2567; RV64I-NEXT: sd a1, 208(sp) # 8-byte Folded Spill 2568; RV64I-NEXT: sd a2, 200(sp) # 8-byte Folded Spill 2569; RV64I-NEXT: sd a3, 192(sp) # 8-byte Folded Spill 2570; RV64I-NEXT: sd a4, 184(sp) # 8-byte Folded Spill 2571; RV64I-NEXT: sd a5, 176(sp) # 8-byte Folded Spill 2572; RV64I-NEXT: sd a6, 168(sp) # 8-byte Folded Spill 2573; RV64I-NEXT: sd a7, 160(sp) # 8-byte Folded Spill 2574; RV64I-NEXT: sd s2, 152(sp) # 8-byte Folded Spill 2575; RV64I-NEXT: sd s3, 144(sp) # 8-byte Folded Spill 2576; RV64I-NEXT: sd s4, 136(sp) # 8-byte Folded Spill 2577; RV64I-NEXT: sd s5, 128(sp) # 8-byte Folded Spill 2578; RV64I-NEXT: sd s6, 120(sp) # 8-byte Folded Spill 2579; RV64I-NEXT: sd s7, 112(sp) # 8-byte Folded Spill 2580; RV64I-NEXT: sd s8, 104(sp) # 8-byte Folded Spill 2581; RV64I-NEXT: sd s9, 96(sp) # 8-byte Folded Spill 2582; RV64I-NEXT: sd s10, 88(sp) # 8-byte Folded Spill 2583; RV64I-NEXT: sd s11, 80(sp) # 8-byte Folded Spill 2584; RV64I-NEXT: sd t3, 72(sp) # 8-byte Folded Spill 2585; RV64I-NEXT: sd t4, 64(sp) # 8-byte Folded Spill 2586; RV64I-NEXT: sd t5, 56(sp) # 8-byte Folded Spill 2587; RV64I-NEXT: sd t6, 48(sp) # 8-byte Folded Spill 2588; RV64I-NEXT: lui a7, %hi(var_test_irq) 2589; RV64I-NEXT: lw a0, %lo(var_test_irq)(a7) 2590; RV64I-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 2591; RV64I-NEXT: lw a0, %lo(var_test_irq+4)(a7) 2592; RV64I-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 2593; RV64I-NEXT: lw a0, %lo(var_test_irq+8)(a7) 2594; RV64I-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 2595; RV64I-NEXT: lw a0, %lo(var_test_irq+12)(a7) 2596; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 2597; RV64I-NEXT: addi a5, a7, %lo(var_test_irq) 2598; RV64I-NEXT: lw a0, 16(a5) 2599; RV64I-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 2600; RV64I-NEXT: lw a0, 20(a5) 2601; RV64I-NEXT: sd a0, 0(sp) # 8-byte Folded Spill 2602; RV64I-NEXT: lw t0, 24(a5) 2603; RV64I-NEXT: lw t1, 28(a5) 2604; RV64I-NEXT: lw t2, 32(a5) 2605; RV64I-NEXT: lw t3, 36(a5) 2606; RV64I-NEXT: lw t4, 40(a5) 2607; RV64I-NEXT: lw t5, 44(a5) 2608; RV64I-NEXT: lw t6, 48(a5) 2609; RV64I-NEXT: lw s0, 52(a5) 2610; RV64I-NEXT: lw s1, 56(a5) 2611; RV64I-NEXT: lw s2, 60(a5) 2612; RV64I-NEXT: lw s3, 64(a5) 2613; RV64I-NEXT: lw s4, 68(a5) 2614; RV64I-NEXT: lw s5, 72(a5) 2615; RV64I-NEXT: lw s6, 76(a5) 2616; RV64I-NEXT: lw s7, 80(a5) 2617; RV64I-NEXT: lw s8, 84(a5) 2618; RV64I-NEXT: lw s9, 88(a5) 2619; RV64I-NEXT: lw s10, 92(a5) 2620; RV64I-NEXT: lw s11, 112(a5) 2621; RV64I-NEXT: lw ra, 116(a5) 2622; RV64I-NEXT: lw a3, 120(a5) 2623; RV64I-NEXT: lw a0, 124(a5) 2624; RV64I-NEXT: lw a6, 96(a5) 2625; RV64I-NEXT: lw a4, 100(a5) 2626; RV64I-NEXT: lw a2, 104(a5) 2627; RV64I-NEXT: lw a1, 108(a5) 2628; RV64I-NEXT: sw a0, 124(a5) 2629; RV64I-NEXT: sw a3, 120(a5) 2630; RV64I-NEXT: sw ra, 116(a5) 2631; RV64I-NEXT: sw s11, 112(a5) 2632; RV64I-NEXT: sw a1, 108(a5) 2633; RV64I-NEXT: sw a2, 104(a5) 2634; RV64I-NEXT: sw a4, 100(a5) 2635; RV64I-NEXT: sw a6, 96(a5) 2636; RV64I-NEXT: sw s10, 92(a5) 2637; RV64I-NEXT: sw s9, 88(a5) 2638; RV64I-NEXT: sw s8, 84(a5) 2639; RV64I-NEXT: sw s7, 80(a5) 2640; RV64I-NEXT: sw s6, 76(a5) 2641; RV64I-NEXT: sw s5, 72(a5) 2642; RV64I-NEXT: sw s4, 68(a5) 2643; RV64I-NEXT: sw s3, 64(a5) 2644; RV64I-NEXT: sw s2, 60(a5) 2645; RV64I-NEXT: sw s1, 56(a5) 2646; RV64I-NEXT: sw s0, 52(a5) 2647; RV64I-NEXT: sw t6, 48(a5) 2648; RV64I-NEXT: sw t5, 44(a5) 2649; RV64I-NEXT: sw t4, 40(a5) 2650; RV64I-NEXT: sw t3, 36(a5) 2651; RV64I-NEXT: sw t2, 32(a5) 2652; RV64I-NEXT: sw t1, 28(a5) 2653; RV64I-NEXT: sw t0, 24(a5) 2654; RV64I-NEXT: ld a0, 0(sp) # 8-byte Folded Reload 2655; RV64I-NEXT: sw a0, 20(a5) 2656; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 2657; RV64I-NEXT: sw a0, 16(a5) 2658; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 2659; RV64I-NEXT: sw a0, %lo(var_test_irq+12)(a7) 2660; RV64I-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 2661; RV64I-NEXT: sw a0, %lo(var_test_irq+8)(a7) 2662; RV64I-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 2663; RV64I-NEXT: sw a0, %lo(var_test_irq+4)(a7) 2664; RV64I-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 2665; RV64I-NEXT: sw a0, %lo(var_test_irq)(a7) 2666; RV64I-NEXT: ld ra, 264(sp) # 8-byte Folded Reload 2667; RV64I-NEXT: ld t0, 256(sp) # 8-byte Folded Reload 2668; RV64I-NEXT: ld t1, 248(sp) # 8-byte Folded Reload 2669; RV64I-NEXT: ld t2, 240(sp) # 8-byte Folded Reload 2670; RV64I-NEXT: ld s0, 232(sp) # 8-byte Folded Reload 2671; RV64I-NEXT: ld s1, 224(sp) # 8-byte Folded Reload 2672; RV64I-NEXT: ld a0, 216(sp) # 8-byte Folded Reload 2673; RV64I-NEXT: ld a1, 208(sp) # 8-byte Folded Reload 2674; RV64I-NEXT: ld a2, 200(sp) # 8-byte Folded Reload 2675; RV64I-NEXT: ld a3, 192(sp) # 8-byte Folded Reload 2676; RV64I-NEXT: ld a4, 184(sp) # 8-byte Folded Reload 2677; RV64I-NEXT: ld a5, 176(sp) # 8-byte Folded Reload 2678; RV64I-NEXT: ld a6, 168(sp) # 8-byte Folded Reload 2679; RV64I-NEXT: ld a7, 160(sp) # 8-byte Folded Reload 2680; RV64I-NEXT: ld s2, 152(sp) # 8-byte Folded Reload 2681; RV64I-NEXT: ld s3, 144(sp) # 8-byte Folded Reload 2682; RV64I-NEXT: ld s4, 136(sp) # 8-byte Folded Reload 2683; RV64I-NEXT: ld s5, 128(sp) # 8-byte Folded Reload 2684; RV64I-NEXT: ld s6, 120(sp) # 8-byte Folded Reload 2685; RV64I-NEXT: ld s7, 112(sp) # 8-byte Folded Reload 2686; RV64I-NEXT: ld s8, 104(sp) # 8-byte Folded Reload 2687; RV64I-NEXT: ld s9, 96(sp) # 8-byte Folded Reload 2688; RV64I-NEXT: ld s10, 88(sp) # 8-byte Folded Reload 2689; RV64I-NEXT: ld s11, 80(sp) # 8-byte Folded Reload 2690; RV64I-NEXT: ld t3, 72(sp) # 8-byte Folded Reload 2691; RV64I-NEXT: ld t4, 64(sp) # 8-byte Folded Reload 2692; RV64I-NEXT: ld t5, 56(sp) # 8-byte Folded Reload 2693; RV64I-NEXT: ld t6, 48(sp) # 8-byte Folded Reload 2694; RV64I-NEXT: addi sp, sp, 272 2695; RV64I-NEXT: mret 2696 %val = load [32 x i32], ptr @var_test_irq 2697 store volatile [32 x i32] %val, ptr @var_test_irq 2698 ret void 2699} 2700 2701define void @callee_no_irq() nounwind{ 2702; RV32IZCMP-LABEL: callee_no_irq: 2703; RV32IZCMP: # %bb.0: 2704; RV32IZCMP-NEXT: cm.push {ra, s0-s11}, -96 2705; RV32IZCMP-NEXT: lui t0, %hi(var_test_irq) 2706; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq)(t0) 2707; RV32IZCMP-NEXT: sw a0, 28(sp) # 4-byte Folded Spill 2708; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2709; RV32IZCMP-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 2710; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2711; RV32IZCMP-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 2712; RV32IZCMP-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2713; RV32IZCMP-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 2714; RV32IZCMP-NEXT: addi a5, t0, %lo(var_test_irq) 2715; RV32IZCMP-NEXT: lw a0, 16(a5) 2716; RV32IZCMP-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 2717; RV32IZCMP-NEXT: lw a0, 20(a5) 2718; RV32IZCMP-NEXT: sw a0, 8(sp) # 4-byte Folded Spill 2719; RV32IZCMP-NEXT: lw t4, 24(a5) 2720; RV32IZCMP-NEXT: lw t5, 28(a5) 2721; RV32IZCMP-NEXT: lw t6, 32(a5) 2722; RV32IZCMP-NEXT: lw s2, 36(a5) 2723; RV32IZCMP-NEXT: lw s3, 40(a5) 2724; RV32IZCMP-NEXT: lw s4, 44(a5) 2725; RV32IZCMP-NEXT: lw s5, 48(a5) 2726; RV32IZCMP-NEXT: lw s6, 52(a5) 2727; RV32IZCMP-NEXT: lw s7, 56(a5) 2728; RV32IZCMP-NEXT: lw s8, 60(a5) 2729; RV32IZCMP-NEXT: lw s9, 64(a5) 2730; RV32IZCMP-NEXT: lw s10, 68(a5) 2731; RV32IZCMP-NEXT: lw s11, 72(a5) 2732; RV32IZCMP-NEXT: lw ra, 76(a5) 2733; RV32IZCMP-NEXT: lw s1, 80(a5) 2734; RV32IZCMP-NEXT: lw t3, 84(a5) 2735; RV32IZCMP-NEXT: lw t2, 88(a5) 2736; RV32IZCMP-NEXT: lw t1, 92(a5) 2737; RV32IZCMP-NEXT: lw a7, 112(a5) 2738; RV32IZCMP-NEXT: lw s0, 116(a5) 2739; RV32IZCMP-NEXT: lw a3, 120(a5) 2740; RV32IZCMP-NEXT: lw a0, 124(a5) 2741; RV32IZCMP-NEXT: lw a6, 96(a5) 2742; RV32IZCMP-NEXT: lw a4, 100(a5) 2743; RV32IZCMP-NEXT: lw a2, 104(a5) 2744; RV32IZCMP-NEXT: lw a1, 108(a5) 2745; RV32IZCMP-NEXT: sw a0, 124(a5) 2746; RV32IZCMP-NEXT: sw a3, 120(a5) 2747; RV32IZCMP-NEXT: sw s0, 116(a5) 2748; RV32IZCMP-NEXT: sw a7, 112(a5) 2749; RV32IZCMP-NEXT: sw a1, 108(a5) 2750; RV32IZCMP-NEXT: sw a2, 104(a5) 2751; RV32IZCMP-NEXT: sw a4, 100(a5) 2752; RV32IZCMP-NEXT: sw a6, 96(a5) 2753; RV32IZCMP-NEXT: sw t1, 92(a5) 2754; RV32IZCMP-NEXT: sw t2, 88(a5) 2755; RV32IZCMP-NEXT: sw t3, 84(a5) 2756; RV32IZCMP-NEXT: sw s1, 80(a5) 2757; RV32IZCMP-NEXT: sw ra, 76(a5) 2758; RV32IZCMP-NEXT: sw s11, 72(a5) 2759; RV32IZCMP-NEXT: sw s10, 68(a5) 2760; RV32IZCMP-NEXT: sw s9, 64(a5) 2761; RV32IZCMP-NEXT: sw s8, 60(a5) 2762; RV32IZCMP-NEXT: sw s7, 56(a5) 2763; RV32IZCMP-NEXT: sw s6, 52(a5) 2764; RV32IZCMP-NEXT: sw s5, 48(a5) 2765; RV32IZCMP-NEXT: sw s4, 44(a5) 2766; RV32IZCMP-NEXT: sw s3, 40(a5) 2767; RV32IZCMP-NEXT: sw s2, 36(a5) 2768; RV32IZCMP-NEXT: sw t6, 32(a5) 2769; RV32IZCMP-NEXT: sw t5, 28(a5) 2770; RV32IZCMP-NEXT: sw t4, 24(a5) 2771; RV32IZCMP-NEXT: lw a0, 8(sp) # 4-byte Folded Reload 2772; RV32IZCMP-NEXT: sw a0, 20(a5) 2773; RV32IZCMP-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 2774; RV32IZCMP-NEXT: sw a0, 16(a5) 2775; RV32IZCMP-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 2776; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2777; RV32IZCMP-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 2778; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2779; RV32IZCMP-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 2780; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2781; RV32IZCMP-NEXT: lw a0, 28(sp) # 4-byte Folded Reload 2782; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) 2783; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 96 2784; 2785; RV64IZCMP-LABEL: callee_no_irq: 2786; RV64IZCMP: # %bb.0: 2787; RV64IZCMP-NEXT: cm.push {ra, s0-s11}, -160 2788; RV64IZCMP-NEXT: lui t0, %hi(var_test_irq) 2789; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq)(t0) 2790; RV64IZCMP-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 2791; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2792; RV64IZCMP-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 2793; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2794; RV64IZCMP-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 2795; RV64IZCMP-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2796; RV64IZCMP-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 2797; RV64IZCMP-NEXT: addi a5, t0, %lo(var_test_irq) 2798; RV64IZCMP-NEXT: lw a0, 16(a5) 2799; RV64IZCMP-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 2800; RV64IZCMP-NEXT: lw a0, 20(a5) 2801; RV64IZCMP-NEXT: sd a0, 0(sp) # 8-byte Folded Spill 2802; RV64IZCMP-NEXT: lw t4, 24(a5) 2803; RV64IZCMP-NEXT: lw t5, 28(a5) 2804; RV64IZCMP-NEXT: lw t6, 32(a5) 2805; RV64IZCMP-NEXT: lw s2, 36(a5) 2806; RV64IZCMP-NEXT: lw s3, 40(a5) 2807; RV64IZCMP-NEXT: lw s4, 44(a5) 2808; RV64IZCMP-NEXT: lw s5, 48(a5) 2809; RV64IZCMP-NEXT: lw s6, 52(a5) 2810; RV64IZCMP-NEXT: lw s7, 56(a5) 2811; RV64IZCMP-NEXT: lw s8, 60(a5) 2812; RV64IZCMP-NEXT: lw s9, 64(a5) 2813; RV64IZCMP-NEXT: lw s10, 68(a5) 2814; RV64IZCMP-NEXT: lw s11, 72(a5) 2815; RV64IZCMP-NEXT: lw ra, 76(a5) 2816; RV64IZCMP-NEXT: lw s1, 80(a5) 2817; RV64IZCMP-NEXT: lw t3, 84(a5) 2818; RV64IZCMP-NEXT: lw t2, 88(a5) 2819; RV64IZCMP-NEXT: lw t1, 92(a5) 2820; RV64IZCMP-NEXT: lw a7, 112(a5) 2821; RV64IZCMP-NEXT: lw s0, 116(a5) 2822; RV64IZCMP-NEXT: lw a3, 120(a5) 2823; RV64IZCMP-NEXT: lw a0, 124(a5) 2824; RV64IZCMP-NEXT: lw a6, 96(a5) 2825; RV64IZCMP-NEXT: lw a4, 100(a5) 2826; RV64IZCMP-NEXT: lw a2, 104(a5) 2827; RV64IZCMP-NEXT: lw a1, 108(a5) 2828; RV64IZCMP-NEXT: sw a0, 124(a5) 2829; RV64IZCMP-NEXT: sw a3, 120(a5) 2830; RV64IZCMP-NEXT: sw s0, 116(a5) 2831; RV64IZCMP-NEXT: sw a7, 112(a5) 2832; RV64IZCMP-NEXT: sw a1, 108(a5) 2833; RV64IZCMP-NEXT: sw a2, 104(a5) 2834; RV64IZCMP-NEXT: sw a4, 100(a5) 2835; RV64IZCMP-NEXT: sw a6, 96(a5) 2836; RV64IZCMP-NEXT: sw t1, 92(a5) 2837; RV64IZCMP-NEXT: sw t2, 88(a5) 2838; RV64IZCMP-NEXT: sw t3, 84(a5) 2839; RV64IZCMP-NEXT: sw s1, 80(a5) 2840; RV64IZCMP-NEXT: sw ra, 76(a5) 2841; RV64IZCMP-NEXT: sw s11, 72(a5) 2842; RV64IZCMP-NEXT: sw s10, 68(a5) 2843; RV64IZCMP-NEXT: sw s9, 64(a5) 2844; RV64IZCMP-NEXT: sw s8, 60(a5) 2845; RV64IZCMP-NEXT: sw s7, 56(a5) 2846; RV64IZCMP-NEXT: sw s6, 52(a5) 2847; RV64IZCMP-NEXT: sw s5, 48(a5) 2848; RV64IZCMP-NEXT: sw s4, 44(a5) 2849; RV64IZCMP-NEXT: sw s3, 40(a5) 2850; RV64IZCMP-NEXT: sw s2, 36(a5) 2851; RV64IZCMP-NEXT: sw t6, 32(a5) 2852; RV64IZCMP-NEXT: sw t5, 28(a5) 2853; RV64IZCMP-NEXT: sw t4, 24(a5) 2854; RV64IZCMP-NEXT: ld a0, 0(sp) # 8-byte Folded Reload 2855; RV64IZCMP-NEXT: sw a0, 20(a5) 2856; RV64IZCMP-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 2857; RV64IZCMP-NEXT: sw a0, 16(a5) 2858; RV64IZCMP-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 2859; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2860; RV64IZCMP-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 2861; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2862; RV64IZCMP-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 2863; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2864; RV64IZCMP-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 2865; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) 2866; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 160 2867; 2868; RV32IZCMP-SR-LABEL: callee_no_irq: 2869; RV32IZCMP-SR: # %bb.0: 2870; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -96 2871; RV32IZCMP-SR-NEXT: lui t0, %hi(var_test_irq) 2872; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq)(t0) 2873; RV32IZCMP-SR-NEXT: sw a0, 28(sp) # 4-byte Folded Spill 2874; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2875; RV32IZCMP-SR-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 2876; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2877; RV32IZCMP-SR-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 2878; RV32IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2879; RV32IZCMP-SR-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 2880; RV32IZCMP-SR-NEXT: addi a5, t0, %lo(var_test_irq) 2881; RV32IZCMP-SR-NEXT: lw a0, 16(a5) 2882; RV32IZCMP-SR-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 2883; RV32IZCMP-SR-NEXT: lw a0, 20(a5) 2884; RV32IZCMP-SR-NEXT: sw a0, 8(sp) # 4-byte Folded Spill 2885; RV32IZCMP-SR-NEXT: lw t4, 24(a5) 2886; RV32IZCMP-SR-NEXT: lw t5, 28(a5) 2887; RV32IZCMP-SR-NEXT: lw t6, 32(a5) 2888; RV32IZCMP-SR-NEXT: lw s2, 36(a5) 2889; RV32IZCMP-SR-NEXT: lw s3, 40(a5) 2890; RV32IZCMP-SR-NEXT: lw s4, 44(a5) 2891; RV32IZCMP-SR-NEXT: lw s5, 48(a5) 2892; RV32IZCMP-SR-NEXT: lw s6, 52(a5) 2893; RV32IZCMP-SR-NEXT: lw s7, 56(a5) 2894; RV32IZCMP-SR-NEXT: lw s8, 60(a5) 2895; RV32IZCMP-SR-NEXT: lw s9, 64(a5) 2896; RV32IZCMP-SR-NEXT: lw s10, 68(a5) 2897; RV32IZCMP-SR-NEXT: lw s11, 72(a5) 2898; RV32IZCMP-SR-NEXT: lw ra, 76(a5) 2899; RV32IZCMP-SR-NEXT: lw s1, 80(a5) 2900; RV32IZCMP-SR-NEXT: lw t3, 84(a5) 2901; RV32IZCMP-SR-NEXT: lw t2, 88(a5) 2902; RV32IZCMP-SR-NEXT: lw t1, 92(a5) 2903; RV32IZCMP-SR-NEXT: lw a7, 112(a5) 2904; RV32IZCMP-SR-NEXT: lw s0, 116(a5) 2905; RV32IZCMP-SR-NEXT: lw a3, 120(a5) 2906; RV32IZCMP-SR-NEXT: lw a0, 124(a5) 2907; RV32IZCMP-SR-NEXT: lw a6, 96(a5) 2908; RV32IZCMP-SR-NEXT: lw a4, 100(a5) 2909; RV32IZCMP-SR-NEXT: lw a2, 104(a5) 2910; RV32IZCMP-SR-NEXT: lw a1, 108(a5) 2911; RV32IZCMP-SR-NEXT: sw a0, 124(a5) 2912; RV32IZCMP-SR-NEXT: sw a3, 120(a5) 2913; RV32IZCMP-SR-NEXT: sw s0, 116(a5) 2914; RV32IZCMP-SR-NEXT: sw a7, 112(a5) 2915; RV32IZCMP-SR-NEXT: sw a1, 108(a5) 2916; RV32IZCMP-SR-NEXT: sw a2, 104(a5) 2917; RV32IZCMP-SR-NEXT: sw a4, 100(a5) 2918; RV32IZCMP-SR-NEXT: sw a6, 96(a5) 2919; RV32IZCMP-SR-NEXT: sw t1, 92(a5) 2920; RV32IZCMP-SR-NEXT: sw t2, 88(a5) 2921; RV32IZCMP-SR-NEXT: sw t3, 84(a5) 2922; RV32IZCMP-SR-NEXT: sw s1, 80(a5) 2923; RV32IZCMP-SR-NEXT: sw ra, 76(a5) 2924; RV32IZCMP-SR-NEXT: sw s11, 72(a5) 2925; RV32IZCMP-SR-NEXT: sw s10, 68(a5) 2926; RV32IZCMP-SR-NEXT: sw s9, 64(a5) 2927; RV32IZCMP-SR-NEXT: sw s8, 60(a5) 2928; RV32IZCMP-SR-NEXT: sw s7, 56(a5) 2929; RV32IZCMP-SR-NEXT: sw s6, 52(a5) 2930; RV32IZCMP-SR-NEXT: sw s5, 48(a5) 2931; RV32IZCMP-SR-NEXT: sw s4, 44(a5) 2932; RV32IZCMP-SR-NEXT: sw s3, 40(a5) 2933; RV32IZCMP-SR-NEXT: sw s2, 36(a5) 2934; RV32IZCMP-SR-NEXT: sw t6, 32(a5) 2935; RV32IZCMP-SR-NEXT: sw t5, 28(a5) 2936; RV32IZCMP-SR-NEXT: sw t4, 24(a5) 2937; RV32IZCMP-SR-NEXT: lw a0, 8(sp) # 4-byte Folded Reload 2938; RV32IZCMP-SR-NEXT: sw a0, 20(a5) 2939; RV32IZCMP-SR-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 2940; RV32IZCMP-SR-NEXT: sw a0, 16(a5) 2941; RV32IZCMP-SR-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 2942; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+12)(t0) 2943; RV32IZCMP-SR-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 2944; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+8)(t0) 2945; RV32IZCMP-SR-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 2946; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) 2947; RV32IZCMP-SR-NEXT: lw a0, 28(sp) # 4-byte Folded Reload 2948; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) 2949; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 96 2950; 2951; RV64IZCMP-SR-LABEL: callee_no_irq: 2952; RV64IZCMP-SR: # %bb.0: 2953; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -160 2954; RV64IZCMP-SR-NEXT: lui t0, %hi(var_test_irq) 2955; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq)(t0) 2956; RV64IZCMP-SR-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 2957; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+4)(t0) 2958; RV64IZCMP-SR-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 2959; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+8)(t0) 2960; RV64IZCMP-SR-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 2961; RV64IZCMP-SR-NEXT: lw a0, %lo(var_test_irq+12)(t0) 2962; RV64IZCMP-SR-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 2963; RV64IZCMP-SR-NEXT: addi a5, t0, %lo(var_test_irq) 2964; RV64IZCMP-SR-NEXT: lw a0, 16(a5) 2965; RV64IZCMP-SR-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 2966; RV64IZCMP-SR-NEXT: lw a0, 20(a5) 2967; RV64IZCMP-SR-NEXT: sd a0, 0(sp) # 8-byte Folded Spill 2968; RV64IZCMP-SR-NEXT: lw t4, 24(a5) 2969; RV64IZCMP-SR-NEXT: lw t5, 28(a5) 2970; RV64IZCMP-SR-NEXT: lw t6, 32(a5) 2971; RV64IZCMP-SR-NEXT: lw s2, 36(a5) 2972; RV64IZCMP-SR-NEXT: lw s3, 40(a5) 2973; RV64IZCMP-SR-NEXT: lw s4, 44(a5) 2974; RV64IZCMP-SR-NEXT: lw s5, 48(a5) 2975; RV64IZCMP-SR-NEXT: lw s6, 52(a5) 2976; RV64IZCMP-SR-NEXT: lw s7, 56(a5) 2977; RV64IZCMP-SR-NEXT: lw s8, 60(a5) 2978; RV64IZCMP-SR-NEXT: lw s9, 64(a5) 2979; RV64IZCMP-SR-NEXT: lw s10, 68(a5) 2980; RV64IZCMP-SR-NEXT: lw s11, 72(a5) 2981; RV64IZCMP-SR-NEXT: lw ra, 76(a5) 2982; RV64IZCMP-SR-NEXT: lw s1, 80(a5) 2983; RV64IZCMP-SR-NEXT: lw t3, 84(a5) 2984; RV64IZCMP-SR-NEXT: lw t2, 88(a5) 2985; RV64IZCMP-SR-NEXT: lw t1, 92(a5) 2986; RV64IZCMP-SR-NEXT: lw a7, 112(a5) 2987; RV64IZCMP-SR-NEXT: lw s0, 116(a5) 2988; RV64IZCMP-SR-NEXT: lw a3, 120(a5) 2989; RV64IZCMP-SR-NEXT: lw a0, 124(a5) 2990; RV64IZCMP-SR-NEXT: lw a6, 96(a5) 2991; RV64IZCMP-SR-NEXT: lw a4, 100(a5) 2992; RV64IZCMP-SR-NEXT: lw a2, 104(a5) 2993; RV64IZCMP-SR-NEXT: lw a1, 108(a5) 2994; RV64IZCMP-SR-NEXT: sw a0, 124(a5) 2995; RV64IZCMP-SR-NEXT: sw a3, 120(a5) 2996; RV64IZCMP-SR-NEXT: sw s0, 116(a5) 2997; RV64IZCMP-SR-NEXT: sw a7, 112(a5) 2998; RV64IZCMP-SR-NEXT: sw a1, 108(a5) 2999; RV64IZCMP-SR-NEXT: sw a2, 104(a5) 3000; RV64IZCMP-SR-NEXT: sw a4, 100(a5) 3001; RV64IZCMP-SR-NEXT: sw a6, 96(a5) 3002; RV64IZCMP-SR-NEXT: sw t1, 92(a5) 3003; RV64IZCMP-SR-NEXT: sw t2, 88(a5) 3004; RV64IZCMP-SR-NEXT: sw t3, 84(a5) 3005; RV64IZCMP-SR-NEXT: sw s1, 80(a5) 3006; RV64IZCMP-SR-NEXT: sw ra, 76(a5) 3007; RV64IZCMP-SR-NEXT: sw s11, 72(a5) 3008; RV64IZCMP-SR-NEXT: sw s10, 68(a5) 3009; RV64IZCMP-SR-NEXT: sw s9, 64(a5) 3010; RV64IZCMP-SR-NEXT: sw s8, 60(a5) 3011; RV64IZCMP-SR-NEXT: sw s7, 56(a5) 3012; RV64IZCMP-SR-NEXT: sw s6, 52(a5) 3013; RV64IZCMP-SR-NEXT: sw s5, 48(a5) 3014; RV64IZCMP-SR-NEXT: sw s4, 44(a5) 3015; RV64IZCMP-SR-NEXT: sw s3, 40(a5) 3016; RV64IZCMP-SR-NEXT: sw s2, 36(a5) 3017; RV64IZCMP-SR-NEXT: sw t6, 32(a5) 3018; RV64IZCMP-SR-NEXT: sw t5, 28(a5) 3019; RV64IZCMP-SR-NEXT: sw t4, 24(a5) 3020; RV64IZCMP-SR-NEXT: ld a0, 0(sp) # 8-byte Folded Reload 3021; RV64IZCMP-SR-NEXT: sw a0, 20(a5) 3022; RV64IZCMP-SR-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 3023; RV64IZCMP-SR-NEXT: sw a0, 16(a5) 3024; RV64IZCMP-SR-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 3025; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+12)(t0) 3026; RV64IZCMP-SR-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 3027; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+8)(t0) 3028; RV64IZCMP-SR-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 3029; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) 3030; RV64IZCMP-SR-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 3031; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) 3032; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 160 3033; 3034; RV32I-LABEL: callee_no_irq: 3035; RV32I: # %bb.0: 3036; RV32I-NEXT: addi sp, sp, -80 3037; RV32I-NEXT: sw ra, 76(sp) # 4-byte Folded Spill 3038; RV32I-NEXT: sw s0, 72(sp) # 4-byte Folded Spill 3039; RV32I-NEXT: sw s1, 68(sp) # 4-byte Folded Spill 3040; RV32I-NEXT: sw s2, 64(sp) # 4-byte Folded Spill 3041; RV32I-NEXT: sw s3, 60(sp) # 4-byte Folded Spill 3042; RV32I-NEXT: sw s4, 56(sp) # 4-byte Folded Spill 3043; RV32I-NEXT: sw s5, 52(sp) # 4-byte Folded Spill 3044; RV32I-NEXT: sw s6, 48(sp) # 4-byte Folded Spill 3045; RV32I-NEXT: sw s7, 44(sp) # 4-byte Folded Spill 3046; RV32I-NEXT: sw s8, 40(sp) # 4-byte Folded Spill 3047; RV32I-NEXT: sw s9, 36(sp) # 4-byte Folded Spill 3048; RV32I-NEXT: sw s10, 32(sp) # 4-byte Folded Spill 3049; RV32I-NEXT: sw s11, 28(sp) # 4-byte Folded Spill 3050; RV32I-NEXT: lui a7, %hi(var_test_irq) 3051; RV32I-NEXT: lw a0, %lo(var_test_irq)(a7) 3052; RV32I-NEXT: sw a0, 24(sp) # 4-byte Folded Spill 3053; RV32I-NEXT: lw a0, %lo(var_test_irq+4)(a7) 3054; RV32I-NEXT: sw a0, 20(sp) # 4-byte Folded Spill 3055; RV32I-NEXT: lw a0, %lo(var_test_irq+8)(a7) 3056; RV32I-NEXT: sw a0, 16(sp) # 4-byte Folded Spill 3057; RV32I-NEXT: lw a0, %lo(var_test_irq+12)(a7) 3058; RV32I-NEXT: sw a0, 12(sp) # 4-byte Folded Spill 3059; RV32I-NEXT: addi a5, a7, %lo(var_test_irq) 3060; RV32I-NEXT: lw a0, 16(a5) 3061; RV32I-NEXT: sw a0, 8(sp) # 4-byte Folded Spill 3062; RV32I-NEXT: lw a0, 20(a5) 3063; RV32I-NEXT: sw a0, 4(sp) # 4-byte Folded Spill 3064; RV32I-NEXT: lw t0, 24(a5) 3065; RV32I-NEXT: lw t1, 28(a5) 3066; RV32I-NEXT: lw t2, 32(a5) 3067; RV32I-NEXT: lw t3, 36(a5) 3068; RV32I-NEXT: lw t4, 40(a5) 3069; RV32I-NEXT: lw t5, 44(a5) 3070; RV32I-NEXT: lw t6, 48(a5) 3071; RV32I-NEXT: lw s0, 52(a5) 3072; RV32I-NEXT: lw s1, 56(a5) 3073; RV32I-NEXT: lw s2, 60(a5) 3074; RV32I-NEXT: lw s3, 64(a5) 3075; RV32I-NEXT: lw s4, 68(a5) 3076; RV32I-NEXT: lw s5, 72(a5) 3077; RV32I-NEXT: lw s6, 76(a5) 3078; RV32I-NEXT: lw s7, 80(a5) 3079; RV32I-NEXT: lw s8, 84(a5) 3080; RV32I-NEXT: lw s9, 88(a5) 3081; RV32I-NEXT: lw s10, 92(a5) 3082; RV32I-NEXT: lw s11, 112(a5) 3083; RV32I-NEXT: lw ra, 116(a5) 3084; RV32I-NEXT: lw a3, 120(a5) 3085; RV32I-NEXT: lw a0, 124(a5) 3086; RV32I-NEXT: lw a6, 96(a5) 3087; RV32I-NEXT: lw a4, 100(a5) 3088; RV32I-NEXT: lw a2, 104(a5) 3089; RV32I-NEXT: lw a1, 108(a5) 3090; RV32I-NEXT: sw a0, 124(a5) 3091; RV32I-NEXT: sw a3, 120(a5) 3092; RV32I-NEXT: sw ra, 116(a5) 3093; RV32I-NEXT: sw s11, 112(a5) 3094; RV32I-NEXT: sw a1, 108(a5) 3095; RV32I-NEXT: sw a2, 104(a5) 3096; RV32I-NEXT: sw a4, 100(a5) 3097; RV32I-NEXT: sw a6, 96(a5) 3098; RV32I-NEXT: sw s10, 92(a5) 3099; RV32I-NEXT: sw s9, 88(a5) 3100; RV32I-NEXT: sw s8, 84(a5) 3101; RV32I-NEXT: sw s7, 80(a5) 3102; RV32I-NEXT: sw s6, 76(a5) 3103; RV32I-NEXT: sw s5, 72(a5) 3104; RV32I-NEXT: sw s4, 68(a5) 3105; RV32I-NEXT: sw s3, 64(a5) 3106; RV32I-NEXT: sw s2, 60(a5) 3107; RV32I-NEXT: sw s1, 56(a5) 3108; RV32I-NEXT: sw s0, 52(a5) 3109; RV32I-NEXT: sw t6, 48(a5) 3110; RV32I-NEXT: sw t5, 44(a5) 3111; RV32I-NEXT: sw t4, 40(a5) 3112; RV32I-NEXT: sw t3, 36(a5) 3113; RV32I-NEXT: sw t2, 32(a5) 3114; RV32I-NEXT: sw t1, 28(a5) 3115; RV32I-NEXT: sw t0, 24(a5) 3116; RV32I-NEXT: lw a0, 4(sp) # 4-byte Folded Reload 3117; RV32I-NEXT: sw a0, 20(a5) 3118; RV32I-NEXT: lw a0, 8(sp) # 4-byte Folded Reload 3119; RV32I-NEXT: sw a0, 16(a5) 3120; RV32I-NEXT: lw a0, 12(sp) # 4-byte Folded Reload 3121; RV32I-NEXT: sw a0, %lo(var_test_irq+12)(a7) 3122; RV32I-NEXT: lw a0, 16(sp) # 4-byte Folded Reload 3123; RV32I-NEXT: sw a0, %lo(var_test_irq+8)(a7) 3124; RV32I-NEXT: lw a0, 20(sp) # 4-byte Folded Reload 3125; RV32I-NEXT: sw a0, %lo(var_test_irq+4)(a7) 3126; RV32I-NEXT: lw a0, 24(sp) # 4-byte Folded Reload 3127; RV32I-NEXT: sw a0, %lo(var_test_irq)(a7) 3128; RV32I-NEXT: lw ra, 76(sp) # 4-byte Folded Reload 3129; RV32I-NEXT: lw s0, 72(sp) # 4-byte Folded Reload 3130; RV32I-NEXT: lw s1, 68(sp) # 4-byte Folded Reload 3131; RV32I-NEXT: lw s2, 64(sp) # 4-byte Folded Reload 3132; RV32I-NEXT: lw s3, 60(sp) # 4-byte Folded Reload 3133; RV32I-NEXT: lw s4, 56(sp) # 4-byte Folded Reload 3134; RV32I-NEXT: lw s5, 52(sp) # 4-byte Folded Reload 3135; RV32I-NEXT: lw s6, 48(sp) # 4-byte Folded Reload 3136; RV32I-NEXT: lw s7, 44(sp) # 4-byte Folded Reload 3137; RV32I-NEXT: lw s8, 40(sp) # 4-byte Folded Reload 3138; RV32I-NEXT: lw s9, 36(sp) # 4-byte Folded Reload 3139; RV32I-NEXT: lw s10, 32(sp) # 4-byte Folded Reload 3140; RV32I-NEXT: lw s11, 28(sp) # 4-byte Folded Reload 3141; RV32I-NEXT: addi sp, sp, 80 3142; RV32I-NEXT: ret 3143; 3144; RV64I-LABEL: callee_no_irq: 3145; RV64I: # %bb.0: 3146; RV64I-NEXT: addi sp, sp, -160 3147; RV64I-NEXT: sd ra, 152(sp) # 8-byte Folded Spill 3148; RV64I-NEXT: sd s0, 144(sp) # 8-byte Folded Spill 3149; RV64I-NEXT: sd s1, 136(sp) # 8-byte Folded Spill 3150; RV64I-NEXT: sd s2, 128(sp) # 8-byte Folded Spill 3151; RV64I-NEXT: sd s3, 120(sp) # 8-byte Folded Spill 3152; RV64I-NEXT: sd s4, 112(sp) # 8-byte Folded Spill 3153; RV64I-NEXT: sd s5, 104(sp) # 8-byte Folded Spill 3154; RV64I-NEXT: sd s6, 96(sp) # 8-byte Folded Spill 3155; RV64I-NEXT: sd s7, 88(sp) # 8-byte Folded Spill 3156; RV64I-NEXT: sd s8, 80(sp) # 8-byte Folded Spill 3157; RV64I-NEXT: sd s9, 72(sp) # 8-byte Folded Spill 3158; RV64I-NEXT: sd s10, 64(sp) # 8-byte Folded Spill 3159; RV64I-NEXT: sd s11, 56(sp) # 8-byte Folded Spill 3160; RV64I-NEXT: lui a7, %hi(var_test_irq) 3161; RV64I-NEXT: lw a0, %lo(var_test_irq)(a7) 3162; RV64I-NEXT: sd a0, 48(sp) # 8-byte Folded Spill 3163; RV64I-NEXT: lw a0, %lo(var_test_irq+4)(a7) 3164; RV64I-NEXT: sd a0, 40(sp) # 8-byte Folded Spill 3165; RV64I-NEXT: lw a0, %lo(var_test_irq+8)(a7) 3166; RV64I-NEXT: sd a0, 32(sp) # 8-byte Folded Spill 3167; RV64I-NEXT: lw a0, %lo(var_test_irq+12)(a7) 3168; RV64I-NEXT: sd a0, 24(sp) # 8-byte Folded Spill 3169; RV64I-NEXT: addi a5, a7, %lo(var_test_irq) 3170; RV64I-NEXT: lw a0, 16(a5) 3171; RV64I-NEXT: sd a0, 16(sp) # 8-byte Folded Spill 3172; RV64I-NEXT: lw a0, 20(a5) 3173; RV64I-NEXT: sd a0, 8(sp) # 8-byte Folded Spill 3174; RV64I-NEXT: lw t0, 24(a5) 3175; RV64I-NEXT: lw t1, 28(a5) 3176; RV64I-NEXT: lw t2, 32(a5) 3177; RV64I-NEXT: lw t3, 36(a5) 3178; RV64I-NEXT: lw t4, 40(a5) 3179; RV64I-NEXT: lw t5, 44(a5) 3180; RV64I-NEXT: lw t6, 48(a5) 3181; RV64I-NEXT: lw s0, 52(a5) 3182; RV64I-NEXT: lw s1, 56(a5) 3183; RV64I-NEXT: lw s2, 60(a5) 3184; RV64I-NEXT: lw s3, 64(a5) 3185; RV64I-NEXT: lw s4, 68(a5) 3186; RV64I-NEXT: lw s5, 72(a5) 3187; RV64I-NEXT: lw s6, 76(a5) 3188; RV64I-NEXT: lw s7, 80(a5) 3189; RV64I-NEXT: lw s8, 84(a5) 3190; RV64I-NEXT: lw s9, 88(a5) 3191; RV64I-NEXT: lw s10, 92(a5) 3192; RV64I-NEXT: lw s11, 112(a5) 3193; RV64I-NEXT: lw ra, 116(a5) 3194; RV64I-NEXT: lw a3, 120(a5) 3195; RV64I-NEXT: lw a0, 124(a5) 3196; RV64I-NEXT: lw a6, 96(a5) 3197; RV64I-NEXT: lw a4, 100(a5) 3198; RV64I-NEXT: lw a2, 104(a5) 3199; RV64I-NEXT: lw a1, 108(a5) 3200; RV64I-NEXT: sw a0, 124(a5) 3201; RV64I-NEXT: sw a3, 120(a5) 3202; RV64I-NEXT: sw ra, 116(a5) 3203; RV64I-NEXT: sw s11, 112(a5) 3204; RV64I-NEXT: sw a1, 108(a5) 3205; RV64I-NEXT: sw a2, 104(a5) 3206; RV64I-NEXT: sw a4, 100(a5) 3207; RV64I-NEXT: sw a6, 96(a5) 3208; RV64I-NEXT: sw s10, 92(a5) 3209; RV64I-NEXT: sw s9, 88(a5) 3210; RV64I-NEXT: sw s8, 84(a5) 3211; RV64I-NEXT: sw s7, 80(a5) 3212; RV64I-NEXT: sw s6, 76(a5) 3213; RV64I-NEXT: sw s5, 72(a5) 3214; RV64I-NEXT: sw s4, 68(a5) 3215; RV64I-NEXT: sw s3, 64(a5) 3216; RV64I-NEXT: sw s2, 60(a5) 3217; RV64I-NEXT: sw s1, 56(a5) 3218; RV64I-NEXT: sw s0, 52(a5) 3219; RV64I-NEXT: sw t6, 48(a5) 3220; RV64I-NEXT: sw t5, 44(a5) 3221; RV64I-NEXT: sw t4, 40(a5) 3222; RV64I-NEXT: sw t3, 36(a5) 3223; RV64I-NEXT: sw t2, 32(a5) 3224; RV64I-NEXT: sw t1, 28(a5) 3225; RV64I-NEXT: sw t0, 24(a5) 3226; RV64I-NEXT: ld a0, 8(sp) # 8-byte Folded Reload 3227; RV64I-NEXT: sw a0, 20(a5) 3228; RV64I-NEXT: ld a0, 16(sp) # 8-byte Folded Reload 3229; RV64I-NEXT: sw a0, 16(a5) 3230; RV64I-NEXT: ld a0, 24(sp) # 8-byte Folded Reload 3231; RV64I-NEXT: sw a0, %lo(var_test_irq+12)(a7) 3232; RV64I-NEXT: ld a0, 32(sp) # 8-byte Folded Reload 3233; RV64I-NEXT: sw a0, %lo(var_test_irq+8)(a7) 3234; RV64I-NEXT: ld a0, 40(sp) # 8-byte Folded Reload 3235; RV64I-NEXT: sw a0, %lo(var_test_irq+4)(a7) 3236; RV64I-NEXT: ld a0, 48(sp) # 8-byte Folded Reload 3237; RV64I-NEXT: sw a0, %lo(var_test_irq)(a7) 3238; RV64I-NEXT: ld ra, 152(sp) # 8-byte Folded Reload 3239; RV64I-NEXT: ld s0, 144(sp) # 8-byte Folded Reload 3240; RV64I-NEXT: ld s1, 136(sp) # 8-byte Folded Reload 3241; RV64I-NEXT: ld s2, 128(sp) # 8-byte Folded Reload 3242; RV64I-NEXT: ld s3, 120(sp) # 8-byte Folded Reload 3243; RV64I-NEXT: ld s4, 112(sp) # 8-byte Folded Reload 3244; RV64I-NEXT: ld s5, 104(sp) # 8-byte Folded Reload 3245; RV64I-NEXT: ld s6, 96(sp) # 8-byte Folded Reload 3246; RV64I-NEXT: ld s7, 88(sp) # 8-byte Folded Reload 3247; RV64I-NEXT: ld s8, 80(sp) # 8-byte Folded Reload 3248; RV64I-NEXT: ld s9, 72(sp) # 8-byte Folded Reload 3249; RV64I-NEXT: ld s10, 64(sp) # 8-byte Folded Reload 3250; RV64I-NEXT: ld s11, 56(sp) # 8-byte Folded Reload 3251; RV64I-NEXT: addi sp, sp, 160 3252; RV64I-NEXT: ret 3253 %val = load [32 x i32], ptr @var_test_irq 3254 store volatile [32 x i32] %val, ptr @var_test_irq 3255 ret void 3256} 3257 3258declare void @bar(ptr, ptr) 3259declare ptr @llvm.frameaddress.p0(i32 immarg) 3260 3261define i32 @use_fp(i32 %x) { 3262; RV32IZCMP-LABEL: use_fp: 3263; RV32IZCMP: # %bb.0: # %entry 3264; RV32IZCMP-NEXT: cm.push {ra, s0-s1}, -32 3265; RV32IZCMP-NEXT: .cfi_def_cfa_offset 32 3266; RV32IZCMP-NEXT: .cfi_offset ra, -12 3267; RV32IZCMP-NEXT: .cfi_offset s0, -8 3268; RV32IZCMP-NEXT: .cfi_offset s1, -4 3269; RV32IZCMP-NEXT: addi s0, sp, 32 3270; RV32IZCMP-NEXT: .cfi_def_cfa s0, 0 3271; RV32IZCMP-NEXT: mv s1, a0 3272; RV32IZCMP-NEXT: addi a1, s0, -20 3273; RV32IZCMP-NEXT: mv a0, s0 3274; RV32IZCMP-NEXT: call bar 3275; RV32IZCMP-NEXT: mv a0, s1 3276; RV32IZCMP-NEXT: .cfi_def_cfa sp, 32 3277; RV32IZCMP-NEXT: cm.popret {ra, s0-s1}, 32 3278; 3279; RV64IZCMP-LABEL: use_fp: 3280; RV64IZCMP: # %bb.0: # %entry 3281; RV64IZCMP-NEXT: cm.push {ra, s0-s1}, -48 3282; RV64IZCMP-NEXT: .cfi_def_cfa_offset 48 3283; RV64IZCMP-NEXT: .cfi_offset ra, -24 3284; RV64IZCMP-NEXT: .cfi_offset s0, -16 3285; RV64IZCMP-NEXT: .cfi_offset s1, -8 3286; RV64IZCMP-NEXT: addi s0, sp, 48 3287; RV64IZCMP-NEXT: .cfi_def_cfa s0, 0 3288; RV64IZCMP-NEXT: mv s1, a0 3289; RV64IZCMP-NEXT: addi a1, s0, -36 3290; RV64IZCMP-NEXT: mv a0, s0 3291; RV64IZCMP-NEXT: call bar 3292; RV64IZCMP-NEXT: mv a0, s1 3293; RV64IZCMP-NEXT: .cfi_def_cfa sp, 48 3294; RV64IZCMP-NEXT: cm.popret {ra, s0-s1}, 48 3295; 3296; RV32IZCMP-SR-LABEL: use_fp: 3297; RV32IZCMP-SR: # %bb.0: # %entry 3298; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s1}, -32 3299; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 32 3300; RV32IZCMP-SR-NEXT: .cfi_offset ra, -12 3301; RV32IZCMP-SR-NEXT: .cfi_offset s0, -8 3302; RV32IZCMP-SR-NEXT: .cfi_offset s1, -4 3303; RV32IZCMP-SR-NEXT: addi s0, sp, 32 3304; RV32IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 3305; RV32IZCMP-SR-NEXT: mv s1, a0 3306; RV32IZCMP-SR-NEXT: addi a1, s0, -20 3307; RV32IZCMP-SR-NEXT: mv a0, s0 3308; RV32IZCMP-SR-NEXT: call bar 3309; RV32IZCMP-SR-NEXT: mv a0, s1 3310; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 32 3311; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 32 3312; 3313; RV64IZCMP-SR-LABEL: use_fp: 3314; RV64IZCMP-SR: # %bb.0: # %entry 3315; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s1}, -48 3316; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 48 3317; RV64IZCMP-SR-NEXT: .cfi_offset ra, -24 3318; RV64IZCMP-SR-NEXT: .cfi_offset s0, -16 3319; RV64IZCMP-SR-NEXT: .cfi_offset s1, -8 3320; RV64IZCMP-SR-NEXT: addi s0, sp, 48 3321; RV64IZCMP-SR-NEXT: .cfi_def_cfa s0, 0 3322; RV64IZCMP-SR-NEXT: mv s1, a0 3323; RV64IZCMP-SR-NEXT: addi a1, s0, -36 3324; RV64IZCMP-SR-NEXT: mv a0, s0 3325; RV64IZCMP-SR-NEXT: call bar 3326; RV64IZCMP-SR-NEXT: mv a0, s1 3327; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 48 3328; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 48 3329; 3330; RV32I-LABEL: use_fp: 3331; RV32I: # %bb.0: # %entry 3332; RV32I-NEXT: addi sp, sp, -16 3333; RV32I-NEXT: .cfi_def_cfa_offset 16 3334; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3335; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 3336; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 3337; RV32I-NEXT: .cfi_offset ra, -4 3338; RV32I-NEXT: .cfi_offset s0, -8 3339; RV32I-NEXT: .cfi_offset s1, -12 3340; RV32I-NEXT: addi s0, sp, 16 3341; RV32I-NEXT: .cfi_def_cfa s0, 0 3342; RV32I-NEXT: mv s1, a0 3343; RV32I-NEXT: addi a1, s0, -16 3344; RV32I-NEXT: mv a0, s0 3345; RV32I-NEXT: call bar 3346; RV32I-NEXT: mv a0, s1 3347; RV32I-NEXT: .cfi_def_cfa sp, 16 3348; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3349; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 3350; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 3351; RV32I-NEXT: .cfi_restore ra 3352; RV32I-NEXT: .cfi_restore s0 3353; RV32I-NEXT: .cfi_restore s1 3354; RV32I-NEXT: addi sp, sp, 16 3355; RV32I-NEXT: .cfi_def_cfa_offset 0 3356; RV32I-NEXT: ret 3357; 3358; RV64I-LABEL: use_fp: 3359; RV64I: # %bb.0: # %entry 3360; RV64I-NEXT: addi sp, sp, -32 3361; RV64I-NEXT: .cfi_def_cfa_offset 32 3362; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 3363; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 3364; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 3365; RV64I-NEXT: .cfi_offset ra, -8 3366; RV64I-NEXT: .cfi_offset s0, -16 3367; RV64I-NEXT: .cfi_offset s1, -24 3368; RV64I-NEXT: addi s0, sp, 32 3369; RV64I-NEXT: .cfi_def_cfa s0, 0 3370; RV64I-NEXT: mv s1, a0 3371; RV64I-NEXT: addi a1, s0, -28 3372; RV64I-NEXT: mv a0, s0 3373; RV64I-NEXT: call bar 3374; RV64I-NEXT: mv a0, s1 3375; RV64I-NEXT: .cfi_def_cfa sp, 32 3376; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 3377; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 3378; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 3379; RV64I-NEXT: .cfi_restore ra 3380; RV64I-NEXT: .cfi_restore s0 3381; RV64I-NEXT: .cfi_restore s1 3382; RV64I-NEXT: addi sp, sp, 32 3383; RV64I-NEXT: .cfi_def_cfa_offset 0 3384; RV64I-NEXT: ret 3385entry: 3386 %var = alloca i32, align 4 3387 %0 = tail call ptr @llvm.frameaddress.p0(i32 0) 3388 call void @bar(ptr %0, ptr %var) 3389 ret i32 %x 3390} 3391 3392define void @spill_x10() { 3393; RV32IZCMP-LABEL: spill_x10: 3394; RV32IZCMP: # %bb.0: # %entry 3395; RV32IZCMP-NEXT: cm.push {ra, s0-s11}, -64 3396; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64 3397; RV32IZCMP-NEXT: .cfi_offset s10, -8 3398; RV32IZCMP-NEXT: .cfi_offset s11, -4 3399; RV32IZCMP-NEXT: #APP 3400; RV32IZCMP-NEXT: li s10, 0 3401; RV32IZCMP-NEXT: #NO_APP 3402; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 64 3403; 3404; RV64IZCMP-LABEL: spill_x10: 3405; RV64IZCMP: # %bb.0: # %entry 3406; RV64IZCMP-NEXT: cm.push {ra, s0-s11}, -112 3407; RV64IZCMP-NEXT: .cfi_def_cfa_offset 112 3408; RV64IZCMP-NEXT: .cfi_offset s10, -16 3409; RV64IZCMP-NEXT: .cfi_offset s11, -8 3410; RV64IZCMP-NEXT: #APP 3411; RV64IZCMP-NEXT: li s10, 0 3412; RV64IZCMP-NEXT: #NO_APP 3413; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 112 3414; 3415; RV32IZCMP-SR-LABEL: spill_x10: 3416; RV32IZCMP-SR: # %bb.0: # %entry 3417; RV32IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -64 3418; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 3419; RV32IZCMP-SR-NEXT: .cfi_offset s10, -8 3420; RV32IZCMP-SR-NEXT: .cfi_offset s11, -4 3421; RV32IZCMP-SR-NEXT: #APP 3422; RV32IZCMP-SR-NEXT: li s10, 0 3423; RV32IZCMP-SR-NEXT: #NO_APP 3424; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 64 3425; 3426; RV64IZCMP-SR-LABEL: spill_x10: 3427; RV64IZCMP-SR: # %bb.0: # %entry 3428; RV64IZCMP-SR-NEXT: cm.push {ra, s0-s11}, -112 3429; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 112 3430; RV64IZCMP-SR-NEXT: .cfi_offset s10, -16 3431; RV64IZCMP-SR-NEXT: .cfi_offset s11, -8 3432; RV64IZCMP-SR-NEXT: #APP 3433; RV64IZCMP-SR-NEXT: li s10, 0 3434; RV64IZCMP-SR-NEXT: #NO_APP 3435; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 112 3436; 3437; RV32I-LABEL: spill_x10: 3438; RV32I: # %bb.0: # %entry 3439; RV32I-NEXT: addi sp, sp, -16 3440; RV32I-NEXT: .cfi_def_cfa_offset 16 3441; RV32I-NEXT: sw s10, 12(sp) # 4-byte Folded Spill 3442; RV32I-NEXT: .cfi_offset s10, -4 3443; RV32I-NEXT: #APP 3444; RV32I-NEXT: li s10, 0 3445; RV32I-NEXT: #NO_APP 3446; RV32I-NEXT: lw s10, 12(sp) # 4-byte Folded Reload 3447; RV32I-NEXT: .cfi_restore s10 3448; RV32I-NEXT: addi sp, sp, 16 3449; RV32I-NEXT: .cfi_def_cfa_offset 0 3450; RV32I-NEXT: ret 3451; 3452; RV64I-LABEL: spill_x10: 3453; RV64I: # %bb.0: # %entry 3454; RV64I-NEXT: addi sp, sp, -16 3455; RV64I-NEXT: .cfi_def_cfa_offset 16 3456; RV64I-NEXT: sd s10, 8(sp) # 8-byte Folded Spill 3457; RV64I-NEXT: .cfi_offset s10, -8 3458; RV64I-NEXT: #APP 3459; RV64I-NEXT: li s10, 0 3460; RV64I-NEXT: #NO_APP 3461; RV64I-NEXT: ld s10, 8(sp) # 8-byte Folded Reload 3462; RV64I-NEXT: .cfi_restore s10 3463; RV64I-NEXT: addi sp, sp, 16 3464; RV64I-NEXT: .cfi_def_cfa_offset 0 3465; RV64I-NEXT: ret 3466entry: 3467 tail call void asm sideeffect "li s10, 0", "~{s10}"() 3468 ret void 3469} 3470