brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.1 KiB · a20e33e Raw
651 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc %s -o - -mtriple=thumbv8m.base | \3; RUN:   FileCheck %s --check-prefix=CHECK-8B4; RUN: llc %s -o - -mtriple=thumbebv8m.base | \5; RUN:   FileCheck %s --check-prefix=CHECK-8B6; RUN: llc %s -o - -mtriple=thumbv8m.main -mattr=-fpregs,+dsp | \7; RUN:   FileCheck %s --check-prefix=CHECK-8M-SOFT8; RUN: llc %s -o - -mtriple=thumbebv8m.main -mattr=-fpregs,+dsp | \9; RUN:   FileCheck %s --check-prefix=CHECK-8M-SOFT10; RUN: llc %s -o - -mtriple=thumbv8m.main -mattr=+fp-armv8d16sp,+dsp | \11; RUN:   FileCheck %s --check-prefix=CHECK-8M-SOFTFP12; RUN: llc %s -o - -mtriple=thumbebv8m.main -mattr=+fp-armv8d16sp,+dsp | \13; RUN:   FileCheck %s --check-prefix=CHECK-8M-SOFTFP14; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mattr=-fpregs,+dsp | \15; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFT16; RUN: llc %s -o - -mtriple=thumbebv8.1m.main -mattr=-fpregs,+dsp | \17; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFT18; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mattr=+fp-armv8d16sp,+dsp | \19; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFTFP20; RUN: llc %s -o - -mtriple=thumbebv8.1m.main -mattr=+fp-armv8d16sp,+dsp | \21; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFTFP22; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mattr=+mve | \23; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFTFP24; RUN: llc %s -o - -mtriple=thumbebv8.1m.main -mattr=mve | \25; RUN:   FileCheck %s --check-prefix=CHECK-81M-SOFTFP26 27define i32 @ns_entry(ptr nocapture %fptr) #0 {28; CHECK-8B-LABEL: ns_entry:29; CHECK-8B:       @ %bb.0: @ %entry30; CHECK-8B-NEXT:    push {r7, lr}31; CHECK-8B-NEXT:    mov r1, r032; CHECK-8B-NEXT:    movs r0, #1033; CHECK-8B-NEXT:    blx r134; CHECK-8B-NEXT:    pop {r7}35; CHECK-8B-NEXT:    pop {r1}36; CHECK-8B-NEXT:    mov lr, r137; CHECK-8B-NEXT:    mov r1, lr38; CHECK-8B-NEXT:    mov r2, lr39; CHECK-8B-NEXT:    mov r3, lr40; CHECK-8B-NEXT:    mov r12, lr41; CHECK-8B-NEXT:    msr apsr, lr42; CHECK-8B-NEXT:    bxns lr43;44; CHECK-8M-SOFT-LABEL: ns_entry:45; CHECK-8M-SOFT:       @ %bb.0: @ %entry46; CHECK-8M-SOFT-NEXT:    push {r7, lr}47; CHECK-8M-SOFT-NEXT:    mov r1, r048; CHECK-8M-SOFT-NEXT:    movs r0, #1049; CHECK-8M-SOFT-NEXT:    blx r150; CHECK-8M-SOFT-NEXT:    pop.w {r7, lr}51; CHECK-8M-SOFT-NEXT:    mov r1, lr52; CHECK-8M-SOFT-NEXT:    mov r2, lr53; CHECK-8M-SOFT-NEXT:    mov r3, lr54; CHECK-8M-SOFT-NEXT:    mov r12, lr55; CHECK-8M-SOFT-NEXT:    msr apsr_nzcvqg, lr56; CHECK-8M-SOFT-NEXT:    bxns lr57;58; CHECK-8M-SOFTFP-LABEL: ns_entry:59; CHECK-8M-SOFTFP:       @ %bb.0: @ %entry60; CHECK-8M-SOFTFP-NEXT:    push {r7, lr}61; CHECK-8M-SOFTFP-NEXT:    mov r1, r062; CHECK-8M-SOFTFP-NEXT:    movs r0, #1063; CHECK-8M-SOFTFP-NEXT:    blx r164; CHECK-8M-SOFTFP-NEXT:    pop.w {r7, lr}65; CHECK-8M-SOFTFP-NEXT:    mrs r12, control66; CHECK-8M-SOFTFP-NEXT:    tst.w r12, #867; CHECK-8M-SOFTFP-NEXT:    beq .LBB0_268; CHECK-8M-SOFTFP-NEXT:  @ %bb.1: @ %entry69; CHECK-8M-SOFTFP-NEXT:    vmrs r12, fpscr70; CHECK-8M-SOFTFP-NEXT:    vmov d0, lr, lr71; CHECK-8M-SOFTFP-NEXT:    vmov d1, lr, lr72; CHECK-8M-SOFTFP-NEXT:    vmov d2, lr, lr73; CHECK-8M-SOFTFP-NEXT:    vmov d3, lr, lr74; CHECK-8M-SOFTFP-NEXT:    vmov d4, lr, lr75; CHECK-8M-SOFTFP-NEXT:    vmov d5, lr, lr76; CHECK-8M-SOFTFP-NEXT:    vmov d6, lr, lr77; CHECK-8M-SOFTFP-NEXT:    vmov d7, lr, lr78; CHECK-8M-SOFTFP-NEXT:    bic r12, r12, #15979; CHECK-8M-SOFTFP-NEXT:    bic r12, r12, #402653184080; CHECK-8M-SOFTFP-NEXT:    vmsr fpscr, r1281; CHECK-8M-SOFTFP-NEXT:  .LBB0_2: @ %entry82; CHECK-8M-SOFTFP-NEXT:    mov r1, lr83; CHECK-8M-SOFTFP-NEXT:    mov r2, lr84; CHECK-8M-SOFTFP-NEXT:    mov r3, lr85; CHECK-8M-SOFTFP-NEXT:    mov r12, lr86; CHECK-8M-SOFTFP-NEXT:    msr apsr_nzcvqg, lr87; CHECK-8M-SOFTFP-NEXT:    bxns lr88;89; CHECK-81M-SOFT-LABEL: ns_entry:90; CHECK-81M-SOFT:       @ %bb.0: @ %entry91; CHECK-81M-SOFT-NEXT:    vstr fpcxtns, [sp, #-4]!92; CHECK-81M-SOFT-NEXT:    push {r7, lr}93; CHECK-81M-SOFT-NEXT:    sub sp, #494; CHECK-81M-SOFT-NEXT:    mov r1, r095; CHECK-81M-SOFT-NEXT:    movs r0, #1096; CHECK-81M-SOFT-NEXT:    blx r197; CHECK-81M-SOFT-NEXT:    add sp, #498; CHECK-81M-SOFT-NEXT:    pop.w {r7, lr}99; CHECK-81M-SOFT-NEXT:    vscclrm {s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}100; CHECK-81M-SOFT-NEXT:    vldr fpcxtns, [sp], #4101; CHECK-81M-SOFT-NEXT:    clrm {r1, r2, r3, r12, apsr}102; CHECK-81M-SOFT-NEXT:    bxns lr103;104; CHECK-81M-SOFTFP-LABEL: ns_entry:105; CHECK-81M-SOFTFP:       @ %bb.0: @ %entry106; CHECK-81M-SOFTFP-NEXT:    vstr fpcxtns, [sp, #-4]!107; CHECK-81M-SOFTFP-NEXT:    push {r7, lr}108; CHECK-81M-SOFTFP-NEXT:    sub sp, #4109; CHECK-81M-SOFTFP-NEXT:    mov r1, r0110; CHECK-81M-SOFTFP-NEXT:    movs r0, #10111; CHECK-81M-SOFTFP-NEXT:    blx r1112; CHECK-81M-SOFTFP-NEXT:    add sp, #4113; CHECK-81M-SOFTFP-NEXT:    pop.w {r7, lr}114; CHECK-81M-SOFTFP-NEXT:    vscclrm {s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}115; CHECK-81M-SOFTFP-NEXT:    vldr fpcxtns, [sp], #4116; CHECK-81M-SOFTFP-NEXT:    clrm {r1, r2, r3, r12, apsr}117; CHECK-81M-SOFTFP-NEXT:    bxns lr118entry:119  %call = call i32 %fptr(i32 10) #1120  ret i32 %call121}122 123attributes #0 = { "cmse_nonsecure_entry" nounwind }124attributes #1 = { nounwind }125 126 127define i32 @ns_call(ptr nocapture %fptr) #2 {128; CHECK-8B-LABEL: ns_call:129; CHECK-8B:       @ %bb.0: @ %entry130; CHECK-8B-NEXT:    push {r7, lr}131; CHECK-8B-NEXT:    mov r1, r0132; CHECK-8B-NEXT:    movs r0, #10133; CHECK-8B-NEXT:    push {r4, r5, r6, r7}134; CHECK-8B-NEXT:    mov r7, r11135; CHECK-8B-NEXT:    mov r6, r10136; CHECK-8B-NEXT:    mov r5, r9137; CHECK-8B-NEXT:    mov r4, r8138; CHECK-8B-NEXT:    push {r4, r5, r6, r7}139; CHECK-8B-NEXT:    mov r2, #1140; CHECK-8B-NEXT:    bics r1, r2141; CHECK-8B-NEXT:    mov r2, r1142; CHECK-8B-NEXT:    mov r3, r1143; CHECK-8B-NEXT:    mov r4, r1144; CHECK-8B-NEXT:    mov r5, r1145; CHECK-8B-NEXT:    mov r6, r1146; CHECK-8B-NEXT:    mov r7, r1147; CHECK-8B-NEXT:    mov r8, r1148; CHECK-8B-NEXT:    mov r9, r1149; CHECK-8B-NEXT:    mov r10, r1150; CHECK-8B-NEXT:    mov r11, r1151; CHECK-8B-NEXT:    mov r12, r1152; CHECK-8B-NEXT:    msr apsr, r1153; CHECK-8B-NEXT:    blxns r1154; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}155; CHECK-8B-NEXT:    mov r8, r4156; CHECK-8B-NEXT:    mov r9, r5157; CHECK-8B-NEXT:    mov r10, r6158; CHECK-8B-NEXT:    mov r11, r7159; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}160; CHECK-8B-NEXT:    pop {r7, pc}161;162; CHECK-8M-SOFT-LABEL: ns_call:163; CHECK-8M-SOFT:       @ %bb.0: @ %entry164; CHECK-8M-SOFT-NEXT:    push {r7, lr}165; CHECK-8M-SOFT-NEXT:    mov r1, r0166; CHECK-8M-SOFT-NEXT:    movs r0, #10167; CHECK-8M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}168; CHECK-8M-SOFT-NEXT:    bic r1, r1, #1169; CHECK-8M-SOFT-NEXT:    sub sp, #136170; CHECK-8M-SOFT-NEXT:    vlstm sp171; CHECK-8M-SOFT-NEXT:    mov r2, r1172; CHECK-8M-SOFT-NEXT:    mov r3, r1173; CHECK-8M-SOFT-NEXT:    mov r4, r1174; CHECK-8M-SOFT-NEXT:    mov r5, r1175; CHECK-8M-SOFT-NEXT:    mov r6, r1176; CHECK-8M-SOFT-NEXT:    mov r7, r1177; CHECK-8M-SOFT-NEXT:    mov r8, r1178; CHECK-8M-SOFT-NEXT:    mov r9, r1179; CHECK-8M-SOFT-NEXT:    mov r10, r1180; CHECK-8M-SOFT-NEXT:    mov r11, r1181; CHECK-8M-SOFT-NEXT:    mov r12, r1182; CHECK-8M-SOFT-NEXT:    msr apsr_nzcvqg, r1183; CHECK-8M-SOFT-NEXT:    blxns r1184; CHECK-8M-SOFT-NEXT:    vlldm sp185; CHECK-8M-SOFT-NEXT:    add sp, #136186; CHECK-8M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}187; CHECK-8M-SOFT-NEXT:    pop {r7, pc}188;189; CHECK-8M-SOFTFP-LABEL: ns_call:190; CHECK-8M-SOFTFP:       @ %bb.0: @ %entry191; CHECK-8M-SOFTFP-NEXT:    push {r7, lr}192; CHECK-8M-SOFTFP-NEXT:    mov r1, r0193; CHECK-8M-SOFTFP-NEXT:    movs r0, #10194; CHECK-8M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}195; CHECK-8M-SOFTFP-NEXT:    bic r1, r1, #1196; CHECK-8M-SOFTFP-NEXT:    sub sp, #136197; CHECK-8M-SOFTFP-NEXT:    vlstm sp198; CHECK-8M-SOFTFP-NEXT:    mov r2, r1199; CHECK-8M-SOFTFP-NEXT:    mov r3, r1200; CHECK-8M-SOFTFP-NEXT:    mov r4, r1201; CHECK-8M-SOFTFP-NEXT:    mov r5, r1202; CHECK-8M-SOFTFP-NEXT:    mov r6, r1203; CHECK-8M-SOFTFP-NEXT:    mov r7, r1204; CHECK-8M-SOFTFP-NEXT:    mov r8, r1205; CHECK-8M-SOFTFP-NEXT:    mov r9, r1206; CHECK-8M-SOFTFP-NEXT:    mov r10, r1207; CHECK-8M-SOFTFP-NEXT:    mov r11, r1208; CHECK-8M-SOFTFP-NEXT:    mov r12, r1209; CHECK-8M-SOFTFP-NEXT:    msr apsr_nzcvqg, r1210; CHECK-8M-SOFTFP-NEXT:    blxns r1211; CHECK-8M-SOFTFP-NEXT:    vlldm sp212; CHECK-8M-SOFTFP-NEXT:    add sp, #136213; CHECK-8M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}214; CHECK-8M-SOFTFP-NEXT:    pop {r7, pc}215;216; CHECK-81M-SOFT-LABEL: ns_call:217; CHECK-81M-SOFT:       @ %bb.0: @ %entry218; CHECK-81M-SOFT-NEXT:    push {r7, lr}219; CHECK-81M-SOFT-NEXT:    mov r1, r0220; CHECK-81M-SOFT-NEXT:    movs r0, #10221; CHECK-81M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}222; CHECK-81M-SOFT-NEXT:    bic r1, r1, #1223; CHECK-81M-SOFT-NEXT:    sub sp, #136224; CHECK-81M-SOFT-NEXT:    vlstm sp225; CHECK-81M-SOFT-NEXT:    clrm {r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}226; CHECK-81M-SOFT-NEXT:    blxns r1227; CHECK-81M-SOFT-NEXT:    vlldm sp228; CHECK-81M-SOFT-NEXT:    add sp, #136229; CHECK-81M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}230; CHECK-81M-SOFT-NEXT:    pop {r7, pc}231;232; CHECK-81M-SOFTFP-LABEL: ns_call:233; CHECK-81M-SOFTFP:       @ %bb.0: @ %entry234; CHECK-81M-SOFTFP-NEXT:    push {r7, lr}235; CHECK-81M-SOFTFP-NEXT:    mov r1, r0236; CHECK-81M-SOFTFP-NEXT:    movs r0, #10237; CHECK-81M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}238; CHECK-81M-SOFTFP-NEXT:    bic r1, r1, #1239; CHECK-81M-SOFTFP-NEXT:    sub sp, #136240; CHECK-81M-SOFTFP-NEXT:    vlstm sp241; CHECK-81M-SOFTFP-NEXT:    clrm {r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}242; CHECK-81M-SOFTFP-NEXT:    blxns r1243; CHECK-81M-SOFTFP-NEXT:    vlldm sp244; CHECK-81M-SOFTFP-NEXT:    add sp, #136245; CHECK-81M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}246; CHECK-81M-SOFTFP-NEXT:    pop {r7, pc}247entry:248  %call = call i32 %fptr(i32 10) #3249  ret i32 %call250}251 252attributes #2 = { nounwind }253attributes #3 = { "cmse_nonsecure_call" nounwind }254 255 256define i32 @ns_tail_call(ptr nocapture %fptr) #4 {257; CHECK-8B-LABEL: ns_tail_call:258; CHECK-8B:       @ %bb.0: @ %entry259; CHECK-8B-NEXT:    push {r7, lr}260; CHECK-8B-NEXT:    mov r1, r0261; CHECK-8B-NEXT:    movs r0, #10262; CHECK-8B-NEXT:    push {r4, r5, r6, r7}263; CHECK-8B-NEXT:    mov r7, r11264; CHECK-8B-NEXT:    mov r6, r10265; CHECK-8B-NEXT:    mov r5, r9266; CHECK-8B-NEXT:    mov r4, r8267; CHECK-8B-NEXT:    push {r4, r5, r6, r7}268; CHECK-8B-NEXT:    mov r2, #1269; CHECK-8B-NEXT:    bics r1, r2270; CHECK-8B-NEXT:    mov r2, r1271; CHECK-8B-NEXT:    mov r3, r1272; CHECK-8B-NEXT:    mov r4, r1273; CHECK-8B-NEXT:    mov r5, r1274; CHECK-8B-NEXT:    mov r6, r1275; CHECK-8B-NEXT:    mov r7, r1276; CHECK-8B-NEXT:    mov r8, r1277; CHECK-8B-NEXT:    mov r9, r1278; CHECK-8B-NEXT:    mov r10, r1279; CHECK-8B-NEXT:    mov r11, r1280; CHECK-8B-NEXT:    mov r12, r1281; CHECK-8B-NEXT:    msr apsr, r1282; CHECK-8B-NEXT:    blxns r1283; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}284; CHECK-8B-NEXT:    mov r8, r4285; CHECK-8B-NEXT:    mov r9, r5286; CHECK-8B-NEXT:    mov r10, r6287; CHECK-8B-NEXT:    mov r11, r7288; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}289; CHECK-8B-NEXT:    pop {r7, pc}290;291; CHECK-8M-SOFT-LABEL: ns_tail_call:292; CHECK-8M-SOFT:       @ %bb.0: @ %entry293; CHECK-8M-SOFT-NEXT:    push {r7, lr}294; CHECK-8M-SOFT-NEXT:    mov r1, r0295; CHECK-8M-SOFT-NEXT:    movs r0, #10296; CHECK-8M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}297; CHECK-8M-SOFT-NEXT:    bic r1, r1, #1298; CHECK-8M-SOFT-NEXT:    sub sp, #136299; CHECK-8M-SOFT-NEXT:    vlstm sp300; CHECK-8M-SOFT-NEXT:    mov r2, r1301; CHECK-8M-SOFT-NEXT:    mov r3, r1302; CHECK-8M-SOFT-NEXT:    mov r4, r1303; CHECK-8M-SOFT-NEXT:    mov r5, r1304; CHECK-8M-SOFT-NEXT:    mov r6, r1305; CHECK-8M-SOFT-NEXT:    mov r7, r1306; CHECK-8M-SOFT-NEXT:    mov r8, r1307; CHECK-8M-SOFT-NEXT:    mov r9, r1308; CHECK-8M-SOFT-NEXT:    mov r10, r1309; CHECK-8M-SOFT-NEXT:    mov r11, r1310; CHECK-8M-SOFT-NEXT:    mov r12, r1311; CHECK-8M-SOFT-NEXT:    msr apsr_nzcvqg, r1312; CHECK-8M-SOFT-NEXT:    blxns r1313; CHECK-8M-SOFT-NEXT:    vlldm sp314; CHECK-8M-SOFT-NEXT:    add sp, #136315; CHECK-8M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}316; CHECK-8M-SOFT-NEXT:    pop {r7, pc}317;318; CHECK-8M-SOFTFP-LABEL: ns_tail_call:319; CHECK-8M-SOFTFP:       @ %bb.0: @ %entry320; CHECK-8M-SOFTFP-NEXT:    push {r7, lr}321; CHECK-8M-SOFTFP-NEXT:    mov r1, r0322; CHECK-8M-SOFTFP-NEXT:    movs r0, #10323; CHECK-8M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}324; CHECK-8M-SOFTFP-NEXT:    bic r1, r1, #1325; CHECK-8M-SOFTFP-NEXT:    sub sp, #136326; CHECK-8M-SOFTFP-NEXT:    vlstm sp327; CHECK-8M-SOFTFP-NEXT:    mov r2, r1328; CHECK-8M-SOFTFP-NEXT:    mov r3, r1329; CHECK-8M-SOFTFP-NEXT:    mov r4, r1330; CHECK-8M-SOFTFP-NEXT:    mov r5, r1331; CHECK-8M-SOFTFP-NEXT:    mov r6, r1332; CHECK-8M-SOFTFP-NEXT:    mov r7, r1333; CHECK-8M-SOFTFP-NEXT:    mov r8, r1334; CHECK-8M-SOFTFP-NEXT:    mov r9, r1335; CHECK-8M-SOFTFP-NEXT:    mov r10, r1336; CHECK-8M-SOFTFP-NEXT:    mov r11, r1337; CHECK-8M-SOFTFP-NEXT:    mov r12, r1338; CHECK-8M-SOFTFP-NEXT:    msr apsr_nzcvqg, r1339; CHECK-8M-SOFTFP-NEXT:    blxns r1340; CHECK-8M-SOFTFP-NEXT:    vlldm sp341; CHECK-8M-SOFTFP-NEXT:    add sp, #136342; CHECK-8M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}343; CHECK-8M-SOFTFP-NEXT:    pop {r7, pc}344;345; CHECK-81M-SOFT-LABEL: ns_tail_call:346; CHECK-81M-SOFT:       @ %bb.0: @ %entry347; CHECK-81M-SOFT-NEXT:    push {r7, lr}348; CHECK-81M-SOFT-NEXT:    mov r1, r0349; CHECK-81M-SOFT-NEXT:    movs r0, #10350; CHECK-81M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}351; CHECK-81M-SOFT-NEXT:    bic r1, r1, #1352; CHECK-81M-SOFT-NEXT:    sub sp, #136353; CHECK-81M-SOFT-NEXT:    vlstm sp354; CHECK-81M-SOFT-NEXT:    clrm {r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}355; CHECK-81M-SOFT-NEXT:    blxns r1356; CHECK-81M-SOFT-NEXT:    vlldm sp357; CHECK-81M-SOFT-NEXT:    add sp, #136358; CHECK-81M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}359; CHECK-81M-SOFT-NEXT:    pop {r7, pc}360;361; CHECK-81M-SOFTFP-LABEL: ns_tail_call:362; CHECK-81M-SOFTFP:       @ %bb.0: @ %entry363; CHECK-81M-SOFTFP-NEXT:    push {r7, lr}364; CHECK-81M-SOFTFP-NEXT:    mov r1, r0365; CHECK-81M-SOFTFP-NEXT:    movs r0, #10366; CHECK-81M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}367; CHECK-81M-SOFTFP-NEXT:    bic r1, r1, #1368; CHECK-81M-SOFTFP-NEXT:    sub sp, #136369; CHECK-81M-SOFTFP-NEXT:    vlstm sp370; CHECK-81M-SOFTFP-NEXT:    clrm {r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}371; CHECK-81M-SOFTFP-NEXT:    blxns r1372; CHECK-81M-SOFTFP-NEXT:    vlldm sp373; CHECK-81M-SOFTFP-NEXT:    add sp, #136374; CHECK-81M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}375; CHECK-81M-SOFTFP-NEXT:    pop {r7, pc}376entry:377  %call = tail call i32 %fptr(i32 10) #5378  ret i32 %call379}380 381attributes #4 = { nounwind }382attributes #5 = { "cmse_nonsecure_call" nounwind }383 384 385define ptr @ns_tail_call_many_args(ptr %f, i32 %a, i32 %b, i32 %c, i32 %d) #6 {386; CHECK-8B-LABEL: ns_tail_call_many_args:387; CHECK-8B:       @ %bb.0:388; CHECK-8B-NEXT:    push {r4, r5, r7, lr}389; CHECK-8B-NEXT:    mov r5, r3390; CHECK-8B-NEXT:    mov r4, r0391; CHECK-8B-NEXT:    ldr r3, [sp, #16]392; CHECK-8B-NEXT:    mov r0, r1393; CHECK-8B-NEXT:    mov r1, r2394; CHECK-8B-NEXT:    mov r2, r5395; CHECK-8B-NEXT:    push {r4, r5, r6, r7}396; CHECK-8B-NEXT:    mov r7, r11397; CHECK-8B-NEXT:    mov r6, r10398; CHECK-8B-NEXT:    mov r5, r9399; CHECK-8B-NEXT:    push {r5, r6, r7}400; CHECK-8B-NEXT:    mov r5, r8401; CHECK-8B-NEXT:    push {r5}402; CHECK-8B-NEXT:    mov r5, #1403; CHECK-8B-NEXT:    bics r4, r5404; CHECK-8B-NEXT:    mov r5, r4405; CHECK-8B-NEXT:    mov r6, r4406; CHECK-8B-NEXT:    mov r7, r4407; CHECK-8B-NEXT:    mov r8, r4408; CHECK-8B-NEXT:    mov r9, r4409; CHECK-8B-NEXT:    mov r10, r4410; CHECK-8B-NEXT:    mov r11, r4411; CHECK-8B-NEXT:    mov r12, r4412; CHECK-8B-NEXT:    msr apsr, r4413; CHECK-8B-NEXT:    blxns r4414; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}415; CHECK-8B-NEXT:    mov r8, r4416; CHECK-8B-NEXT:    mov r9, r5417; CHECK-8B-NEXT:    mov r10, r6418; CHECK-8B-NEXT:    mov r11, r7419; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}420; CHECK-8B-NEXT:    mov r0, r4421; CHECK-8B-NEXT:    pop {r4, r5, r7, pc}422;423; CHECK-8M-SOFT-LABEL: ns_tail_call_many_args:424; CHECK-8M-SOFT:       @ %bb.0:425; CHECK-8M-SOFT-NEXT:    push {r4, lr}426; CHECK-8M-SOFT-NEXT:    mov r4, r0427; CHECK-8M-SOFT-NEXT:    mov r12, r3428; CHECK-8M-SOFT-NEXT:    mov r0, r1429; CHECK-8M-SOFT-NEXT:    mov r1, r2430; CHECK-8M-SOFT-NEXT:    ldr r3, [sp, #8]431; CHECK-8M-SOFT-NEXT:    mov r2, r12432; CHECK-8M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}433; CHECK-8M-SOFT-NEXT:    bic r4, r4, #1434; CHECK-8M-SOFT-NEXT:    sub sp, #136435; CHECK-8M-SOFT-NEXT:    vlstm sp436; CHECK-8M-SOFT-NEXT:    mov r5, r4437; CHECK-8M-SOFT-NEXT:    mov r6, r4438; CHECK-8M-SOFT-NEXT:    mov r7, r4439; CHECK-8M-SOFT-NEXT:    mov r8, r4440; CHECK-8M-SOFT-NEXT:    mov r9, r4441; CHECK-8M-SOFT-NEXT:    mov r10, r4442; CHECK-8M-SOFT-NEXT:    mov r11, r4443; CHECK-8M-SOFT-NEXT:    mov r12, r4444; CHECK-8M-SOFT-NEXT:    msr apsr_nzcvqg, r4445; CHECK-8M-SOFT-NEXT:    blxns r4446; CHECK-8M-SOFT-NEXT:    vlldm sp447; CHECK-8M-SOFT-NEXT:    add sp, #136448; CHECK-8M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}449; CHECK-8M-SOFT-NEXT:    mov r0, r4450; CHECK-8M-SOFT-NEXT:    pop {r4, pc}451;452; CHECK-8M-SOFTFP-LABEL: ns_tail_call_many_args:453; CHECK-8M-SOFTFP:       @ %bb.0:454; CHECK-8M-SOFTFP-NEXT:    push {r4, lr}455; CHECK-8M-SOFTFP-NEXT:    mov r4, r0456; CHECK-8M-SOFTFP-NEXT:    mov r12, r3457; CHECK-8M-SOFTFP-NEXT:    mov r0, r1458; CHECK-8M-SOFTFP-NEXT:    mov r1, r2459; CHECK-8M-SOFTFP-NEXT:    ldr r3, [sp, #8]460; CHECK-8M-SOFTFP-NEXT:    mov r2, r12461; CHECK-8M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}462; CHECK-8M-SOFTFP-NEXT:    bic r4, r4, #1463; CHECK-8M-SOFTFP-NEXT:    sub sp, #136464; CHECK-8M-SOFTFP-NEXT:    vlstm sp465; CHECK-8M-SOFTFP-NEXT:    mov r5, r4466; CHECK-8M-SOFTFP-NEXT:    mov r6, r4467; CHECK-8M-SOFTFP-NEXT:    mov r7, r4468; CHECK-8M-SOFTFP-NEXT:    mov r8, r4469; CHECK-8M-SOFTFP-NEXT:    mov r9, r4470; CHECK-8M-SOFTFP-NEXT:    mov r10, r4471; CHECK-8M-SOFTFP-NEXT:    mov r11, r4472; CHECK-8M-SOFTFP-NEXT:    mov r12, r4473; CHECK-8M-SOFTFP-NEXT:    msr apsr_nzcvqg, r4474; CHECK-8M-SOFTFP-NEXT:    blxns r4475; CHECK-8M-SOFTFP-NEXT:    vlldm sp476; CHECK-8M-SOFTFP-NEXT:    add sp, #136477; CHECK-8M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}478; CHECK-8M-SOFTFP-NEXT:    mov r0, r4479; CHECK-8M-SOFTFP-NEXT:    pop {r4, pc}480;481; CHECK-81M-SOFT-LABEL: ns_tail_call_many_args:482; CHECK-81M-SOFT:       @ %bb.0:483; CHECK-81M-SOFT-NEXT:    push {r4, lr}484; CHECK-81M-SOFT-NEXT:    mov r4, r0485; CHECK-81M-SOFT-NEXT:    mov r12, r3486; CHECK-81M-SOFT-NEXT:    mov r0, r1487; CHECK-81M-SOFT-NEXT:    mov r1, r2488; CHECK-81M-SOFT-NEXT:    ldr r3, [sp, #8]489; CHECK-81M-SOFT-NEXT:    mov r2, r12490; CHECK-81M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}491; CHECK-81M-SOFT-NEXT:    bic r4, r4, #1492; CHECK-81M-SOFT-NEXT:    sub sp, #136493; CHECK-81M-SOFT-NEXT:    vlstm sp494; CHECK-81M-SOFT-NEXT:    clrm {r5, r6, r7, r8, r9, r10, r11, r12, apsr}495; CHECK-81M-SOFT-NEXT:    blxns r4496; CHECK-81M-SOFT-NEXT:    vlldm sp497; CHECK-81M-SOFT-NEXT:    add sp, #136498; CHECK-81M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}499; CHECK-81M-SOFT-NEXT:    mov r0, r4500; CHECK-81M-SOFT-NEXT:    pop {r4, pc}501;502; CHECK-81M-SOFTFP-LABEL: ns_tail_call_many_args:503; CHECK-81M-SOFTFP:       @ %bb.0:504; CHECK-81M-SOFTFP-NEXT:    push {r4, lr}505; CHECK-81M-SOFTFP-NEXT:    mov r4, r0506; CHECK-81M-SOFTFP-NEXT:    mov r12, r3507; CHECK-81M-SOFTFP-NEXT:    mov r0, r1508; CHECK-81M-SOFTFP-NEXT:    mov r1, r2509; CHECK-81M-SOFTFP-NEXT:    ldr r3, [sp, #8]510; CHECK-81M-SOFTFP-NEXT:    mov r2, r12511; CHECK-81M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}512; CHECK-81M-SOFTFP-NEXT:    bic r4, r4, #1513; CHECK-81M-SOFTFP-NEXT:    sub sp, #136514; CHECK-81M-SOFTFP-NEXT:    vlstm sp515; CHECK-81M-SOFTFP-NEXT:    clrm {r5, r6, r7, r8, r9, r10, r11, r12, apsr}516; CHECK-81M-SOFTFP-NEXT:    blxns r4517; CHECK-81M-SOFTFP-NEXT:    vlldm sp518; CHECK-81M-SOFTFP-NEXT:    add sp, #136519; CHECK-81M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}520; CHECK-81M-SOFTFP-NEXT:    mov r0, r4521; CHECK-81M-SOFTFP-NEXT:    pop {r4, pc}522  tail call void %f(i32 %a, i32 %b, i32 %c, i32 %d) #7523  ret ptr %f524}525 526attributes #6 = { nounwind }527attributes #7 = { "cmse_nonsecure_call" nounwind }528 529 530define i32 @ns_call_void(i32 %reg0, ptr nocapture %fptr) #8 {531; CHECK-8B-LABEL: ns_call_void:532; CHECK-8B:       @ %bb.0: @ %entry533; CHECK-8B-NEXT:    push {r7, lr}534; CHECK-8B-NEXT:    push {r4, r5, r6, r7}535; CHECK-8B-NEXT:    mov r7, r11536; CHECK-8B-NEXT:    mov r6, r10537; CHECK-8B-NEXT:    mov r5, r9538; CHECK-8B-NEXT:    mov r4, r8539; CHECK-8B-NEXT:    push {r4, r5, r6, r7}540; CHECK-8B-NEXT:    mov r0, #1541; CHECK-8B-NEXT:    bics r1, r0542; CHECK-8B-NEXT:    mov r0, r1543; CHECK-8B-NEXT:    mov r2, r1544; CHECK-8B-NEXT:    mov r3, r1545; CHECK-8B-NEXT:    mov r4, r1546; CHECK-8B-NEXT:    mov r5, r1547; CHECK-8B-NEXT:    mov r6, r1548; CHECK-8B-NEXT:    mov r7, r1549; CHECK-8B-NEXT:    mov r8, r1550; CHECK-8B-NEXT:    mov r9, r1551; CHECK-8B-NEXT:    mov r10, r1552; CHECK-8B-NEXT:    mov r11, r1553; CHECK-8B-NEXT:    mov r12, r1554; CHECK-8B-NEXT:    msr apsr, r1555; CHECK-8B-NEXT:    blxns r1556; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}557; CHECK-8B-NEXT:    mov r8, r4558; CHECK-8B-NEXT:    mov r9, r5559; CHECK-8B-NEXT:    mov r10, r6560; CHECK-8B-NEXT:    mov r11, r7561; CHECK-8B-NEXT:    pop {r4, r5, r6, r7}562; CHECK-8B-NEXT:    pop {r7, pc}563;564; CHECK-8M-SOFT-LABEL: ns_call_void:565; CHECK-8M-SOFT:       @ %bb.0: @ %entry566; CHECK-8M-SOFT-NEXT:    push {r7, lr}567; CHECK-8M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}568; CHECK-8M-SOFT-NEXT:    bic r1, r1, #1569; CHECK-8M-SOFT-NEXT:    sub sp, #136570; CHECK-8M-SOFT-NEXT:    vlstm sp571; CHECK-8M-SOFT-NEXT:    mov r0, r1572; CHECK-8M-SOFT-NEXT:    mov r2, r1573; CHECK-8M-SOFT-NEXT:    mov r3, r1574; CHECK-8M-SOFT-NEXT:    mov r4, r1575; CHECK-8M-SOFT-NEXT:    mov r5, r1576; CHECK-8M-SOFT-NEXT:    mov r6, r1577; CHECK-8M-SOFT-NEXT:    mov r7, r1578; CHECK-8M-SOFT-NEXT:    mov r8, r1579; CHECK-8M-SOFT-NEXT:    mov r9, r1580; CHECK-8M-SOFT-NEXT:    mov r10, r1581; CHECK-8M-SOFT-NEXT:    mov r11, r1582; CHECK-8M-SOFT-NEXT:    mov r12, r1583; CHECK-8M-SOFT-NEXT:    msr apsr_nzcvqg, r1584; CHECK-8M-SOFT-NEXT:    blxns r1585; CHECK-8M-SOFT-NEXT:    vlldm sp586; CHECK-8M-SOFT-NEXT:    add sp, #136587; CHECK-8M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}588; CHECK-8M-SOFT-NEXT:    pop {r7, pc}589;590; CHECK-8M-SOFTFP-LABEL: ns_call_void:591; CHECK-8M-SOFTFP:       @ %bb.0: @ %entry592; CHECK-8M-SOFTFP-NEXT:    push {r7, lr}593; CHECK-8M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}594; CHECK-8M-SOFTFP-NEXT:    bic r1, r1, #1595; CHECK-8M-SOFTFP-NEXT:    sub sp, #136596; CHECK-8M-SOFTFP-NEXT:    vlstm sp597; CHECK-8M-SOFTFP-NEXT:    mov r0, r1598; CHECK-8M-SOFTFP-NEXT:    mov r2, r1599; CHECK-8M-SOFTFP-NEXT:    mov r3, r1600; CHECK-8M-SOFTFP-NEXT:    mov r4, r1601; CHECK-8M-SOFTFP-NEXT:    mov r5, r1602; CHECK-8M-SOFTFP-NEXT:    mov r6, r1603; CHECK-8M-SOFTFP-NEXT:    mov r7, r1604; CHECK-8M-SOFTFP-NEXT:    mov r8, r1605; CHECK-8M-SOFTFP-NEXT:    mov r9, r1606; CHECK-8M-SOFTFP-NEXT:    mov r10, r1607; CHECK-8M-SOFTFP-NEXT:    mov r11, r1608; CHECK-8M-SOFTFP-NEXT:    mov r12, r1609; CHECK-8M-SOFTFP-NEXT:    msr apsr_nzcvqg, r1610; CHECK-8M-SOFTFP-NEXT:    blxns r1611; CHECK-8M-SOFTFP-NEXT:    vlldm sp612; CHECK-8M-SOFTFP-NEXT:    add sp, #136613; CHECK-8M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}614; CHECK-8M-SOFTFP-NEXT:    pop {r7, pc}615;616; CHECK-81M-SOFT-LABEL: ns_call_void:617; CHECK-81M-SOFT:       @ %bb.0: @ %entry618; CHECK-81M-SOFT-NEXT:    push {r7, lr}619; CHECK-81M-SOFT-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}620; CHECK-81M-SOFT-NEXT:    bic r1, r1, #1621; CHECK-81M-SOFT-NEXT:    sub sp, #136622; CHECK-81M-SOFT-NEXT:    vlstm sp623; CHECK-81M-SOFT-NEXT:    clrm {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}624; CHECK-81M-SOFT-NEXT:    blxns r1625; CHECK-81M-SOFT-NEXT:    vlldm sp626; CHECK-81M-SOFT-NEXT:    add sp, #136627; CHECK-81M-SOFT-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}628; CHECK-81M-SOFT-NEXT:    pop {r7, pc}629;630; CHECK-81M-SOFTFP-LABEL: ns_call_void:631; CHECK-81M-SOFTFP:       @ %bb.0: @ %entry632; CHECK-81M-SOFTFP-NEXT:    push {r7, lr}633; CHECK-81M-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}634; CHECK-81M-SOFTFP-NEXT:    bic r1, r1, #1635; CHECK-81M-SOFTFP-NEXT:    sub sp, #136636; CHECK-81M-SOFTFP-NEXT:    vlstm sp637; CHECK-81M-SOFTFP-NEXT:    clrm {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}638; CHECK-81M-SOFTFP-NEXT:    blxns r1639; CHECK-81M-SOFTFP-NEXT:    vlldm sp640; CHECK-81M-SOFTFP-NEXT:    add sp, #136641; CHECK-81M-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}642; CHECK-81M-SOFTFP-NEXT:    pop {r7, pc}643entry:644  %call = call i32 %fptr() #9645  ret i32 %call646}647 648attributes #8 = { nounwind }649attributes #9 = { "cmse_nonsecure_call" nounwind }650 651