48 lines · plain
1; RUN: llc -mtriple=thumbv6m-linux-eabi -mattr=+execute-only %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOMOVW-SIZE,CHECK-NOMOVW-LIMIT2; RUN: llc -mtriple=thumbv8m.base-linux-eabi -mattr=+execute-only %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MOVW-SIZE,CHECK-MOVW-LIMIT3; RUN: llc -mtriple=thumbv7m-linux-eabi -mattr=+execute-only %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MOVW-SIZE,CHECK-MRC-LIMIT4; RUN: llc -mtriple=thumbv8m.main-linux-eabi -mattr=+execute-only %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MOVW-SIZE,CHECK-MRC-LIMIT5 6%struct.large_struct = type { [500 x i8] }7declare void @fn(ptr)8 9; CHECK-LABEL: test:10; CHECK: mov [[SP:r[0-9]+]], sp11; CHECK-MOVW-SIZE-NEXT: movw [[SIZE:r[0-9]+]], #403212; CHECK-NOMOVW-SIZE-NEXT: movs [[SIZE:r[0-9]+]], #1513; CHECK-NOMOVW-SIZE-NEXT: lsls [[SIZE]], [[SIZE]], #814; CHECK-NOMOVW-SIZE-NEXT: adds [[SIZE]], #19215; CHECK-NEXT: sub{{s?}} [[SP]], [[SP]], [[SIZE]]16; CHECK-MOVW-LIMIT-NEXT: movw [[LIMIT:r[0-9]+]], :lower16:__STACK_LIMIT17; CHECK-MOVW-LIMIT-NEXT: movt [[LIMIT]], :upper16:__STACK_LIMIT18; CHECK-NOMOVW-LIMIT-NEXT: movs [[LIMIT:r[0-9]+]], :upper8_15:__STACK_LIMIT19; CHECK-NOMOVW-LIMIT-NEXT: lsls [[LIMIT]], [[LIMIT]], #820; CHECK-NOMOVW-LIMIT-NEXT: adds [[LIMIT]], :upper0_7:__STACK_LIMIT21; CHECK-NOMOVW-LIMIT-NEXT: lsls [[LIMIT]], [[LIMIT]], #822; CHECK-NOMOVW-LIMIT-NEXT: adds [[LIMIT]], :lower8_15:__STACK_LIMIT23; CHECK-NOMOVW-LIMIT-NEXT: lsls [[LIMIT]], [[LIMIT]], #824; CHECK-NOMOVW-LIMIT-NEXT: adds [[LIMIT]], :lower0_7:__STACK_LIMIT25; CHECK-MRC-LIMIT-NEXT: p15, #0, [[LIMIT:r[0-9]+]], c13, c0, #326; CHECK-NEXT: ldr [[LIMIT]], [[[LIMIT]]{{.*}}]27; CHECK-NEXT: cmp [[LIMIT]], [[SP]]28; CHECK-NEXT: bls29; CHECK-NEXT: @{{.*}}:30; CHECK-MOVW-SIZE-NEXT: movw r4, #403231; CHECK-NOMOVW-SIZE-NEXT: movs r4, #1532; CHECK-NOMOVW-SIZE-NEXT: lsls r4, r4, #833; CHECK-NOMOVW-SIZE-NEXT: adds r4, #19234; CHECK-MOVW-SIZE-NEXT: movw r5, #48435; CHECK-NOMOVW-SIZE-NEXT: movs r5, #136; CHECK-NOMOVW-SIZE-NEXT: lsls r5, r5, #837; CHECK-NOMOVW-SIZE-NEXT: adds r5, #22838; CHECK-NEXT: push {lr}39; CHECK-NEXT: bl __morestack40 41define void @test(ptr byval(%struct.large_struct) align 4 %arg) #0 {42 %ptr = alloca i32, i32 100043 call void @fn(ptr %ptr)44 ret void45}46 47attributes #0 = { "split-stack" }48