1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple riscv32-unknown-elf -o - %s \ 3; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV32 4; RUN: llc -mtriple riscv32-unknown-elf -mattr=+f -o - %s \ 5; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV32-F 6; RUN: llc -mtriple riscv32-unknown-elf -mattr=+f,+d -o - %s \ 7; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV32-FD 8; 9; RUN: llc -mtriple riscv64-unknown-elf -o - %s \ 10; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV64 11; RUN: llc -mtriple riscv64-unknown-elf -mattr=+f -o - %s \ 12; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV64-F 13; RUN: llc -mtriple riscv64-unknown-elf -mattr=+f,+d -o - %s \ 14; RUN: 2>&1 | FileCheck %s -check-prefix CHECK -check-prefix CHECK-RV64-FD 15 16; 17; Checking for special return instructions (uret, sret, mret). 18; 19define void @foo_user() #0 { 20; CHECK-LABEL: foo_user: 21; CHECK: # %bb.0: 22; CHECK-NEXT: uret 23 ret void 24} 25 26define void @foo_supervisor() #1 { 27; CHECK-LABEL: foo_supervisor: 28; CHECK: # %bb.0: 29; CHECK-NEXT: sret 30 ret void 31} 32 33define void @foo_machine() #2 { 34; CHECK-LABEL: foo_machine: 35; CHECK: # %bb.0: 36; CHECK-NEXT: mret 37 ret void 38} 39 40; 41; Checking all Caller saved registers (arguments and temps) 42; and FP registers are all saved when the handler calls another function. 43; 44; extern int otherfoo(); 45; 46; __attribute__((interrupt)) void foo_with_call() { 47; otherfoo(); 48; } 49; 50 51declare i32 @otherfoo(...) 52define void @foo_with_call() #2 { 53; 54; CHECK-RV32-LABEL: foo_with_call: 55; CHECK-RV32: # %bb.0: 56; CHECK-RV32-NEXT: addi sp, sp, -64 57; CHECK-RV32-NEXT: sw ra, 60(sp) 58; CHECK-RV32-NEXT: sw t0, 56(sp) 59; CHECK-RV32-NEXT: sw t1, 52(sp) 60; CHECK-RV32-NEXT: sw t2, 48(sp) 61; CHECK-RV32-NEXT: sw a0, 44(sp) 62; CHECK-RV32-NEXT: sw a1, 40(sp) 63; CHECK-RV32-NEXT: sw a2, 36(sp) 64; CHECK-RV32-NEXT: sw a3, 32(sp) 65; CHECK-RV32-NEXT: sw a4, 28(sp) 66; CHECK-RV32-NEXT: sw a5, 24(sp) 67; CHECK-RV32-NEXT: sw a6, 20(sp) 68; CHECK-RV32-NEXT: sw a7, 16(sp) 69; CHECK-RV32-NEXT: sw t3, 12(sp) 70; CHECK-RV32-NEXT: sw t4, 8(sp) 71; CHECK-RV32-NEXT: sw t5, 4(sp) 72; CHECK-RV32-NEXT: sw t6, 0(sp) 73; CHECK-RV32-NEXT: call otherfoo 74; CHECK-RV32-NEXT: lw t6, 0(sp) 75; CHECK-RV32-NEXT: lw t5, 4(sp) 76; CHECK-RV32-NEXT: lw t4, 8(sp) 77; CHECK-RV32-NEXT: lw t3, 12(sp) 78; CHECK-RV32-NEXT: lw a7, 16(sp) 79; CHECK-RV32-NEXT: lw a6, 20(sp) 80; CHECK-RV32-NEXT: lw a5, 24(sp) 81; CHECK-RV32-NEXT: lw a4, 28(sp) 82; CHECK-RV32-NEXT: lw a3, 32(sp) 83; CHECK-RV32-NEXT: lw a2, 36(sp) 84; CHECK-RV32-NEXT: lw a1, 40(sp) 85; CHECK-RV32-NEXT: lw a0, 44(sp) 86; CHECK-RV32-NEXT: lw t2, 48(sp) 87; CHECK-RV32-NEXT: lw t1, 52(sp) 88; CHECK-RV32-NEXT: lw t0, 56(sp) 89; CHECK-RV32-NEXT: lw ra, 60(sp) 90; CHECK-RV32-NEXT: addi sp, sp, 64 91; CHECK-RV32-NEXT: mret 92; 93; CHECK-RV32-F-LABEL: foo_with_call: 94; CHECK-RV32-F: # %bb.0: 95; CHECK-RV32-F-NEXT: addi sp, sp, -192 96; CHECK-RV32-F-NEXT: sw ra, 188(sp) 97; CHECK-RV32-F-NEXT: sw t0, 184(sp) 98; CHECK-RV32-F-NEXT: sw t1, 180(sp) 99; CHECK-RV32-F-NEXT: sw t2, 176(sp) 100; CHECK-RV32-F-NEXT: sw a0, 172(sp) 101; CHECK-RV32-F-NEXT: sw a1, 168(sp) 102; CHECK-RV32-F-NEXT: sw a2, 164(sp) 103; CHECK-RV32-F-NEXT: sw a3, 160(sp) 104; CHECK-RV32-F-NEXT: sw a4, 156(sp) 105; CHECK-RV32-F-NEXT: sw a5, 152(sp) 106; CHECK-RV32-F-NEXT: sw a6, 148(sp) 107; CHECK-RV32-F-NEXT: sw a7, 144(sp) 108; CHECK-RV32-F-NEXT: sw t3, 140(sp) 109; CHECK-RV32-F-NEXT: sw t4, 136(sp) 110; CHECK-RV32-F-NEXT: sw t5, 132(sp) 111; CHECK-RV32-F-NEXT: sw t6, 128(sp) 112; CHECK-RV32-F-NEXT: fsw ft0, 124(sp) 113; CHECK-RV32-F-NEXT: fsw ft1, 120(sp) 114; CHECK-RV32-F-NEXT: fsw ft2, 116(sp) 115; CHECK-RV32-F-NEXT: fsw ft3, 112(sp) 116; CHECK-RV32-F-NEXT: fsw ft4, 108(sp) 117; CHECK-RV32-F-NEXT: fsw ft5, 104(sp) 118; CHECK-RV32-F-NEXT: fsw ft6, 100(sp) 119; CHECK-RV32-F-NEXT: fsw ft7, 96(sp) 120; CHECK-RV32-F-NEXT: fsw fa0, 92(sp) 121; CHECK-RV32-F-NEXT: fsw fa1, 88(sp) 122; CHECK-RV32-F-NEXT: fsw fa2, 84(sp) 123; CHECK-RV32-F-NEXT: fsw fa3, 80(sp) 124; CHECK-RV32-F-NEXT: fsw fa4, 76(sp) 125; CHECK-RV32-F-NEXT: fsw fa5, 72(sp) 126; CHECK-RV32-F-NEXT: fsw fa6, 68(sp) 127; CHECK-RV32-F-NEXT: fsw fa7, 64(sp) 128; CHECK-RV32-F-NEXT: fsw ft8, 60(sp) 129; CHECK-RV32-F-NEXT: fsw ft9, 56(sp) 130; CHECK-RV32-F-NEXT: fsw ft10, 52(sp) 131; CHECK-RV32-F-NEXT: fsw ft11, 48(sp) 132; CHECK-RV32-F-NEXT: fsw fs0, 44(sp) 133; CHECK-RV32-F-NEXT: fsw fs1, 40(sp) 134; CHECK-RV32-F-NEXT: fsw fs2, 36(sp) 135; CHECK-RV32-F-NEXT: fsw fs3, 32(sp) 136; CHECK-RV32-F-NEXT: fsw fs4, 28(sp) 137; CHECK-RV32-F-NEXT: fsw fs5, 24(sp) 138; CHECK-RV32-F-NEXT: fsw fs6, 20(sp) 139; CHECK-RV32-F-NEXT: fsw fs7, 16(sp) 140; CHECK-RV32-F-NEXT: fsw fs8, 12(sp) 141; CHECK-RV32-F-NEXT: fsw fs9, 8(sp) 142; CHECK-RV32-F-NEXT: fsw fs10, 4(sp) 143; CHECK-RV32-F-NEXT: fsw fs11, 0(sp) 144; CHECK-RV32-F-NEXT: call otherfoo 145; CHECK-RV32-F-NEXT: flw fs11, 0(sp) 146; CHECK-RV32-F-NEXT: flw fs10, 4(sp) 147; CHECK-RV32-F-NEXT: flw fs9, 8(sp) 148; CHECK-RV32-F-NEXT: flw fs8, 12(sp) 149; CHECK-RV32-F-NEXT: flw fs7, 16(sp) 150; CHECK-RV32-F-NEXT: flw fs6, 20(sp) 151; CHECK-RV32-F-NEXT: flw fs5, 24(sp) 152; CHECK-RV32-F-NEXT: flw fs4, 28(sp) 153; CHECK-RV32-F-NEXT: flw fs3, 32(sp) 154; CHECK-RV32-F-NEXT: flw fs2, 36(sp) 155; CHECK-RV32-F-NEXT: flw fs1, 40(sp) 156; CHECK-RV32-F-NEXT: flw fs0, 44(sp) 157; CHECK-RV32-F-NEXT: flw ft11, 48(sp) 158; CHECK-RV32-F-NEXT: flw ft10, 52(sp) 159; CHECK-RV32-F-NEXT: flw ft9, 56(sp) 160; CHECK-RV32-F-NEXT: flw ft8, 60(sp) 161; CHECK-RV32-F-NEXT: flw fa7, 64(sp) 162; CHECK-RV32-F-NEXT: flw fa6, 68(sp) 163; CHECK-RV32-F-NEXT: flw fa5, 72(sp) 164; CHECK-RV32-F-NEXT: flw fa4, 76(sp) 165; CHECK-RV32-F-NEXT: flw fa3, 80(sp) 166; CHECK-RV32-F-NEXT: flw fa2, 84(sp) 167; CHECK-RV32-F-NEXT: flw fa1, 88(sp) 168; CHECK-RV32-F-NEXT: flw fa0, 92(sp) 169; CHECK-RV32-F-NEXT: flw ft7, 96(sp) 170; CHECK-RV32-F-NEXT: flw ft6, 100(sp) 171; CHECK-RV32-F-NEXT: flw ft5, 104(sp) 172; CHECK-RV32-F-NEXT: flw ft4, 108(sp) 173; CHECK-RV32-F-NEXT: flw ft3, 112(sp) 174; CHECK-RV32-F-NEXT: flw ft2, 116(sp) 175; CHECK-RV32-F-NEXT: flw ft1, 120(sp) 176; CHECK-RV32-F-NEXT: flw ft0, 124(sp) 177; CHECK-RV32-F-NEXT: lw t6, 128(sp) 178; CHECK-RV32-F-NEXT: lw t5, 132(sp) 179; CHECK-RV32-F-NEXT: lw t4, 136(sp) 180; CHECK-RV32-F-NEXT: lw t3, 140(sp) 181; CHECK-RV32-F-NEXT: lw a7, 144(sp) 182; CHECK-RV32-F-NEXT: lw a6, 148(sp) 183; CHECK-RV32-F-NEXT: lw a5, 152(sp) 184; CHECK-RV32-F-NEXT: lw a4, 156(sp) 185; CHECK-RV32-F-NEXT: lw a3, 160(sp) 186; CHECK-RV32-F-NEXT: lw a2, 164(sp) 187; CHECK-RV32-F-NEXT: lw a1, 168(sp) 188; CHECK-RV32-F-NEXT: lw a0, 172(sp) 189; CHECK-RV32-F-NEXT: lw t2, 176(sp) 190; CHECK-RV32-F-NEXT: lw t1, 180(sp) 191; CHECK-RV32-F-NEXT: lw t0, 184(sp) 192; CHECK-RV32-F-NEXT: lw ra, 188(sp) 193; CHECK-RV32-F-NEXT: addi sp, sp, 192 194; CHECK-RV32-F-NEXT: mret 195; 196; CHECK-RV32-FD-LABEL: foo_with_call: 197; CHECK-RV32-FD: # %bb.0: 198; CHECK-RV32-FD-NEXT: addi sp, sp, -320 199; CHECK-RV32-FD-NEXT: sw ra, 316(sp) 200; CHECK-RV32-FD-NEXT: sw t0, 312(sp) 201; CHECK-RV32-FD-NEXT: sw t1, 308(sp) 202; CHECK-RV32-FD-NEXT: sw t2, 304(sp) 203; CHECK-RV32-FD-NEXT: sw a0, 300(sp) 204; CHECK-RV32-FD-NEXT: sw a1, 296(sp) 205; CHECK-RV32-FD-NEXT: sw a2, 292(sp) 206; CHECK-RV32-FD-NEXT: sw a3, 288(sp) 207; CHECK-RV32-FD-NEXT: sw a4, 284(sp) 208; CHECK-RV32-FD-NEXT: sw a5, 280(sp) 209; CHECK-RV32-FD-NEXT: sw a6, 276(sp) 210; CHECK-RV32-FD-NEXT: sw a7, 272(sp) 211; CHECK-RV32-FD-NEXT: sw t3, 268(sp) 212; CHECK-RV32-FD-NEXT: sw t4, 264(sp) 213; CHECK-RV32-FD-NEXT: sw t5, 260(sp) 214; CHECK-RV32-FD-NEXT: sw t6, 256(sp) 215; CHECK-RV32-FD-NEXT: fsd ft0, 248(sp) 216; CHECK-RV32-FD-NEXT: fsd ft1, 240(sp) 217; CHECK-RV32-FD-NEXT: fsd ft2, 232(sp) 218; CHECK-RV32-FD-NEXT: fsd ft3, 224(sp) 219; CHECK-RV32-FD-NEXT: fsd ft4, 216(sp) 220; CHECK-RV32-FD-NEXT: fsd ft5, 208(sp) 221; CHECK-RV32-FD-NEXT: fsd ft6, 200(sp) 222; CHECK-RV32-FD-NEXT: fsd ft7, 192(sp) 223; CHECK-RV32-FD-NEXT: fsd fa0, 184(sp) 224; CHECK-RV32-FD-NEXT: fsd fa1, 176(sp) 225; CHECK-RV32-FD-NEXT: fsd fa2, 168(sp) 226; CHECK-RV32-FD-NEXT: fsd fa3, 160(sp) 227; CHECK-RV32-FD-NEXT: fsd fa4, 152(sp) 228; CHECK-RV32-FD-NEXT: fsd fa5, 144(sp) 229; CHECK-RV32-FD-NEXT: fsd fa6, 136(sp) 230; CHECK-RV32-FD-NEXT: fsd fa7, 128(sp) 231; CHECK-RV32-FD-NEXT: fsd ft8, 120(sp) 232; CHECK-RV32-FD-NEXT: fsd ft9, 112(sp) 233; CHECK-RV32-FD-NEXT: fsd ft10, 104(sp) 234; CHECK-RV32-FD-NEXT: fsd ft11, 96(sp) 235; CHECK-RV32-FD-NEXT: fsd fs0, 88(sp) 236; CHECK-RV32-FD-NEXT: fsd fs1, 80(sp) 237; CHECK-RV32-FD-NEXT: fsd fs2, 72(sp) 238; CHECK-RV32-FD-NEXT: fsd fs3, 64(sp) 239; CHECK-RV32-FD-NEXT: fsd fs4, 56(sp) 240; CHECK-RV32-FD-NEXT: fsd fs5, 48(sp) 241; CHECK-RV32-FD-NEXT: fsd fs6, 40(sp) 242; CHECK-RV32-FD-NEXT: fsd fs7, 32(sp) 243; CHECK-RV32-FD-NEXT: fsd fs8, 24(sp) 244; CHECK-RV32-FD-NEXT: fsd fs9, 16(sp) 245; CHECK-RV32-FD-NEXT: fsd fs10, 8(sp) 246; CHECK-RV32-FD-NEXT: fsd fs11, 0(sp) 247; CHECK-RV32-FD-NEXT: call otherfoo 248; CHECK-RV32-FD-NEXT: fld fs11, 0(sp) 249; CHECK-RV32-FD-NEXT: fld fs10, 8(sp) 250; CHECK-RV32-FD-NEXT: fld fs9, 16(sp) 251; CHECK-RV32-FD-NEXT: fld fs8, 24(sp) 252; CHECK-RV32-FD-NEXT: fld fs7, 32(sp) 253; CHECK-RV32-FD-NEXT: fld fs6, 40(sp) 254; CHECK-RV32-FD-NEXT: fld fs5, 48(sp) 255; CHECK-RV32-FD-NEXT: fld fs4, 56(sp) 256; CHECK-RV32-FD-NEXT: fld fs3, 64(sp) 257; CHECK-RV32-FD-NEXT: fld fs2, 72(sp) 258; CHECK-RV32-FD-NEXT: fld fs1, 80(sp) 259; CHECK-RV32-FD-NEXT: fld fs0, 88(sp) 260; CHECK-RV32-FD-NEXT: fld ft11, 96(sp) 261; CHECK-RV32-FD-NEXT: fld ft10, 104(sp) 262; CHECK-RV32-FD-NEXT: fld ft9, 112(sp) 263; CHECK-RV32-FD-NEXT: fld ft8, 120(sp) 264; CHECK-RV32-FD-NEXT: fld fa7, 128(sp) 265; CHECK-RV32-FD-NEXT: fld fa6, 136(sp) 266; CHECK-RV32-FD-NEXT: fld fa5, 144(sp) 267; CHECK-RV32-FD-NEXT: fld fa4, 152(sp) 268; CHECK-RV32-FD-NEXT: fld fa3, 160(sp) 269; CHECK-RV32-FD-NEXT: fld fa2, 168(sp) 270; CHECK-RV32-FD-NEXT: fld fa1, 176(sp) 271; CHECK-RV32-FD-NEXT: fld fa0, 184(sp) 272; CHECK-RV32-FD-NEXT: fld ft7, 192(sp) 273; CHECK-RV32-FD-NEXT: fld ft6, 200(sp) 274; CHECK-RV32-FD-NEXT: fld ft5, 208(sp) 275; CHECK-RV32-FD-NEXT: fld ft4, 216(sp) 276; CHECK-RV32-FD-NEXT: fld ft3, 224(sp) 277; CHECK-RV32-FD-NEXT: fld ft2, 232(sp) 278; CHECK-RV32-FD-NEXT: fld ft1, 240(sp) 279; CHECK-RV32-FD-NEXT: fld ft0, 248(sp) 280; CHECK-RV32-FD-NEXT: lw t6, 256(sp) 281; CHECK-RV32-FD-NEXT: lw t5, 260(sp) 282; CHECK-RV32-FD-NEXT: lw t4, 264(sp) 283; CHECK-RV32-FD-NEXT: lw t3, 268(sp) 284; CHECK-RV32-FD-NEXT: lw a7, 272(sp) 285; CHECK-RV32-FD-NEXT: lw a6, 276(sp) 286; CHECK-RV32-FD-NEXT: lw a5, 280(sp) 287; CHECK-RV32-FD-NEXT: lw a4, 284(sp) 288; CHECK-RV32-FD-NEXT: lw a3, 288(sp) 289; CHECK-RV32-FD-NEXT: lw a2, 292(sp) 290; CHECK-RV32-FD-NEXT: lw a1, 296(sp) 291; CHECK-RV32-FD-NEXT: lw a0, 300(sp) 292; CHECK-RV32-FD-NEXT: lw t2, 304(sp) 293; CHECK-RV32-FD-NEXT: lw t1, 308(sp) 294; CHECK-RV32-FD-NEXT: lw t0, 312(sp) 295; CHECK-RV32-FD-NEXT: lw ra, 316(sp) 296; CHECK-RV32-FD-NEXT: addi sp, sp, 320 297; CHECK-RV32-FD-NEXT: mret 298; 299; CHECK-RV64-LABEL: foo_with_call: 300; CHECK-RV64: # %bb.0: 301; CHECK-RV64-NEXT: addi sp, sp, -128 302; CHECK-RV64-NEXT: sd ra, 120(sp) 303; CHECK-RV64-NEXT: sd t0, 112(sp) 304; CHECK-RV64-NEXT: sd t1, 104(sp) 305; CHECK-RV64-NEXT: sd t2, 96(sp) 306; CHECK-RV64-NEXT: sd a0, 88(sp) 307; CHECK-RV64-NEXT: sd a1, 80(sp) 308; CHECK-RV64-NEXT: sd a2, 72(sp) 309; CHECK-RV64-NEXT: sd a3, 64(sp) 310; CHECK-RV64-NEXT: sd a4, 56(sp) 311; CHECK-RV64-NEXT: sd a5, 48(sp) 312; CHECK-RV64-NEXT: sd a6, 40(sp) 313; CHECK-RV64-NEXT: sd a7, 32(sp) 314; CHECK-RV64-NEXT: sd t3, 24(sp) 315; CHECK-RV64-NEXT: sd t4, 16(sp) 316; CHECK-RV64-NEXT: sd t5, 8(sp) 317; CHECK-RV64-NEXT: sd t6, 0(sp) 318; CHECK-RV64-NEXT: call otherfoo 319; CHECK-RV64-NEXT: ld t6, 0(sp) 320; CHECK-RV64-NEXT: ld t5, 8(sp) 321; CHECK-RV64-NEXT: ld t4, 16(sp) 322; CHECK-RV64-NEXT: ld t3, 24(sp) 323; CHECK-RV64-NEXT: ld a7, 32(sp) 324; CHECK-RV64-NEXT: ld a6, 40(sp) 325; CHECK-RV64-NEXT: ld a5, 48(sp) 326; CHECK-RV64-NEXT: ld a4, 56(sp) 327; CHECK-RV64-NEXT: ld a3, 64(sp) 328; CHECK-RV64-NEXT: ld a2, 72(sp) 329; CHECK-RV64-NEXT: ld a1, 80(sp) 330; CHECK-RV64-NEXT: ld a0, 88(sp) 331; CHECK-RV64-NEXT: ld t2, 96(sp) 332; CHECK-RV64-NEXT: ld t1, 104(sp) 333; CHECK-RV64-NEXT: ld t0, 112(sp) 334; CHECK-RV64-NEXT: ld ra, 120(sp) 335; CHECK-RV64-NEXT: addi sp, sp, 128 336; CHECK-RV64-NEXT: mret 337; 338; CHECK-RV64-F-LABEL: foo_with_call: 339; CHECK-RV64-F: # %bb.0: 340; CHECK-RV64-F-NEXT: addi sp, sp, -256 341; CHECK-RV64-F-NEXT: sd ra, 248(sp) 342; CHECK-RV64-F-NEXT: sd t0, 240(sp) 343; CHECK-RV64-F-NEXT: sd t1, 232(sp) 344; CHECK-RV64-F-NEXT: sd t2, 224(sp) 345; CHECK-RV64-F-NEXT: sd a0, 216(sp) 346; CHECK-RV64-F-NEXT: sd a1, 208(sp) 347; CHECK-RV64-F-NEXT: sd a2, 200(sp) 348; CHECK-RV64-F-NEXT: sd a3, 192(sp) 349; CHECK-RV64-F-NEXT: sd a4, 184(sp) 350; CHECK-RV64-F-NEXT: sd a5, 176(sp) 351; CHECK-RV64-F-NEXT: sd a6, 168(sp) 352; CHECK-RV64-F-NEXT: sd a7, 160(sp) 353; CHECK-RV64-F-NEXT: sd t3, 152(sp) 354; CHECK-RV64-F-NEXT: sd t4, 144(sp) 355; CHECK-RV64-F-NEXT: sd t5, 136(sp) 356; CHECK-RV64-F-NEXT: sd t6, 128(sp) 357; CHECK-RV64-F-NEXT: fsw ft0, 124(sp) 358; CHECK-RV64-F-NEXT: fsw ft1, 120(sp) 359; CHECK-RV64-F-NEXT: fsw ft2, 116(sp) 360; CHECK-RV64-F-NEXT: fsw ft3, 112(sp) 361; CHECK-RV64-F-NEXT: fsw ft4, 108(sp) 362; CHECK-RV64-F-NEXT: fsw ft5, 104(sp) 363; CHECK-RV64-F-NEXT: fsw ft6, 100(sp) 364; CHECK-RV64-F-NEXT: fsw ft7, 96(sp) 365; CHECK-RV64-F-NEXT: fsw fa0, 92(sp) 366; CHECK-RV64-F-NEXT: fsw fa1, 88(sp) 367; CHECK-RV64-F-NEXT: fsw fa2, 84(sp) 368; CHECK-RV64-F-NEXT: fsw fa3, 80(sp) 369; CHECK-RV64-F-NEXT: fsw fa4, 76(sp) 370; CHECK-RV64-F-NEXT: fsw fa5, 72(sp) 371; CHECK-RV64-F-NEXT: fsw fa6, 68(sp) 372; CHECK-RV64-F-NEXT: fsw fa7, 64(sp) 373; CHECK-RV64-F-NEXT: fsw ft8, 60(sp) 374; CHECK-RV64-F-NEXT: fsw ft9, 56(sp) 375; CHECK-RV64-F-NEXT: fsw ft10, 52(sp) 376; CHECK-RV64-F-NEXT: fsw ft11, 48(sp) 377; CHECK-RV64-F-NEXT: fsw fs0, 44(sp) 378; CHECK-RV64-F-NEXT: fsw fs1, 40(sp) 379; CHECK-RV64-F-NEXT: fsw fs2, 36(sp) 380; CHECK-RV64-F-NEXT: fsw fs3, 32(sp) 381; CHECK-RV64-F-NEXT: fsw fs4, 28(sp) 382; CHECK-RV64-F-NEXT: fsw fs5, 24(sp) 383; CHECK-RV64-F-NEXT: fsw fs6, 20(sp) 384; CHECK-RV64-F-NEXT: fsw fs7, 16(sp) 385; CHECK-RV64-F-NEXT: fsw fs8, 12(sp) 386; CHECK-RV64-F-NEXT: fsw fs9, 8(sp) 387; CHECK-RV64-F-NEXT: fsw fs10, 4(sp) 388; CHECK-RV64-F-NEXT: fsw fs11, 0(sp) 389; CHECK-RV64-F-NEXT: call otherfoo 390; CHECK-RV64-F-NEXT: flw fs11, 0(sp) 391; CHECK-RV64-F-NEXT: flw fs10, 4(sp) 392; CHECK-RV64-F-NEXT: flw fs9, 8(sp) 393; CHECK-RV64-F-NEXT: flw fs8, 12(sp) 394; CHECK-RV64-F-NEXT: flw fs7, 16(sp) 395; CHECK-RV64-F-NEXT: flw fs6, 20(sp) 396; CHECK-RV64-F-NEXT: flw fs5, 24(sp) 397; CHECK-RV64-F-NEXT: flw fs4, 28(sp) 398; CHECK-RV64-F-NEXT: flw fs3, 32(sp) 399; CHECK-RV64-F-NEXT: flw fs2, 36(sp) 400; CHECK-RV64-F-NEXT: flw fs1, 40(sp) 401; CHECK-RV64-F-NEXT: flw fs0, 44(sp) 402; CHECK-RV64-F-NEXT: flw ft11, 48(sp) 403; CHECK-RV64-F-NEXT: flw ft10, 52(sp) 404; CHECK-RV64-F-NEXT: flw ft9, 56(sp) 405; CHECK-RV64-F-NEXT: flw ft8, 60(sp) 406; CHECK-RV64-F-NEXT: flw fa7, 64(sp) 407; CHECK-RV64-F-NEXT: flw fa6, 68(sp) 408; CHECK-RV64-F-NEXT: flw fa5, 72(sp) 409; CHECK-RV64-F-NEXT: flw fa4, 76(sp) 410; CHECK-RV64-F-NEXT: flw fa3, 80(sp) 411; CHECK-RV64-F-NEXT: flw fa2, 84(sp) 412; CHECK-RV64-F-NEXT: flw fa1, 88(sp) 413; CHECK-RV64-F-NEXT: flw fa0, 92(sp) 414; CHECK-RV64-F-NEXT: flw ft7, 96(sp) 415; CHECK-RV64-F-NEXT: flw ft6, 100(sp) 416; CHECK-RV64-F-NEXT: flw ft5, 104(sp) 417; CHECK-RV64-F-NEXT: flw ft4, 108(sp) 418; CHECK-RV64-F-NEXT: flw ft3, 112(sp) 419; CHECK-RV64-F-NEXT: flw ft2, 116(sp) 420; CHECK-RV64-F-NEXT: flw ft1, 120(sp) 421; CHECK-RV64-F-NEXT: flw ft0, 124(sp) 422; CHECK-RV64-F-NEXT: ld t6, 128(sp) 423; CHECK-RV64-F-NEXT: ld t5, 136(sp) 424; CHECK-RV64-F-NEXT: ld t4, 144(sp) 425; CHECK-RV64-F-NEXT: ld t3, 152(sp) 426; CHECK-RV64-F-NEXT: ld a7, 160(sp) 427; CHECK-RV64-F-NEXT: ld a6, 168(sp) 428; CHECK-RV64-F-NEXT: ld a5, 176(sp) 429; CHECK-RV64-F-NEXT: ld a4, 184(sp) 430; CHECK-RV64-F-NEXT: ld a3, 192(sp) 431; CHECK-RV64-F-NEXT: ld a2, 200(sp) 432; CHECK-RV64-F-NEXT: ld a1, 208(sp) 433; CHECK-RV64-F-NEXT: ld a0, 216(sp) 434; CHECK-RV64-F-NEXT: ld t2, 224(sp) 435; CHECK-RV64-F-NEXT: ld t1, 232(sp) 436; CHECK-RV64-F-NEXT: ld t0, 240(sp) 437; CHECK-RV64-F-NEXT: ld ra, 248(sp) 438; CHECK-RV64-F-NEXT: addi sp, sp, 256 439; CHECK-RV64-F-NEXT: mret 440; 441; CHECK-RV64-FD-LABEL: foo_with_call: 442; CHECK-RV64-FD: # %bb.0: 443; CHECK-RV64-FD-NEXT: addi sp, sp, -384 444; CHECK-RV64-FD-NEXT: sd ra, 376(sp) 445; CHECK-RV64-FD-NEXT: sd t0, 368(sp) 446; CHECK-RV64-FD-NEXT: sd t1, 360(sp) 447; CHECK-RV64-FD-NEXT: sd t2, 352(sp) 448; CHECK-RV64-FD-NEXT: sd a0, 344(sp) 449; CHECK-RV64-FD-NEXT: sd a1, 336(sp) 450; CHECK-RV64-FD-NEXT: sd a2, 328(sp) 451; CHECK-RV64-FD-NEXT: sd a3, 320(sp) 452; CHECK-RV64-FD-NEXT: sd a4, 312(sp) 453; CHECK-RV64-FD-NEXT: sd a5, 304(sp) 454; CHECK-RV64-FD-NEXT: sd a6, 296(sp) 455; CHECK-RV64-FD-NEXT: sd a7, 288(sp) 456; CHECK-RV64-FD-NEXT: sd t3, 280(sp) 457; CHECK-RV64-FD-NEXT: sd t4, 272(sp) 458; CHECK-RV64-FD-NEXT: sd t5, 264(sp) 459; CHECK-RV64-FD-NEXT: sd t6, 256(sp) 460; CHECK-RV64-FD-NEXT: fsd ft0, 248(sp) 461; CHECK-RV64-FD-NEXT: fsd ft1, 240(sp) 462; CHECK-RV64-FD-NEXT: fsd ft2, 232(sp) 463; CHECK-RV64-FD-NEXT: fsd ft3, 224(sp) 464; CHECK-RV64-FD-NEXT: fsd ft4, 216(sp) 465; CHECK-RV64-FD-NEXT: fsd ft5, 208(sp) 466; CHECK-RV64-FD-NEXT: fsd ft6, 200(sp) 467; CHECK-RV64-FD-NEXT: fsd ft7, 192(sp) 468; CHECK-RV64-FD-NEXT: fsd fa0, 184(sp) 469; CHECK-RV64-FD-NEXT: fsd fa1, 176(sp) 470; CHECK-RV64-FD-NEXT: fsd fa2, 168(sp) 471; CHECK-RV64-FD-NEXT: fsd fa3, 160(sp) 472; CHECK-RV64-FD-NEXT: fsd fa4, 152(sp) 473; CHECK-RV64-FD-NEXT: fsd fa5, 144(sp) 474; CHECK-RV64-FD-NEXT: fsd fa6, 136(sp) 475; CHECK-RV64-FD-NEXT: fsd fa7, 128(sp) 476; CHECK-RV64-FD-NEXT: fsd ft8, 120(sp) 477; CHECK-RV64-FD-NEXT: fsd ft9, 112(sp) 478; CHECK-RV64-FD-NEXT: fsd ft10, 104(sp) 479; CHECK-RV64-FD-NEXT: fsd ft11, 96(sp) 480; CHECK-RV64-FD-NEXT: fsd fs0, 88(sp) 481; CHECK-RV64-FD-NEXT: fsd fs1, 80(sp) 482; CHECK-RV64-FD-NEXT: fsd fs2, 72(sp) 483; CHECK-RV64-FD-NEXT: fsd fs3, 64(sp) 484; CHECK-RV64-FD-NEXT: fsd fs4, 56(sp) 485; CHECK-RV64-FD-NEXT: fsd fs5, 48(sp) 486; CHECK-RV64-FD-NEXT: fsd fs6, 40(sp) 487; CHECK-RV64-FD-NEXT: fsd fs7, 32(sp) 488; CHECK-RV64-FD-NEXT: fsd fs8, 24(sp) 489; CHECK-RV64-FD-NEXT: fsd fs9, 16(sp) 490; CHECK-RV64-FD-NEXT: fsd fs10, 8(sp) 491; CHECK-RV64-FD-NEXT: fsd fs11, 0(sp) 492; CHECK-RV64-FD-NEXT: call otherfoo 493; CHECK-RV64-FD-NEXT: fld fs11, 0(sp) 494; CHECK-RV64-FD-NEXT: fld fs10, 8(sp) 495; CHECK-RV64-FD-NEXT: fld fs9, 16(sp) 496; CHECK-RV64-FD-NEXT: fld fs8, 24(sp) 497; CHECK-RV64-FD-NEXT: fld fs7, 32(sp) 498; CHECK-RV64-FD-NEXT: fld fs6, 40(sp) 499; CHECK-RV64-FD-NEXT: fld fs5, 48(sp) 500; CHECK-RV64-FD-NEXT: fld fs4, 56(sp) 501; CHECK-RV64-FD-NEXT: fld fs3, 64(sp) 502; CHECK-RV64-FD-NEXT: fld fs2, 72(sp) 503; CHECK-RV64-FD-NEXT: fld fs1, 80(sp) 504; CHECK-RV64-FD-NEXT: fld fs0, 88(sp) 505; CHECK-RV64-FD-NEXT: fld ft11, 96(sp) 506; CHECK-RV64-FD-NEXT: fld ft10, 104(sp) 507; CHECK-RV64-FD-NEXT: fld ft9, 112(sp) 508; CHECK-RV64-FD-NEXT: fld ft8, 120(sp) 509; CHECK-RV64-FD-NEXT: fld fa7, 128(sp) 510; CHECK-RV64-FD-NEXT: fld fa6, 136(sp) 511; CHECK-RV64-FD-NEXT: fld fa5, 144(sp) 512; CHECK-RV64-FD-NEXT: fld fa4, 152(sp) 513; CHECK-RV64-FD-NEXT: fld fa3, 160(sp) 514; CHECK-RV64-FD-NEXT: fld fa2, 168(sp) 515; CHECK-RV64-FD-NEXT: fld fa1, 176(sp) 516; CHECK-RV64-FD-NEXT: fld fa0, 184(sp) 517; CHECK-RV64-FD-NEXT: fld ft7, 192(sp) 518; CHECK-RV64-FD-NEXT: fld ft6, 200(sp) 519; CHECK-RV64-FD-NEXT: fld ft5, 208(sp) 520; CHECK-RV64-FD-NEXT: fld ft4, 216(sp) 521; CHECK-RV64-FD-NEXT: fld ft3, 224(sp) 522; CHECK-RV64-FD-NEXT: fld ft2, 232(sp) 523; CHECK-RV64-FD-NEXT: fld ft1, 240(sp) 524; CHECK-RV64-FD-NEXT: fld ft0, 248(sp) 525; CHECK-RV64-FD-NEXT: ld t6, 256(sp) 526; CHECK-RV64-FD-NEXT: ld t5, 264(sp) 527; CHECK-RV64-FD-NEXT: ld t4, 272(sp) 528; CHECK-RV64-FD-NEXT: ld t3, 280(sp) 529; CHECK-RV64-FD-NEXT: ld a7, 288(sp) 530; CHECK-RV64-FD-NEXT: ld a6, 296(sp) 531; CHECK-RV64-FD-NEXT: ld a5, 304(sp) 532; CHECK-RV64-FD-NEXT: ld a4, 312(sp) 533; CHECK-RV64-FD-NEXT: ld a3, 320(sp) 534; CHECK-RV64-FD-NEXT: ld a2, 328(sp) 535; CHECK-RV64-FD-NEXT: ld a1, 336(sp) 536; CHECK-RV64-FD-NEXT: ld a0, 344(sp) 537; CHECK-RV64-FD-NEXT: ld t2, 352(sp) 538; CHECK-RV64-FD-NEXT: ld t1, 360(sp) 539; CHECK-RV64-FD-NEXT: ld t0, 368(sp) 540; CHECK-RV64-FD-NEXT: ld ra, 376(sp) 541; CHECK-RV64-FD-NEXT: addi sp, sp, 384 542; CHECK-RV64-FD-NEXT: mret 543 %call = call i32 bitcast (i32 (...)* @otherfoo to i32 ()*)() 544 ret void 545} 546 547; 548; Additionally check frame pointer and return address are properly saved. 549; 550define void @foo_fp_with_call() #3 { 551; 552; CHECK-RV32-LABEL: foo_fp_with_call: 553; CHECK-RV32: # %bb.0: 554; CHECK-RV32-NEXT: addi sp, sp, -80 555; CHECK-RV32-NEXT: sw ra, 76(sp) 556; CHECK-RV32-NEXT: sw t0, 72(sp) 557; CHECK-RV32-NEXT: sw t1, 68(sp) 558; CHECK-RV32-NEXT: sw t2, 64(sp) 559; CHECK-RV32-NEXT: sw s0, 60(sp) 560; CHECK-RV32-NEXT: sw a0, 56(sp) 561; CHECK-RV32-NEXT: sw a1, 52(sp) 562; CHECK-RV32-NEXT: sw a2, 48(sp) 563; CHECK-RV32-NEXT: sw a3, 44(sp) 564; CHECK-RV32-NEXT: sw a4, 40(sp) 565; CHECK-RV32-NEXT: sw a5, 36(sp) 566; CHECK-RV32-NEXT: sw a6, 32(sp) 567; CHECK-RV32-NEXT: sw a7, 28(sp) 568; CHECK-RV32-NEXT: sw t3, 24(sp) 569; CHECK-RV32-NEXT: sw t4, 20(sp) 570; CHECK-RV32-NEXT: sw t5, 16(sp) 571; CHECK-RV32-NEXT: sw t6, 12(sp) 572; CHECK-RV32-NEXT: addi s0, sp, 80 573; CHECK-RV32-NEXT: call otherfoo 574; CHECK-RV32-NEXT: lw t6, 12(sp) 575; CHECK-RV32-NEXT: lw t5, 16(sp) 576; CHECK-RV32-NEXT: lw t4, 20(sp) 577; CHECK-RV32-NEXT: lw t3, 24(sp) 578; CHECK-RV32-NEXT: lw a7, 28(sp) 579; CHECK-RV32-NEXT: lw a6, 32(sp) 580; CHECK-RV32-NEXT: lw a5, 36(sp) 581; CHECK-RV32-NEXT: lw a4, 40(sp) 582; CHECK-RV32-NEXT: lw a3, 44(sp) 583; CHECK-RV32-NEXT: lw a2, 48(sp) 584; CHECK-RV32-NEXT: lw a1, 52(sp) 585; CHECK-RV32-NEXT: lw a0, 56(sp) 586; CHECK-RV32-NEXT: lw s0, 60(sp) 587; CHECK-RV32-NEXT: lw t2, 64(sp) 588; CHECK-RV32-NEXT: lw t1, 68(sp) 589; CHECK-RV32-NEXT: lw t0, 72(sp) 590; CHECK-RV32-NEXT: lw ra, 76(sp) 591; CHECK-RV32-NEXT: addi sp, sp, 80 592; CHECK-RV32-NEXT: mret 593; 594; CHECK-RV32-F-LABEL: foo_fp_with_call: 595; CHECK-RV32-F: # %bb.0: 596; CHECK-RV32-F-NEXT: addi sp, sp, -208 597; CHECK-RV32-F-NEXT: sw ra, 204(sp) 598; CHECK-RV32-F-NEXT: sw t0, 200(sp) 599; CHECK-RV32-F-NEXT: sw t1, 196(sp) 600; CHECK-RV32-F-NEXT: sw t2, 192(sp) 601; CHECK-RV32-F-NEXT: sw s0, 188(sp) 602; CHECK-RV32-F-NEXT: sw a0, 184(sp) 603; CHECK-RV32-F-NEXT: sw a1, 180(sp) 604; CHECK-RV32-F-NEXT: sw a2, 176(sp) 605; CHECK-RV32-F-NEXT: sw a3, 172(sp) 606; CHECK-RV32-F-NEXT: sw a4, 168(sp) 607; CHECK-RV32-F-NEXT: sw a5, 164(sp) 608; CHECK-RV32-F-NEXT: sw a6, 160(sp) 609; CHECK-RV32-F-NEXT: sw a7, 156(sp) 610; CHECK-RV32-F-NEXT: sw t3, 152(sp) 611; CHECK-RV32-F-NEXT: sw t4, 148(sp) 612; CHECK-RV32-F-NEXT: sw t5, 144(sp) 613; CHECK-RV32-F-NEXT: sw t6, 140(sp) 614; CHECK-RV32-F-NEXT: fsw ft0, 136(sp) 615; CHECK-RV32-F-NEXT: fsw ft1, 132(sp) 616; CHECK-RV32-F-NEXT: fsw ft2, 128(sp) 617; CHECK-RV32-F-NEXT: fsw ft3, 124(sp) 618; CHECK-RV32-F-NEXT: fsw ft4, 120(sp) 619; CHECK-RV32-F-NEXT: fsw ft5, 116(sp) 620; CHECK-RV32-F-NEXT: fsw ft6, 112(sp) 621; CHECK-RV32-F-NEXT: fsw ft7, 108(sp) 622; CHECK-RV32-F-NEXT: fsw fa0, 104(sp) 623; CHECK-RV32-F-NEXT: fsw fa1, 100(sp) 624; CHECK-RV32-F-NEXT: fsw fa2, 96(sp) 625; CHECK-RV32-F-NEXT: fsw fa3, 92(sp) 626; CHECK-RV32-F-NEXT: fsw fa4, 88(sp) 627; CHECK-RV32-F-NEXT: fsw fa5, 84(sp) 628; CHECK-RV32-F-NEXT: fsw fa6, 80(sp) 629; CHECK-RV32-F-NEXT: fsw fa7, 76(sp) 630; CHECK-RV32-F-NEXT: fsw ft8, 72(sp) 631; CHECK-RV32-F-NEXT: fsw ft9, 68(sp) 632; CHECK-RV32-F-NEXT: fsw ft10, 64(sp) 633; CHECK-RV32-F-NEXT: fsw ft11, 60(sp) 634; CHECK-RV32-F-NEXT: fsw fs0, 56(sp) 635; CHECK-RV32-F-NEXT: fsw fs1, 52(sp) 636; CHECK-RV32-F-NEXT: fsw fs2, 48(sp) 637; CHECK-RV32-F-NEXT: fsw fs3, 44(sp) 638; CHECK-RV32-F-NEXT: fsw fs4, 40(sp) 639; CHECK-RV32-F-NEXT: fsw fs5, 36(sp) 640; CHECK-RV32-F-NEXT: fsw fs6, 32(sp) 641; CHECK-RV32-F-NEXT: fsw fs7, 28(sp) 642; CHECK-RV32-F-NEXT: fsw fs8, 24(sp) 643; CHECK-RV32-F-NEXT: fsw fs9, 20(sp) 644; CHECK-RV32-F-NEXT: fsw fs10, 16(sp) 645; CHECK-RV32-F-NEXT: fsw fs11, 12(sp) 646; CHECK-RV32-F-NEXT: addi s0, sp, 208 647; CHECK-RV32-F-NEXT: call otherfoo 648; CHECK-RV32-F-NEXT: flw fs11, 12(sp) 649; CHECK-RV32-F-NEXT: flw fs10, 16(sp) 650; CHECK-RV32-F-NEXT: flw fs9, 20(sp) 651; CHECK-RV32-F-NEXT: flw fs8, 24(sp) 652; CHECK-RV32-F-NEXT: flw fs7, 28(sp) 653; CHECK-RV32-F-NEXT: flw fs6, 32(sp) 654; CHECK-RV32-F-NEXT: flw fs5, 36(sp) 655; CHECK-RV32-F-NEXT: flw fs4, 40(sp) 656; CHECK-RV32-F-NEXT: flw fs3, 44(sp) 657; CHECK-RV32-F-NEXT: flw fs2, 48(sp) 658; CHECK-RV32-F-NEXT: flw fs1, 52(sp) 659; CHECK-RV32-F-NEXT: flw fs0, 56(sp) 660; CHECK-RV32-F-NEXT: flw ft11, 60(sp) 661; CHECK-RV32-F-NEXT: flw ft10, 64(sp) 662; CHECK-RV32-F-NEXT: flw ft9, 68(sp) 663; CHECK-RV32-F-NEXT: flw ft8, 72(sp) 664; CHECK-RV32-F-NEXT: flw fa7, 76(sp) 665; CHECK-RV32-F-NEXT: flw fa6, 80(sp) 666; CHECK-RV32-F-NEXT: flw fa5, 84(sp) 667; CHECK-RV32-F-NEXT: flw fa4, 88(sp) 668; CHECK-RV32-F-NEXT: flw fa3, 92(sp) 669; CHECK-RV32-F-NEXT: flw fa2, 96(sp) 670; CHECK-RV32-F-NEXT: flw fa1, 100(sp) 671; CHECK-RV32-F-NEXT: flw fa0, 104(sp) 672; CHECK-RV32-F-NEXT: flw ft7, 108(sp) 673; CHECK-RV32-F-NEXT: flw ft6, 112(sp) 674; CHECK-RV32-F-NEXT: flw ft5, 116(sp) 675; CHECK-RV32-F-NEXT: flw ft4, 120(sp) 676; CHECK-RV32-F-NEXT: flw ft3, 124(sp) 677; CHECK-RV32-F-NEXT: flw ft2, 128(sp) 678; CHECK-RV32-F-NEXT: flw ft1, 132(sp) 679; CHECK-RV32-F-NEXT: flw ft0, 136(sp) 680; CHECK-RV32-F-NEXT: lw t6, 140(sp) 681; CHECK-RV32-F-NEXT: lw t5, 144(sp) 682; CHECK-RV32-F-NEXT: lw t4, 148(sp) 683; CHECK-RV32-F-NEXT: lw t3, 152(sp) 684; CHECK-RV32-F-NEXT: lw a7, 156(sp) 685; CHECK-RV32-F-NEXT: lw a6, 160(sp) 686; CHECK-RV32-F-NEXT: lw a5, 164(sp) 687; CHECK-RV32-F-NEXT: lw a4, 168(sp) 688; CHECK-RV32-F-NEXT: lw a3, 172(sp) 689; CHECK-RV32-F-NEXT: lw a2, 176(sp) 690; CHECK-RV32-F-NEXT: lw a1, 180(sp) 691; CHECK-RV32-F-NEXT: lw a0, 184(sp) 692; CHECK-RV32-F-NEXT: lw s0, 188(sp) 693; CHECK-RV32-F-NEXT: lw t2, 192(sp) 694; CHECK-RV32-F-NEXT: lw t1, 196(sp) 695; CHECK-RV32-F-NEXT: lw t0, 200(sp) 696; CHECK-RV32-F-NEXT: lw ra, 204(sp) 697; CHECK-RV32-F-NEXT: addi sp, sp, 208 698; CHECK-RV32-F-NEXT: mret 699; 700; CHECK-RV32-FD-LABEL: foo_fp_with_call: 701; CHECK-RV32-FD: # %bb.0: 702; CHECK-RV32-FD-NEXT: addi sp, sp, -336 703; CHECK-RV32-FD-NEXT: sw ra, 332(sp) 704; CHECK-RV32-FD-NEXT: sw t0, 328(sp) 705; CHECK-RV32-FD-NEXT: sw t1, 324(sp) 706; CHECK-RV32-FD-NEXT: sw t2, 320(sp) 707; CHECK-RV32-FD-NEXT: sw s0, 316(sp) 708; CHECK-RV32-FD-NEXT: sw a0, 312(sp) 709; CHECK-RV32-FD-NEXT: sw a1, 308(sp) 710; CHECK-RV32-FD-NEXT: sw a2, 304(sp) 711; CHECK-RV32-FD-NEXT: sw a3, 300(sp) 712; CHECK-RV32-FD-NEXT: sw a4, 296(sp) 713; CHECK-RV32-FD-NEXT: sw a5, 292(sp) 714; CHECK-RV32-FD-NEXT: sw a6, 288(sp) 715; CHECK-RV32-FD-NEXT: sw a7, 284(sp) 716; CHECK-RV32-FD-NEXT: sw t3, 280(sp) 717; CHECK-RV32-FD-NEXT: sw t4, 276(sp) 718; CHECK-RV32-FD-NEXT: sw t5, 272(sp) 719; CHECK-RV32-FD-NEXT: sw t6, 268(sp) 720; CHECK-RV32-FD-NEXT: fsd ft0, 256(sp) 721; CHECK-RV32-FD-NEXT: fsd ft1, 248(sp) 722; CHECK-RV32-FD-NEXT: fsd ft2, 240(sp) 723; CHECK-RV32-FD-NEXT: fsd ft3, 232(sp) 724; CHECK-RV32-FD-NEXT: fsd ft4, 224(sp) 725; CHECK-RV32-FD-NEXT: fsd ft5, 216(sp) 726; CHECK-RV32-FD-NEXT: fsd ft6, 208(sp) 727; CHECK-RV32-FD-NEXT: fsd ft7, 200(sp) 728; CHECK-RV32-FD-NEXT: fsd fa0, 192(sp) 729; CHECK-RV32-FD-NEXT: fsd fa1, 184(sp) 730; CHECK-RV32-FD-NEXT: fsd fa2, 176(sp) 731; CHECK-RV32-FD-NEXT: fsd fa3, 168(sp) 732; CHECK-RV32-FD-NEXT: fsd fa4, 160(sp) 733; CHECK-RV32-FD-NEXT: fsd fa5, 152(sp) 734; CHECK-RV32-FD-NEXT: fsd fa6, 144(sp) 735; CHECK-RV32-FD-NEXT: fsd fa7, 136(sp) 736; CHECK-RV32-FD-NEXT: fsd ft8, 128(sp) 737; CHECK-RV32-FD-NEXT: fsd ft9, 120(sp) 738; CHECK-RV32-FD-NEXT: fsd ft10, 112(sp) 739; CHECK-RV32-FD-NEXT: fsd ft11, 104(sp) 740; CHECK-RV32-FD-NEXT: fsd fs0, 96(sp) 741; CHECK-RV32-FD-NEXT: fsd fs1, 88(sp) 742; CHECK-RV32-FD-NEXT: fsd fs2, 80(sp) 743; CHECK-RV32-FD-NEXT: fsd fs3, 72(sp) 744; CHECK-RV32-FD-NEXT: fsd fs4, 64(sp) 745; CHECK-RV32-FD-NEXT: fsd fs5, 56(sp) 746; CHECK-RV32-FD-NEXT: fsd fs6, 48(sp) 747; CHECK-RV32-FD-NEXT: fsd fs7, 40(sp) 748; CHECK-RV32-FD-NEXT: fsd fs8, 32(sp) 749; CHECK-RV32-FD-NEXT: fsd fs9, 24(sp) 750; CHECK-RV32-FD-NEXT: fsd fs10, 16(sp) 751; CHECK-RV32-FD-NEXT: fsd fs11, 8(sp) 752; CHECK-RV32-FD-NEXT: addi s0, sp, 336 753; CHECK-RV32-FD-NEXT: call otherfoo 754; CHECK-RV32-FD-NEXT: fld fs11, 8(sp) 755; CHECK-RV32-FD-NEXT: fld fs10, 16(sp) 756; CHECK-RV32-FD-NEXT: fld fs9, 24(sp) 757; CHECK-RV32-FD-NEXT: fld fs8, 32(sp) 758; CHECK-RV32-FD-NEXT: fld fs7, 40(sp) 759; CHECK-RV32-FD-NEXT: fld fs6, 48(sp) 760; CHECK-RV32-FD-NEXT: fld fs5, 56(sp) 761; CHECK-RV32-FD-NEXT: fld fs4, 64(sp) 762; CHECK-RV32-FD-NEXT: fld fs3, 72(sp) 763; CHECK-RV32-FD-NEXT: fld fs2, 80(sp) 764; CHECK-RV32-FD-NEXT: fld fs1, 88(sp) 765; CHECK-RV32-FD-NEXT: fld fs0, 96(sp) 766; CHECK-RV32-FD-NEXT: fld ft11, 104(sp) 767; CHECK-RV32-FD-NEXT: fld ft10, 112(sp) 768; CHECK-RV32-FD-NEXT: fld ft9, 120(sp) 769; CHECK-RV32-FD-NEXT: fld ft8, 128(sp) 770; CHECK-RV32-FD-NEXT: fld fa7, 136(sp) 771; CHECK-RV32-FD-NEXT: fld fa6, 144(sp) 772; CHECK-RV32-FD-NEXT: fld fa5, 152(sp) 773; CHECK-RV32-FD-NEXT: fld fa4, 160(sp) 774; CHECK-RV32-FD-NEXT: fld fa3, 168(sp) 775; CHECK-RV32-FD-NEXT: fld fa2, 176(sp) 776; CHECK-RV32-FD-NEXT: fld fa1, 184(sp) 777; CHECK-RV32-FD-NEXT: fld fa0, 192(sp) 778; CHECK-RV32-FD-NEXT: fld ft7, 200(sp) 779; CHECK-RV32-FD-NEXT: fld ft6, 208(sp) 780; CHECK-RV32-FD-NEXT: fld ft5, 216(sp) 781; CHECK-RV32-FD-NEXT: fld ft4, 224(sp) 782; CHECK-RV32-FD-NEXT: fld ft3, 232(sp) 783; CHECK-RV32-FD-NEXT: fld ft2, 240(sp) 784; CHECK-RV32-FD-NEXT: fld ft1, 248(sp) 785; CHECK-RV32-FD-NEXT: fld ft0, 256(sp) 786; CHECK-RV32-FD-NEXT: lw t6, 268(sp) 787; CHECK-RV32-FD-NEXT: lw t5, 272(sp) 788; CHECK-RV32-FD-NEXT: lw t4, 276(sp) 789; CHECK-RV32-FD-NEXT: lw t3, 280(sp) 790; CHECK-RV32-FD-NEXT: lw a7, 284(sp) 791; CHECK-RV32-FD-NEXT: lw a6, 288(sp) 792; CHECK-RV32-FD-NEXT: lw a5, 292(sp) 793; CHECK-RV32-FD-NEXT: lw a4, 296(sp) 794; CHECK-RV32-FD-NEXT: lw a3, 300(sp) 795; CHECK-RV32-FD-NEXT: lw a2, 304(sp) 796; CHECK-RV32-FD-NEXT: lw a1, 308(sp) 797; CHECK-RV32-FD-NEXT: lw a0, 312(sp) 798; CHECK-RV32-FD-NEXT: lw s0, 316(sp) 799; CHECK-RV32-FD-NEXT: lw t2, 320(sp) 800; CHECK-RV32-FD-NEXT: lw t1, 324(sp) 801; CHECK-RV32-FD-NEXT: lw t0, 328(sp) 802; CHECK-RV32-FD-NEXT: lw ra, 332(sp) 803; CHECK-RV32-FD-NEXT: addi sp, sp, 336 804; CHECK-RV32-FD-NEXT: mret 805; 806; CHECK-RV64-LABEL: foo_fp_with_call: 807; CHECK-RV64: # %bb.0: 808; CHECK-RV64-NEXT: addi sp, sp, -144 809; CHECK-RV64-NEXT: sd ra, 136(sp) 810; CHECK-RV64-NEXT: sd t0, 128(sp) 811; CHECK-RV64-NEXT: sd t1, 120(sp) 812; CHECK-RV64-NEXT: sd t2, 112(sp) 813; CHECK-RV64-NEXT: sd s0, 104(sp) 814; CHECK-RV64-NEXT: sd a0, 96(sp) 815; CHECK-RV64-NEXT: sd a1, 88(sp) 816; CHECK-RV64-NEXT: sd a2, 80(sp) 817; CHECK-RV64-NEXT: sd a3, 72(sp) 818; CHECK-RV64-NEXT: sd a4, 64(sp) 819; CHECK-RV64-NEXT: sd a5, 56(sp) 820; CHECK-RV64-NEXT: sd a6, 48(sp) 821; CHECK-RV64-NEXT: sd a7, 40(sp) 822; CHECK-RV64-NEXT: sd t3, 32(sp) 823; CHECK-RV64-NEXT: sd t4, 24(sp) 824; CHECK-RV64-NEXT: sd t5, 16(sp) 825; CHECK-RV64-NEXT: sd t6, 8(sp) 826; CHECK-RV64-NEXT: addi s0, sp, 144 827; CHECK-RV64-NEXT: call otherfoo 828; CHECK-RV64-NEXT: ld t6, 8(sp) 829; CHECK-RV64-NEXT: ld t5, 16(sp) 830; CHECK-RV64-NEXT: ld t4, 24(sp) 831; CHECK-RV64-NEXT: ld t3, 32(sp) 832; CHECK-RV64-NEXT: ld a7, 40(sp) 833; CHECK-RV64-NEXT: ld a6, 48(sp) 834; CHECK-RV64-NEXT: ld a5, 56(sp) 835; CHECK-RV64-NEXT: ld a4, 64(sp) 836; CHECK-RV64-NEXT: ld a3, 72(sp) 837; CHECK-RV64-NEXT: ld a2, 80(sp) 838; CHECK-RV64-NEXT: ld a1, 88(sp) 839; CHECK-RV64-NEXT: ld a0, 96(sp) 840; CHECK-RV64-NEXT: ld s0, 104(sp) 841; CHECK-RV64-NEXT: ld t2, 112(sp) 842; CHECK-RV64-NEXT: ld t1, 120(sp) 843; CHECK-RV64-NEXT: ld t0, 128(sp) 844; CHECK-RV64-NEXT: ld ra, 136(sp) 845; CHECK-RV64-NEXT: addi sp, sp, 144 846; CHECK-RV64-NEXT: mret 847; 848; CHECK-RV64-F-LABEL: foo_fp_with_call: 849; CHECK-RV64-F: # %bb.0: 850; CHECK-RV64-F-NEXT: addi sp, sp, -272 851; CHECK-RV64-F-NEXT: sd ra, 264(sp) 852; CHECK-RV64-F-NEXT: sd t0, 256(sp) 853; CHECK-RV64-F-NEXT: sd t1, 248(sp) 854; CHECK-RV64-F-NEXT: sd t2, 240(sp) 855; CHECK-RV64-F-NEXT: sd s0, 232(sp) 856; CHECK-RV64-F-NEXT: sd a0, 224(sp) 857; CHECK-RV64-F-NEXT: sd a1, 216(sp) 858; CHECK-RV64-F-NEXT: sd a2, 208(sp) 859; CHECK-RV64-F-NEXT: sd a3, 200(sp) 860; CHECK-RV64-F-NEXT: sd a4, 192(sp) 861; CHECK-RV64-F-NEXT: sd a5, 184(sp) 862; CHECK-RV64-F-NEXT: sd a6, 176(sp) 863; CHECK-RV64-F-NEXT: sd a7, 168(sp) 864; CHECK-RV64-F-NEXT: sd t3, 160(sp) 865; CHECK-RV64-F-NEXT: sd t4, 152(sp) 866; CHECK-RV64-F-NEXT: sd t5, 144(sp) 867; CHECK-RV64-F-NEXT: sd t6, 136(sp) 868; CHECK-RV64-F-NEXT: fsw ft0, 132(sp) 869; CHECK-RV64-F-NEXT: fsw ft1, 128(sp) 870; CHECK-RV64-F-NEXT: fsw ft2, 124(sp) 871; CHECK-RV64-F-NEXT: fsw ft3, 120(sp) 872; CHECK-RV64-F-NEXT: fsw ft4, 116(sp) 873; CHECK-RV64-F-NEXT: fsw ft5, 112(sp) 874; CHECK-RV64-F-NEXT: fsw ft6, 108(sp) 875; CHECK-RV64-F-NEXT: fsw ft7, 104(sp) 876; CHECK-RV64-F-NEXT: fsw fa0, 100(sp) 877; CHECK-RV64-F-NEXT: fsw fa1, 96(sp) 878; CHECK-RV64-F-NEXT: fsw fa2, 92(sp) 879; CHECK-RV64-F-NEXT: fsw fa3, 88(sp) 880; CHECK-RV64-F-NEXT: fsw fa4, 84(sp) 881; CHECK-RV64-F-NEXT: fsw fa5, 80(sp) 882; CHECK-RV64-F-NEXT: fsw fa6, 76(sp) 883; CHECK-RV64-F-NEXT: fsw fa7, 72(sp) 884; CHECK-RV64-F-NEXT: fsw ft8, 68(sp) 885; CHECK-RV64-F-NEXT: fsw ft9, 64(sp) 886; CHECK-RV64-F-NEXT: fsw ft10, 60(sp) 887; CHECK-RV64-F-NEXT: fsw ft11, 56(sp) 888; CHECK-RV64-F-NEXT: fsw fs0, 52(sp) 889; CHECK-RV64-F-NEXT: fsw fs1, 48(sp) 890; CHECK-RV64-F-NEXT: fsw fs2, 44(sp) 891; CHECK-RV64-F-NEXT: fsw fs3, 40(sp) 892; CHECK-RV64-F-NEXT: fsw fs4, 36(sp) 893; CHECK-RV64-F-NEXT: fsw fs5, 32(sp) 894; CHECK-RV64-F-NEXT: fsw fs6, 28(sp) 895; CHECK-RV64-F-NEXT: fsw fs7, 24(sp) 896; CHECK-RV64-F-NEXT: fsw fs8, 20(sp) 897; CHECK-RV64-F-NEXT: fsw fs9, 16(sp) 898; CHECK-RV64-F-NEXT: fsw fs10, 12(sp) 899; CHECK-RV64-F-NEXT: fsw fs11, 8(sp) 900; CHECK-RV64-F-NEXT: addi s0, sp, 272 901; CHECK-RV64-F-NEXT: call otherfoo 902; CHECK-RV64-F-NEXT: flw fs11, 8(sp) 903; CHECK-RV64-F-NEXT: flw fs10, 12(sp) 904; CHECK-RV64-F-NEXT: flw fs9, 16(sp) 905; CHECK-RV64-F-NEXT: flw fs8, 20(sp) 906; CHECK-RV64-F-NEXT: flw fs7, 24(sp) 907; CHECK-RV64-F-NEXT: flw fs6, 28(sp) 908; CHECK-RV64-F-NEXT: flw fs5, 32(sp) 909; CHECK-RV64-F-NEXT: flw fs4, 36(sp) 910; CHECK-RV64-F-NEXT: flw fs3, 40(sp) 911; CHECK-RV64-F-NEXT: flw fs2, 44(sp) 912; CHECK-RV64-F-NEXT: flw fs1, 48(sp) 913; CHECK-RV64-F-NEXT: flw fs0, 52(sp) 914; CHECK-RV64-F-NEXT: flw ft11, 56(sp) 915; CHECK-RV64-F-NEXT: flw ft10, 60(sp) 916; CHECK-RV64-F-NEXT: flw ft9, 64(sp) 917; CHECK-RV64-F-NEXT: flw ft8, 68(sp) 918; CHECK-RV64-F-NEXT: flw fa7, 72(sp) 919; CHECK-RV64-F-NEXT: flw fa6, 76(sp) 920; CHECK-RV64-F-NEXT: flw fa5, 80(sp) 921; CHECK-RV64-F-NEXT: flw fa4, 84(sp) 922; CHECK-RV64-F-NEXT: flw fa3, 88(sp) 923; CHECK-RV64-F-NEXT: flw fa2, 92(sp) 924; CHECK-RV64-F-NEXT: flw fa1, 96(sp) 925; CHECK-RV64-F-NEXT: flw fa0, 100(sp) 926; CHECK-RV64-F-NEXT: flw ft7, 104(sp) 927; CHECK-RV64-F-NEXT: flw ft6, 108(sp) 928; CHECK-RV64-F-NEXT: flw ft5, 112(sp) 929; CHECK-RV64-F-NEXT: flw ft4, 116(sp) 930; CHECK-RV64-F-NEXT: flw ft3, 120(sp) 931; CHECK-RV64-F-NEXT: flw ft2, 124(sp) 932; CHECK-RV64-F-NEXT: flw ft1, 128(sp) 933; CHECK-RV64-F-NEXT: flw ft0, 132(sp) 934; CHECK-RV64-F-NEXT: ld t6, 136(sp) 935; CHECK-RV64-F-NEXT: ld t5, 144(sp) 936; CHECK-RV64-F-NEXT: ld t4, 152(sp) 937; CHECK-RV64-F-NEXT: ld t3, 160(sp) 938; CHECK-RV64-F-NEXT: ld a7, 168(sp) 939; CHECK-RV64-F-NEXT: ld a6, 176(sp) 940; CHECK-RV64-F-NEXT: ld a5, 184(sp) 941; CHECK-RV64-F-NEXT: ld a4, 192(sp) 942; CHECK-RV64-F-NEXT: ld a3, 200(sp) 943; CHECK-RV64-F-NEXT: ld a2, 208(sp) 944; CHECK-RV64-F-NEXT: ld a1, 216(sp) 945; CHECK-RV64-F-NEXT: ld a0, 224(sp) 946; CHECK-RV64-F-NEXT: ld s0, 232(sp) 947; CHECK-RV64-F-NEXT: ld t2, 240(sp) 948; CHECK-RV64-F-NEXT: ld t1, 248(sp) 949; CHECK-RV64-F-NEXT: ld t0, 256(sp) 950; CHECK-RV64-F-NEXT: ld ra, 264(sp) 951; CHECK-RV64-F-NEXT: addi sp, sp, 272 952; CHECK-RV64-F-NEXT: mret 953; 954; CHECK-RV64-FD-LABEL: foo_fp_with_call: 955; CHECK-RV64-FD: # %bb.0: 956; CHECK-RV64-FD-NEXT: addi sp, sp, -400 957; CHECK-RV64-FD-NEXT: sd ra, 392(sp) 958; CHECK-RV64-FD-NEXT: sd t0, 384(sp) 959; CHECK-RV64-FD-NEXT: sd t1, 376(sp) 960; CHECK-RV64-FD-NEXT: sd t2, 368(sp) 961; CHECK-RV64-FD-NEXT: sd s0, 360(sp) 962; CHECK-RV64-FD-NEXT: sd a0, 352(sp) 963; CHECK-RV64-FD-NEXT: sd a1, 344(sp) 964; CHECK-RV64-FD-NEXT: sd a2, 336(sp) 965; CHECK-RV64-FD-NEXT: sd a3, 328(sp) 966; CHECK-RV64-FD-NEXT: sd a4, 320(sp) 967; CHECK-RV64-FD-NEXT: sd a5, 312(sp) 968; CHECK-RV64-FD-NEXT: sd a6, 304(sp) 969; CHECK-RV64-FD-NEXT: sd a7, 296(sp) 970; CHECK-RV64-FD-NEXT: sd t3, 288(sp) 971; CHECK-RV64-FD-NEXT: sd t4, 280(sp) 972; CHECK-RV64-FD-NEXT: sd t5, 272(sp) 973; CHECK-RV64-FD-NEXT: sd t6, 264(sp) 974; CHECK-RV64-FD-NEXT: fsd ft0, 256(sp) 975; CHECK-RV64-FD-NEXT: fsd ft1, 248(sp) 976; CHECK-RV64-FD-NEXT: fsd ft2, 240(sp) 977; CHECK-RV64-FD-NEXT: fsd ft3, 232(sp) 978; CHECK-RV64-FD-NEXT: fsd ft4, 224(sp) 979; CHECK-RV64-FD-NEXT: fsd ft5, 216(sp) 980; CHECK-RV64-FD-NEXT: fsd ft6, 208(sp) 981; CHECK-RV64-FD-NEXT: fsd ft7, 200(sp) 982; CHECK-RV64-FD-NEXT: fsd fa0, 192(sp) 983; CHECK-RV64-FD-NEXT: fsd fa1, 184(sp) 984; CHECK-RV64-FD-NEXT: fsd fa2, 176(sp) 985; CHECK-RV64-FD-NEXT: fsd fa3, 168(sp) 986; CHECK-RV64-FD-NEXT: fsd fa4, 160(sp) 987; CHECK-RV64-FD-NEXT: fsd fa5, 152(sp) 988; CHECK-RV64-FD-NEXT: fsd fa6, 144(sp) 989; CHECK-RV64-FD-NEXT: fsd fa7, 136(sp) 990; CHECK-RV64-FD-NEXT: fsd ft8, 128(sp) 991; CHECK-RV64-FD-NEXT: fsd ft9, 120(sp) 992; CHECK-RV64-FD-NEXT: fsd ft10, 112(sp) 993; CHECK-RV64-FD-NEXT: fsd ft11, 104(sp) 994; CHECK-RV64-FD-NEXT: fsd fs0, 96(sp) 995; CHECK-RV64-FD-NEXT: fsd fs1, 88(sp) 996; CHECK-RV64-FD-NEXT: fsd fs2, 80(sp) 997; CHECK-RV64-FD-NEXT: fsd fs3, 72(sp) 998; CHECK-RV64-FD-NEXT: fsd fs4, 64(sp) 999; CHECK-RV64-FD-NEXT: fsd fs5, 56(sp) 1000; CHECK-RV64-FD-NEXT: fsd fs6, 48(sp) 1001; CHECK-RV64-FD-NEXT: fsd fs7, 40(sp) 1002; CHECK-RV64-FD-NEXT: fsd fs8, 32(sp) 1003; CHECK-RV64-FD-NEXT: fsd fs9, 24(sp) 1004; CHECK-RV64-FD-NEXT: fsd fs10, 16(sp) 1005; CHECK-RV64-FD-NEXT: fsd fs11, 8(sp) 1006; CHECK-RV64-FD-NEXT: addi s0, sp, 400 1007; CHECK-RV64-FD-NEXT: call otherfoo 1008; CHECK-RV64-FD-NEXT: fld fs11, 8(sp) 1009; CHECK-RV64-FD-NEXT: fld fs10, 16(sp) 1010; CHECK-RV64-FD-NEXT: fld fs9, 24(sp) 1011; CHECK-RV64-FD-NEXT: fld fs8, 32(sp) 1012; CHECK-RV64-FD-NEXT: fld fs7, 40(sp) 1013; CHECK-RV64-FD-NEXT: fld fs6, 48(sp) 1014; CHECK-RV64-FD-NEXT: fld fs5, 56(sp) 1015; CHECK-RV64-FD-NEXT: fld fs4, 64(sp) 1016; CHECK-RV64-FD-NEXT: fld fs3, 72(sp) 1017; CHECK-RV64-FD-NEXT: fld fs2, 80(sp) 1018; CHECK-RV64-FD-NEXT: fld fs1, 88(sp) 1019; CHECK-RV64-FD-NEXT: fld fs0, 96(sp) 1020; CHECK-RV64-FD-NEXT: fld ft11, 104(sp) 1021; CHECK-RV64-FD-NEXT: fld ft10, 112(sp) 1022; CHECK-RV64-FD-NEXT: fld ft9, 120(sp) 1023; CHECK-RV64-FD-NEXT: fld ft8, 128(sp) 1024; CHECK-RV64-FD-NEXT: fld fa7, 136(sp) 1025; CHECK-RV64-FD-NEXT: fld fa6, 144(sp) 1026; CHECK-RV64-FD-NEXT: fld fa5, 152(sp) 1027; CHECK-RV64-FD-NEXT: fld fa4, 160(sp) 1028; CHECK-RV64-FD-NEXT: fld fa3, 168(sp) 1029; CHECK-RV64-FD-NEXT: fld fa2, 176(sp) 1030; CHECK-RV64-FD-NEXT: fld fa1, 184(sp) 1031; CHECK-RV64-FD-NEXT: fld fa0, 192(sp) 1032; CHECK-RV64-FD-NEXT: fld ft7, 200(sp) 1033; CHECK-RV64-FD-NEXT: fld ft6, 208(sp) 1034; CHECK-RV64-FD-NEXT: fld ft5, 216(sp) 1035; CHECK-RV64-FD-NEXT: fld ft4, 224(sp) 1036; CHECK-RV64-FD-NEXT: fld ft3, 232(sp) 1037; CHECK-RV64-FD-NEXT: fld ft2, 240(sp) 1038; CHECK-RV64-FD-NEXT: fld ft1, 248(sp) 1039; CHECK-RV64-FD-NEXT: fld ft0, 256(sp) 1040; CHECK-RV64-FD-NEXT: ld t6, 264(sp) 1041; CHECK-RV64-FD-NEXT: ld t5, 272(sp) 1042; CHECK-RV64-FD-NEXT: ld t4, 280(sp) 1043; CHECK-RV64-FD-NEXT: ld t3, 288(sp) 1044; CHECK-RV64-FD-NEXT: ld a7, 296(sp) 1045; CHECK-RV64-FD-NEXT: ld a6, 304(sp) 1046; CHECK-RV64-FD-NEXT: ld a5, 312(sp) 1047; CHECK-RV64-FD-NEXT: ld a4, 320(sp) 1048; CHECK-RV64-FD-NEXT: ld a3, 328(sp) 1049; CHECK-RV64-FD-NEXT: ld a2, 336(sp) 1050; CHECK-RV64-FD-NEXT: ld a1, 344(sp) 1051; CHECK-RV64-FD-NEXT: ld a0, 352(sp) 1052; CHECK-RV64-FD-NEXT: ld s0, 360(sp) 1053; CHECK-RV64-FD-NEXT: ld t2, 368(sp) 1054; CHECK-RV64-FD-NEXT: ld t1, 376(sp) 1055; CHECK-RV64-FD-NEXT: ld t0, 384(sp) 1056; CHECK-RV64-FD-NEXT: ld ra, 392(sp) 1057; CHECK-RV64-FD-NEXT: addi sp, sp, 400 1058; CHECK-RV64-FD-NEXT: mret 1059 %call = call i32 bitcast (i32 (...)* @otherfoo to i32 ()*)() 1060 ret void 1061} 1062 1063attributes #0 = { nounwind "interrupt"="user" } 1064attributes #1 = { nounwind "interrupt"="supervisor" } 1065attributes #2 = { nounwind "interrupt"="machine" } 1066attributes #3 = { nounwind "interrupt"="machine" "frame-pointer"="all" } 1067