brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · c13daf6 Raw
441 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=thumbv6m-none-eabi -frame-pointer=none                          -verify-machineinstrs | FileCheck %s --check-prefix=FP-NONE3; RUN: llc < %s -mtriple=thumbv6m-none-eabi -frame-pointer=all                           -verify-machineinstrs | FileCheck %s --check-prefix=FP-ALL4; RUN: llc < %s -mtriple=thumbv6m-none-eabi -frame-pointer=all -mattr=+aapcs-frame-chain -verify-machineinstrs | FileCheck %s --check-prefix=FP-AAPCS5 6define void @ra_call() {7; FP-NONE-LABEL: ra_call:8; FP-NONE:       @ %bb.0: @ %entry9; FP-NONE-NEXT:    .save {r7, lr}10; FP-NONE-NEXT:    push {r7, lr}11; FP-NONE-NEXT:    mov r0, lr12; FP-NONE-NEXT:    bl sink_ptr13; FP-NONE-NEXT:    pop {r7, pc}14;15; FP-ALL-LABEL: ra_call:16; FP-ALL:       @ %bb.0: @ %entry17; FP-ALL-NEXT:    .save {r7, lr}18; FP-ALL-NEXT:    push {r7, lr}19; FP-ALL-NEXT:    .setfp r7, sp20; FP-ALL-NEXT:    add r7, sp, #021; FP-ALL-NEXT:    mov r0, lr22; FP-ALL-NEXT:    bl sink_ptr23; FP-ALL-NEXT:    pop {r7, pc}24;25; FP-AAPCS-LABEL: ra_call:26; FP-AAPCS:       @ %bb.0: @ %entry27; FP-AAPCS-NEXT:    .save {lr}28; FP-AAPCS-NEXT:    push {lr}29; FP-AAPCS-NEXT:    mov r3, r1130; FP-AAPCS-NEXT:    .save {r11}31; FP-AAPCS-NEXT:    push {r3}32; FP-AAPCS-NEXT:    .setfp r11, sp33; FP-AAPCS-NEXT:    mov r11, sp34; FP-AAPCS-NEXT:    mov r0, lr35; FP-AAPCS-NEXT:    bl sink_ptr36; FP-AAPCS-NEXT:    pop {r0}37; FP-AAPCS-NEXT:    mov r11, r038; FP-AAPCS-NEXT:    pop {pc}39entry:40  %r = tail call ptr @llvm.returnaddress(i32 0)41  tail call void @sink_ptr(ptr %r)42  ret void43}44 45define ptr @ra_return() {46; FP-NONE-LABEL: ra_return:47; FP-NONE:       @ %bb.0: @ %entry48; FP-NONE-NEXT:    mov r0, lr49; FP-NONE-NEXT:    bx lr50;51; FP-ALL-LABEL: ra_return:52; FP-ALL:       @ %bb.0: @ %entry53; FP-ALL-NEXT:    .save {r7, lr}54; FP-ALL-NEXT:    push {r7, lr}55; FP-ALL-NEXT:    .setfp r7, sp56; FP-ALL-NEXT:    add r7, sp, #057; FP-ALL-NEXT:    mov r0, lr58; FP-ALL-NEXT:    pop {r7, pc}59;60; FP-AAPCS-LABEL: ra_return:61; FP-AAPCS:       @ %bb.0: @ %entry62; FP-AAPCS-NEXT:    .save {lr}63; FP-AAPCS-NEXT:    push {lr}64; FP-AAPCS-NEXT:    mov r3, r1165; FP-AAPCS-NEXT:    .save {r11}66; FP-AAPCS-NEXT:    push {r3}67; FP-AAPCS-NEXT:    .setfp r11, sp68; FP-AAPCS-NEXT:    mov r11, sp69; FP-AAPCS-NEXT:    mov r0, lr70; FP-AAPCS-NEXT:    pop {r1}71; FP-AAPCS-NEXT:    mov r11, r172; FP-AAPCS-NEXT:    pop {pc}73entry:74  %r = tail call ptr @llvm.returnaddress(i32 0)75  ret ptr %r76}77 78define ptr @callee_saved_low() {79; FP-NONE-LABEL: callee_saved_low:80; FP-NONE:       @ %bb.0: @ %entry81; FP-NONE-NEXT:    .save {r4, r5, r7, lr}82; FP-NONE-NEXT:    push {r4, r5, r7, lr}83; FP-NONE-NEXT:    mov r0, lr84; FP-NONE-NEXT:    @APP85; FP-NONE-NEXT:    @NO_APP86; FP-NONE-NEXT:    pop {r4, r5, r7, pc}87;88; FP-ALL-LABEL: callee_saved_low:89; FP-ALL:       @ %bb.0: @ %entry90; FP-ALL-NEXT:    .save {r4, r5, r7, lr}91; FP-ALL-NEXT:    push {r4, r5, r7, lr}92; FP-ALL-NEXT:    .setfp r7, sp, #893; FP-ALL-NEXT:    add r7, sp, #894; FP-ALL-NEXT:    mov r0, lr95; FP-ALL-NEXT:    @APP96; FP-ALL-NEXT:    @NO_APP97; FP-ALL-NEXT:    pop {r4, r5, r7, pc}98;99; FP-AAPCS-LABEL: callee_saved_low:100; FP-AAPCS:       @ %bb.0: @ %entry101; FP-AAPCS-NEXT:    .save {lr}102; FP-AAPCS-NEXT:    push {lr}103; FP-AAPCS-NEXT:    mov r3, r11104; FP-AAPCS-NEXT:    .save {r11}105; FP-AAPCS-NEXT:    push {r3}106; FP-AAPCS-NEXT:    .setfp r11, sp107; FP-AAPCS-NEXT:    mov r11, sp108; FP-AAPCS-NEXT:    .save {r4, r5}109; FP-AAPCS-NEXT:    push {r4, r5}110; FP-AAPCS-NEXT:    mov r0, lr111; FP-AAPCS-NEXT:    @APP112; FP-AAPCS-NEXT:    @NO_APP113; FP-AAPCS-NEXT:    pop {r4, r5}114; FP-AAPCS-NEXT:    pop {r1}115; FP-AAPCS-NEXT:    mov r11, r1116; FP-AAPCS-NEXT:    pop {pc}117entry:118  call void asm sideeffect "", "~{r4},~{r5}"()119  %r = tail call ptr @llvm.returnaddress(i32 0)120  ret ptr %r121}122 123define ptr @callee_saved_high() {124; FP-NONE-LABEL: callee_saved_high:125; FP-NONE:       @ %bb.0: @ %entry126; FP-NONE-NEXT:    mov r3, r9127; FP-NONE-NEXT:    mov r2, r8128; FP-NONE-NEXT:    .save {r8, r9}129; FP-NONE-NEXT:    push {r2, r3}130; FP-NONE-NEXT:    mov r0, lr131; FP-NONE-NEXT:    @APP132; FP-NONE-NEXT:    @NO_APP133; FP-NONE-NEXT:    pop {r1, r2}134; FP-NONE-NEXT:    mov r8, r1135; FP-NONE-NEXT:    mov r9, r2136; FP-NONE-NEXT:    bx lr137;138; FP-ALL-LABEL: callee_saved_high:139; FP-ALL:       @ %bb.0: @ %entry140; FP-ALL-NEXT:    .save {r7, lr}141; FP-ALL-NEXT:    push {r7, lr}142; FP-ALL-NEXT:    .setfp r7, sp143; FP-ALL-NEXT:    add r7, sp, #0144; FP-ALL-NEXT:    mov r3, r9145; FP-ALL-NEXT:    mov r2, r8146; FP-ALL-NEXT:    .save {r8, r9}147; FP-ALL-NEXT:    push {r2, r3}148; FP-ALL-NEXT:    mov r0, lr149; FP-ALL-NEXT:    @APP150; FP-ALL-NEXT:    @NO_APP151; FP-ALL-NEXT:    pop {r1, r2}152; FP-ALL-NEXT:    mov r8, r1153; FP-ALL-NEXT:    mov r9, r2154; FP-ALL-NEXT:    pop {r7, pc}155;156; FP-AAPCS-LABEL: callee_saved_high:157; FP-AAPCS:       @ %bb.0: @ %entry158; FP-AAPCS-NEXT:    .save {lr}159; FP-AAPCS-NEXT:    push {lr}160; FP-AAPCS-NEXT:    mov r3, r11161; FP-AAPCS-NEXT:    .save {r11}162; FP-AAPCS-NEXT:    push {r3}163; FP-AAPCS-NEXT:    .setfp r11, sp164; FP-AAPCS-NEXT:    mov r11, sp165; FP-AAPCS-NEXT:    mov r3, r9166; FP-AAPCS-NEXT:    mov r2, r8167; FP-AAPCS-NEXT:    .save {r8, r9}168; FP-AAPCS-NEXT:    push {r2, r3}169; FP-AAPCS-NEXT:    mov r0, lr170; FP-AAPCS-NEXT:    @APP171; FP-AAPCS-NEXT:    @NO_APP172; FP-AAPCS-NEXT:    pop {r1, r2}173; FP-AAPCS-NEXT:    mov r8, r1174; FP-AAPCS-NEXT:    mov r9, r2175; FP-AAPCS-NEXT:    pop {r1}176; FP-AAPCS-NEXT:    mov r11, r1177; FP-AAPCS-NEXT:    pop {pc}178entry:179  call void asm sideeffect "", "~{r8},~{r9}"()180  %r = tail call ptr @llvm.returnaddress(i32 0)181  ret ptr %r182}183 184define ptr @large_alloca() {185; FP-NONE-LABEL: large_alloca:186; FP-NONE:       @ %bb.0: @ %entry187; FP-NONE-NEXT:    .save {r4, r5, r6, lr}188; FP-NONE-NEXT:    push {r4, r5, r6, lr}189; FP-NONE-NEXT:    ldr r6, .LCPI4_0190; FP-NONE-NEXT:    .pad #2000191; FP-NONE-NEXT:    add sp, r6192; FP-NONE-NEXT:    mov r4, lr193; FP-NONE-NEXT:    mov r0, sp194; FP-NONE-NEXT:    bl sink_ptr195; FP-NONE-NEXT:    mov r0, r4196; FP-NONE-NEXT:    ldr r6, .LCPI4_1197; FP-NONE-NEXT:    add sp, r6198; FP-NONE-NEXT:    pop {r4, r5, r6, pc}199; FP-NONE-NEXT:    .p2align 2200; FP-NONE-NEXT:  @ %bb.1:201; FP-NONE-NEXT:  .LCPI4_0:202; FP-NONE-NEXT:    .long 4294965296 @ 0xfffff830203; FP-NONE-NEXT:  .LCPI4_1:204; FP-NONE-NEXT:    .long 2000 @ 0x7d0205;206; FP-ALL-LABEL: large_alloca:207; FP-ALL:       @ %bb.0: @ %entry208; FP-ALL-NEXT:    .save {r4, r6, r7, lr}209; FP-ALL-NEXT:    push {r4, r6, r7, lr}210; FP-ALL-NEXT:    .setfp r7, sp, #8211; FP-ALL-NEXT:    add r7, sp, #8212; FP-ALL-NEXT:    ldr r6, .LCPI4_0213; FP-ALL-NEXT:    .pad #2000214; FP-ALL-NEXT:    add sp, r6215; FP-ALL-NEXT:    mov r4, lr216; FP-ALL-NEXT:    mov r0, sp217; FP-ALL-NEXT:    bl sink_ptr218; FP-ALL-NEXT:    mov r0, r4219; FP-ALL-NEXT:    subs r6, r7, #7220; FP-ALL-NEXT:    subs r6, #1221; FP-ALL-NEXT:    mov sp, r6222; FP-ALL-NEXT:    pop {r4, r6, r7, pc}223; FP-ALL-NEXT:    .p2align 2224; FP-ALL-NEXT:  @ %bb.1:225; FP-ALL-NEXT:  .LCPI4_0:226; FP-ALL-NEXT:    .long 4294965296 @ 0xfffff830227;228; FP-AAPCS-LABEL: large_alloca:229; FP-AAPCS:       @ %bb.0: @ %entry230; FP-AAPCS-NEXT:    .save {lr}231; FP-AAPCS-NEXT:    push {lr}232; FP-AAPCS-NEXT:    mov r3, r11233; FP-AAPCS-NEXT:    .save {r11}234; FP-AAPCS-NEXT:    push {r3}235; FP-AAPCS-NEXT:    .setfp r11, sp236; FP-AAPCS-NEXT:    mov r11, sp237; FP-AAPCS-NEXT:    .save {r4, r7}238; FP-AAPCS-NEXT:    push {r4, r7}239; FP-AAPCS-NEXT:    ldr r7, .LCPI4_0240; FP-AAPCS-NEXT:    .pad #2000241; FP-AAPCS-NEXT:    add sp, r7242; FP-AAPCS-NEXT:    mov r4, lr243; FP-AAPCS-NEXT:    mov r0, sp244; FP-AAPCS-NEXT:    bl sink_ptr245; FP-AAPCS-NEXT:    mov r0, r4246; FP-AAPCS-NEXT:    mov r7, r11247; FP-AAPCS-NEXT:    subs r7, #8248; FP-AAPCS-NEXT:    mov sp, r7249; FP-AAPCS-NEXT:    pop {r4, r7}250; FP-AAPCS-NEXT:    pop {r1}251; FP-AAPCS-NEXT:    mov r11, r1252; FP-AAPCS-NEXT:    pop {pc}253; FP-AAPCS-NEXT:    .p2align 2254; FP-AAPCS-NEXT:  @ %bb.1:255; FP-AAPCS-NEXT:  .LCPI4_0:256; FP-AAPCS-NEXT:    .long 4294965296 @ 0xfffff830257entry:258  %big = alloca i8, i32 2000259  tail call void @sink_ptr(ptr %big)260  %r = tail call ptr @llvm.returnaddress(i32 0)261  ret ptr %r262}263 264define ptr @var_alloca(i32 %size) {265; FP-NONE-LABEL: var_alloca:266; FP-NONE:       @ %bb.0: @ %entry267; FP-NONE-NEXT:    .save {r4, r6, r7, lr}268; FP-NONE-NEXT:    push {r4, r6, r7, lr}269; FP-NONE-NEXT:    .setfp r7, sp, #8270; FP-NONE-NEXT:    add r7, sp, #8271; FP-NONE-NEXT:    mov r6, sp272; FP-NONE-NEXT:    mov r4, lr273; FP-NONE-NEXT:    adds r0, r0, #7274; FP-NONE-NEXT:    movs r1, #7275; FP-NONE-NEXT:    bics r0, r1276; FP-NONE-NEXT:    mov r1, sp277; FP-NONE-NEXT:    subs r0, r1, r0278; FP-NONE-NEXT:    mov sp, r0279; FP-NONE-NEXT:    bl sink_ptr280; FP-NONE-NEXT:    mov r0, r4281; FP-NONE-NEXT:    subs r6, r7, #7282; FP-NONE-NEXT:    subs r6, #1283; FP-NONE-NEXT:    mov sp, r6284; FP-NONE-NEXT:    pop {r4, r6, r7, pc}285;286; FP-ALL-LABEL: var_alloca:287; FP-ALL:       @ %bb.0: @ %entry288; FP-ALL-NEXT:    .save {r4, r6, r7, lr}289; FP-ALL-NEXT:    push {r4, r6, r7, lr}290; FP-ALL-NEXT:    .setfp r7, sp, #8291; FP-ALL-NEXT:    add r7, sp, #8292; FP-ALL-NEXT:    mov r6, sp293; FP-ALL-NEXT:    mov r4, lr294; FP-ALL-NEXT:    adds r0, r0, #7295; FP-ALL-NEXT:    movs r1, #7296; FP-ALL-NEXT:    bics r0, r1297; FP-ALL-NEXT:    mov r1, sp298; FP-ALL-NEXT:    subs r0, r1, r0299; FP-ALL-NEXT:    mov sp, r0300; FP-ALL-NEXT:    bl sink_ptr301; FP-ALL-NEXT:    mov r0, r4302; FP-ALL-NEXT:    subs r6, r7, #7303; FP-ALL-NEXT:    subs r6, #1304; FP-ALL-NEXT:    mov sp, r6305; FP-ALL-NEXT:    pop {r4, r6, r7, pc}306;307; FP-AAPCS-LABEL: var_alloca:308; FP-AAPCS:       @ %bb.0: @ %entry309; FP-AAPCS-NEXT:    .save {lr}310; FP-AAPCS-NEXT:    push {lr}311; FP-AAPCS-NEXT:    mov r3, r11312; FP-AAPCS-NEXT:    .save {r11}313; FP-AAPCS-NEXT:    push {r3}314; FP-AAPCS-NEXT:    .setfp r11, sp315; FP-AAPCS-NEXT:    mov r11, sp316; FP-AAPCS-NEXT:    .save {r4, r6}317; FP-AAPCS-NEXT:    push {r4, r6}318; FP-AAPCS-NEXT:    mov r6, sp319; FP-AAPCS-NEXT:    mov r4, lr320; FP-AAPCS-NEXT:    adds r0, r0, #7321; FP-AAPCS-NEXT:    movs r1, #7322; FP-AAPCS-NEXT:    bics r0, r1323; FP-AAPCS-NEXT:    mov r1, sp324; FP-AAPCS-NEXT:    subs r0, r1, r0325; FP-AAPCS-NEXT:    mov sp, r0326; FP-AAPCS-NEXT:    bl sink_ptr327; FP-AAPCS-NEXT:    mov r0, r4328; FP-AAPCS-NEXT:    mov r6, r11329; FP-AAPCS-NEXT:    subs r6, #8330; FP-AAPCS-NEXT:    mov sp, r6331; FP-AAPCS-NEXT:    pop {r4, r6}332; FP-AAPCS-NEXT:    pop {r1}333; FP-AAPCS-NEXT:    mov r11, r1334; FP-AAPCS-NEXT:    pop {pc}335entry:336  %var = alloca i8, i32 %size337  tail call void @sink_ptr(ptr %var)338  %r = tail call ptr @llvm.returnaddress(i32 0)339  ret ptr %r340}341 342define i32 @all_arg_regs(i32 %a, i32 %b, i32 %c, i32 %d) {343; FP-NONE-LABEL: all_arg_regs:344; FP-NONE:       @ %bb.0: @ %entry345; FP-NONE-NEXT:    .save {r4, lr}346; FP-NONE-NEXT:    push {r4, lr}347; FP-NONE-NEXT:    mov r4, lr348; FP-NONE-NEXT:    adds r0, r0, r1349; FP-NONE-NEXT:    adds r0, r0, r2350; FP-NONE-NEXT:    adds r0, r0, r3351; FP-NONE-NEXT:    adds r0, r0, r4352; FP-NONE-NEXT:    pop {r4, pc}353;354; FP-ALL-LABEL: all_arg_regs:355; FP-ALL:       @ %bb.0: @ %entry356; FP-ALL-NEXT:    .save {r4, r6, r7, lr}357; FP-ALL-NEXT:    push {r4, r6, r7, lr}358; FP-ALL-NEXT:    .setfp r7, sp, #8359; FP-ALL-NEXT:    add r7, sp, #8360; FP-ALL-NEXT:    mov r4, lr361; FP-ALL-NEXT:    adds r0, r0, r1362; FP-ALL-NEXT:    adds r0, r0, r2363; FP-ALL-NEXT:    adds r0, r0, r3364; FP-ALL-NEXT:    adds r0, r0, r4365; FP-ALL-NEXT:    pop {r4, r6, r7, pc}366;367; FP-AAPCS-LABEL: all_arg_regs:368; FP-AAPCS:       @ %bb.0: @ %entry369; FP-AAPCS-NEXT:    .save {lr}370; FP-AAPCS-NEXT:    push {lr}371; FP-AAPCS-NEXT:    mov lr, r11372; FP-AAPCS-NEXT:    .save {r11}373; FP-AAPCS-NEXT:    push {lr}374; FP-AAPCS-NEXT:    .setfp r11, sp375; FP-AAPCS-NEXT:    mov r11, sp376; FP-AAPCS-NEXT:    .save {r4, r7}377; FP-AAPCS-NEXT:    push {r4, r7}378; FP-AAPCS-NEXT:    ldr r7, [sp, #12]379; FP-AAPCS-NEXT:    mov lr, r7380; FP-AAPCS-NEXT:    mov r4, lr381; FP-AAPCS-NEXT:    adds r0, r0, r1382; FP-AAPCS-NEXT:    adds r0, r0, r2383; FP-AAPCS-NEXT:    adds r0, r0, r3384; FP-AAPCS-NEXT:    adds r0, r0, r4385; FP-AAPCS-NEXT:    pop {r4, r7}386; FP-AAPCS-NEXT:    pop {r1}387; FP-AAPCS-NEXT:    mov r11, r1388; FP-AAPCS-NEXT:    pop {pc}389entry:390  %r = tail call ptr @llvm.returnaddress(i32 0)391  %ri = ptrtoint ptr %r to i32392  %t1 = add i32 %a, %b393  %t2 = add i32 %t1, %c394  %t3 = add i32 %t2, %d395  %t4 = add i32 %t3, %ri396  ret i32 %t4397}398 399define ptr @ra_depth_1() {400; FP-NONE-LABEL: ra_depth_1:401; FP-NONE:       @ %bb.0: @ %entry402; FP-NONE-NEXT:    .save {r7, lr}403; FP-NONE-NEXT:    push {r7, lr}404; FP-NONE-NEXT:    .setfp r7, sp405; FP-NONE-NEXT:    add r7, sp, #0406; FP-NONE-NEXT:    ldr r0, [r7]407; FP-NONE-NEXT:    ldr r0, [r0, #4]408; FP-NONE-NEXT:    pop {r7, pc}409;410; FP-ALL-LABEL: ra_depth_1:411; FP-ALL:       @ %bb.0: @ %entry412; FP-ALL-NEXT:    .save {r7, lr}413; FP-ALL-NEXT:    push {r7, lr}414; FP-ALL-NEXT:    .setfp r7, sp415; FP-ALL-NEXT:    add r7, sp, #0416; FP-ALL-NEXT:    ldr r0, [r7]417; FP-ALL-NEXT:    ldr r0, [r0, #4]418; FP-ALL-NEXT:    pop {r7, pc}419;420; FP-AAPCS-LABEL: ra_depth_1:421; FP-AAPCS:       @ %bb.0: @ %entry422; FP-AAPCS-NEXT:    .save {lr}423; FP-AAPCS-NEXT:    push {lr}424; FP-AAPCS-NEXT:    mov r3, r11425; FP-AAPCS-NEXT:    .save {r11}426; FP-AAPCS-NEXT:    push {r3}427; FP-AAPCS-NEXT:    .setfp r11, sp428; FP-AAPCS-NEXT:    mov r11, sp429; FP-AAPCS-NEXT:    mov r0, r11430; FP-AAPCS-NEXT:    ldr r0, [r0]431; FP-AAPCS-NEXT:    ldr r0, [r0, #4]432; FP-AAPCS-NEXT:    pop {r1}433; FP-AAPCS-NEXT:    mov r11, r1434; FP-AAPCS-NEXT:    pop {pc}435entry:436  %r = tail call ptr @llvm.returnaddress(i32 1)437  ret ptr %r438}439 440declare void @sink_ptr(ptr)441