brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · a9c3be8 Raw
304 lines · plain
1; RUN: llc < %s -mtriple=arm-linux-androideabi -mattr=+v4t -verify-machineinstrs | FileCheck %s -check-prefix=ARM-android2; RUN: llc < %s -mtriple=arm-linux-unknown-gnueabi -mattr=+v4t  -verify-machineinstrs | FileCheck %s -check-prefix=ARM-linux3 4; We used to crash with filetype=obj5; RUN: llc < %s -mtriple=arm-linux-androideabi -filetype=obj6; RUN: llc < %s -mtriple=arm-linux-unknown-gnueabi -filetype=obj7 8 9; Just to prevent the alloca from being optimized away10declare void @dummy_use(ptr, i32)11 12define void @test_basic() #0 {13        %mem = alloca i32, i32 1014        call void @dummy_use (ptr %mem, i32 10)15	ret void16 17; ARM-linux-LABEL: test_basic:18 19; ARM-linux:      push    {r4, r5}20; ARM-linux-NEXT: mrc     p15, #0, r4, c13, c0, #321; ARM-linux-NEXT: mov     r5, sp22; ARM-linux-NEXT: ldr     r4, [r4, #4]23; ARM-linux-NEXT: cmp     r4, r524; ARM-linux-NEXT: bls     .LBB0_225 26; ARM-linux:      mov     r4, #4827; ARM-linux-NEXT: mov     r5, #028; ARM-linux-NEXT: stmdb   sp!, {lr}29; ARM-linux-NEXT: bl      __morestack30; ARM-linux-NEXT: ldm     sp!, {lr}31; ARM-linux-NEXT: pop     {r4, r5}32; ARM-linux-NEXT: bx      lr33 34; ARM-linux:      pop     {r4, r5}35 36; ARM-android-LABEL: test_basic:37 38; ARM-android:      push    {r4, r5}39; ARM-android-NEXT: mrc     p15, #0, r4, c13, c0, #340; ARM-android-NEXT: mov     r5, sp41; ARM-android-NEXT: ldr     r4, [r4, #252]42; ARM-android-NEXT: cmp     r4, r543; ARM-android-NEXT: bls     .LBB0_244 45; ARM-android:      mov     r4, #4846; ARM-android-NEXT: mov     r5, #047; ARM-android-NEXT: stmdb   sp!, {lr}48; ARM-android-NEXT: bl      __morestack49; ARM-android-NEXT: ldm     sp!, {lr}50; ARM-android-NEXT: pop     {r4, r5}51; ARM-android-NEXT: bx      lr52 53; ARM-android:      pop     {r4, r5}54 55}56 57define i32 @test_nested(ptr nest %closure, i32 %other) #0 {58       %addend = load i32 , ptr %closure59       %result = add i32 %other, %addend60       %mem = alloca i32, i32 1061       call void @dummy_use (ptr %mem, i32 10)62       ret i32 %result63 64; ARM-linux-LABEL: test_nested:65 66; ARM-linux:      push    {r4, r5}67; ARM-linux-NEXT: mrc     p15, #0, r4, c13, c0, #368; ARM-linux-NEXT: mov     r5, sp69; ARM-linux-NEXT: ldr     r4, [r4, #4]70; ARM-linux-NEXT: cmp     r4, r571; ARM-linux-NEXT: bls     .LBB1_272 73; ARM-linux:      mov     r4, #5674; ARM-linux-NEXT: mov     r5, #075; ARM-linux-NEXT: stmdb   sp!, {lr}76; ARM-linux-NEXT: bl      __morestack77; ARM-linux-NEXT: ldm     sp!, {lr}78; ARM-linux-NEXT: pop     {r4, r5}79; ARM-linux-NEXT: bx      lr80 81; ARM-linux:      pop     {r4, r5}82 83; ARM-android-LABEL: test_nested:84 85; ARM-android:      push    {r4, r5}86; ARM-android-NEXT: mrc     p15, #0, r4, c13, c0, #387; ARM-android-NEXT: mov     r5, sp88; ARM-android-NEXT: ldr     r4, [r4, #252]89; ARM-android-NEXT: cmp     r4, r590; ARM-android-NEXT: bls     .LBB1_291 92; ARM-android:      mov     r4, #5693; ARM-android-NEXT: mov     r5, #094; ARM-android-NEXT: stmdb   sp!, {lr}95; ARM-android-NEXT: bl      __morestack96; ARM-android-NEXT: ldm     sp!, {lr}97; ARM-android-NEXT: pop     {r4, r5}98; ARM-android-NEXT: bx      lr99 100; ARM-android:      pop     {r4, r5}101 102}103 104define void @test_large() #0 {105        %mem = alloca i32, i32 10000106        call void @dummy_use (ptr %mem, i32 0)107        ret void108 109; ARM-linux-LABEL: test_large:110 111; ARM-linux:      push    {r4, r5}112; ARM-linux-NEXT: ldr     r4, .LCPI2_0113; ARM-linux-NEXT: sub     r5, sp, r4114; ARM-linux-NEXT: mrc     p15, #0, r4, c13, c0, #3115; ARM-linux-NEXT: ldr     r4, [r4, #4]116; ARM-linux-NEXT: cmp     r4, r5117; ARM-linux-NEXT: bls     .LBB2_2118 119; ARM-linux:      ldr     r4, .LCPI2_0120; ARM-linux-NEXT: mov     r5, #0121; ARM-linux-NEXT: stmdb   sp!, {lr}122; ARM-linux-NEXT: bl      __morestack123; ARM-linux-NEXT: ldm     sp!, {lr}124; ARM-linux-NEXT: pop     {r4, r5}125; ARM-linux-NEXT: bx      lr126 127; ARM-linux:      pop     {r4, r5}128 129; ARM-linux:      .LCPI2_0:130; ARM-linux-NEXT: .long   40192131 132; ARM-android-LABEL: test_large:133 134; ARM-android:      push    {r4, r5}135; ARM-android-NEXT: ldr     r4, .LCPI2_0136; ARM-android-NEXT: sub     r5, sp, r4137; ARM-android-NEXT: mrc     p15, #0, r4, c13, c0, #3138; ARM-android-NEXT: ldr     r4, [r4, #252]139; ARM-android-NEXT: cmp     r4, r5140; ARM-android-NEXT: bls     .LBB2_2141 142; ARM-android:      ldr     r4, .LCPI2_0143; ARM-android-NEXT: mov     r5, #0144; ARM-android-NEXT: stmdb   sp!, {lr}145; ARM-android-NEXT: bl      __morestack146; ARM-android-NEXT: ldm     sp!, {lr}147; ARM-android-NEXT: pop     {r4, r5}148; ARM-android-NEXT: bx      lr149 150; ARM-android:      pop     {r4, r5}151 152; ARM-android:      .LCPI2_0:153; ARM-android-NEXT: .long   40192154 155}156 157define fastcc void @test_fastcc() #0 {158        %mem = alloca i32, i32 10159        call void @dummy_use (ptr %mem, i32 10)160        ret void161 162; ARM-linux-LABEL: test_fastcc:163 164; ARM-linux:      push    {r4, r5}165; ARM-linux-NEXT: mrc     p15, #0, r4, c13, c0, #3166; ARM-linux-NEXT: mov     r5, sp167; ARM-linux-NEXT: ldr     r4, [r4, #4]168; ARM-linux-NEXT: cmp     r4, r5169; ARM-linux-NEXT: bls     .LBB3_2170 171; ARM-linux:      mov     r4, #48172; ARM-linux-NEXT: mov     r5, #0173; ARM-linux-NEXT: stmdb   sp!, {lr}174; ARM-linux-NEXT: bl      __morestack175; ARM-linux-NEXT: ldm     sp!, {lr}176; ARM-linux-NEXT: pop     {r4, r5}177; ARM-linux-NEXT: bx      lr178 179; ARM-linux:      pop     {r4, r5}180 181; ARM-android-LABEL: test_fastcc:182 183; ARM-android:      push    {r4, r5}184; ARM-android-NEXT: mrc     p15, #0, r4, c13, c0, #3185; ARM-android-NEXT: mov     r5, sp186; ARM-android-NEXT: ldr     r4, [r4, #252]187; ARM-android-NEXT: cmp     r4, r5188; ARM-android-NEXT: bls     .LBB3_2189 190; ARM-android:      mov     r4, #48191; ARM-android-NEXT: mov     r5, #0192; ARM-android-NEXT: stmdb   sp!, {lr}193; ARM-android-NEXT: bl      __morestack194; ARM-android-NEXT: ldm     sp!, {lr}195; ARM-android-NEXT: pop     {r4, r5}196; ARM-android-NEXT: bx      lr197 198; ARM-android:      pop     {r4, r5}199 200}201 202define fastcc void @test_fastcc_large() #0 {203        %mem = alloca i32, i32 10000204        call void @dummy_use (ptr %mem, i32 0)205        ret void206 207; ARM-linux-LABEL: test_fastcc_large:208 209; ARM-linux:      push    {r4, r5}210; ARM-linux-NEXT: ldr     r4, .LCPI4_0211; ARM-linux-NEXT: sub     r5, sp, r4212; ARM-linux-NEXT: mrc     p15, #0, r4, c13, c0, #3213; ARM-linux-NEXT: ldr     r4, [r4, #4]214; ARM-linux-NEXT: cmp     r4, r5215; ARM-linux-NEXT: bls     .LBB4_2216 217; ARM-linux:      ldr     r4, .LCPI4_0218; ARM-linux-NEXT: mov     r5, #0219; ARM-linux-NEXT: stmdb   sp!, {lr}220; ARM-linux-NEXT: bl      __morestack221; ARM-linux-NEXT: ldm     sp!, {lr}222; ARM-linux-NEXT: pop     {r4, r5}223; ARM-linux-NEXT: bx      lr224 225; ARM-linux:      pop     {r4, r5}226 227; ARM-linux:      .LCPI4_0:228; ARM-linux-NEXT: .long   40192229 230; ARM-android-LABEL: test_fastcc_large:231 232; ARM-android:      push    {r4, r5}233; ARM-android-NEXT: ldr     r4, .LCPI4_0234; ARM-android-NEXT: sub     r5, sp, r4235; ARM-android-NEXT: mrc     p15, #0, r4, c13, c0, #3236; ARM-android-NEXT: ldr     r4, [r4, #252]237; ARM-android-NEXT: cmp     r4, r5238; ARM-android-NEXT: bls     .LBB4_2239 240; ARM-android:      ldr     r4, .LCPI4_0241; ARM-android-NEXT: mov     r5, #0242; ARM-android-NEXT: stmdb   sp!, {lr}243; ARM-android-NEXT: bl      __morestack244; ARM-android-NEXT: ldm     sp!, {lr}245; ARM-android-NEXT: pop     {r4, r5}246; ARM-android-NEXT: bx      lr247 248; ARM-android:      pop     {r4, r5}249 250; ARM-android:      .LCPI4_0:251; ARM-android-NEXT: .long   40192252 253}254 255define void @test_nostack() #0 {256	ret void257 258; ARM-linux-LABEL: test_nostack:259; ARM-linux-NOT:   bl __morestack260 261; ARM-android-LABEL: test_nostack:262; ARM-android-NOT:   bl __morestack263}264 265; Test to make sure that a morestack call is generated if there is a266; sibling call, even if the function in question has no stack frame267; (PR37807).268 269declare i32 @callee(i32)270 271define i32 @test_sibling_call_empty_frame(i32 %x) #0 {272  %call = tail call i32 @callee(i32 %x) #0273  ret i32 %call274 275; ARM-linux-LABEL: test_sibling_call_empty_frame:276; ARM-linux:      bl      __morestack277 278; ARM-android-LABEL: test_sibling_call_empty_frame:279; ARM-android:      bl      __morestack280 281}282 283 284declare void @panic() unnamed_addr285 286; We used to crash while compiling the following function.287; ARM-linux-LABEL: build_should_not_segfault:288; ARM-android-LABEL: build_should_not_segfault:289define void @build_should_not_segfault(i8 %x) unnamed_addr #0 {290start:291  %_0 = icmp ult i8 %x, 16292  %or.cond = select i1 undef, i1 true, i1 %_0293  br i1 %or.cond, label %bb1, label %bb2294 295bb1:296  ret void297 298bb2:299  call void @panic()300  unreachable301}302 303attributes #0 = { "split-stack" }304