brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.9 KiB · f30c453 Raw
1033 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefixes=CHECK,RV32I %s4; RUN: llc -relocation-model=pic -mtriple=riscv32 -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefixes=CHECK,RV32I-PIC %s6; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefix=RV64I %s8; RUN: llc -code-model=small -mtriple=riscv64 -verify-machineinstrs < %s \9; RUN:   | FileCheck -check-prefix=RV64I-SMALL %s10; RUN: llc -code-model=medium -mtriple=riscv64 -verify-machineinstrs < %s \11; RUN:   | FileCheck -check-prefix=RV64I-MEDIUM %s12; RUN: llc -code-model=large -mtriple=riscv64 -verify-machineinstrs < %s \13; RUN:   | FileCheck -check-prefix=RV64I-LARGE %s14; RUN: llc -code-model=large -mtriple=riscv64 -mattr=experimental-zicfilp -verify-machineinstrs < %s \15; RUN:   | FileCheck -check-prefix=RV64I-LARGE-ZICFILP %s16 17declare i32 @external_function(i32)18 19define i32 @test_call_external(i32 %a) nounwind {20; CHECK-LABEL: test_call_external:21; CHECK:       # %bb.0:22; CHECK-NEXT:    addi sp, sp, -1623; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill24; CHECK-NEXT:    call external_function25; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload26; CHECK-NEXT:    addi sp, sp, 1627; CHECK-NEXT:    ret28;29; RV64I-LABEL: test_call_external:30; RV64I:       # %bb.0:31; RV64I-NEXT:    addi sp, sp, -1632; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill33; RV64I-NEXT:    call external_function34; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload35; RV64I-NEXT:    addi sp, sp, 1636; RV64I-NEXT:    ret37;38; RV64I-SMALL-LABEL: test_call_external:39; RV64I-SMALL:       # %bb.0:40; RV64I-SMALL-NEXT:    addi sp, sp, -1641; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill42; RV64I-SMALL-NEXT:    call external_function43; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload44; RV64I-SMALL-NEXT:    addi sp, sp, 1645; RV64I-SMALL-NEXT:    ret46;47; RV64I-MEDIUM-LABEL: test_call_external:48; RV64I-MEDIUM:       # %bb.0:49; RV64I-MEDIUM-NEXT:    addi sp, sp, -1650; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill51; RV64I-MEDIUM-NEXT:    call external_function52; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload53; RV64I-MEDIUM-NEXT:    addi sp, sp, 1654; RV64I-MEDIUM-NEXT:    ret55;56; RV64I-LARGE-LABEL: test_call_external:57; RV64I-LARGE:       # %bb.0:58; RV64I-LARGE-NEXT:    addi sp, sp, -1659; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill60; RV64I-LARGE-NEXT:  .Lpcrel_hi0:61; RV64I-LARGE-NEXT:    auipc a1, %pcrel_hi(.LCPI0_0)62; RV64I-LARGE-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi0)(a1)63; RV64I-LARGE-NEXT:    jalr a164; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload65; RV64I-LARGE-NEXT:    addi sp, sp, 1666; RV64I-LARGE-NEXT:    ret67;68; RV64I-LARGE-ZICFILP-LABEL: test_call_external:69; RV64I-LARGE-ZICFILP:       # %bb.0:70; RV64I-LARGE-ZICFILP-NEXT:    lpad 071; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -1672; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill73; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi0:74; RV64I-LARGE-ZICFILP-NEXT:    auipc a1, %pcrel_hi(.LCPI0_0)75; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi0)(a1)76; RV64I-LARGE-ZICFILP-NEXT:    jalr t277; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload78; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 1679; RV64I-LARGE-ZICFILP-NEXT:    ret80  %1 = call i32 @external_function(i32 %a)81  ret i32 %182}83 84declare dso_local i32 @dso_local_function(i32)85 86define i32 @test_call_dso_local(i32 %a) nounwind {87; CHECK-LABEL: test_call_dso_local:88; CHECK:       # %bb.0:89; CHECK-NEXT:    addi sp, sp, -1690; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill91; CHECK-NEXT:    call dso_local_function92; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload93; CHECK-NEXT:    addi sp, sp, 1694; CHECK-NEXT:    ret95;96; RV64I-LABEL: test_call_dso_local:97; RV64I:       # %bb.0:98; RV64I-NEXT:    addi sp, sp, -1699; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill100; RV64I-NEXT:    call dso_local_function101; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload102; RV64I-NEXT:    addi sp, sp, 16103; RV64I-NEXT:    ret104;105; RV64I-SMALL-LABEL: test_call_dso_local:106; RV64I-SMALL:       # %bb.0:107; RV64I-SMALL-NEXT:    addi sp, sp, -16108; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill109; RV64I-SMALL-NEXT:    call dso_local_function110; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload111; RV64I-SMALL-NEXT:    addi sp, sp, 16112; RV64I-SMALL-NEXT:    ret113;114; RV64I-MEDIUM-LABEL: test_call_dso_local:115; RV64I-MEDIUM:       # %bb.0:116; RV64I-MEDIUM-NEXT:    addi sp, sp, -16117; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill118; RV64I-MEDIUM-NEXT:    call dso_local_function119; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload120; RV64I-MEDIUM-NEXT:    addi sp, sp, 16121; RV64I-MEDIUM-NEXT:    ret122;123; RV64I-LARGE-LABEL: test_call_dso_local:124; RV64I-LARGE:       # %bb.0:125; RV64I-LARGE-NEXT:    addi sp, sp, -16126; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill127; RV64I-LARGE-NEXT:  .Lpcrel_hi1:128; RV64I-LARGE-NEXT:    auipc a1, %pcrel_hi(.LCPI1_0)129; RV64I-LARGE-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi1)(a1)130; RV64I-LARGE-NEXT:    jalr a1131; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload132; RV64I-LARGE-NEXT:    addi sp, sp, 16133; RV64I-LARGE-NEXT:    ret134;135; RV64I-LARGE-ZICFILP-LABEL: test_call_dso_local:136; RV64I-LARGE-ZICFILP:       # %bb.0:137; RV64I-LARGE-ZICFILP-NEXT:    lpad 0138; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -16139; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill140; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi1:141; RV64I-LARGE-ZICFILP-NEXT:    auipc a1, %pcrel_hi(.LCPI1_0)142; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi1)(a1)143; RV64I-LARGE-ZICFILP-NEXT:    jalr t2144; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload145; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 16146; RV64I-LARGE-ZICFILP-NEXT:    ret147  %1 = call i32 @dso_local_function(i32 %a)148  ret i32 %1149}150 151define i32 @defined_function(i32 %a) nounwind {152; CHECK-LABEL: defined_function:153; CHECK:       # %bb.0:154; CHECK-NEXT:    addi a0, a0, 1155; CHECK-NEXT:    ret156;157; RV64I-LABEL: defined_function:158; RV64I:       # %bb.0:159; RV64I-NEXT:    addiw a0, a0, 1160; RV64I-NEXT:    ret161;162; RV64I-SMALL-LABEL: defined_function:163; RV64I-SMALL:       # %bb.0:164; RV64I-SMALL-NEXT:    addiw a0, a0, 1165; RV64I-SMALL-NEXT:    ret166;167; RV64I-MEDIUM-LABEL: defined_function:168; RV64I-MEDIUM:       # %bb.0:169; RV64I-MEDIUM-NEXT:    addiw a0, a0, 1170; RV64I-MEDIUM-NEXT:    ret171;172; RV64I-LARGE-LABEL: defined_function:173; RV64I-LARGE:       # %bb.0:174; RV64I-LARGE-NEXT:    addiw a0, a0, 1175; RV64I-LARGE-NEXT:    ret176;177; RV64I-LARGE-ZICFILP-LABEL: defined_function:178; RV64I-LARGE-ZICFILP:       # %bb.0:179; RV64I-LARGE-ZICFILP-NEXT:    lpad 0180; RV64I-LARGE-ZICFILP-NEXT:    addiw a0, a0, 1181; RV64I-LARGE-ZICFILP-NEXT:    ret182  %1 = add i32 %a, 1183  ret i32 %1184}185 186define i32 @test_call_defined(i32 %a) nounwind {187; CHECK-LABEL: test_call_defined:188; CHECK:       # %bb.0:189; CHECK-NEXT:    addi sp, sp, -16190; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill191; CHECK-NEXT:    call defined_function192; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload193; CHECK-NEXT:    addi sp, sp, 16194; CHECK-NEXT:    ret195;196; RV64I-LABEL: test_call_defined:197; RV64I:       # %bb.0:198; RV64I-NEXT:    addi sp, sp, -16199; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill200; RV64I-NEXT:    call defined_function201; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload202; RV64I-NEXT:    addi sp, sp, 16203; RV64I-NEXT:    ret204;205; RV64I-SMALL-LABEL: test_call_defined:206; RV64I-SMALL:       # %bb.0:207; RV64I-SMALL-NEXT:    addi sp, sp, -16208; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill209; RV64I-SMALL-NEXT:    call defined_function210; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload211; RV64I-SMALL-NEXT:    addi sp, sp, 16212; RV64I-SMALL-NEXT:    ret213;214; RV64I-MEDIUM-LABEL: test_call_defined:215; RV64I-MEDIUM:       # %bb.0:216; RV64I-MEDIUM-NEXT:    addi sp, sp, -16217; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill218; RV64I-MEDIUM-NEXT:    call defined_function219; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload220; RV64I-MEDIUM-NEXT:    addi sp, sp, 16221; RV64I-MEDIUM-NEXT:    ret222;223; RV64I-LARGE-LABEL: test_call_defined:224; RV64I-LARGE:       # %bb.0:225; RV64I-LARGE-NEXT:    addi sp, sp, -16226; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill227; RV64I-LARGE-NEXT:  .Lpcrel_hi2:228; RV64I-LARGE-NEXT:    auipc a1, %pcrel_hi(.LCPI3_0)229; RV64I-LARGE-NEXT:    ld a1, %pcrel_lo(.Lpcrel_hi2)(a1)230; RV64I-LARGE-NEXT:    jalr a1231; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload232; RV64I-LARGE-NEXT:    addi sp, sp, 16233; RV64I-LARGE-NEXT:    ret234;235; RV64I-LARGE-ZICFILP-LABEL: test_call_defined:236; RV64I-LARGE-ZICFILP:       # %bb.0:237; RV64I-LARGE-ZICFILP-NEXT:    lpad 0238; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -16239; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill240; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi2:241; RV64I-LARGE-ZICFILP-NEXT:    auipc a1, %pcrel_hi(.LCPI3_0)242; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi2)(a1)243; RV64I-LARGE-ZICFILP-NEXT:    jalr t2244; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload245; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 16246; RV64I-LARGE-ZICFILP-NEXT:    ret247  %1 = call i32 @defined_function(i32 %a)248  ret i32 %1249}250 251define i32 @test_call_indirect(ptr %a, i32 %b) nounwind {252; CHECK-LABEL: test_call_indirect:253; CHECK:       # %bb.0:254; CHECK-NEXT:    addi sp, sp, -16255; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill256; CHECK-NEXT:    mv a2, a0257; CHECK-NEXT:    mv a0, a1258; CHECK-NEXT:    jalr a2259; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload260; CHECK-NEXT:    addi sp, sp, 16261; CHECK-NEXT:    ret262;263; RV64I-LABEL: test_call_indirect:264; RV64I:       # %bb.0:265; RV64I-NEXT:    addi sp, sp, -16266; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill267; RV64I-NEXT:    mv a2, a0268; RV64I-NEXT:    mv a0, a1269; RV64I-NEXT:    jalr a2270; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload271; RV64I-NEXT:    addi sp, sp, 16272; RV64I-NEXT:    ret273;274; RV64I-SMALL-LABEL: test_call_indirect:275; RV64I-SMALL:       # %bb.0:276; RV64I-SMALL-NEXT:    addi sp, sp, -16277; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill278; RV64I-SMALL-NEXT:    mv a2, a0279; RV64I-SMALL-NEXT:    mv a0, a1280; RV64I-SMALL-NEXT:    jalr a2281; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload282; RV64I-SMALL-NEXT:    addi sp, sp, 16283; RV64I-SMALL-NEXT:    ret284;285; RV64I-MEDIUM-LABEL: test_call_indirect:286; RV64I-MEDIUM:       # %bb.0:287; RV64I-MEDIUM-NEXT:    addi sp, sp, -16288; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill289; RV64I-MEDIUM-NEXT:    mv a2, a0290; RV64I-MEDIUM-NEXT:    mv a0, a1291; RV64I-MEDIUM-NEXT:    jalr a2292; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload293; RV64I-MEDIUM-NEXT:    addi sp, sp, 16294; RV64I-MEDIUM-NEXT:    ret295;296; RV64I-LARGE-LABEL: test_call_indirect:297; RV64I-LARGE:       # %bb.0:298; RV64I-LARGE-NEXT:    addi sp, sp, -16299; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill300; RV64I-LARGE-NEXT:    mv a2, a0301; RV64I-LARGE-NEXT:    mv a0, a1302; RV64I-LARGE-NEXT:    jalr a2303; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload304; RV64I-LARGE-NEXT:    addi sp, sp, 16305; RV64I-LARGE-NEXT:    ret306;307; RV64I-LARGE-ZICFILP-LABEL: test_call_indirect:308; RV64I-LARGE-ZICFILP:       # %bb.0:309; RV64I-LARGE-ZICFILP-NEXT:    lpad 0310; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -16311; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill312; RV64I-LARGE-ZICFILP-NEXT:    mv a2, a0313; RV64I-LARGE-ZICFILP-NEXT:    mv a0, a1314; RV64I-LARGE-ZICFILP-NEXT:    jalr a2315; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload316; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 16317; RV64I-LARGE-ZICFILP-NEXT:    ret318  %1 = call i32 %a(i32 %b)319  ret i32 %1320}321 322; Make sure we don't use t0 as the source for jalr as that is a hint to pop the323; return address stack on some microarchitectures.324define i32 @test_call_indirect_no_t0(ptr %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h) nounwind {325; CHECK-LABEL: test_call_indirect_no_t0:326; CHECK:       # %bb.0:327; CHECK-NEXT:    addi sp, sp, -16328; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill329; CHECK-NEXT:    mv t1, a0330; CHECK-NEXT:    mv a0, a1331; CHECK-NEXT:    mv a1, a2332; CHECK-NEXT:    mv a2, a3333; CHECK-NEXT:    mv a3, a4334; CHECK-NEXT:    mv a4, a5335; CHECK-NEXT:    mv a5, a6336; CHECK-NEXT:    mv a6, a7337; CHECK-NEXT:    jalr t1338; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload339; CHECK-NEXT:    addi sp, sp, 16340; CHECK-NEXT:    ret341;342; RV64I-LABEL: test_call_indirect_no_t0:343; RV64I:       # %bb.0:344; RV64I-NEXT:    addi sp, sp, -16345; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill346; RV64I-NEXT:    mv t1, a0347; RV64I-NEXT:    mv a0, a1348; RV64I-NEXT:    mv a1, a2349; RV64I-NEXT:    mv a2, a3350; RV64I-NEXT:    mv a3, a4351; RV64I-NEXT:    mv a4, a5352; RV64I-NEXT:    mv a5, a6353; RV64I-NEXT:    mv a6, a7354; RV64I-NEXT:    jalr t1355; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload356; RV64I-NEXT:    addi sp, sp, 16357; RV64I-NEXT:    ret358;359; RV64I-SMALL-LABEL: test_call_indirect_no_t0:360; RV64I-SMALL:       # %bb.0:361; RV64I-SMALL-NEXT:    addi sp, sp, -16362; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill363; RV64I-SMALL-NEXT:    mv t1, a0364; RV64I-SMALL-NEXT:    mv a0, a1365; RV64I-SMALL-NEXT:    mv a1, a2366; RV64I-SMALL-NEXT:    mv a2, a3367; RV64I-SMALL-NEXT:    mv a3, a4368; RV64I-SMALL-NEXT:    mv a4, a5369; RV64I-SMALL-NEXT:    mv a5, a6370; RV64I-SMALL-NEXT:    mv a6, a7371; RV64I-SMALL-NEXT:    jalr t1372; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload373; RV64I-SMALL-NEXT:    addi sp, sp, 16374; RV64I-SMALL-NEXT:    ret375;376; RV64I-MEDIUM-LABEL: test_call_indirect_no_t0:377; RV64I-MEDIUM:       # %bb.0:378; RV64I-MEDIUM-NEXT:    addi sp, sp, -16379; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill380; RV64I-MEDIUM-NEXT:    mv t1, a0381; RV64I-MEDIUM-NEXT:    mv a0, a1382; RV64I-MEDIUM-NEXT:    mv a1, a2383; RV64I-MEDIUM-NEXT:    mv a2, a3384; RV64I-MEDIUM-NEXT:    mv a3, a4385; RV64I-MEDIUM-NEXT:    mv a4, a5386; RV64I-MEDIUM-NEXT:    mv a5, a6387; RV64I-MEDIUM-NEXT:    mv a6, a7388; RV64I-MEDIUM-NEXT:    jalr t1389; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload390; RV64I-MEDIUM-NEXT:    addi sp, sp, 16391; RV64I-MEDIUM-NEXT:    ret392;393; RV64I-LARGE-LABEL: test_call_indirect_no_t0:394; RV64I-LARGE:       # %bb.0:395; RV64I-LARGE-NEXT:    addi sp, sp, -16396; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill397; RV64I-LARGE-NEXT:    mv t1, a0398; RV64I-LARGE-NEXT:    mv a0, a1399; RV64I-LARGE-NEXT:    mv a1, a2400; RV64I-LARGE-NEXT:    mv a2, a3401; RV64I-LARGE-NEXT:    mv a3, a4402; RV64I-LARGE-NEXT:    mv a4, a5403; RV64I-LARGE-NEXT:    mv a5, a6404; RV64I-LARGE-NEXT:    mv a6, a7405; RV64I-LARGE-NEXT:    jalr t1406; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload407; RV64I-LARGE-NEXT:    addi sp, sp, 16408; RV64I-LARGE-NEXT:    ret409;410; RV64I-LARGE-ZICFILP-LABEL: test_call_indirect_no_t0:411; RV64I-LARGE-ZICFILP:       # %bb.0:412; RV64I-LARGE-ZICFILP-NEXT:    lpad 0413; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -16414; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill415; RV64I-LARGE-ZICFILP-NEXT:    mv t1, a0416; RV64I-LARGE-ZICFILP-NEXT:    mv a0, a1417; RV64I-LARGE-ZICFILP-NEXT:    mv a1, a2418; RV64I-LARGE-ZICFILP-NEXT:    mv a2, a3419; RV64I-LARGE-ZICFILP-NEXT:    mv a3, a4420; RV64I-LARGE-ZICFILP-NEXT:    mv a4, a5421; RV64I-LARGE-ZICFILP-NEXT:    mv a5, a6422; RV64I-LARGE-ZICFILP-NEXT:    mv a6, a7423; RV64I-LARGE-ZICFILP-NEXT:    jalr t1424; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload425; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 16426; RV64I-LARGE-ZICFILP-NEXT:    ret427  %1 = call i32 %a(i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h)428  ret i32 %1429}430 431; Ensure that calls to fastcc functions aren't rejected. Such calls may be432; introduced when compiling with optimisation.433 434define fastcc i32 @fastcc_function(i32 %a, i32 %b) nounwind {435; CHECK-LABEL: fastcc_function:436; CHECK:       # %bb.0:437; CHECK-NEXT:    add a0, a0, a1438; CHECK-NEXT:    ret439;440; RV64I-LABEL: fastcc_function:441; RV64I:       # %bb.0:442; RV64I-NEXT:    addw a0, a0, a1443; RV64I-NEXT:    ret444;445; RV64I-SMALL-LABEL: fastcc_function:446; RV64I-SMALL:       # %bb.0:447; RV64I-SMALL-NEXT:    addw a0, a0, a1448; RV64I-SMALL-NEXT:    ret449;450; RV64I-MEDIUM-LABEL: fastcc_function:451; RV64I-MEDIUM:       # %bb.0:452; RV64I-MEDIUM-NEXT:    addw a0, a0, a1453; RV64I-MEDIUM-NEXT:    ret454;455; RV64I-LARGE-LABEL: fastcc_function:456; RV64I-LARGE:       # %bb.0:457; RV64I-LARGE-NEXT:    addw a0, a0, a1458; RV64I-LARGE-NEXT:    ret459;460; RV64I-LARGE-ZICFILP-LABEL: fastcc_function:461; RV64I-LARGE-ZICFILP:       # %bb.0:462; RV64I-LARGE-ZICFILP-NEXT:    lpad 0463; RV64I-LARGE-ZICFILP-NEXT:    addw a0, a0, a1464; RV64I-LARGE-ZICFILP-NEXT:    ret465 %1 = add i32 %a, %b466 ret i32 %1467}468 469define i32 @test_call_fastcc(i32 %a, i32 %b) nounwind {470; CHECK-LABEL: test_call_fastcc:471; CHECK:       # %bb.0:472; CHECK-NEXT:    addi sp, sp, -16473; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill474; CHECK-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill475; CHECK-NEXT:    mv s0, a0476; CHECK-NEXT:    call fastcc_function477; CHECK-NEXT:    mv a0, s0478; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload479; CHECK-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload480; CHECK-NEXT:    addi sp, sp, 16481; CHECK-NEXT:    ret482;483; RV64I-LABEL: test_call_fastcc:484; RV64I:       # %bb.0:485; RV64I-NEXT:    addi sp, sp, -16486; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill487; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill488; RV64I-NEXT:    mv s0, a0489; RV64I-NEXT:    call fastcc_function490; RV64I-NEXT:    mv a0, s0491; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload492; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload493; RV64I-NEXT:    addi sp, sp, 16494; RV64I-NEXT:    ret495;496; RV64I-SMALL-LABEL: test_call_fastcc:497; RV64I-SMALL:       # %bb.0:498; RV64I-SMALL-NEXT:    addi sp, sp, -16499; RV64I-SMALL-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill500; RV64I-SMALL-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill501; RV64I-SMALL-NEXT:    mv s0, a0502; RV64I-SMALL-NEXT:    call fastcc_function503; RV64I-SMALL-NEXT:    mv a0, s0504; RV64I-SMALL-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload505; RV64I-SMALL-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload506; RV64I-SMALL-NEXT:    addi sp, sp, 16507; RV64I-SMALL-NEXT:    ret508;509; RV64I-MEDIUM-LABEL: test_call_fastcc:510; RV64I-MEDIUM:       # %bb.0:511; RV64I-MEDIUM-NEXT:    addi sp, sp, -16512; RV64I-MEDIUM-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill513; RV64I-MEDIUM-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill514; RV64I-MEDIUM-NEXT:    mv s0, a0515; RV64I-MEDIUM-NEXT:    call fastcc_function516; RV64I-MEDIUM-NEXT:    mv a0, s0517; RV64I-MEDIUM-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload518; RV64I-MEDIUM-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload519; RV64I-MEDIUM-NEXT:    addi sp, sp, 16520; RV64I-MEDIUM-NEXT:    ret521;522; RV64I-LARGE-LABEL: test_call_fastcc:523; RV64I-LARGE:       # %bb.0:524; RV64I-LARGE-NEXT:    addi sp, sp, -16525; RV64I-LARGE-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill526; RV64I-LARGE-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill527; RV64I-LARGE-NEXT:    mv s0, a0528; RV64I-LARGE-NEXT:  .Lpcrel_hi3:529; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI7_0)530; RV64I-LARGE-NEXT:    ld a2, %pcrel_lo(.Lpcrel_hi3)(a0)531; RV64I-LARGE-NEXT:    mv a0, s0532; RV64I-LARGE-NEXT:    jalr a2533; RV64I-LARGE-NEXT:    mv a0, s0534; RV64I-LARGE-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload535; RV64I-LARGE-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload536; RV64I-LARGE-NEXT:    addi sp, sp, 16537; RV64I-LARGE-NEXT:    ret538;539; RV64I-LARGE-ZICFILP-LABEL: test_call_fastcc:540; RV64I-LARGE-ZICFILP:       # %bb.0:541; RV64I-LARGE-ZICFILP-NEXT:    lpad 0542; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -16543; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill544; RV64I-LARGE-ZICFILP-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill545; RV64I-LARGE-ZICFILP-NEXT:    mv s0, a0546; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi3:547; RV64I-LARGE-ZICFILP-NEXT:    auipc a0, %pcrel_hi(.LCPI7_0)548; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi3)(a0)549; RV64I-LARGE-ZICFILP-NEXT:    mv a0, s0550; RV64I-LARGE-ZICFILP-NEXT:    jalr t2551; RV64I-LARGE-ZICFILP-NEXT:    mv a0, s0552; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload553; RV64I-LARGE-ZICFILP-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload554; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 16555; RV64I-LARGE-ZICFILP-NEXT:    ret556  %1 = call fastcc i32 @fastcc_function(i32 %a, i32 %b)557  ret i32 %a558}559 560declare i32 @external_many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind561 562define i32 @test_call_external_many_args(i32 %a) nounwind {563; CHECK-LABEL: test_call_external_many_args:564; CHECK:       # %bb.0:565; CHECK-NEXT:    addi sp, sp, -16566; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill567; CHECK-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill568; CHECK-NEXT:    mv s0, a0569; CHECK-NEXT:    sw a0, 0(sp)570; CHECK-NEXT:    sw a0, 4(sp)571; CHECK-NEXT:    mv a1, a0572; CHECK-NEXT:    mv a2, a0573; CHECK-NEXT:    mv a3, a0574; CHECK-NEXT:    mv a4, a0575; CHECK-NEXT:    mv a5, a0576; CHECK-NEXT:    mv a6, a0577; CHECK-NEXT:    mv a7, a0578; CHECK-NEXT:    call external_many_args579; CHECK-NEXT:    mv a0, s0580; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload581; CHECK-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload582; CHECK-NEXT:    addi sp, sp, 16583; CHECK-NEXT:    ret584;585; RV64I-LABEL: test_call_external_many_args:586; RV64I:       # %bb.0:587; RV64I-NEXT:    addi sp, sp, -32588; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill589; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill590; RV64I-NEXT:    mv s0, a0591; RV64I-NEXT:    sd a0, 0(sp)592; RV64I-NEXT:    sd a0, 8(sp)593; RV64I-NEXT:    mv a1, a0594; RV64I-NEXT:    mv a2, a0595; RV64I-NEXT:    mv a3, a0596; RV64I-NEXT:    mv a4, a0597; RV64I-NEXT:    mv a5, a0598; RV64I-NEXT:    mv a6, a0599; RV64I-NEXT:    mv a7, a0600; RV64I-NEXT:    call external_many_args601; RV64I-NEXT:    mv a0, s0602; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload603; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload604; RV64I-NEXT:    addi sp, sp, 32605; RV64I-NEXT:    ret606;607; RV64I-SMALL-LABEL: test_call_external_many_args:608; RV64I-SMALL:       # %bb.0:609; RV64I-SMALL-NEXT:    addi sp, sp, -32610; RV64I-SMALL-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill611; RV64I-SMALL-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill612; RV64I-SMALL-NEXT:    mv s0, a0613; RV64I-SMALL-NEXT:    sd a0, 0(sp)614; RV64I-SMALL-NEXT:    sd a0, 8(sp)615; RV64I-SMALL-NEXT:    mv a1, a0616; RV64I-SMALL-NEXT:    mv a2, a0617; RV64I-SMALL-NEXT:    mv a3, a0618; RV64I-SMALL-NEXT:    mv a4, a0619; RV64I-SMALL-NEXT:    mv a5, a0620; RV64I-SMALL-NEXT:    mv a6, a0621; RV64I-SMALL-NEXT:    mv a7, a0622; RV64I-SMALL-NEXT:    call external_many_args623; RV64I-SMALL-NEXT:    mv a0, s0624; RV64I-SMALL-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload625; RV64I-SMALL-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload626; RV64I-SMALL-NEXT:    addi sp, sp, 32627; RV64I-SMALL-NEXT:    ret628;629; RV64I-MEDIUM-LABEL: test_call_external_many_args:630; RV64I-MEDIUM:       # %bb.0:631; RV64I-MEDIUM-NEXT:    addi sp, sp, -32632; RV64I-MEDIUM-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill633; RV64I-MEDIUM-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill634; RV64I-MEDIUM-NEXT:    mv s0, a0635; RV64I-MEDIUM-NEXT:    sd a0, 0(sp)636; RV64I-MEDIUM-NEXT:    sd a0, 8(sp)637; RV64I-MEDIUM-NEXT:    mv a1, a0638; RV64I-MEDIUM-NEXT:    mv a2, a0639; RV64I-MEDIUM-NEXT:    mv a3, a0640; RV64I-MEDIUM-NEXT:    mv a4, a0641; RV64I-MEDIUM-NEXT:    mv a5, a0642; RV64I-MEDIUM-NEXT:    mv a6, a0643; RV64I-MEDIUM-NEXT:    mv a7, a0644; RV64I-MEDIUM-NEXT:    call external_many_args645; RV64I-MEDIUM-NEXT:    mv a0, s0646; RV64I-MEDIUM-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload647; RV64I-MEDIUM-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload648; RV64I-MEDIUM-NEXT:    addi sp, sp, 32649; RV64I-MEDIUM-NEXT:    ret650;651; RV64I-LARGE-LABEL: test_call_external_many_args:652; RV64I-LARGE:       # %bb.0:653; RV64I-LARGE-NEXT:    addi sp, sp, -32654; RV64I-LARGE-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill655; RV64I-LARGE-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill656; RV64I-LARGE-NEXT:    mv s0, a0657; RV64I-LARGE-NEXT:  .Lpcrel_hi4:658; RV64I-LARGE-NEXT:    auipc a0, %pcrel_hi(.LCPI8_0)659; RV64I-LARGE-NEXT:    ld t1, %pcrel_lo(.Lpcrel_hi4)(a0)660; RV64I-LARGE-NEXT:    sd s0, 0(sp)661; RV64I-LARGE-NEXT:    sd s0, 8(sp)662; RV64I-LARGE-NEXT:    mv a0, s0663; RV64I-LARGE-NEXT:    mv a1, s0664; RV64I-LARGE-NEXT:    mv a2, s0665; RV64I-LARGE-NEXT:    mv a3, s0666; RV64I-LARGE-NEXT:    mv a4, s0667; RV64I-LARGE-NEXT:    mv a5, s0668; RV64I-LARGE-NEXT:    mv a6, s0669; RV64I-LARGE-NEXT:    mv a7, s0670; RV64I-LARGE-NEXT:    jalr t1671; RV64I-LARGE-NEXT:    mv a0, s0672; RV64I-LARGE-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload673; RV64I-LARGE-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload674; RV64I-LARGE-NEXT:    addi sp, sp, 32675; RV64I-LARGE-NEXT:    ret676;677; RV64I-LARGE-ZICFILP-LABEL: test_call_external_many_args:678; RV64I-LARGE-ZICFILP:       # %bb.0:679; RV64I-LARGE-ZICFILP-NEXT:    lpad 0680; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -32681; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill682; RV64I-LARGE-ZICFILP-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill683; RV64I-LARGE-ZICFILP-NEXT:    mv s0, a0684; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi4:685; RV64I-LARGE-ZICFILP-NEXT:    auipc a0, %pcrel_hi(.LCPI8_0)686; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi4)(a0)687; RV64I-LARGE-ZICFILP-NEXT:    sd s0, 0(sp)688; RV64I-LARGE-ZICFILP-NEXT:    sd s0, 8(sp)689; RV64I-LARGE-ZICFILP-NEXT:    mv a0, s0690; RV64I-LARGE-ZICFILP-NEXT:    mv a1, s0691; RV64I-LARGE-ZICFILP-NEXT:    mv a2, s0692; RV64I-LARGE-ZICFILP-NEXT:    mv a3, s0693; RV64I-LARGE-ZICFILP-NEXT:    mv a4, s0694; RV64I-LARGE-ZICFILP-NEXT:    mv a5, s0695; RV64I-LARGE-ZICFILP-NEXT:    mv a6, s0696; RV64I-LARGE-ZICFILP-NEXT:    mv a7, s0697; RV64I-LARGE-ZICFILP-NEXT:    jalr t2698; RV64I-LARGE-ZICFILP-NEXT:    mv a0, s0699; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload700; RV64I-LARGE-ZICFILP-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload701; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 32702; RV64I-LARGE-ZICFILP-NEXT:    ret703  %1 = call i32 @external_many_args(i32 %a, i32 %a, i32 %a, i32 %a, i32 %a,704                                    i32 %a, i32 %a, i32 %a, i32 %a, i32 %a)705  ret i32 %a706}707 708define i32 @defined_many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 %j) nounwind {709; CHECK-LABEL: defined_many_args:710; CHECK:       # %bb.0:711; CHECK-NEXT:    lw a0, 4(sp)712; CHECK-NEXT:    addi a0, a0, 1713; CHECK-NEXT:    ret714;715; RV64I-LABEL: defined_many_args:716; RV64I:       # %bb.0:717; RV64I-NEXT:    lw a0, 8(sp)718; RV64I-NEXT:    addiw a0, a0, 1719; RV64I-NEXT:    ret720;721; RV64I-SMALL-LABEL: defined_many_args:722; RV64I-SMALL:       # %bb.0:723; RV64I-SMALL-NEXT:    lw a0, 8(sp)724; RV64I-SMALL-NEXT:    addiw a0, a0, 1725; RV64I-SMALL-NEXT:    ret726;727; RV64I-MEDIUM-LABEL: defined_many_args:728; RV64I-MEDIUM:       # %bb.0:729; RV64I-MEDIUM-NEXT:    lw a0, 8(sp)730; RV64I-MEDIUM-NEXT:    addiw a0, a0, 1731; RV64I-MEDIUM-NEXT:    ret732;733; RV64I-LARGE-LABEL: defined_many_args:734; RV64I-LARGE:       # %bb.0:735; RV64I-LARGE-NEXT:    lw a0, 8(sp)736; RV64I-LARGE-NEXT:    addiw a0, a0, 1737; RV64I-LARGE-NEXT:    ret738;739; RV64I-LARGE-ZICFILP-LABEL: defined_many_args:740; RV64I-LARGE-ZICFILP:       # %bb.0:741; RV64I-LARGE-ZICFILP-NEXT:    lpad 0742; RV64I-LARGE-ZICFILP-NEXT:    lw a0, 8(sp)743; RV64I-LARGE-ZICFILP-NEXT:    addiw a0, a0, 1744; RV64I-LARGE-ZICFILP-NEXT:    ret745  %added = add i32 %j, 1746  ret i32 %added747}748 749define i32 @test_call_defined_many_args(i32 %a) nounwind {750; CHECK-LABEL: test_call_defined_many_args:751; CHECK:       # %bb.0:752; CHECK-NEXT:    addi sp, sp, -16753; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill754; CHECK-NEXT:    sw a0, 0(sp)755; CHECK-NEXT:    sw a0, 4(sp)756; CHECK-NEXT:    mv a1, a0757; CHECK-NEXT:    mv a2, a0758; CHECK-NEXT:    mv a3, a0759; CHECK-NEXT:    mv a4, a0760; CHECK-NEXT:    mv a5, a0761; CHECK-NEXT:    mv a6, a0762; CHECK-NEXT:    mv a7, a0763; CHECK-NEXT:    call defined_many_args764; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload765; CHECK-NEXT:    addi sp, sp, 16766; CHECK-NEXT:    ret767;768; RV64I-LABEL: test_call_defined_many_args:769; RV64I:       # %bb.0:770; RV64I-NEXT:    addi sp, sp, -32771; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill772; RV64I-NEXT:    sd a0, 0(sp)773; RV64I-NEXT:    sd a0, 8(sp)774; RV64I-NEXT:    mv a1, a0775; RV64I-NEXT:    mv a2, a0776; RV64I-NEXT:    mv a3, a0777; RV64I-NEXT:    mv a4, a0778; RV64I-NEXT:    mv a5, a0779; RV64I-NEXT:    mv a6, a0780; RV64I-NEXT:    mv a7, a0781; RV64I-NEXT:    call defined_many_args782; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload783; RV64I-NEXT:    addi sp, sp, 32784; RV64I-NEXT:    ret785;786; RV64I-SMALL-LABEL: test_call_defined_many_args:787; RV64I-SMALL:       # %bb.0:788; RV64I-SMALL-NEXT:    addi sp, sp, -32789; RV64I-SMALL-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill790; RV64I-SMALL-NEXT:    sd a0, 0(sp)791; RV64I-SMALL-NEXT:    sd a0, 8(sp)792; RV64I-SMALL-NEXT:    mv a1, a0793; RV64I-SMALL-NEXT:    mv a2, a0794; RV64I-SMALL-NEXT:    mv a3, a0795; RV64I-SMALL-NEXT:    mv a4, a0796; RV64I-SMALL-NEXT:    mv a5, a0797; RV64I-SMALL-NEXT:    mv a6, a0798; RV64I-SMALL-NEXT:    mv a7, a0799; RV64I-SMALL-NEXT:    call defined_many_args800; RV64I-SMALL-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload801; RV64I-SMALL-NEXT:    addi sp, sp, 32802; RV64I-SMALL-NEXT:    ret803;804; RV64I-MEDIUM-LABEL: test_call_defined_many_args:805; RV64I-MEDIUM:       # %bb.0:806; RV64I-MEDIUM-NEXT:    addi sp, sp, -32807; RV64I-MEDIUM-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill808; RV64I-MEDIUM-NEXT:    sd a0, 0(sp)809; RV64I-MEDIUM-NEXT:    sd a0, 8(sp)810; RV64I-MEDIUM-NEXT:    mv a1, a0811; RV64I-MEDIUM-NEXT:    mv a2, a0812; RV64I-MEDIUM-NEXT:    mv a3, a0813; RV64I-MEDIUM-NEXT:    mv a4, a0814; RV64I-MEDIUM-NEXT:    mv a5, a0815; RV64I-MEDIUM-NEXT:    mv a6, a0816; RV64I-MEDIUM-NEXT:    mv a7, a0817; RV64I-MEDIUM-NEXT:    call defined_many_args818; RV64I-MEDIUM-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload819; RV64I-MEDIUM-NEXT:    addi sp, sp, 32820; RV64I-MEDIUM-NEXT:    ret821;822; RV64I-LARGE-LABEL: test_call_defined_many_args:823; RV64I-LARGE:       # %bb.0:824; RV64I-LARGE-NEXT:    addi sp, sp, -32825; RV64I-LARGE-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill826; RV64I-LARGE-NEXT:  .Lpcrel_hi5:827; RV64I-LARGE-NEXT:    auipc a1, %pcrel_hi(.LCPI10_0)828; RV64I-LARGE-NEXT:    ld t1, %pcrel_lo(.Lpcrel_hi5)(a1)829; RV64I-LARGE-NEXT:    sd a0, 0(sp)830; RV64I-LARGE-NEXT:    sd a0, 8(sp)831; RV64I-LARGE-NEXT:    mv a1, a0832; RV64I-LARGE-NEXT:    mv a2, a0833; RV64I-LARGE-NEXT:    mv a3, a0834; RV64I-LARGE-NEXT:    mv a4, a0835; RV64I-LARGE-NEXT:    mv a5, a0836; RV64I-LARGE-NEXT:    mv a6, a0837; RV64I-LARGE-NEXT:    mv a7, a0838; RV64I-LARGE-NEXT:    jalr t1839; RV64I-LARGE-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload840; RV64I-LARGE-NEXT:    addi sp, sp, 32841; RV64I-LARGE-NEXT:    ret842;843; RV64I-LARGE-ZICFILP-LABEL: test_call_defined_many_args:844; RV64I-LARGE-ZICFILP:       # %bb.0:845; RV64I-LARGE-ZICFILP-NEXT:    lpad 0846; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -32847; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill848; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi5:849; RV64I-LARGE-ZICFILP-NEXT:    auipc a1, %pcrel_hi(.LCPI10_0)850; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi5)(a1)851; RV64I-LARGE-ZICFILP-NEXT:    sd a0, 0(sp)852; RV64I-LARGE-ZICFILP-NEXT:    sd a0, 8(sp)853; RV64I-LARGE-ZICFILP-NEXT:    mv a1, a0854; RV64I-LARGE-ZICFILP-NEXT:    mv a2, a0855; RV64I-LARGE-ZICFILP-NEXT:    mv a3, a0856; RV64I-LARGE-ZICFILP-NEXT:    mv a4, a0857; RV64I-LARGE-ZICFILP-NEXT:    mv a5, a0858; RV64I-LARGE-ZICFILP-NEXT:    mv a6, a0859; RV64I-LARGE-ZICFILP-NEXT:    mv a7, a0860; RV64I-LARGE-ZICFILP-NEXT:    jalr t2861; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload862; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 32863; RV64I-LARGE-ZICFILP-NEXT:    ret864  %1 = call i32 @defined_many_args(i32 %a, i32 %a, i32 %a, i32 %a, i32 %a,865                                   i32 %a, i32 %a, i32 %a, i32 %a, i32 %a)866  ret i32 %1867}868 869define fastcc void @fastcc_call_nonfastcc(){870; CHECK-LABEL: fastcc_call_nonfastcc:871; CHECK:       # %bb.0:872; CHECK-NEXT:    addi sp, sp, -16873; CHECK-NEXT:    .cfi_def_cfa_offset 16874; CHECK-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill875; CHECK-NEXT:    .cfi_offset ra, -4876; CHECK-NEXT:    li t0, 10877; CHECK-NEXT:    li t1, 9878; CHECK-NEXT:    li a0, 1879; CHECK-NEXT:    li a1, 2880; CHECK-NEXT:    li a2, 3881; CHECK-NEXT:    li a3, 4882; CHECK-NEXT:    li a4, 5883; CHECK-NEXT:    li a5, 6884; CHECK-NEXT:    li a6, 7885; CHECK-NEXT:    li a7, 8886; CHECK-NEXT:    sw t1, 0(sp)887; CHECK-NEXT:    sw t0, 4(sp)888; CHECK-NEXT:    call external_many_args889; CHECK-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload890; CHECK-NEXT:    .cfi_restore ra891; CHECK-NEXT:    addi sp, sp, 16892; CHECK-NEXT:    .cfi_def_cfa_offset 0893; CHECK-NEXT:    ret894;895; RV64I-LABEL: fastcc_call_nonfastcc:896; RV64I:       # %bb.0:897; RV64I-NEXT:    addi sp, sp, -32898; RV64I-NEXT:    .cfi_def_cfa_offset 32899; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill900; RV64I-NEXT:    .cfi_offset ra, -8901; RV64I-NEXT:    li t0, 10902; RV64I-NEXT:    li t1, 9903; RV64I-NEXT:    li a0, 1904; RV64I-NEXT:    li a1, 2905; RV64I-NEXT:    li a2, 3906; RV64I-NEXT:    li a3, 4907; RV64I-NEXT:    li a4, 5908; RV64I-NEXT:    li a5, 6909; RV64I-NEXT:    li a6, 7910; RV64I-NEXT:    li a7, 8911; RV64I-NEXT:    sd t1, 0(sp)912; RV64I-NEXT:    sd t0, 8(sp)913; RV64I-NEXT:    call external_many_args914; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload915; RV64I-NEXT:    .cfi_restore ra916; RV64I-NEXT:    addi sp, sp, 32917; RV64I-NEXT:    .cfi_def_cfa_offset 0918; RV64I-NEXT:    ret919;920; RV64I-SMALL-LABEL: fastcc_call_nonfastcc:921; RV64I-SMALL:       # %bb.0:922; RV64I-SMALL-NEXT:    addi sp, sp, -32923; RV64I-SMALL-NEXT:    .cfi_def_cfa_offset 32924; RV64I-SMALL-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill925; RV64I-SMALL-NEXT:    .cfi_offset ra, -8926; RV64I-SMALL-NEXT:    li t0, 10927; RV64I-SMALL-NEXT:    li t1, 9928; RV64I-SMALL-NEXT:    li a0, 1929; RV64I-SMALL-NEXT:    li a1, 2930; RV64I-SMALL-NEXT:    li a2, 3931; RV64I-SMALL-NEXT:    li a3, 4932; RV64I-SMALL-NEXT:    li a4, 5933; RV64I-SMALL-NEXT:    li a5, 6934; RV64I-SMALL-NEXT:    li a6, 7935; RV64I-SMALL-NEXT:    li a7, 8936; RV64I-SMALL-NEXT:    sd t1, 0(sp)937; RV64I-SMALL-NEXT:    sd t0, 8(sp)938; RV64I-SMALL-NEXT:    call external_many_args939; RV64I-SMALL-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload940; RV64I-SMALL-NEXT:    .cfi_restore ra941; RV64I-SMALL-NEXT:    addi sp, sp, 32942; RV64I-SMALL-NEXT:    .cfi_def_cfa_offset 0943; RV64I-SMALL-NEXT:    ret944;945; RV64I-MEDIUM-LABEL: fastcc_call_nonfastcc:946; RV64I-MEDIUM:       # %bb.0:947; RV64I-MEDIUM-NEXT:    addi sp, sp, -32948; RV64I-MEDIUM-NEXT:    .cfi_def_cfa_offset 32949; RV64I-MEDIUM-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill950; RV64I-MEDIUM-NEXT:    .cfi_offset ra, -8951; RV64I-MEDIUM-NEXT:    li t0, 10952; RV64I-MEDIUM-NEXT:    li t1, 9953; RV64I-MEDIUM-NEXT:    li a0, 1954; RV64I-MEDIUM-NEXT:    li a1, 2955; RV64I-MEDIUM-NEXT:    li a2, 3956; RV64I-MEDIUM-NEXT:    li a3, 4957; RV64I-MEDIUM-NEXT:    li a4, 5958; RV64I-MEDIUM-NEXT:    li a5, 6959; RV64I-MEDIUM-NEXT:    li a6, 7960; RV64I-MEDIUM-NEXT:    li a7, 8961; RV64I-MEDIUM-NEXT:    sd t1, 0(sp)962; RV64I-MEDIUM-NEXT:    sd t0, 8(sp)963; RV64I-MEDIUM-NEXT:    call external_many_args964; RV64I-MEDIUM-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload965; RV64I-MEDIUM-NEXT:    .cfi_restore ra966; RV64I-MEDIUM-NEXT:    addi sp, sp, 32967; RV64I-MEDIUM-NEXT:    .cfi_def_cfa_offset 0968; RV64I-MEDIUM-NEXT:    ret969;970; RV64I-LARGE-LABEL: fastcc_call_nonfastcc:971; RV64I-LARGE:       # %bb.0:972; RV64I-LARGE-NEXT:    addi sp, sp, -32973; RV64I-LARGE-NEXT:    .cfi_def_cfa_offset 32974; RV64I-LARGE-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill975; RV64I-LARGE-NEXT:    .cfi_offset ra, -8976; RV64I-LARGE-NEXT:    li t0, 10977; RV64I-LARGE-NEXT:    li t1, 9978; RV64I-LARGE-NEXT:  .Lpcrel_hi6:979; RV64I-LARGE-NEXT:    auipc a5, %pcrel_hi(.LCPI11_0)980; RV64I-LARGE-NEXT:    li a0, 1981; RV64I-LARGE-NEXT:    li a1, 2982; RV64I-LARGE-NEXT:    li a2, 3983; RV64I-LARGE-NEXT:    li a3, 4984; RV64I-LARGE-NEXT:    li a4, 5985; RV64I-LARGE-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi6)(a5)986; RV64I-LARGE-NEXT:    li a5, 6987; RV64I-LARGE-NEXT:    li a6, 7988; RV64I-LARGE-NEXT:    li a7, 8989; RV64I-LARGE-NEXT:    sd t1, 0(sp)990; RV64I-LARGE-NEXT:    sd t0, 8(sp)991; RV64I-LARGE-NEXT:    jalr t2992; RV64I-LARGE-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload993; RV64I-LARGE-NEXT:    .cfi_restore ra994; RV64I-LARGE-NEXT:    addi sp, sp, 32995; RV64I-LARGE-NEXT:    .cfi_def_cfa_offset 0996; RV64I-LARGE-NEXT:    ret997;998; RV64I-LARGE-ZICFILP-LABEL: fastcc_call_nonfastcc:999; RV64I-LARGE-ZICFILP:       # %bb.0:1000; RV64I-LARGE-ZICFILP-NEXT:    lpad 01001; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, -321002; RV64I-LARGE-ZICFILP-NEXT:    .cfi_def_cfa_offset 321003; RV64I-LARGE-ZICFILP-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1004; RV64I-LARGE-ZICFILP-NEXT:    .cfi_offset ra, -81005; RV64I-LARGE-ZICFILP-NEXT:    li t0, 101006; RV64I-LARGE-ZICFILP-NEXT:    li t1, 91007; RV64I-LARGE-ZICFILP-NEXT:  .Lpcrel_hi6:1008; RV64I-LARGE-ZICFILP-NEXT:    auipc a5, %pcrel_hi(.LCPI11_0)1009; RV64I-LARGE-ZICFILP-NEXT:    li a0, 11010; RV64I-LARGE-ZICFILP-NEXT:    li a1, 21011; RV64I-LARGE-ZICFILP-NEXT:    li a2, 31012; RV64I-LARGE-ZICFILP-NEXT:    li a3, 41013; RV64I-LARGE-ZICFILP-NEXT:    li a4, 51014; RV64I-LARGE-ZICFILP-NEXT:    ld t2, %pcrel_lo(.Lpcrel_hi6)(a5)1015; RV64I-LARGE-ZICFILP-NEXT:    li a5, 61016; RV64I-LARGE-ZICFILP-NEXT:    li a6, 71017; RV64I-LARGE-ZICFILP-NEXT:    li a7, 81018; RV64I-LARGE-ZICFILP-NEXT:    sd t1, 0(sp)1019; RV64I-LARGE-ZICFILP-NEXT:    sd t0, 8(sp)1020; RV64I-LARGE-ZICFILP-NEXT:    jalr t21021; RV64I-LARGE-ZICFILP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1022; RV64I-LARGE-ZICFILP-NEXT:    .cfi_restore ra1023; RV64I-LARGE-ZICFILP-NEXT:    addi sp, sp, 321024; RV64I-LARGE-ZICFILP-NEXT:    .cfi_def_cfa_offset 01025; RV64I-LARGE-ZICFILP-NEXT:    ret1026  call void @external_many_args(i32 1, i32 2,i32 3,i32 4,i32 5,i32 6,i32 7,i32 8,i32 9,i32 10)1027  ret void1028}1029 1030;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1031; RV32I: {{.*}}1032; RV32I-PIC: {{.*}}1033