brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 421583d Raw
295 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=thumbv6m | FileCheck %s3; RUN: llc < %s -mtriple=thumbv6m -mattr=+execute-only | FileCheck %s -check-prefix=V6M4; RUN: llc < %s -mtriple=thumbv8m.base -mattr=+execute-only | FileCheck %s -check-prefix=V8MBASE5 6define dso_local i32 @main() #0 {7; CHECK-LABEL: main:8; CHECK:       @ %bb.0: @ %entry9; CHECK-NEXT:    push {r7, lr}10; CHECK-NEXT:    sub sp, #2411; CHECK-NEXT:    movs r0, #012; CHECK-NEXT:    str r0, [sp, #4]13; CHECK-NEXT:    ldr r0, .LCPI0_014; CHECK-NEXT:    ldr r0, [r0]15; CHECK-NEXT:    str r0, [sp, #20]16; CHECK-NEXT:    add r0, sp, #817; CHECK-NEXT:    ldrb r0, [r0]18; CHECK-NEXT:    ldr r1, [sp, #20]19; CHECK-NEXT:    ldr r2, .LCPI0_020; CHECK-NEXT:    ldr r2, [r2]21; CHECK-NEXT:    cmp r2, r122; CHECK-NEXT:    bne .LBB0_223; CHECK-NEXT:  @ %bb.1: @ %entry24; CHECK-NEXT:    add sp, #2425; CHECK-NEXT:    pop {r7, pc}26; CHECK-NEXT:  .LBB0_2: @ %entry27; CHECK-NEXT:    bl __stack_chk_fail28; CHECK-NEXT:    .p2align 229; CHECK-NEXT:  @ %bb.3:30; CHECK-NEXT:  .LCPI0_0:31; CHECK-NEXT:    .long __stack_chk_guard32;33; V6M-LABEL: main:34; V6M:       @ %bb.0: @ %entry35; V6M-NEXT:    push {r7, lr}36; V6M-NEXT:    sub sp, #2437; V6M-NEXT:    movs r0, #038; V6M-NEXT:    str r0, [sp, #4]39; V6M-NEXT:    mrs r12, apsr40; V6M-NEXT:    movs r0, :upper8_15:__stack_chk_guard41; V6M-NEXT:    lsls r0, r0, #842; V6M-NEXT:    adds r0, :upper0_7:__stack_chk_guard43; V6M-NEXT:    lsls r0, r0, #844; V6M-NEXT:    adds r0, :lower8_15:__stack_chk_guard45; V6M-NEXT:    lsls r0, r0, #846; V6M-NEXT:    adds r0, :lower0_7:__stack_chk_guard47; V6M-NEXT:    msr apsr, r1248; V6M-NEXT:    ldr r0, [r0]49; V6M-NEXT:    str r0, [sp, #20]50; V6M-NEXT:    add r0, sp, #851; V6M-NEXT:    ldrb r0, [r0]52; V6M-NEXT:    ldr r1, [sp, #20]53; V6M-NEXT:    mrs r12, apsr54; V6M-NEXT:    movs r2, :upper8_15:__stack_chk_guard55; V6M-NEXT:    lsls r2, r2, #856; V6M-NEXT:    adds r2, :upper0_7:__stack_chk_guard57; V6M-NEXT:    lsls r2, r2, #858; V6M-NEXT:    adds r2, :lower8_15:__stack_chk_guard59; V6M-NEXT:    lsls r2, r2, #860; V6M-NEXT:    adds r2, :lower0_7:__stack_chk_guard61; V6M-NEXT:    msr apsr, r1262; V6M-NEXT:    ldr r2, [r2]63; V6M-NEXT:    cmp r2, r164; V6M-NEXT:    bne .LBB0_265; V6M-NEXT:  @ %bb.1: @ %entry66; V6M-NEXT:    add sp, #2467; V6M-NEXT:    pop {r7, pc}68; V6M-NEXT:  .LBB0_2: @ %entry69; V6M-NEXT:    bl __stack_chk_fail70;71; V8MBASE-LABEL: main:72; V8MBASE:       @ %bb.0: @ %entry73; V8MBASE-NEXT:    push {r7, lr}74; V8MBASE-NEXT:    sub sp, #2475; V8MBASE-NEXT:    movs r0, #076; V8MBASE-NEXT:    str r0, [sp, #4]77; V8MBASE-NEXT:    movw r0, :lower16:__stack_chk_guard78; V8MBASE-NEXT:    movt r0, :upper16:__stack_chk_guard79; V8MBASE-NEXT:    ldr r0, [r0]80; V8MBASE-NEXT:    str r0, [sp, #20]81; V8MBASE-NEXT:    add r0, sp, #882; V8MBASE-NEXT:    ldrb r0, [r0]83; V8MBASE-NEXT:    ldr r1, [sp, #20]84; V8MBASE-NEXT:    movw r2, :lower16:__stack_chk_guard85; V8MBASE-NEXT:    movt r2, :upper16:__stack_chk_guard86; V8MBASE-NEXT:    ldr r2, [r2]87; V8MBASE-NEXT:    cmp r2, r188; V8MBASE-NEXT:    bne .LBB0_289; V8MBASE-NEXT:  @ %bb.1: @ %entry90; V8MBASE-NEXT:    add sp, #2491; V8MBASE-NEXT:    pop {r7, pc}92; V8MBASE-NEXT:  .LBB0_2: @ %entry93; V8MBASE-NEXT:    bl __stack_chk_fail94entry:95  %retval = alloca i32, align 496  %buffer = alloca [9 x i8], align 197  store i32 0, ptr %retval, align 498  %arrayidx = getelementptr inbounds [9 x i8], ptr %buffer, i32 0, i32 099  %0 = load i8, ptr %arrayidx, align 1100  %conv = zext i8 %0 to i32101  ret i32 %conv102}103 104@aa = hidden local_unnamed_addr global i32 0, align 4105@bb = hidden local_unnamed_addr global i64 0, align 8106 107define dso_local i64 @cc() local_unnamed_addr #1 {108; CHECK-LABEL: cc:109; CHECK:       @ %bb.0: @ %entry110; CHECK-NEXT:    push {r4, r5, r7, lr}111; CHECK-NEXT:    sub sp, #8112; CHECK-NEXT:    movs r0, #1113; CHECK-NEXT:    lsls r3, r0, #31114; CHECK-NEXT:    ldr r0, .LCPI1_0115; CHECK-NEXT:    ldr r2, [r0]116; CHECK-NEXT:    asrs r4, r2, #31117; CHECK-NEXT:    eors r3, r4118; CHECK-NEXT:    ldr r0, .LCPI1_1119; CHECK-NEXT:    ldm r0!, {r1, r5}120; CHECK-NEXT:    subs r0, r2, r1121; CHECK-NEXT:    sbcs r3, r5122; CHECK-NEXT:    subs r0, r2, r1123; CHECK-NEXT:    ldr r1, .LCPI1_2124; CHECK-NEXT:    ldr r1, [r1]125; CHECK-NEXT:    str r1, [sp, #4]126; CHECK-NEXT:    mov r1, r4127; CHECK-NEXT:    sbcs r1, r5128; CHECK-NEXT:    ands r3, r4129; CHECK-NEXT:    ands r2, r0130; CHECK-NEXT:    mov r4, r2131; CHECK-NEXT:    orrs r4, r3132; CHECK-NEXT:    cmp r4, #0133; CHECK-NEXT:    beq .LBB1_2134; CHECK-NEXT:  @ %bb.1: @ %entry135; CHECK-NEXT:    mov r1, r3136; CHECK-NEXT:  .LBB1_2: @ %entry137; CHECK-NEXT:    beq .LBB1_4138; CHECK-NEXT:  @ %bb.3: @ %entry139; CHECK-NEXT:    mov r0, r2140; CHECK-NEXT:  .LBB1_4: @ %entry141; CHECK-NEXT:    ldr r2, [sp, #4]142; CHECK-NEXT:    ldr r3, .LCPI1_2143; CHECK-NEXT:    ldr r3, [r3]144; CHECK-NEXT:    cmp r3, r2145; CHECK-NEXT:    bne .LBB1_6146; CHECK-NEXT:  @ %bb.5: @ %entry147; CHECK-NEXT:    add sp, #8148; CHECK-NEXT:    pop {r4, r5, r7, pc}149; CHECK-NEXT:  .LBB1_6: @ %entry150; CHECK-NEXT:    bl __stack_chk_fail151; CHECK-NEXT:    .p2align 2152; CHECK-NEXT:  @ %bb.7:153; CHECK-NEXT:  .LCPI1_0:154; CHECK-NEXT:    .long aa155; CHECK-NEXT:  .LCPI1_1:156; CHECK-NEXT:    .long bb157; CHECK-NEXT:  .LCPI1_2:158; CHECK-NEXT:    .long __stack_chk_guard159;160; V6M-LABEL: cc:161; V6M:       @ %bb.0: @ %entry162; V6M-NEXT:    push {r4, r5, r7, lr}163; V6M-NEXT:    sub sp, #8164; V6M-NEXT:    movs r0, #1165; V6M-NEXT:    lsls r3, r0, #31166; V6M-NEXT:    movs r0, :upper8_15:aa167; V6M-NEXT:    lsls r0, r0, #8168; V6M-NEXT:    adds r0, :upper0_7:aa169; V6M-NEXT:    lsls r0, r0, #8170; V6M-NEXT:    adds r0, :lower8_15:aa171; V6M-NEXT:    lsls r0, r0, #8172; V6M-NEXT:    adds r0, :lower0_7:aa173; V6M-NEXT:    ldr r2, [r0]174; V6M-NEXT:    asrs r4, r2, #31175; V6M-NEXT:    eors r3, r4176; V6M-NEXT:    movs r0, :upper8_15:bb177; V6M-NEXT:    lsls r0, r0, #8178; V6M-NEXT:    adds r0, :upper0_7:bb179; V6M-NEXT:    lsls r0, r0, #8180; V6M-NEXT:    adds r0, :lower8_15:bb181; V6M-NEXT:    lsls r0, r0, #8182; V6M-NEXT:    adds r0, :lower0_7:bb183; V6M-NEXT:    ldm r0!, {r1, r5}184; V6M-NEXT:    subs r0, r2, r1185; V6M-NEXT:    sbcs r3, r5186; V6M-NEXT:    subs r0, r2, r1187; V6M-NEXT:    mrs r12, apsr188; V6M-NEXT:    movs r1, :upper8_15:__stack_chk_guard189; V6M-NEXT:    lsls r1, r1, #8190; V6M-NEXT:    adds r1, :upper0_7:__stack_chk_guard191; V6M-NEXT:    lsls r1, r1, #8192; V6M-NEXT:    adds r1, :lower8_15:__stack_chk_guard193; V6M-NEXT:    lsls r1, r1, #8194; V6M-NEXT:    adds r1, :lower0_7:__stack_chk_guard195; V6M-NEXT:    msr apsr, r12196; V6M-NEXT:    ldr r1, [r1]197; V6M-NEXT:    str r1, [sp, #4]198; V6M-NEXT:    mov r1, r4199; V6M-NEXT:    sbcs r1, r5200; V6M-NEXT:    ands r3, r4201; V6M-NEXT:    ands r2, r0202; V6M-NEXT:    mov r4, r2203; V6M-NEXT:    orrs r4, r3204; V6M-NEXT:    cmp r4, #0205; V6M-NEXT:    beq .LBB1_2206; V6M-NEXT:  @ %bb.1: @ %entry207; V6M-NEXT:    mov r1, r3208; V6M-NEXT:  .LBB1_2: @ %entry209; V6M-NEXT:    beq .LBB1_4210; V6M-NEXT:  @ %bb.3: @ %entry211; V6M-NEXT:    mov r0, r2212; V6M-NEXT:  .LBB1_4: @ %entry213; V6M-NEXT:    ldr r2, [sp, #4]214; V6M-NEXT:    mrs r12, apsr215; V6M-NEXT:    movs r3, :upper8_15:__stack_chk_guard216; V6M-NEXT:    lsls r3, r3, #8217; V6M-NEXT:    adds r3, :upper0_7:__stack_chk_guard218; V6M-NEXT:    lsls r3, r3, #8219; V6M-NEXT:    adds r3, :lower8_15:__stack_chk_guard220; V6M-NEXT:    lsls r3, r3, #8221; V6M-NEXT:    adds r3, :lower0_7:__stack_chk_guard222; V6M-NEXT:    msr apsr, r12223; V6M-NEXT:    ldr r3, [r3]224; V6M-NEXT:    cmp r3, r2225; V6M-NEXT:    bne .LBB1_6226; V6M-NEXT:  @ %bb.5: @ %entry227; V6M-NEXT:    add sp, #8228; V6M-NEXT:    pop {r4, r5, r7, pc}229; V6M-NEXT:  .LBB1_6: @ %entry230; V6M-NEXT:    bl __stack_chk_fail231;232; V8MBASE-LABEL: cc:233; V8MBASE:       @ %bb.0: @ %entry234; V8MBASE-NEXT:    push {r4, r5, r7, lr}235; V8MBASE-NEXT:    sub sp, #8236; V8MBASE-NEXT:    movs r0, #1237; V8MBASE-NEXT:    lsls r3, r0, #31238; V8MBASE-NEXT:    movw r0, :lower16:aa239; V8MBASE-NEXT:    movt r0, :upper16:aa240; V8MBASE-NEXT:    ldr r2, [r0]241; V8MBASE-NEXT:    asrs r4, r2, #31242; V8MBASE-NEXT:    eors r3, r4243; V8MBASE-NEXT:    movw r0, :lower16:bb244; V8MBASE-NEXT:    movt r0, :upper16:bb245; V8MBASE-NEXT:    ldm r0!, {r1, r5}246; V8MBASE-NEXT:    subs r0, r2, r1247; V8MBASE-NEXT:    sbcs r3, r5248; V8MBASE-NEXT:    subs r0, r2, r1249; V8MBASE-NEXT:    movw r1, :lower16:__stack_chk_guard250; V8MBASE-NEXT:    movt r1, :upper16:__stack_chk_guard251; V8MBASE-NEXT:    ldr r1, [r1]252; V8MBASE-NEXT:    str r1, [sp, #4]253; V8MBASE-NEXT:    mov r1, r4254; V8MBASE-NEXT:    sbcs r1, r5255; V8MBASE-NEXT:    ands r3, r4256; V8MBASE-NEXT:    ands r2, r0257; V8MBASE-NEXT:    mov r4, r2258; V8MBASE-NEXT:    orrs r4, r3259; V8MBASE-NEXT:    cmp r4, #0260; V8MBASE-NEXT:    beq .LBB1_2261; V8MBASE-NEXT:  @ %bb.1: @ %entry262; V8MBASE-NEXT:    mov r1, r3263; V8MBASE-NEXT:  .LBB1_2: @ %entry264; V8MBASE-NEXT:    beq .LBB1_4265; V8MBASE-NEXT:  @ %bb.3: @ %entry266; V8MBASE-NEXT:    mov r0, r2267; V8MBASE-NEXT:  .LBB1_4: @ %entry268; V8MBASE-NEXT:    ldr r2, [sp, #4]269; V8MBASE-NEXT:    movw r3, :lower16:__stack_chk_guard270; V8MBASE-NEXT:    movt r3, :upper16:__stack_chk_guard271; V8MBASE-NEXT:    ldr r3, [r3]272; V8MBASE-NEXT:    cmp r3, r2273; V8MBASE-NEXT:    bne .LBB1_6274; V8MBASE-NEXT:  @ %bb.5: @ %entry275; V8MBASE-NEXT:    add sp, #8276; V8MBASE-NEXT:    pop {r4, r5, r7, pc}277; V8MBASE-NEXT:  .LBB1_6: @ %entry278; V8MBASE-NEXT:    bl __stack_chk_fail279 280entry:281  %0 = load i32, ptr @aa, align 4282  %conv = sext i32 %0 to i64283  %xor = xor i64 %conv, -9223372036854775808284  %1 = load i64, ptr @bb, align 8285  %sub = sub nsw i64 %xor, %1286  %and = and i64 %sub, %conv287  %tobool.not = icmp eq i64 %and, 0288  %sub3 = sub nsw i64 %conv, %1289  %spec.select = select i1 %tobool.not, i64 %sub3, i64 %and290  ret i64 %spec.select291}292 293attributes #0 = { ssp "stack-protector-buffer-size"="8" }294attributes #1 = {  sspreq }295