brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · dc06c26 Raw
147 lines · plain
1; RUN: llc --force-dwarf-frame-section --exception-model=arm %s -o - --target-abi=aapcs16 | FileCheck %s2; RUN: llc --filetype=obj %s --exception-model=arm -o - --target-abi=aapcs16 | llvm-readelf -s --unwind - | FileCheck %s --check-prefix=UNWIND3target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"4 5; Triple tweaked so we get 16-byte stack alignment and better test coverage.6target triple = "armv7m-none-linux-android"7 8; -Oz9; volatile int a, b, c, d, e, f, g, h, i;10;11; int x() {12;   int r = (a + b) / (c + d) + e + f / g + h + i;13;   return r + 1;14; }15;16; int y() {17;   int r = (a + b) / (c + d) + e + f / g + h + i;18;   return r + 2;19; }20 21@a = hidden global i32 0, align 422@b = hidden global i32 0, align 423@c = hidden global i32 0, align 424@d = hidden global i32 0, align 425@e = hidden global i32 0, align 426@f = hidden global i32 0, align 427@g = hidden global i32 0, align 428@h = hidden global i32 0, align 429@i = hidden global i32 0, align 430 31 32define hidden i32 @x() local_unnamed_addr #0 {33entry:34  %0 = load volatile i32, ptr @a, align 435  %1 = load volatile i32, ptr @b, align 436  %add = add nsw i32 %1, %037  %2 = load volatile i32, ptr @c, align 438  %3 = load volatile i32, ptr @d, align 439  %add1 = add nsw i32 %3, %240  %div = sdiv i32 %add, %add141  %4 = load volatile i32, ptr @e, align 442  %5 = load volatile i32, ptr @f, align 443  %6 = load volatile i32, ptr @g, align 444  %div3 = sdiv i32 %5, %645  %7 = load volatile i32, ptr @h, align 446  %8 = load volatile i32, ptr @i, align 447  %add2 = add i32 %div, 148  %add4 = add i32 %add2, %449  %add5 = add i32 %add4, %div350  %add6 = add i32 %add5, %751  %add7 = add i32 %add6, %852  ret i32 %add753}54 55; CHECK-LABEL: x:56; CHECK:       ldr    r0, .LCPI0_057; CHECK-NEXT:  pac    r12, lr, sp58; CHECK-NEXT:  .pad #859; CHECK-NEXT:  .save  {ra_auth_code, lr}60; CHECK-NEXT:  strd   r12, lr, [sp, #-16]!61; CHECK-NEXT:  .cfi_def_cfa_offset 1662; CHECK-NEXT:  .cfi_offset lr, -1263; CHECK-NEXT:  .cfi_offset ra_auth_code, -1664; CHECK-NEXT:  bl    OUTLINED_FUNCTION_065; CHECK-NEXT:  ldrd  r12, lr, [sp], #1666; CHECK-NEXT:  .cfi_def_cfa_offset 067; CHECK-NEXT:  .cfi_restore lr68; CHECK-NEXT:  .cfi_undefined ra_auth_code69; CHECK-NEXT:  aut    r12, lr, sp70; CHECK-NEXT:  adds   r0, #171; CHECK-NEXT:  bx     lr72 73define hidden i32 @y() local_unnamed_addr #0 {74entry:75  %0 = load volatile i32, ptr @a, align 476  %1 = load volatile i32, ptr @b, align 477  %add = add nsw i32 %1, %078  %2 = load volatile i32, ptr @c, align 479  %3 = load volatile i32, ptr @d, align 480  %add1 = add nsw i32 %3, %281  %div = sdiv i32 %add, %add182  %4 = load volatile i32, ptr @e, align 483  %5 = load volatile i32, ptr @f, align 484  %6 = load volatile i32, ptr @g, align 485  %div3 = sdiv i32 %5, %686  %7 = load volatile i32, ptr @h, align 487  %8 = load volatile i32, ptr @i, align 488  %add2 = add i32 %div, 289  %add4 = add i32 %add2, %490  %add5 = add i32 %add4, %div391  %add6 = add i32 %add5, %792  %add7 = add i32 %add6, %893  ret i32 %add794}95; CHECK-LABEL: y:96; CHECK:      ldr    r0, .LCPI1_097; CHECK-NEXT: pac    r12, lr, sp98; CHECK-NEXT:  .pad #899; CHECK-NEXT: .save  {ra_auth_code, lr}100; CHECK-NEXT: strd   r12, lr, [sp, #-16]!101; CHECK-NEXT: .cfi_def_cfa_offset 16102; CHECK-NEXT: .cfi_offset lr, -12103; CHECK-NEXT: .cfi_offset ra_auth_code, -16104; CHECK-NEXT: bl    OUTLINED_FUNCTION_0105; CHECK-NEXT: ldrd  r12, lr, [sp], #16106; CHECK-NEXT: .cfi_def_cfa_offset 0107; CHECK-NEXT: .cfi_restore lr108; CHECK-NEXT: .cfi_undefined ra_auth_code109; CHECK-NEXT: aut   r12, lr, sp110; CHECK-NEXT: adds  r0, #2111; CHECK-NEXT: bx    lr112 113; CHECK-LABEL: OUTLINED_FUNCTION_0:114; CHECK-NOT: pac115; CHECK-NOT: aut116; CHECK-NOT: r12117; CHECK: bx lr118 119attributes #0 = { minsize nofree norecurse nounwind optsize uwtable "sign-return-address"="non-leaf"}120 121!llvm.module.flags = !{!0, !1, !2}122 123!0 = !{i32 8, !"branch-target-enforcement", i32 0}124!1 = !{i32 8, !"sign-return-address", i32 1}125!2 = !{i32 8, !"sign-return-address-all", i32 0}126 127; UNWIND-LABEL: FunctionAddress: 0x0128; UNWIND:       0xB4      ; pop ra_auth_code129; UNWIND-NEXT:  0x84 0x00 ; pop {lr}130; UNWIND-NEXT:  0x01      ; vsp = vsp + 8131; UNWIND-NEXT:  0xB0      ; finish132 133; UNWIND-LABEL: FunctionAddress: 0x20134; UNWIND:       0xB4      ; pop ra_auth_code135; UNWIND-NEXT:  0x84 0x00 ; pop {lr}136; UNWIND-NEXT:  0x01      ; vsp = vsp + 8137; UNWIND-NEXT:  0xB0      ; finish138 139; UNWIND-LABEL:  FunctionAddress: 0x40140; UNWIND:        Opcodes [141; UNWIND-NEXT:     0xB0      ; finish142 143 144; UNWINND-LABEL: 00000041 {{.*}} OUTLINED_FUNCTION_0145; UNWINND-LABEL: 00000001 {{.*}} x146; UNWINND-LABEL: 00000021 {{.*}} y147