574 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=none | FileCheck %s --check-prefix=R73; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=reserved | FileCheck %s --check-prefix=R7-RES4; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=all | FileCheck %s --check-prefix=R7-ABI5; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=none -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R116; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=reserved -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11-RES7; RUN: llc -mtriple=thumbv8.1m.main-none-eabi < %s --force-dwarf-frame-section -frame-pointer=all -mattr=+aapcs-frame-chain | FileCheck %s --check-prefix=R11-ABI8 9; int test1() {10; return 0;11; }12define i32 @test1() "sign-return-address"="non-leaf" {13; R7-LABEL: test1:14; R7: .cfi_sections .debug_frame15; R7-NEXT: .cfi_startproc16; R7-NEXT: @ %bb.0: @ %entry17; R7-NEXT: movs r0, #018; R7-NEXT: bx lr19;20; R7-RES-LABEL: test1:21; R7-RES: .cfi_sections .debug_frame22; R7-RES-NEXT: .cfi_startproc23; R7-RES-NEXT: @ %bb.0: @ %entry24; R7-RES-NEXT: movs r0, #025; R7-RES-NEXT: bx lr26;27; R7-ABI-LABEL: test1:28; R7-ABI: .cfi_sections .debug_frame29; R7-ABI-NEXT: .cfi_startproc30; R7-ABI-NEXT: @ %bb.0: @ %entry31; R7-ABI-NEXT: pac r12, lr, sp32; R7-ABI-NEXT: .save {r7, lr}33; R7-ABI-NEXT: push {r7, lr}34; R7-ABI-NEXT: .cfi_def_cfa_offset 835; R7-ABI-NEXT: .cfi_offset lr, -436; R7-ABI-NEXT: .cfi_offset r7, -837; R7-ABI-NEXT: .setfp r7, sp38; R7-ABI-NEXT: mov r7, sp39; R7-ABI-NEXT: .cfi_def_cfa_register r740; R7-ABI-NEXT: .save {ra_auth_code}41; R7-ABI-NEXT: str r12, [sp, #-4]!42; R7-ABI-NEXT: .cfi_offset ra_auth_code, -1243; R7-ABI-NEXT: movs r0, #044; R7-ABI-NEXT: ldr r12, [sp], #445; R7-ABI-NEXT: pop.w {r7, lr}46; R7-ABI-NEXT: aut r12, lr, sp47; R7-ABI-NEXT: bx lr48;49; R11-LABEL: test1:50; R11: .cfi_sections .debug_frame51; R11-NEXT: .cfi_startproc52; R11-NEXT: @ %bb.0: @ %entry53; R11-NEXT: movs r0, #054; R11-NEXT: bx lr55;56; R11-RES-LABEL: test1:57; R11-RES: .cfi_sections .debug_frame58; R11-RES-NEXT: .cfi_startproc59; R11-RES-NEXT: @ %bb.0: @ %entry60; R11-RES-NEXT: movs r0, #061; R11-RES-NEXT: bx lr62;63; R11-ABI-LABEL: test1:64; R11-ABI: .cfi_sections .debug_frame65; R11-ABI-NEXT: .cfi_startproc66; R11-ABI-NEXT: @ %bb.0: @ %entry67; R11-ABI-NEXT: pac r12, lr, sp68; R11-ABI-NEXT: .save {ra_auth_code}69; R11-ABI-NEXT: str r12, [sp, #-4]!70; R11-ABI-NEXT: .cfi_def_cfa_offset 471; R11-ABI-NEXT: .cfi_offset ra_auth_code, -472; R11-ABI-NEXT: .save {r11, lr}73; R11-ABI-NEXT: push.w {r11, lr}74; R11-ABI-NEXT: .cfi_def_cfa_offset 1275; R11-ABI-NEXT: .cfi_offset lr, -876; R11-ABI-NEXT: .cfi_offset r11, -1277; R11-ABI-NEXT: .setfp r11, sp78; R11-ABI-NEXT: mov r11, sp79; R11-ABI-NEXT: .cfi_def_cfa_register r1180; R11-ABI-NEXT: movs r0, #081; R11-ABI-NEXT: pop.w {r11, lr}82; R11-ABI-NEXT: ldr r12, [sp], #483; R11-ABI-NEXT: aut r12, lr, sp84; R11-ABI-NEXT: bx lr85entry:86 ret i32 087}88 89; void foo(int n) {90; int a[n];91; bar(a);92; }93define dso_local void @test2(i32 noundef %n) "sign-return-address"="non-leaf" {94; R7-LABEL: test2:95; R7: .cfi_startproc96; R7-NEXT: @ %bb.0: @ %entry97; R7-NEXT: pac r12, lr, sp98; R7-NEXT: .save {r4, r6, r7, ra_auth_code, lr}99; R7-NEXT: push.w {r4, r6, r7, r12, lr}100; R7-NEXT: .cfi_def_cfa_offset 20101; R7-NEXT: .cfi_offset lr, -4102; R7-NEXT: .cfi_offset ra_auth_code, -8103; R7-NEXT: .cfi_offset r7, -12104; R7-NEXT: .cfi_offset r6, -16105; R7-NEXT: .cfi_offset r4, -20106; R7-NEXT: .setfp r7, sp, #8107; R7-NEXT: add r7, sp, #8108; R7-NEXT: .cfi_def_cfa r7, 12109; R7-NEXT: .pad #4110; R7-NEXT: sub sp, #4111; R7-NEXT: movs r1, #7112; R7-NEXT: add.w r0, r1, r0, lsl #2113; R7-NEXT: bic r0, r0, #7114; R7-NEXT: sub.w r0, sp, r0115; R7-NEXT: mov sp, r0116; R7-NEXT: bl take_ptr117; R7-NEXT: sub.w r4, r7, #8118; R7-NEXT: mov sp, r4119; R7-NEXT: pop.w {r4, r6, r7, r12, lr}120; R7-NEXT: aut r12, lr, sp121; R7-NEXT: bx lr122;123; R7-RES-LABEL: test2:124; R7-RES: .cfi_startproc125; R7-RES-NEXT: @ %bb.0: @ %entry126; R7-RES-NEXT: pac r12, lr, sp127; R7-RES-NEXT: .save {r4, r6, r7, lr}128; R7-RES-NEXT: push {r4, r6, r7, lr}129; R7-RES-NEXT: .cfi_def_cfa_offset 16130; R7-RES-NEXT: .cfi_offset lr, -4131; R7-RES-NEXT: .cfi_offset r7, -8132; R7-RES-NEXT: .cfi_offset r6, -12133; R7-RES-NEXT: .cfi_offset r4, -16134; R7-RES-NEXT: .setfp r7, sp, #8135; R7-RES-NEXT: add r7, sp, #8136; R7-RES-NEXT: .cfi_def_cfa r7, 8137; R7-RES-NEXT: .save {ra_auth_code}138; R7-RES-NEXT: str r12, [sp, #-4]!139; R7-RES-NEXT: .cfi_offset ra_auth_code, -20140; R7-RES-NEXT: .pad #4141; R7-RES-NEXT: sub sp, #4142; R7-RES-NEXT: movs r1, #7143; R7-RES-NEXT: add.w r0, r1, r0, lsl #2144; R7-RES-NEXT: bic r0, r0, #7145; R7-RES-NEXT: sub.w r0, sp, r0146; R7-RES-NEXT: mov sp, r0147; R7-RES-NEXT: bl take_ptr148; R7-RES-NEXT: sub.w r4, r7, #12149; R7-RES-NEXT: mov sp, r4150; R7-RES-NEXT: ldr r12, [sp], #4151; R7-RES-NEXT: pop.w {r4, r6, r7, lr}152; R7-RES-NEXT: aut r12, lr, sp153; R7-RES-NEXT: bx lr154;155; R7-ABI-LABEL: test2:156; R7-ABI: .cfi_startproc157; R7-ABI-NEXT: @ %bb.0: @ %entry158; R7-ABI-NEXT: pac r12, lr, sp159; R7-ABI-NEXT: .save {r4, r6, r7, lr}160; R7-ABI-NEXT: push {r4, r6, r7, lr}161; R7-ABI-NEXT: .cfi_def_cfa_offset 16162; R7-ABI-NEXT: .cfi_offset lr, -4163; R7-ABI-NEXT: .cfi_offset r7, -8164; R7-ABI-NEXT: .cfi_offset r6, -12165; R7-ABI-NEXT: .cfi_offset r4, -16166; R7-ABI-NEXT: .setfp r7, sp, #8167; R7-ABI-NEXT: add r7, sp, #8168; R7-ABI-NEXT: .cfi_def_cfa r7, 8169; R7-ABI-NEXT: .save {ra_auth_code}170; R7-ABI-NEXT: str r12, [sp, #-4]!171; R7-ABI-NEXT: .cfi_offset ra_auth_code, -20172; R7-ABI-NEXT: .pad #4173; R7-ABI-NEXT: sub sp, #4174; R7-ABI-NEXT: movs r1, #7175; R7-ABI-NEXT: add.w r0, r1, r0, lsl #2176; R7-ABI-NEXT: bic r0, r0, #7177; R7-ABI-NEXT: sub.w r0, sp, r0178; R7-ABI-NEXT: mov sp, r0179; R7-ABI-NEXT: bl take_ptr180; R7-ABI-NEXT: sub.w r4, r7, #12181; R7-ABI-NEXT: mov sp, r4182; R7-ABI-NEXT: ldr r12, [sp], #4183; R7-ABI-NEXT: pop.w {r4, r6, r7, lr}184; R7-ABI-NEXT: aut r12, lr, sp185; R7-ABI-NEXT: bx lr186;187; R11-LABEL: test2:188; R11: .cfi_startproc189; R11-NEXT: @ %bb.0: @ %entry190; R11-NEXT: pac r12, lr, sp191; R11-NEXT: .save {r4, r7, r11, ra_auth_code, lr}192; R11-NEXT: push.w {r4, r7, r11, r12, lr}193; R11-NEXT: .cfi_def_cfa_offset 20194; R11-NEXT: .cfi_offset lr, -4195; R11-NEXT: .cfi_offset ra_auth_code, -8196; R11-NEXT: .cfi_offset r11, -12197; R11-NEXT: .cfi_offset r7, -16198; R11-NEXT: .cfi_offset r4, -20199; R11-NEXT: .setfp r11, sp, #8200; R11-NEXT: add.w r11, sp, #8201; R11-NEXT: .cfi_def_cfa r11, 12202; R11-NEXT: .pad #4203; R11-NEXT: sub sp, #4204; R11-NEXT: movs r1, #7205; R11-NEXT: add.w r0, r1, r0, lsl #2206; R11-NEXT: bic r0, r0, #7207; R11-NEXT: sub.w r0, sp, r0208; R11-NEXT: mov sp, r0209; R11-NEXT: bl take_ptr210; R11-NEXT: sub.w r4, r11, #8211; R11-NEXT: mov sp, r4212; R11-NEXT: pop.w {r4, r7, r11, r12, lr}213; R11-NEXT: aut r12, lr, sp214; R11-NEXT: bx lr215;216; R11-RES-LABEL: test2:217; R11-RES: .cfi_startproc218; R11-RES-NEXT: @ %bb.0: @ %entry219; R11-RES-NEXT: pac r12, lr, sp220; R11-RES-NEXT: .save {r4, r7, ra_auth_code}221; R11-RES-NEXT: push.w {r4, r7, r12}222; R11-RES-NEXT: .cfi_def_cfa_offset 12223; R11-RES-NEXT: .cfi_offset ra_auth_code, -4224; R11-RES-NEXT: .cfi_offset r7, -8225; R11-RES-NEXT: .cfi_offset r4, -12226; R11-RES-NEXT: .save {r11, lr}227; R11-RES-NEXT: push.w {r11, lr}228; R11-RES-NEXT: .cfi_def_cfa_offset 20229; R11-RES-NEXT: .cfi_offset lr, -16230; R11-RES-NEXT: .cfi_offset r11, -20231; R11-RES-NEXT: .setfp r11, sp232; R11-RES-NEXT: mov r11, sp233; R11-RES-NEXT: .cfi_def_cfa_register r11234; R11-RES-NEXT: .pad #4235; R11-RES-NEXT: sub sp, #4236; R11-RES-NEXT: movs r1, #7237; R11-RES-NEXT: add.w r0, r1, r0, lsl #2238; R11-RES-NEXT: bic r0, r0, #7239; R11-RES-NEXT: sub.w r0, sp, r0240; R11-RES-NEXT: mov sp, r0241; R11-RES-NEXT: bl take_ptr242; R11-RES-NEXT: mov sp, r11243; R11-RES-NEXT: pop.w {r11, lr}244; R11-RES-NEXT: pop.w {r4, r7, r12}245; R11-RES-NEXT: aut r12, lr, sp246; R11-RES-NEXT: bx lr247;248; R11-ABI-LABEL: test2:249; R11-ABI: .cfi_startproc250; R11-ABI-NEXT: @ %bb.0: @ %entry251; R11-ABI-NEXT: pac r12, lr, sp252; R11-ABI-NEXT: .save {r4, r7, ra_auth_code}253; R11-ABI-NEXT: push.w {r4, r7, r12}254; R11-ABI-NEXT: .cfi_def_cfa_offset 12255; R11-ABI-NEXT: .cfi_offset ra_auth_code, -4256; R11-ABI-NEXT: .cfi_offset r7, -8257; R11-ABI-NEXT: .cfi_offset r4, -12258; R11-ABI-NEXT: .save {r11, lr}259; R11-ABI-NEXT: push.w {r11, lr}260; R11-ABI-NEXT: .cfi_def_cfa_offset 20261; R11-ABI-NEXT: .cfi_offset lr, -16262; R11-ABI-NEXT: .cfi_offset r11, -20263; R11-ABI-NEXT: .setfp r11, sp264; R11-ABI-NEXT: mov r11, sp265; R11-ABI-NEXT: .cfi_def_cfa_register r11266; R11-ABI-NEXT: .pad #4267; R11-ABI-NEXT: sub sp, #4268; R11-ABI-NEXT: movs r1, #7269; R11-ABI-NEXT: add.w r0, r1, r0, lsl #2270; R11-ABI-NEXT: bic r0, r0, #7271; R11-ABI-NEXT: sub.w r0, sp, r0272; R11-ABI-NEXT: mov sp, r0273; R11-ABI-NEXT: bl take_ptr274; R11-ABI-NEXT: mov sp, r11275; R11-ABI-NEXT: pop.w {r11, lr}276; R11-ABI-NEXT: pop.w {r4, r7, r12}277; R11-ABI-NEXT: aut r12, lr, sp278; R11-ABI-NEXT: bx lr279entry:280 %vla = alloca i32, i32 %n, align 4281 call void @take_ptr(ptr noundef nonnull %vla)282 ret void283}284 285; void test3(int c, float e, int z) {286; if (c)287; knr();288; take_ptr(alloca(z));289; if (e)290; knr();291; }292define void @test3(i32 noundef %c, float noundef %e, i32 noundef %z) "sign-return-address"="non-leaf" {293; R7-LABEL: test3:294; R7: .cfi_startproc295; R7-NEXT: @ %bb.0: @ %entry296; R7-NEXT: pac r12, lr, sp297; R7-NEXT: .save {r4, r5, r6, r7, r8, ra_auth_code, lr}298; R7-NEXT: push.w {r4, r5, r6, r7, r8, r12, lr}299; R7-NEXT: .cfi_def_cfa_offset 28300; R7-NEXT: .cfi_offset lr, -4301; R7-NEXT: .cfi_offset ra_auth_code, -8302; R7-NEXT: .cfi_offset r8, -12303; R7-NEXT: .cfi_offset r7, -16304; R7-NEXT: .cfi_offset r6, -20305; R7-NEXT: .cfi_offset r5, -24306; R7-NEXT: .cfi_offset r4, -28307; R7-NEXT: .setfp r7, sp, #12308; R7-NEXT: add r7, sp, #12309; R7-NEXT: .cfi_def_cfa r7, 16310; R7-NEXT: .pad #4311; R7-NEXT: sub sp, #4312; R7-NEXT: cmp r0, #0313; R7-NEXT: mov r5, r2314; R7-NEXT: mov r4, r1315; R7-NEXT: it ne316; R7-NEXT: blne knr317; R7-NEXT: adds r0, r5, #7318; R7-NEXT: bic r0, r0, #7319; R7-NEXT: sub.w r0, sp, r0320; R7-NEXT: mov sp, r0321; R7-NEXT: bl take_ptr322; R7-NEXT: mov r0, r4323; R7-NEXT: movs r1, #0324; R7-NEXT: bl __aeabi_fcmpeq325; R7-NEXT: cmp r0, #0326; R7-NEXT: it eq327; R7-NEXT: bleq knr328; R7-NEXT: sub.w r4, r7, #12329; R7-NEXT: mov sp, r4330; R7-NEXT: pop.w {r4, r5, r6, r7, r8, r12, lr}331; R7-NEXT: aut r12, lr, sp332; R7-NEXT: bx lr333;334; R7-RES-LABEL: test3:335; R7-RES: .cfi_startproc336; R7-RES-NEXT: @ %bb.0: @ %entry337; R7-RES-NEXT: pac r12, lr, sp338; R7-RES-NEXT: .save {r4, r5, r6, r7, lr}339; R7-RES-NEXT: push {r4, r5, r6, r7, lr}340; R7-RES-NEXT: .cfi_def_cfa_offset 20341; R7-RES-NEXT: .cfi_offset lr, -4342; R7-RES-NEXT: .cfi_offset r7, -8343; R7-RES-NEXT: .cfi_offset r6, -12344; R7-RES-NEXT: .cfi_offset r5, -16345; R7-RES-NEXT: .cfi_offset r4, -20346; R7-RES-NEXT: .setfp r7, sp, #12347; R7-RES-NEXT: add r7, sp, #12348; R7-RES-NEXT: .cfi_def_cfa r7, 8349; R7-RES-NEXT: .save {r8, ra_auth_code}350; R7-RES-NEXT: push.w {r8, r12}351; R7-RES-NEXT: .cfi_offset ra_auth_code, -24352; R7-RES-NEXT: .cfi_offset r8, -28353; R7-RES-NEXT: .pad #4354; R7-RES-NEXT: sub sp, #4355; R7-RES-NEXT: cmp r0, #0356; R7-RES-NEXT: mov r5, r2357; R7-RES-NEXT: mov r4, r1358; R7-RES-NEXT: it ne359; R7-RES-NEXT: blne knr360; R7-RES-NEXT: adds r0, r5, #7361; R7-RES-NEXT: bic r0, r0, #7362; R7-RES-NEXT: sub.w r0, sp, r0363; R7-RES-NEXT: mov sp, r0364; R7-RES-NEXT: bl take_ptr365; R7-RES-NEXT: mov r0, r4366; R7-RES-NEXT: movs r1, #0367; R7-RES-NEXT: bl __aeabi_fcmpeq368; R7-RES-NEXT: cmp r0, #0369; R7-RES-NEXT: it eq370; R7-RES-NEXT: bleq knr371; R7-RES-NEXT: sub.w r4, r7, #20372; R7-RES-NEXT: mov sp, r4373; R7-RES-NEXT: pop.w {r8, r12}374; R7-RES-NEXT: pop.w {r4, r5, r6, r7, lr}375; R7-RES-NEXT: aut r12, lr, sp376; R7-RES-NEXT: bx lr377;378; R7-ABI-LABEL: test3:379; R7-ABI: .cfi_startproc380; R7-ABI-NEXT: @ %bb.0: @ %entry381; R7-ABI-NEXT: pac r12, lr, sp382; R7-ABI-NEXT: .save {r4, r5, r6, r7, lr}383; R7-ABI-NEXT: push {r4, r5, r6, r7, lr}384; R7-ABI-NEXT: .cfi_def_cfa_offset 20385; R7-ABI-NEXT: .cfi_offset lr, -4386; R7-ABI-NEXT: .cfi_offset r7, -8387; R7-ABI-NEXT: .cfi_offset r6, -12388; R7-ABI-NEXT: .cfi_offset r5, -16389; R7-ABI-NEXT: .cfi_offset r4, -20390; R7-ABI-NEXT: .setfp r7, sp, #12391; R7-ABI-NEXT: add r7, sp, #12392; R7-ABI-NEXT: .cfi_def_cfa r7, 8393; R7-ABI-NEXT: .save {r8, ra_auth_code}394; R7-ABI-NEXT: push.w {r8, r12}395; R7-ABI-NEXT: .cfi_offset ra_auth_code, -24396; R7-ABI-NEXT: .cfi_offset r8, -28397; R7-ABI-NEXT: .pad #4398; R7-ABI-NEXT: sub sp, #4399; R7-ABI-NEXT: cmp r0, #0400; R7-ABI-NEXT: mov r5, r2401; R7-ABI-NEXT: mov r4, r1402; R7-ABI-NEXT: it ne403; R7-ABI-NEXT: blne knr404; R7-ABI-NEXT: adds r0, r5, #7405; R7-ABI-NEXT: bic r0, r0, #7406; R7-ABI-NEXT: sub.w r0, sp, r0407; R7-ABI-NEXT: mov sp, r0408; R7-ABI-NEXT: bl take_ptr409; R7-ABI-NEXT: mov r0, r4410; R7-ABI-NEXT: movs r1, #0411; R7-ABI-NEXT: bl __aeabi_fcmpeq412; R7-ABI-NEXT: cmp r0, #0413; R7-ABI-NEXT: it eq414; R7-ABI-NEXT: bleq knr415; R7-ABI-NEXT: sub.w r4, r7, #20416; R7-ABI-NEXT: mov sp, r4417; R7-ABI-NEXT: pop.w {r8, r12}418; R7-ABI-NEXT: pop.w {r4, r5, r6, r7, lr}419; R7-ABI-NEXT: aut r12, lr, sp420; R7-ABI-NEXT: bx lr421;422; R11-LABEL: test3:423; R11: .cfi_startproc424; R11-NEXT: @ %bb.0: @ %entry425; R11-NEXT: pac r12, lr, sp426; R11-NEXT: .save {r4, r5, r6, r7, r11, ra_auth_code, lr}427; R11-NEXT: push.w {r4, r5, r6, r7, r11, r12, lr}428; R11-NEXT: .cfi_def_cfa_offset 28429; R11-NEXT: .cfi_offset lr, -4430; R11-NEXT: .cfi_offset ra_auth_code, -8431; R11-NEXT: .cfi_offset r11, -12432; R11-NEXT: .cfi_offset r7, -16433; R11-NEXT: .cfi_offset r6, -20434; R11-NEXT: .cfi_offset r5, -24435; R11-NEXT: .cfi_offset r4, -28436; R11-NEXT: .setfp r11, sp, #16437; R11-NEXT: add.w r11, sp, #16438; R11-NEXT: .cfi_def_cfa r11, 12439; R11-NEXT: .pad #4440; R11-NEXT: sub sp, #4441; R11-NEXT: cmp r0, #0442; R11-NEXT: mov r5, r2443; R11-NEXT: mov r4, r1444; R11-NEXT: it ne445; R11-NEXT: blne knr446; R11-NEXT: adds r0, r5, #7447; R11-NEXT: bic r0, r0, #7448; R11-NEXT: sub.w r0, sp, r0449; R11-NEXT: mov sp, r0450; R11-NEXT: bl take_ptr451; R11-NEXT: mov r0, r4452; R11-NEXT: movs r1, #0453; R11-NEXT: bl __aeabi_fcmpeq454; R11-NEXT: cmp r0, #0455; R11-NEXT: it eq456; R11-NEXT: bleq knr457; R11-NEXT: sub.w r4, r11, #16458; R11-NEXT: mov sp, r4459; R11-NEXT: pop.w {r4, r5, r6, r7, r11, r12, lr}460; R11-NEXT: aut r12, lr, sp461; R11-NEXT: bx lr462;463; R11-RES-LABEL: test3:464; R11-RES: .cfi_startproc465; R11-RES-NEXT: @ %bb.0: @ %entry466; R11-RES-NEXT: pac r12, lr, sp467; R11-RES-NEXT: .save {r4, r5, r6, r7, ra_auth_code}468; R11-RES-NEXT: push.w {r4, r5, r6, r7, r12}469; R11-RES-NEXT: .cfi_def_cfa_offset 20470; R11-RES-NEXT: .cfi_offset ra_auth_code, -4471; R11-RES-NEXT: .cfi_offset r7, -8472; R11-RES-NEXT: .cfi_offset r6, -12473; R11-RES-NEXT: .cfi_offset r5, -16474; R11-RES-NEXT: .cfi_offset r4, -20475; R11-RES-NEXT: .save {r11, lr}476; R11-RES-NEXT: push.w {r11, lr}477; R11-RES-NEXT: .cfi_def_cfa_offset 28478; R11-RES-NEXT: .cfi_offset lr, -24479; R11-RES-NEXT: .cfi_offset r11, -28480; R11-RES-NEXT: .setfp r11, sp481; R11-RES-NEXT: mov r11, sp482; R11-RES-NEXT: .cfi_def_cfa_register r11483; R11-RES-NEXT: .pad #4484; R11-RES-NEXT: sub sp, #4485; R11-RES-NEXT: cmp r0, #0486; R11-RES-NEXT: mov r5, r2487; R11-RES-NEXT: mov r4, r1488; R11-RES-NEXT: it ne489; R11-RES-NEXT: blne knr490; R11-RES-NEXT: adds r0, r5, #7491; R11-RES-NEXT: bic r0, r0, #7492; R11-RES-NEXT: sub.w r0, sp, r0493; R11-RES-NEXT: mov sp, r0494; R11-RES-NEXT: bl take_ptr495; R11-RES-NEXT: mov r0, r4496; R11-RES-NEXT: movs r1, #0497; R11-RES-NEXT: bl __aeabi_fcmpeq498; R11-RES-NEXT: cmp r0, #0499; R11-RES-NEXT: it eq500; R11-RES-NEXT: bleq knr501; R11-RES-NEXT: mov sp, r11502; R11-RES-NEXT: pop.w {r11, lr}503; R11-RES-NEXT: pop.w {r4, r5, r6, r7, r12}504; R11-RES-NEXT: aut r12, lr, sp505; R11-RES-NEXT: bx lr506;507; R11-ABI-LABEL: test3:508; R11-ABI: .cfi_startproc509; R11-ABI-NEXT: @ %bb.0: @ %entry510; R11-ABI-NEXT: pac r12, lr, sp511; R11-ABI-NEXT: .save {r4, r5, r6, r7, ra_auth_code}512; R11-ABI-NEXT: push.w {r4, r5, r6, r7, r12}513; R11-ABI-NEXT: .cfi_def_cfa_offset 20514; R11-ABI-NEXT: .cfi_offset ra_auth_code, -4515; R11-ABI-NEXT: .cfi_offset r7, -8516; R11-ABI-NEXT: .cfi_offset r6, -12517; R11-ABI-NEXT: .cfi_offset r5, -16518; R11-ABI-NEXT: .cfi_offset r4, -20519; R11-ABI-NEXT: .save {r11, lr}520; R11-ABI-NEXT: push.w {r11, lr}521; R11-ABI-NEXT: .cfi_def_cfa_offset 28522; R11-ABI-NEXT: .cfi_offset lr, -24523; R11-ABI-NEXT: .cfi_offset r11, -28524; R11-ABI-NEXT: .setfp r11, sp525; R11-ABI-NEXT: mov r11, sp526; R11-ABI-NEXT: .cfi_def_cfa_register r11527; R11-ABI-NEXT: .pad #4528; R11-ABI-NEXT: sub sp, #4529; R11-ABI-NEXT: cmp r0, #0530; R11-ABI-NEXT: mov r5, r2531; R11-ABI-NEXT: mov r4, r1532; R11-ABI-NEXT: it ne533; R11-ABI-NEXT: blne knr534; R11-ABI-NEXT: adds r0, r5, #7535; R11-ABI-NEXT: bic r0, r0, #7536; R11-ABI-NEXT: sub.w r0, sp, r0537; R11-ABI-NEXT: mov sp, r0538; R11-ABI-NEXT: bl take_ptr539; R11-ABI-NEXT: mov r0, r4540; R11-ABI-NEXT: movs r1, #0541; R11-ABI-NEXT: bl __aeabi_fcmpeq542; R11-ABI-NEXT: cmp r0, #0543; R11-ABI-NEXT: it eq544; R11-ABI-NEXT: bleq knr545; R11-ABI-NEXT: mov sp, r11546; R11-ABI-NEXT: pop.w {r11, lr}547; R11-ABI-NEXT: pop.w {r4, r5, r6, r7, r12}548; R11-ABI-NEXT: aut r12, lr, sp549; R11-ABI-NEXT: bx lr550entry:551 %tobool.not = icmp eq i32 %c, 0552 br i1 %tobool.not, label %if.end, label %if.then553 554if.then: ; preds = %entry555 tail call void @knr()556 br label %if.end557 558if.end: ; preds = %if.then, %entry559 %0 = alloca i8, i32 %z, align 8560 call void @take_ptr(ptr noundef nonnull %0)561 %tobool1 = fcmp une float %e, 0.000000e+00562 br i1 %tobool1, label %if.then2, label %if.end3563 564if.then2: ; preds = %if.end565 call void @knr()566 br label %if.end3567 568if.end3: ; preds = %if.then2, %if.end569 ret void570}571 572declare void @knr(...)573declare void @take_ptr(ptr noundef)574