brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.8 KiB · 5d4ecbf Raw
983 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 %s --check-prefix=RV324; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \5; RUN:   | FileCheck %s --check-prefix=RV646; RUN: llc -mtriple=riscv32 -mattr=+experimental-zicfiss < %s \7; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=RV32-ZICFISS8; RUN: llc -mtriple=riscv64 -mattr=+experimental-zicfiss < %s \9; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=RV64-ZICFISS10 11define void @f1() shadowcallstack {12; RV32-LABEL: f1:13; RV32:       # %bb.0:14; RV32-NEXT:    ret15;16; RV64-LABEL: f1:17; RV64:       # %bb.0:18; RV64-NEXT:    ret19;20; RV32-ZICFISS-LABEL: f1:21; RV32-ZICFISS:       # %bb.0:22; RV32-ZICFISS-NEXT:    ret23;24; RV64-ZICFISS-LABEL: f1:25; RV64-ZICFISS:       # %bb.0:26; RV64-ZICFISS-NEXT:    ret27  ret void28}29 30declare void @foo()31 32define void @f2() shadowcallstack {33; RV32-LABEL: f2:34; RV32:       # %bb.0:35; RV32-NEXT:    tail foo36;37; RV64-LABEL: f2:38; RV64:       # %bb.0:39; RV64-NEXT:    tail foo40;41; RV32-ZICFISS-LABEL: f2:42; RV32-ZICFISS:       # %bb.0:43; RV32-ZICFISS-NEXT:    tail foo44;45; RV64-ZICFISS-LABEL: f2:46; RV64-ZICFISS:       # %bb.0:47; RV64-ZICFISS-NEXT:    tail foo48  tail call void @foo()49  ret void50}51 52declare i32 @bar()53 54define i32 @f3() shadowcallstack {55; RV32-LABEL: f3:56; RV32:       # %bb.0:57; RV32-NEXT:    addi gp, gp, 458; RV32-NEXT:    sw ra, -4(gp)59; RV32-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #60; RV32-NEXT:    addi sp, sp, -1661; RV32-NEXT:    .cfi_def_cfa_offset 1662; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill63; RV32-NEXT:    .cfi_offset ra, -464; RV32-NEXT:    call bar65; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload66; RV32-NEXT:    .cfi_restore ra67; RV32-NEXT:    addi sp, sp, 1668; RV32-NEXT:    .cfi_def_cfa_offset 069; RV32-NEXT:    lw ra, -4(gp)70; RV32-NEXT:    addi gp, gp, -471; RV32-NEXT:    .cfi_restore gp72; RV32-NEXT:    ret73;74; RV64-LABEL: f3:75; RV64:       # %bb.0:76; RV64-NEXT:    addi gp, gp, 877; RV64-NEXT:    sd ra, -8(gp)78; RV64-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #79; RV64-NEXT:    addi sp, sp, -1680; RV64-NEXT:    .cfi_def_cfa_offset 1681; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill82; RV64-NEXT:    .cfi_offset ra, -883; RV64-NEXT:    call bar84; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload85; RV64-NEXT:    .cfi_restore ra86; RV64-NEXT:    addi sp, sp, 1687; RV64-NEXT:    .cfi_def_cfa_offset 088; RV64-NEXT:    ld ra, -8(gp)89; RV64-NEXT:    addi gp, gp, -890; RV64-NEXT:    .cfi_restore gp91; RV64-NEXT:    ret92;93; RV32-ZICFISS-LABEL: f3:94; RV32-ZICFISS:       # %bb.0:95; RV32-ZICFISS-NEXT:    addi gp, gp, 496; RV32-ZICFISS-NEXT:    sw ra, -4(gp)97; RV32-ZICFISS-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #98; RV32-ZICFISS-NEXT:    addi sp, sp, -1699; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16100; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill101; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4102; RV32-ZICFISS-NEXT:    call bar103; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload104; RV32-ZICFISS-NEXT:    .cfi_restore ra105; RV32-ZICFISS-NEXT:    addi sp, sp, 16106; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0107; RV32-ZICFISS-NEXT:    lw ra, -4(gp)108; RV32-ZICFISS-NEXT:    addi gp, gp, -4109; RV32-ZICFISS-NEXT:    .cfi_restore gp110; RV32-ZICFISS-NEXT:    ret111;112; RV64-ZICFISS-LABEL: f3:113; RV64-ZICFISS:       # %bb.0:114; RV64-ZICFISS-NEXT:    addi gp, gp, 8115; RV64-ZICFISS-NEXT:    sd ra, -8(gp)116; RV64-ZICFISS-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #117; RV64-ZICFISS-NEXT:    addi sp, sp, -16118; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 16119; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill120; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8121; RV64-ZICFISS-NEXT:    call bar122; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload123; RV64-ZICFISS-NEXT:    .cfi_restore ra124; RV64-ZICFISS-NEXT:    addi sp, sp, 16125; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0126; RV64-ZICFISS-NEXT:    ld ra, -8(gp)127; RV64-ZICFISS-NEXT:    addi gp, gp, -8128; RV64-ZICFISS-NEXT:    .cfi_restore gp129; RV64-ZICFISS-NEXT:    ret130  %res = call i32 @bar()131  %res1 = add i32 %res, 1132  ret i32 %res133}134 135define i32 @f4() shadowcallstack {136; RV32-LABEL: f4:137; RV32:       # %bb.0:138; RV32-NEXT:    addi gp, gp, 4139; RV32-NEXT:    sw ra, -4(gp)140; RV32-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #141; RV32-NEXT:    addi sp, sp, -16142; RV32-NEXT:    .cfi_def_cfa_offset 16143; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill144; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill145; RV32-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill146; RV32-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill147; RV32-NEXT:    .cfi_offset ra, -4148; RV32-NEXT:    .cfi_offset s0, -8149; RV32-NEXT:    .cfi_offset s1, -12150; RV32-NEXT:    .cfi_offset s2, -16151; RV32-NEXT:    call bar152; RV32-NEXT:    mv s0, a0153; RV32-NEXT:    call bar154; RV32-NEXT:    mv s1, a0155; RV32-NEXT:    call bar156; RV32-NEXT:    mv s2, a0157; RV32-NEXT:    call bar158; RV32-NEXT:    add s0, s0, s1159; RV32-NEXT:    add a0, s2, a0160; RV32-NEXT:    add a0, s0, a0161; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload162; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload163; RV32-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload164; RV32-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload165; RV32-NEXT:    .cfi_restore ra166; RV32-NEXT:    .cfi_restore s0167; RV32-NEXT:    .cfi_restore s1168; RV32-NEXT:    .cfi_restore s2169; RV32-NEXT:    addi sp, sp, 16170; RV32-NEXT:    .cfi_def_cfa_offset 0171; RV32-NEXT:    lw ra, -4(gp)172; RV32-NEXT:    addi gp, gp, -4173; RV32-NEXT:    .cfi_restore gp174; RV32-NEXT:    ret175;176; RV64-LABEL: f4:177; RV64:       # %bb.0:178; RV64-NEXT:    addi gp, gp, 8179; RV64-NEXT:    sd ra, -8(gp)180; RV64-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #181; RV64-NEXT:    addi sp, sp, -32182; RV64-NEXT:    .cfi_def_cfa_offset 32183; RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill184; RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill185; RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill186; RV64-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill187; RV64-NEXT:    .cfi_offset ra, -8188; RV64-NEXT:    .cfi_offset s0, -16189; RV64-NEXT:    .cfi_offset s1, -24190; RV64-NEXT:    .cfi_offset s2, -32191; RV64-NEXT:    call bar192; RV64-NEXT:    mv s0, a0193; RV64-NEXT:    call bar194; RV64-NEXT:    mv s1, a0195; RV64-NEXT:    call bar196; RV64-NEXT:    mv s2, a0197; RV64-NEXT:    call bar198; RV64-NEXT:    add s0, s0, s1199; RV64-NEXT:    add a0, s2, a0200; RV64-NEXT:    addw a0, s0, a0201; RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload202; RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload203; RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload204; RV64-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload205; RV64-NEXT:    .cfi_restore ra206; RV64-NEXT:    .cfi_restore s0207; RV64-NEXT:    .cfi_restore s1208; RV64-NEXT:    .cfi_restore s2209; RV64-NEXT:    addi sp, sp, 32210; RV64-NEXT:    .cfi_def_cfa_offset 0211; RV64-NEXT:    ld ra, -8(gp)212; RV64-NEXT:    addi gp, gp, -8213; RV64-NEXT:    .cfi_restore gp214; RV64-NEXT:    ret215;216; RV32-ZICFISS-LABEL: f4:217; RV32-ZICFISS:       # %bb.0:218; RV32-ZICFISS-NEXT:    addi gp, gp, 4219; RV32-ZICFISS-NEXT:    sw ra, -4(gp)220; RV32-ZICFISS-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #221; RV32-ZICFISS-NEXT:    addi sp, sp, -16222; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16223; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill224; RV32-ZICFISS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill225; RV32-ZICFISS-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill226; RV32-ZICFISS-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill227; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4228; RV32-ZICFISS-NEXT:    .cfi_offset s0, -8229; RV32-ZICFISS-NEXT:    .cfi_offset s1, -12230; RV32-ZICFISS-NEXT:    .cfi_offset s2, -16231; RV32-ZICFISS-NEXT:    call bar232; RV32-ZICFISS-NEXT:    mv s0, a0233; RV32-ZICFISS-NEXT:    call bar234; RV32-ZICFISS-NEXT:    mv s1, a0235; RV32-ZICFISS-NEXT:    call bar236; RV32-ZICFISS-NEXT:    mv s2, a0237; RV32-ZICFISS-NEXT:    call bar238; RV32-ZICFISS-NEXT:    add s0, s0, s1239; RV32-ZICFISS-NEXT:    add a0, s2, a0240; RV32-ZICFISS-NEXT:    add a0, s0, a0241; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload242; RV32-ZICFISS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload243; RV32-ZICFISS-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload244; RV32-ZICFISS-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload245; RV32-ZICFISS-NEXT:    .cfi_restore ra246; RV32-ZICFISS-NEXT:    .cfi_restore s0247; RV32-ZICFISS-NEXT:    .cfi_restore s1248; RV32-ZICFISS-NEXT:    .cfi_restore s2249; RV32-ZICFISS-NEXT:    addi sp, sp, 16250; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0251; RV32-ZICFISS-NEXT:    lw ra, -4(gp)252; RV32-ZICFISS-NEXT:    addi gp, gp, -4253; RV32-ZICFISS-NEXT:    .cfi_restore gp254; RV32-ZICFISS-NEXT:    ret255;256; RV64-ZICFISS-LABEL: f4:257; RV64-ZICFISS:       # %bb.0:258; RV64-ZICFISS-NEXT:    addi gp, gp, 8259; RV64-ZICFISS-NEXT:    sd ra, -8(gp)260; RV64-ZICFISS-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #261; RV64-ZICFISS-NEXT:    addi sp, sp, -32262; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 32263; RV64-ZICFISS-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill264; RV64-ZICFISS-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill265; RV64-ZICFISS-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill266; RV64-ZICFISS-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill267; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8268; RV64-ZICFISS-NEXT:    .cfi_offset s0, -16269; RV64-ZICFISS-NEXT:    .cfi_offset s1, -24270; RV64-ZICFISS-NEXT:    .cfi_offset s2, -32271; RV64-ZICFISS-NEXT:    call bar272; RV64-ZICFISS-NEXT:    mv s0, a0273; RV64-ZICFISS-NEXT:    call bar274; RV64-ZICFISS-NEXT:    mv s1, a0275; RV64-ZICFISS-NEXT:    call bar276; RV64-ZICFISS-NEXT:    mv s2, a0277; RV64-ZICFISS-NEXT:    call bar278; RV64-ZICFISS-NEXT:    add s0, s0, s1279; RV64-ZICFISS-NEXT:    add a0, s2, a0280; RV64-ZICFISS-NEXT:    addw a0, s0, a0281; RV64-ZICFISS-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload282; RV64-ZICFISS-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload283; RV64-ZICFISS-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload284; RV64-ZICFISS-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload285; RV64-ZICFISS-NEXT:    .cfi_restore ra286; RV64-ZICFISS-NEXT:    .cfi_restore s0287; RV64-ZICFISS-NEXT:    .cfi_restore s1288; RV64-ZICFISS-NEXT:    .cfi_restore s2289; RV64-ZICFISS-NEXT:    addi sp, sp, 32290; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0291; RV64-ZICFISS-NEXT:    ld ra, -8(gp)292; RV64-ZICFISS-NEXT:    addi gp, gp, -8293; RV64-ZICFISS-NEXT:    .cfi_restore gp294; RV64-ZICFISS-NEXT:    ret295  %res1 = call i32 @bar()296  %res2 = call i32 @bar()297  %res3 = call i32 @bar()298  %res4 = call i32 @bar()299  %res12 = add i32 %res1, %res2300  %res34 = add i32 %res3, %res4301  %res1234 = add i32 %res12, %res34302  ret i32 %res1234303}304 305define i32 @f5() shadowcallstack nounwind {306; RV32-LABEL: f5:307; RV32:       # %bb.0:308; RV32-NEXT:    addi gp, gp, 4309; RV32-NEXT:    sw ra, -4(gp)310; RV32-NEXT:    addi sp, sp, -16311; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill312; RV32-NEXT:    call bar313; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload314; RV32-NEXT:    addi sp, sp, 16315; RV32-NEXT:    lw ra, -4(gp)316; RV32-NEXT:    addi gp, gp, -4317; RV32-NEXT:    ret318;319; RV64-LABEL: f5:320; RV64:       # %bb.0:321; RV64-NEXT:    addi gp, gp, 8322; RV64-NEXT:    sd ra, -8(gp)323; RV64-NEXT:    addi sp, sp, -16324; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill325; RV64-NEXT:    call bar326; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload327; RV64-NEXT:    addi sp, sp, 16328; RV64-NEXT:    ld ra, -8(gp)329; RV64-NEXT:    addi gp, gp, -8330; RV64-NEXT:    ret331;332; RV32-ZICFISS-LABEL: f5:333; RV32-ZICFISS:       # %bb.0:334; RV32-ZICFISS-NEXT:    addi gp, gp, 4335; RV32-ZICFISS-NEXT:    sw ra, -4(gp)336; RV32-ZICFISS-NEXT:    addi sp, sp, -16337; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill338; RV32-ZICFISS-NEXT:    call bar339; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload340; RV32-ZICFISS-NEXT:    addi sp, sp, 16341; RV32-ZICFISS-NEXT:    lw ra, -4(gp)342; RV32-ZICFISS-NEXT:    addi gp, gp, -4343; RV32-ZICFISS-NEXT:    ret344;345; RV64-ZICFISS-LABEL: f5:346; RV64-ZICFISS:       # %bb.0:347; RV64-ZICFISS-NEXT:    addi gp, gp, 8348; RV64-ZICFISS-NEXT:    sd ra, -8(gp)349; RV64-ZICFISS-NEXT:    addi sp, sp, -16350; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill351; RV64-ZICFISS-NEXT:    call bar352; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload353; RV64-ZICFISS-NEXT:    addi sp, sp, 16354; RV64-ZICFISS-NEXT:    ld ra, -8(gp)355; RV64-ZICFISS-NEXT:    addi gp, gp, -8356; RV64-ZICFISS-NEXT:    ret357  %res = call i32 @bar()358  %res1 = add i32 %res, 1359  ret i32 %res360}361 362define void @f1_hw() "hw-shadow-stack" {363; RV32-LABEL: f1_hw:364; RV32:       # %bb.0:365; RV32-NEXT:    ret366;367; RV64-LABEL: f1_hw:368; RV64:       # %bb.0:369; RV64-NEXT:    ret370;371; RV32-ZICFISS-LABEL: f1_hw:372; RV32-ZICFISS:       # %bb.0:373; RV32-ZICFISS-NEXT:    ret374;375; RV64-ZICFISS-LABEL: f1_hw:376; RV64-ZICFISS:       # %bb.0:377; RV64-ZICFISS-NEXT:    ret378  ret void379}380 381define void @f2_hw() "hw-shadow-stack" {382; RV32-LABEL: f2_hw:383; RV32:       # %bb.0:384; RV32-NEXT:    tail foo385;386; RV64-LABEL: f2_hw:387; RV64:       # %bb.0:388; RV64-NEXT:    tail foo389;390; RV32-ZICFISS-LABEL: f2_hw:391; RV32-ZICFISS:       # %bb.0:392; RV32-ZICFISS-NEXT:    tail foo393;394; RV64-ZICFISS-LABEL: f2_hw:395; RV64-ZICFISS:       # %bb.0:396; RV64-ZICFISS-NEXT:    tail foo397  tail call void @foo()398  ret void399}400 401define i32 @f3_hw() "hw-shadow-stack" {402; RV32-LABEL: f3_hw:403; RV32:       # %bb.0:404; RV32-NEXT:    addi sp, sp, -16405; RV32-NEXT:    .cfi_def_cfa_offset 16406; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill407; RV32-NEXT:    .cfi_offset ra, -4408; RV32-NEXT:    call bar409; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload410; RV32-NEXT:    .cfi_restore ra411; RV32-NEXT:    addi sp, sp, 16412; RV32-NEXT:    .cfi_def_cfa_offset 0413; RV32-NEXT:    ret414;415; RV64-LABEL: f3_hw:416; RV64:       # %bb.0:417; RV64-NEXT:    addi sp, sp, -16418; RV64-NEXT:    .cfi_def_cfa_offset 16419; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill420; RV64-NEXT:    .cfi_offset ra, -8421; RV64-NEXT:    call bar422; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload423; RV64-NEXT:    .cfi_restore ra424; RV64-NEXT:    addi sp, sp, 16425; RV64-NEXT:    .cfi_def_cfa_offset 0426; RV64-NEXT:    ret427;428; RV32-ZICFISS-LABEL: f3_hw:429; RV32-ZICFISS:       # %bb.0:430; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra431; RV32-ZICFISS-NEXT:    addi sp, sp, -16432; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16433; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill434; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4435; RV32-ZICFISS-NEXT:    call bar436; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload437; RV32-ZICFISS-NEXT:    .cfi_restore ra438; RV32-ZICFISS-NEXT:    addi sp, sp, 16439; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0440; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra441; RV32-ZICFISS-NEXT:    ret442;443; RV64-ZICFISS-LABEL: f3_hw:444; RV64-ZICFISS:       # %bb.0:445; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra446; RV64-ZICFISS-NEXT:    addi sp, sp, -16447; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 16448; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill449; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8450; RV64-ZICFISS-NEXT:    call bar451; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload452; RV64-ZICFISS-NEXT:    .cfi_restore ra453; RV64-ZICFISS-NEXT:    addi sp, sp, 16454; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0455; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra456; RV64-ZICFISS-NEXT:    ret457  %res = call i32 @bar()458  %res1 = add i32 %res, 1459  ret i32 %res460}461 462define i32 @f4_hw() "hw-shadow-stack" {463; RV32-LABEL: f4_hw:464; RV32:       # %bb.0:465; RV32-NEXT:    addi sp, sp, -16466; RV32-NEXT:    .cfi_def_cfa_offset 16467; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill468; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill469; RV32-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill470; RV32-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill471; RV32-NEXT:    .cfi_offset ra, -4472; RV32-NEXT:    .cfi_offset s0, -8473; RV32-NEXT:    .cfi_offset s1, -12474; RV32-NEXT:    .cfi_offset s2, -16475; RV32-NEXT:    call bar476; RV32-NEXT:    mv s0, a0477; RV32-NEXT:    call bar478; RV32-NEXT:    mv s1, a0479; RV32-NEXT:    call bar480; RV32-NEXT:    mv s2, a0481; RV32-NEXT:    call bar482; RV32-NEXT:    add s0, s0, s1483; RV32-NEXT:    add a0, s2, a0484; RV32-NEXT:    add a0, s0, a0485; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload486; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload487; RV32-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload488; RV32-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload489; RV32-NEXT:    .cfi_restore ra490; RV32-NEXT:    .cfi_restore s0491; RV32-NEXT:    .cfi_restore s1492; RV32-NEXT:    .cfi_restore s2493; RV32-NEXT:    addi sp, sp, 16494; RV32-NEXT:    .cfi_def_cfa_offset 0495; RV32-NEXT:    ret496;497; RV64-LABEL: f4_hw:498; RV64:       # %bb.0:499; RV64-NEXT:    addi sp, sp, -32500; RV64-NEXT:    .cfi_def_cfa_offset 32501; RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill502; RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill503; RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill504; RV64-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill505; RV64-NEXT:    .cfi_offset ra, -8506; RV64-NEXT:    .cfi_offset s0, -16507; RV64-NEXT:    .cfi_offset s1, -24508; RV64-NEXT:    .cfi_offset s2, -32509; RV64-NEXT:    call bar510; RV64-NEXT:    mv s0, a0511; RV64-NEXT:    call bar512; RV64-NEXT:    mv s1, a0513; RV64-NEXT:    call bar514; RV64-NEXT:    mv s2, a0515; RV64-NEXT:    call bar516; RV64-NEXT:    add s0, s0, s1517; RV64-NEXT:    add a0, s2, a0518; RV64-NEXT:    addw a0, s0, a0519; RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload520; RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload521; RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload522; RV64-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload523; RV64-NEXT:    .cfi_restore ra524; RV64-NEXT:    .cfi_restore s0525; RV64-NEXT:    .cfi_restore s1526; RV64-NEXT:    .cfi_restore s2527; RV64-NEXT:    addi sp, sp, 32528; RV64-NEXT:    .cfi_def_cfa_offset 0529; RV64-NEXT:    ret530;531; RV32-ZICFISS-LABEL: f4_hw:532; RV32-ZICFISS:       # %bb.0:533; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra534; RV32-ZICFISS-NEXT:    addi sp, sp, -16535; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16536; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill537; RV32-ZICFISS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill538; RV32-ZICFISS-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill539; RV32-ZICFISS-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill540; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4541; RV32-ZICFISS-NEXT:    .cfi_offset s0, -8542; RV32-ZICFISS-NEXT:    .cfi_offset s1, -12543; RV32-ZICFISS-NEXT:    .cfi_offset s2, -16544; RV32-ZICFISS-NEXT:    call bar545; RV32-ZICFISS-NEXT:    mv s0, a0546; RV32-ZICFISS-NEXT:    call bar547; RV32-ZICFISS-NEXT:    mv s1, a0548; RV32-ZICFISS-NEXT:    call bar549; RV32-ZICFISS-NEXT:    mv s2, a0550; RV32-ZICFISS-NEXT:    call bar551; RV32-ZICFISS-NEXT:    add s0, s0, s1552; RV32-ZICFISS-NEXT:    add a0, s2, a0553; RV32-ZICFISS-NEXT:    add a0, s0, a0554; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload555; RV32-ZICFISS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload556; RV32-ZICFISS-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload557; RV32-ZICFISS-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload558; RV32-ZICFISS-NEXT:    .cfi_restore ra559; RV32-ZICFISS-NEXT:    .cfi_restore s0560; RV32-ZICFISS-NEXT:    .cfi_restore s1561; RV32-ZICFISS-NEXT:    .cfi_restore s2562; RV32-ZICFISS-NEXT:    addi sp, sp, 16563; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0564; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra565; RV32-ZICFISS-NEXT:    ret566;567; RV64-ZICFISS-LABEL: f4_hw:568; RV64-ZICFISS:       # %bb.0:569; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra570; RV64-ZICFISS-NEXT:    addi sp, sp, -32571; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 32572; RV64-ZICFISS-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill573; RV64-ZICFISS-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill574; RV64-ZICFISS-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill575; RV64-ZICFISS-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill576; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8577; RV64-ZICFISS-NEXT:    .cfi_offset s0, -16578; RV64-ZICFISS-NEXT:    .cfi_offset s1, -24579; RV64-ZICFISS-NEXT:    .cfi_offset s2, -32580; RV64-ZICFISS-NEXT:    call bar581; RV64-ZICFISS-NEXT:    mv s0, a0582; RV64-ZICFISS-NEXT:    call bar583; RV64-ZICFISS-NEXT:    mv s1, a0584; RV64-ZICFISS-NEXT:    call bar585; RV64-ZICFISS-NEXT:    mv s2, a0586; RV64-ZICFISS-NEXT:    call bar587; RV64-ZICFISS-NEXT:    add s0, s0, s1588; RV64-ZICFISS-NEXT:    add a0, s2, a0589; RV64-ZICFISS-NEXT:    addw a0, s0, a0590; RV64-ZICFISS-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload591; RV64-ZICFISS-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload592; RV64-ZICFISS-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload593; RV64-ZICFISS-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload594; RV64-ZICFISS-NEXT:    .cfi_restore ra595; RV64-ZICFISS-NEXT:    .cfi_restore s0596; RV64-ZICFISS-NEXT:    .cfi_restore s1597; RV64-ZICFISS-NEXT:    .cfi_restore s2598; RV64-ZICFISS-NEXT:    addi sp, sp, 32599; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0600; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra601; RV64-ZICFISS-NEXT:    ret602  %res1 = call i32 @bar()603  %res2 = call i32 @bar()604  %res3 = call i32 @bar()605  %res4 = call i32 @bar()606  %res12 = add i32 %res1, %res2607  %res34 = add i32 %res3, %res4608  %res1234 = add i32 %res12, %res34609  ret i32 %res1234610}611 612define i32 @f5_hw() "hw-shadow-stack" nounwind {613; RV32-LABEL: f5_hw:614; RV32:       # %bb.0:615; RV32-NEXT:    addi sp, sp, -16616; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill617; RV32-NEXT:    call bar618; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload619; RV32-NEXT:    addi sp, sp, 16620; RV32-NEXT:    ret621;622; RV64-LABEL: f5_hw:623; RV64:       # %bb.0:624; RV64-NEXT:    addi sp, sp, -16625; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill626; RV64-NEXT:    call bar627; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload628; RV64-NEXT:    addi sp, sp, 16629; RV64-NEXT:    ret630;631; RV32-ZICFISS-LABEL: f5_hw:632; RV32-ZICFISS:       # %bb.0:633; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra634; RV32-ZICFISS-NEXT:    addi sp, sp, -16635; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill636; RV32-ZICFISS-NEXT:    call bar637; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload638; RV32-ZICFISS-NEXT:    addi sp, sp, 16639; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra640; RV32-ZICFISS-NEXT:    ret641;642; RV64-ZICFISS-LABEL: f5_hw:643; RV64-ZICFISS:       # %bb.0:644; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra645; RV64-ZICFISS-NEXT:    addi sp, sp, -16646; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill647; RV64-ZICFISS-NEXT:    call bar648; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload649; RV64-ZICFISS-NEXT:    addi sp, sp, 16650; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra651; RV64-ZICFISS-NEXT:    ret652  %res = call i32 @bar()653  %res1 = add i32 %res, 1654  ret i32 %res655}656 657define void @f1_both() "hw-shadow-stack" shadowcallstack {658; RV32-LABEL: f1_both:659; RV32:       # %bb.0:660; RV32-NEXT:    ret661;662; RV64-LABEL: f1_both:663; RV64:       # %bb.0:664; RV64-NEXT:    ret665;666; RV32-ZICFISS-LABEL: f1_both:667; RV32-ZICFISS:       # %bb.0:668; RV32-ZICFISS-NEXT:    ret669;670; RV64-ZICFISS-LABEL: f1_both:671; RV64-ZICFISS:       # %bb.0:672; RV64-ZICFISS-NEXT:    ret673  ret void674}675 676define void @f2_both() "hw-shadow-stack" shadowcallstack {677; RV32-LABEL: f2_both:678; RV32:       # %bb.0:679; RV32-NEXT:    tail foo680;681; RV64-LABEL: f2_both:682; RV64:       # %bb.0:683; RV64-NEXT:    tail foo684;685; RV32-ZICFISS-LABEL: f2_both:686; RV32-ZICFISS:       # %bb.0:687; RV32-ZICFISS-NEXT:    tail foo688;689; RV64-ZICFISS-LABEL: f2_both:690; RV64-ZICFISS:       # %bb.0:691; RV64-ZICFISS-NEXT:    tail foo692  tail call void @foo()693  ret void694}695 696define i32 @f3_both() "hw-shadow-stack" shadowcallstack {697; RV32-LABEL: f3_both:698; RV32:       # %bb.0:699; RV32-NEXT:    addi gp, gp, 4700; RV32-NEXT:    sw ra, -4(gp)701; RV32-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #702; RV32-NEXT:    addi sp, sp, -16703; RV32-NEXT:    .cfi_def_cfa_offset 16704; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill705; RV32-NEXT:    .cfi_offset ra, -4706; RV32-NEXT:    call bar707; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload708; RV32-NEXT:    .cfi_restore ra709; RV32-NEXT:    addi sp, sp, 16710; RV32-NEXT:    .cfi_def_cfa_offset 0711; RV32-NEXT:    lw ra, -4(gp)712; RV32-NEXT:    addi gp, gp, -4713; RV32-NEXT:    .cfi_restore gp714; RV32-NEXT:    ret715;716; RV64-LABEL: f3_both:717; RV64:       # %bb.0:718; RV64-NEXT:    addi gp, gp, 8719; RV64-NEXT:    sd ra, -8(gp)720; RV64-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #721; RV64-NEXT:    addi sp, sp, -16722; RV64-NEXT:    .cfi_def_cfa_offset 16723; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill724; RV64-NEXT:    .cfi_offset ra, -8725; RV64-NEXT:    call bar726; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload727; RV64-NEXT:    .cfi_restore ra728; RV64-NEXT:    addi sp, sp, 16729; RV64-NEXT:    .cfi_def_cfa_offset 0730; RV64-NEXT:    ld ra, -8(gp)731; RV64-NEXT:    addi gp, gp, -8732; RV64-NEXT:    .cfi_restore gp733; RV64-NEXT:    ret734;735; RV32-ZICFISS-LABEL: f3_both:736; RV32-ZICFISS:       # %bb.0:737; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra738; RV32-ZICFISS-NEXT:    addi sp, sp, -16739; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16740; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill741; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4742; RV32-ZICFISS-NEXT:    call bar743; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload744; RV32-ZICFISS-NEXT:    .cfi_restore ra745; RV32-ZICFISS-NEXT:    addi sp, sp, 16746; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0747; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra748; RV32-ZICFISS-NEXT:    ret749;750; RV64-ZICFISS-LABEL: f3_both:751; RV64-ZICFISS:       # %bb.0:752; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra753; RV64-ZICFISS-NEXT:    addi sp, sp, -16754; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 16755; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill756; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8757; RV64-ZICFISS-NEXT:    call bar758; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload759; RV64-ZICFISS-NEXT:    .cfi_restore ra760; RV64-ZICFISS-NEXT:    addi sp, sp, 16761; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0762; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra763; RV64-ZICFISS-NEXT:    ret764  %res = call i32 @bar()765  %res1 = add i32 %res, 1766  ret i32 %res767}768 769define i32 @f4_both() "hw-shadow-stack" shadowcallstack {770; RV32-LABEL: f4_both:771; RV32:       # %bb.0:772; RV32-NEXT:    addi gp, gp, 4773; RV32-NEXT:    sw ra, -4(gp)774; RV32-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x7c #775; RV32-NEXT:    addi sp, sp, -16776; RV32-NEXT:    .cfi_def_cfa_offset 16777; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill778; RV32-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill779; RV32-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill780; RV32-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill781; RV32-NEXT:    .cfi_offset ra, -4782; RV32-NEXT:    .cfi_offset s0, -8783; RV32-NEXT:    .cfi_offset s1, -12784; RV32-NEXT:    .cfi_offset s2, -16785; RV32-NEXT:    call bar786; RV32-NEXT:    mv s0, a0787; RV32-NEXT:    call bar788; RV32-NEXT:    mv s1, a0789; RV32-NEXT:    call bar790; RV32-NEXT:    mv s2, a0791; RV32-NEXT:    call bar792; RV32-NEXT:    add s0, s0, s1793; RV32-NEXT:    add a0, s2, a0794; RV32-NEXT:    add a0, s0, a0795; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload796; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload797; RV32-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload798; RV32-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload799; RV32-NEXT:    .cfi_restore ra800; RV32-NEXT:    .cfi_restore s0801; RV32-NEXT:    .cfi_restore s1802; RV32-NEXT:    .cfi_restore s2803; RV32-NEXT:    addi sp, sp, 16804; RV32-NEXT:    .cfi_def_cfa_offset 0805; RV32-NEXT:    lw ra, -4(gp)806; RV32-NEXT:    addi gp, gp, -4807; RV32-NEXT:    .cfi_restore gp808; RV32-NEXT:    ret809;810; RV64-LABEL: f4_both:811; RV64:       # %bb.0:812; RV64-NEXT:    addi gp, gp, 8813; RV64-NEXT:    sd ra, -8(gp)814; RV64-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #815; RV64-NEXT:    addi sp, sp, -32816; RV64-NEXT:    .cfi_def_cfa_offset 32817; RV64-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill818; RV64-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill819; RV64-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill820; RV64-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill821; RV64-NEXT:    .cfi_offset ra, -8822; RV64-NEXT:    .cfi_offset s0, -16823; RV64-NEXT:    .cfi_offset s1, -24824; RV64-NEXT:    .cfi_offset s2, -32825; RV64-NEXT:    call bar826; RV64-NEXT:    mv s0, a0827; RV64-NEXT:    call bar828; RV64-NEXT:    mv s1, a0829; RV64-NEXT:    call bar830; RV64-NEXT:    mv s2, a0831; RV64-NEXT:    call bar832; RV64-NEXT:    add s0, s0, s1833; RV64-NEXT:    add a0, s2, a0834; RV64-NEXT:    addw a0, s0, a0835; RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload836; RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload837; RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload838; RV64-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload839; RV64-NEXT:    .cfi_restore ra840; RV64-NEXT:    .cfi_restore s0841; RV64-NEXT:    .cfi_restore s1842; RV64-NEXT:    .cfi_restore s2843; RV64-NEXT:    addi sp, sp, 32844; RV64-NEXT:    .cfi_def_cfa_offset 0845; RV64-NEXT:    ld ra, -8(gp)846; RV64-NEXT:    addi gp, gp, -8847; RV64-NEXT:    .cfi_restore gp848; RV64-NEXT:    ret849;850; RV32-ZICFISS-LABEL: f4_both:851; RV32-ZICFISS:       # %bb.0:852; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra853; RV32-ZICFISS-NEXT:    addi sp, sp, -16854; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 16855; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill856; RV32-ZICFISS-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill857; RV32-ZICFISS-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill858; RV32-ZICFISS-NEXT:    sw s2, 0(sp) # 4-byte Folded Spill859; RV32-ZICFISS-NEXT:    .cfi_offset ra, -4860; RV32-ZICFISS-NEXT:    .cfi_offset s0, -8861; RV32-ZICFISS-NEXT:    .cfi_offset s1, -12862; RV32-ZICFISS-NEXT:    .cfi_offset s2, -16863; RV32-ZICFISS-NEXT:    call bar864; RV32-ZICFISS-NEXT:    mv s0, a0865; RV32-ZICFISS-NEXT:    call bar866; RV32-ZICFISS-NEXT:    mv s1, a0867; RV32-ZICFISS-NEXT:    call bar868; RV32-ZICFISS-NEXT:    mv s2, a0869; RV32-ZICFISS-NEXT:    call bar870; RV32-ZICFISS-NEXT:    add s0, s0, s1871; RV32-ZICFISS-NEXT:    add a0, s2, a0872; RV32-ZICFISS-NEXT:    add a0, s0, a0873; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload874; RV32-ZICFISS-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload875; RV32-ZICFISS-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload876; RV32-ZICFISS-NEXT:    lw s2, 0(sp) # 4-byte Folded Reload877; RV32-ZICFISS-NEXT:    .cfi_restore ra878; RV32-ZICFISS-NEXT:    .cfi_restore s0879; RV32-ZICFISS-NEXT:    .cfi_restore s1880; RV32-ZICFISS-NEXT:    .cfi_restore s2881; RV32-ZICFISS-NEXT:    addi sp, sp, 16882; RV32-ZICFISS-NEXT:    .cfi_def_cfa_offset 0883; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra884; RV32-ZICFISS-NEXT:    ret885;886; RV64-ZICFISS-LABEL: f4_both:887; RV64-ZICFISS:       # %bb.0:888; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra889; RV64-ZICFISS-NEXT:    addi sp, sp, -32890; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 32891; RV64-ZICFISS-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill892; RV64-ZICFISS-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill893; RV64-ZICFISS-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill894; RV64-ZICFISS-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill895; RV64-ZICFISS-NEXT:    .cfi_offset ra, -8896; RV64-ZICFISS-NEXT:    .cfi_offset s0, -16897; RV64-ZICFISS-NEXT:    .cfi_offset s1, -24898; RV64-ZICFISS-NEXT:    .cfi_offset s2, -32899; RV64-ZICFISS-NEXT:    call bar900; RV64-ZICFISS-NEXT:    mv s0, a0901; RV64-ZICFISS-NEXT:    call bar902; RV64-ZICFISS-NEXT:    mv s1, a0903; RV64-ZICFISS-NEXT:    call bar904; RV64-ZICFISS-NEXT:    mv s2, a0905; RV64-ZICFISS-NEXT:    call bar906; RV64-ZICFISS-NEXT:    add s0, s0, s1907; RV64-ZICFISS-NEXT:    add a0, s2, a0908; RV64-ZICFISS-NEXT:    addw a0, s0, a0909; RV64-ZICFISS-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload910; RV64-ZICFISS-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload911; RV64-ZICFISS-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload912; RV64-ZICFISS-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload913; RV64-ZICFISS-NEXT:    .cfi_restore ra914; RV64-ZICFISS-NEXT:    .cfi_restore s0915; RV64-ZICFISS-NEXT:    .cfi_restore s1916; RV64-ZICFISS-NEXT:    .cfi_restore s2917; RV64-ZICFISS-NEXT:    addi sp, sp, 32918; RV64-ZICFISS-NEXT:    .cfi_def_cfa_offset 0919; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra920; RV64-ZICFISS-NEXT:    ret921  %res1 = call i32 @bar()922  %res2 = call i32 @bar()923  %res3 = call i32 @bar()924  %res4 = call i32 @bar()925  %res12 = add i32 %res1, %res2926  %res34 = add i32 %res3, %res4927  %res1234 = add i32 %res12, %res34928  ret i32 %res1234929}930 931define i32 @f5_both() "hw-shadow-stack" shadowcallstack nounwind {932; RV32-LABEL: f5_both:933; RV32:       # %bb.0:934; RV32-NEXT:    addi gp, gp, 4935; RV32-NEXT:    sw ra, -4(gp)936; RV32-NEXT:    addi sp, sp, -16937; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill938; RV32-NEXT:    call bar939; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload940; RV32-NEXT:    addi sp, sp, 16941; RV32-NEXT:    lw ra, -4(gp)942; RV32-NEXT:    addi gp, gp, -4943; RV32-NEXT:    ret944;945; RV64-LABEL: f5_both:946; RV64:       # %bb.0:947; RV64-NEXT:    addi gp, gp, 8948; RV64-NEXT:    sd ra, -8(gp)949; RV64-NEXT:    addi sp, sp, -16950; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill951; RV64-NEXT:    call bar952; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload953; RV64-NEXT:    addi sp, sp, 16954; RV64-NEXT:    ld ra, -8(gp)955; RV64-NEXT:    addi gp, gp, -8956; RV64-NEXT:    ret957;958; RV32-ZICFISS-LABEL: f5_both:959; RV32-ZICFISS:       # %bb.0:960; RV32-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra961; RV32-ZICFISS-NEXT:    addi sp, sp, -16962; RV32-ZICFISS-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill963; RV32-ZICFISS-NEXT:    call bar964; RV32-ZICFISS-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload965; RV32-ZICFISS-NEXT:    addi sp, sp, 16966; RV32-ZICFISS-NEXT:    mop.r.28 zero, ra967; RV32-ZICFISS-NEXT:    ret968;969; RV64-ZICFISS-LABEL: f5_both:970; RV64-ZICFISS:       # %bb.0:971; RV64-ZICFISS-NEXT:    mop.rr.7 zero, zero, ra972; RV64-ZICFISS-NEXT:    addi sp, sp, -16973; RV64-ZICFISS-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill974; RV64-ZICFISS-NEXT:    call bar975; RV64-ZICFISS-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload976; RV64-ZICFISS-NEXT:    addi sp, sp, 16977; RV64-ZICFISS-NEXT:    mop.r.28 zero, ra978; RV64-ZICFISS-NEXT:    ret979  %res = call i32 @bar()980  %res1 = add i32 %res, 1981  ret i32 %res982}983