191 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumb-linux-androideabi -mcpu=arm1156t2-s -mattr=+thumb2 -verify-machineinstrs | FileCheck %s -check-prefix=THUMB3; RUN: llc < %s -mtriple=arm-linux-androideabi -mcpu=arm1156t2-s -verify-machineinstrs | FileCheck %s -check-prefix=ARM4 5 6; Just to prevent the alloca from being optimized away7declare void @dummy_use(ptr, i32)8 9define void @test_basic() #0 {10; THUMB-LABEL: test_basic:11; THUMB: @ %bb.0:12; THUMB-NEXT: push {r4, r5}13; THUMB-NEXT: mrc p15, #0, r4, c13, c0, #314; THUMB-NEXT: mov r5, sp15; THUMB-NEXT: ldr.w r4, [r4, #252]16; THUMB-NEXT: cmp r4, r517; THUMB-NEXT: bls .LBB0_218; THUMB-NEXT: @ %bb.1:19; THUMB-NEXT: mov r4, #4820; THUMB-NEXT: mov r5, #021; THUMB-NEXT: push {lr}22; THUMB-NEXT: bl __morestack23; THUMB-NEXT: ldr lr, [sp], #424; THUMB-NEXT: pop {r4, r5}25; THUMB-NEXT: bx lr26; THUMB-NEXT: .LBB0_2:27; THUMB-NEXT: pop {r4, r5}28; THUMB-NEXT: .save {r7, lr}29; THUMB-NEXT: push {r7, lr}30; THUMB-NEXT: .pad #4031; THUMB-NEXT: sub sp, #4032; THUMB-NEXT: mov r0, sp33; THUMB-NEXT: movs r1, #1034; THUMB-NEXT: bl dummy_use35; THUMB-NEXT: add sp, #4036; THUMB-NEXT: pop {r7, pc}37;38; ARM-LABEL: test_basic:39; ARM: @ %bb.0:40; ARM-NEXT: push {r4, r5}41; ARM-NEXT: mrc p15, #0, r4, c13, c0, #342; ARM-NEXT: mov r5, sp43; ARM-NEXT: ldr r4, [r4, #252]44; ARM-NEXT: cmp r4, r545; ARM-NEXT: bls .LBB0_246; ARM-NEXT: @ %bb.1:47; ARM-NEXT: mov r4, #4848; ARM-NEXT: mov r5, #049; ARM-NEXT: stmdb sp!, {lr}50; ARM-NEXT: bl __morestack51; ARM-NEXT: ldm sp!, {lr}52; ARM-NEXT: pop {r4, r5}53; ARM-NEXT: bx lr54; ARM-NEXT: .LBB0_2:55; ARM-NEXT: pop {r4, r5}56; ARM-NEXT: .save {r11, lr}57; ARM-NEXT: push {r11, lr}58; ARM-NEXT: .pad #4059; ARM-NEXT: sub sp, sp, #4060; ARM-NEXT: mov r0, sp61; ARM-NEXT: mov r1, #1062; ARM-NEXT: bl dummy_use63; ARM-NEXT: add sp, sp, #4064; ARM-NEXT: pop {r11, pc}65 %mem = alloca i32, i32 1066 call void @dummy_use (ptr %mem, i32 10)67 ret void68}69 70define void @test_large() #0 {71 %mem = alloca i32, i32 1000072 call void @dummy_use (ptr %mem, i32 0)73 ret void74 75; THUMB-LABEL: test_large:76 77; THUMB: push {r4, r5}78; THUMB-NEXT: mov r5, sp79; THUMB-NEXT: movw r4, #4019280; THUMB-NEXT: sub r5, r5, r481; THUMB-NEXT: mrc p15, #0, r4, c13, c0, #382; THUMB-NEXT: ldr.w r4, [r4, #252]83; THUMB-NEXT: cmp r4, r584; THUMB-NEXT: bls .LBB1_285 86; THUMB: movw r4, #4019287; THUMB-NEXT: mov r5, #088; THUMB-NEXT: push {lr}89; THUMB-NEXT: bl __morestack90; THUMB-NEXT: ldr lr, [sp], #491; THUMB-NEXT: pop {r4, r5}92; THUMB-NEXT: bx lr93 94; THUMB: pop {r4, r5}95 96 97; ARM-LABEL: test_large:98 99; ARM: push {r4, r5}100; ARM-NEXT: ldr r4, .LCPI1_0101; ARM-NEXT: sub r5, sp, r4102; ARM-NEXT: mrc p15, #0, r4, c13, c0, #3103; ARM-NEXT: ldr r4, [r4, #252]104; ARM-NEXT: cmp r4, r5105; ARM-NEXT: bls .LBB1_2106 107; ARM: ldr r4, .LCPI1_0108; ARM-NEXT: mov r5, #0109; ARM-NEXT: stmdb sp!, {lr}110; ARM-NEXT: bl __morestack111; ARM-NEXT: ldm sp!, {lr}112; ARM-NEXT: pop {r4, r5}113; ARM-NEXT: bx lr114 115; ARM: pop {r4, r5}116 117; ARM: .LCPI1_0:118; ARM-NEXT: .long 40192119 120}121 122define fastcc void @test_fastcc_large() #0 {123 %mem = alloca i32, i32 10000124 call void @dummy_use (ptr %mem, i32 0)125 ret void126 127; THUMB-LABEL: test_fastcc_large:128 129; THUMB: push {r4, r5}130; THUMB-NEXT: mov r5, sp131; THUMB-NEXT: movw r4, #40192132; THUMB-NEXT: sub r5, r5, r4133; THUMB-NEXT: mrc p15, #0, r4, c13, c0, #3134; THUMB-NEXT: ldr.w r4, [r4, #252]135; THUMB-NEXT: cmp r4, r5136; THUMB-NEXT: bls .LBB2_2137 138; THUMB: movw r4, #40192139; THUMB-NEXT: mov r5, #0140; THUMB-NEXT: push {lr}141; THUMB-NEXT: bl __morestack142; THUMB-NEXT: ldr lr, [sp], #4143; THUMB-NEXT: pop {r4, r5}144; THUMB-NEXT: bx lr145 146; THUMB: pop {r4, r5}147 148; ARM-LABEL: test_fastcc_large:149 150; ARM: push {r4, r5}151; ARM-NEXT: ldr r4, .LCPI2_0152; ARM-NEXT: sub r5, sp, r4153; ARM-NEXT: mrc p15, #0, r4, c13, c0, #3154; ARM-NEXT: ldr r4, [r4, #252]155; ARM-NEXT: cmp r4, r5156; ARM-NEXT: bls .LBB2_2157 158; ARM: ldr r4, .LCPI2_0159; ARM-NEXT: mov r5, #0160; ARM-NEXT: stmdb sp!, {lr}161; ARM-NEXT: bl __morestack162; ARM-NEXT: ldm sp!, {lr}163; ARM-NEXT: pop {r4, r5}164; ARM-NEXT: bx lr165 166; ARM: .LCPI2_0:167; ARM-NEXT: .long 40192168}169 170 171declare void @panic() unnamed_addr172 173; We used to crash while compiling the following function.174; THUMB-LABEL: build_should_not_segfault:175; ARM-LABEL: build_should_not_segfault:176define void @build_should_not_segfault(i8 %x) unnamed_addr #0 {177start:178 %_0 = icmp ult i8 %x, 16179 %or.cond = select i1 undef, i1 true, i1 %_0180 br i1 %or.cond, label %bb1, label %bb2181 182bb1:183 ret void184 185bb2:186 call void @panic()187 unreachable188}189 190attributes #0 = { "split-stack" }191