16ae7b735SFangrui Song; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 25888dee7SFangrui Song;; direct-access-external-data is false due to PIC Level, so __stack_chk_guard 35888dee7SFangrui Song;; is dso_preemtable. Check that we use GOT PIC code sequence as well because 45888dee7SFangrui Song;; R_ARM_GOT_ABS does not have assembler support. 56ae7b735SFangrui Song; RUN: llc -relocation-model=static < %s | FileCheck %s 65888dee7SFangrui Song; RUN: llc -relocation-model=pic < %s | FileCheck %s 73b943c02SFangrui Song;; Also check Thumb1 and Thumb2. 83b943c02SFangrui Song; RUN: llc -mtriple=thumbv6-linux-gnueabi -relocation-model=static < %s | FileCheck %s --check-prefix=THUMB1 93b943c02SFangrui Song; RUN: llc -mtriple=thumbv6-linux-gnueabi -relocation-model=pic < %s | FileCheck %s --check-prefix=THUMB1-PIC 103b943c02SFangrui Song; RUN: llc -mtriple=thumbv7-linux-gnueabi -relocation-model=static < %s | FileCheck %s --check-prefix=THUMB2 113b943c02SFangrui Song; RUN: llc -mtriple=thumbv7-linux-gnueabi -relocation-model=pic < %s | FileCheck %s --check-prefix=THUMB2-PIC 126ae7b735SFangrui Song 136ae7b735SFangrui Songtarget triple = "armv7a-linux-gnueabi" 146ae7b735SFangrui Song 156ae7b735SFangrui Songdefine i32 @test1() #0 { 166ae7b735SFangrui Song; CHECK-LABEL: test1: 176ae7b735SFangrui Song; CHECK: @ %bb.0: 186ae7b735SFangrui Song; CHECK-NEXT: push {r11, lr} 196ae7b735SFangrui Song; CHECK-NEXT: sub sp, sp, #8 206ae7b735SFangrui Song; CHECK-NEXT: sub sp, sp, #1024 215888dee7SFangrui Song; CHECK-NEXT: ldr r0, .LCPI0_0 225888dee7SFangrui Song; CHECK-NEXT: .LPC0_0: 235888dee7SFangrui Song; CHECK-NEXT: add r0, pc, r0 246ae7b735SFangrui Song; CHECK-NEXT: ldr r0, [r0] 256ae7b735SFangrui Song; CHECK-NEXT: ldr r0, [r0] 266ae7b735SFangrui Song; CHECK-NEXT: str r0, [sp, #1028] 276ae7b735SFangrui Song; CHECK-NEXT: add r0, sp, #4 286ae7b735SFangrui Song; CHECK-NEXT: bl foo 296ae7b735SFangrui Song; CHECK-NEXT: ldr r0, [sp, #1028] 305888dee7SFangrui Song; CHECK-NEXT: ldr r1, .LCPI0_1 315888dee7SFangrui Song; CHECK-NEXT: .LPC0_1: 325888dee7SFangrui Song; CHECK-NEXT: add r1, pc, r1 336ae7b735SFangrui Song; CHECK-NEXT: ldr r1, [r1] 346ae7b735SFangrui Song; CHECK-NEXT: ldr r1, [r1] 356ae7b735SFangrui Song; CHECK-NEXT: cmp r1, r0 366ae7b735SFangrui Song; CHECK-NEXT: moveq r0, #0 376ae7b735SFangrui Song; CHECK-NEXT: addeq sp, sp, #8 386ae7b735SFangrui Song; CHECK-NEXT: addeq sp, sp, #1024 396ae7b735SFangrui Song; CHECK-NEXT: popeq {r11, pc} 406ae7b735SFangrui Song; CHECK-NEXT: .LBB0_1: 416ae7b735SFangrui Song; CHECK-NEXT: bl __stack_chk_fail 425888dee7SFangrui Song; CHECK-NEXT: .p2align 2 435888dee7SFangrui Song; CHECK-NEXT: @ %bb.2: 445888dee7SFangrui Song; CHECK-NEXT: .LCPI0_0: 455888dee7SFangrui Song; CHECK-NEXT: .Ltmp0: 465888dee7SFangrui Song; CHECK-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+8)-.Ltmp0) 475888dee7SFangrui Song; CHECK-NEXT: .LCPI0_1: 485888dee7SFangrui Song; CHECK-NEXT: .Ltmp1: 495888dee7SFangrui Song; CHECK-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+8)-.Ltmp1) 503b943c02SFangrui Song; 513b943c02SFangrui Song; THUMB1-LABEL: test1: 523b943c02SFangrui Song; THUMB1: @ %bb.0: 533b943c02SFangrui Song; THUMB1-NEXT: .save {r4, r5, r6, lr} 543b943c02SFangrui Song; THUMB1-NEXT: push {r4, r5, r6, lr} 553b943c02SFangrui Song; THUMB1-NEXT: .pad #508 563b943c02SFangrui Song; THUMB1-NEXT: sub sp, #508 573b943c02SFangrui Song; THUMB1-NEXT: .pad #508 583b943c02SFangrui Song; THUMB1-NEXT: sub sp, #508 593b943c02SFangrui Song; THUMB1-NEXT: .pad #16 603b943c02SFangrui Song; THUMB1-NEXT: sub sp, #16 613b943c02SFangrui Song; THUMB1-NEXT: ldr r0, .LCPI0_0 62*4cb90ca8SFangrui Song; THUMB1-NEXT: .LPC0_0: 63*4cb90ca8SFangrui Song; THUMB1-NEXT: add r0, pc 643b943c02SFangrui Song; THUMB1-NEXT: ldr r0, [r0] 653b943c02SFangrui Song; THUMB1-NEXT: ldr r0, [r0] 663b943c02SFangrui Song; THUMB1-NEXT: add r1, sp, #904 673b943c02SFangrui Song; THUMB1-NEXT: str r0, [r1, #124] 683b943c02SFangrui Song; THUMB1-NEXT: add r0, sp, #4 693b943c02SFangrui Song; THUMB1-NEXT: bl foo 703b943c02SFangrui Song; THUMB1-NEXT: add r0, sp, #904 713b943c02SFangrui Song; THUMB1-NEXT: ldr r0, [r0, #124] 72*4cb90ca8SFangrui Song; THUMB1-NEXT: ldr r1, .LCPI0_1 73*4cb90ca8SFangrui Song; THUMB1-NEXT: .LPC0_1: 74*4cb90ca8SFangrui Song; THUMB1-NEXT: add r1, pc 753b943c02SFangrui Song; THUMB1-NEXT: ldr r1, [r1] 763b943c02SFangrui Song; THUMB1-NEXT: ldr r1, [r1] 773b943c02SFangrui Song; THUMB1-NEXT: cmp r1, r0 783b943c02SFangrui Song; THUMB1-NEXT: bne .LBB0_2 793b943c02SFangrui Song; THUMB1-NEXT: @ %bb.1: 803b943c02SFangrui Song; THUMB1-NEXT: movs r0, #0 813b943c02SFangrui Song; THUMB1-NEXT: add sp, #508 823b943c02SFangrui Song; THUMB1-NEXT: add sp, #508 833b943c02SFangrui Song; THUMB1-NEXT: add sp, #16 843b943c02SFangrui Song; THUMB1-NEXT: pop {r4, r5, r6, pc} 853b943c02SFangrui Song; THUMB1-NEXT: .LBB0_2: 863b943c02SFangrui Song; THUMB1-NEXT: bl __stack_chk_fail 873b943c02SFangrui Song; THUMB1-NEXT: .p2align 2 883b943c02SFangrui Song; THUMB1-NEXT: @ %bb.3: 893b943c02SFangrui Song; THUMB1-NEXT: .LCPI0_0: 90*4cb90ca8SFangrui Song; THUMB1-NEXT: .Ltmp0: 91*4cb90ca8SFangrui Song; THUMB1-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0) 92*4cb90ca8SFangrui Song; THUMB1-NEXT: .LCPI0_1: 93*4cb90ca8SFangrui Song; THUMB1-NEXT: .Ltmp1: 94*4cb90ca8SFangrui Song; THUMB1-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1) 953b943c02SFangrui Song; 963b943c02SFangrui Song; THUMB1-PIC-LABEL: test1: 973b943c02SFangrui Song; THUMB1-PIC: @ %bb.0: 983b943c02SFangrui Song; THUMB1-PIC-NEXT: .save {r4, r5, r6, lr} 993b943c02SFangrui Song; THUMB1-PIC-NEXT: push {r4, r5, r6, lr} 1003b943c02SFangrui Song; THUMB1-PIC-NEXT: .pad #508 1013b943c02SFangrui Song; THUMB1-PIC-NEXT: sub sp, #508 1023b943c02SFangrui Song; THUMB1-PIC-NEXT: .pad #508 1033b943c02SFangrui Song; THUMB1-PIC-NEXT: sub sp, #508 1043b943c02SFangrui Song; THUMB1-PIC-NEXT: .pad #16 1053b943c02SFangrui Song; THUMB1-PIC-NEXT: sub sp, #16 1063b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r0, .LCPI0_0 1073b943c02SFangrui Song; THUMB1-PIC-NEXT: .LPC0_0: 1083b943c02SFangrui Song; THUMB1-PIC-NEXT: add r0, pc 1093b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r0, [r0] 1103b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r0, [r0] 1113b943c02SFangrui Song; THUMB1-PIC-NEXT: add r1, sp, #904 1123b943c02SFangrui Song; THUMB1-PIC-NEXT: str r0, [r1, #124] 1133b943c02SFangrui Song; THUMB1-PIC-NEXT: add r0, sp, #4 1143b943c02SFangrui Song; THUMB1-PIC-NEXT: bl foo 1153b943c02SFangrui Song; THUMB1-PIC-NEXT: add r0, sp, #904 1163b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r0, [r0, #124] 1173b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r1, .LCPI0_1 1183b943c02SFangrui Song; THUMB1-PIC-NEXT: .LPC0_1: 1193b943c02SFangrui Song; THUMB1-PIC-NEXT: add r1, pc 1203b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r1, [r1] 1213b943c02SFangrui Song; THUMB1-PIC-NEXT: ldr r1, [r1] 1223b943c02SFangrui Song; THUMB1-PIC-NEXT: cmp r1, r0 1233b943c02SFangrui Song; THUMB1-PIC-NEXT: bne .LBB0_2 1243b943c02SFangrui Song; THUMB1-PIC-NEXT: @ %bb.1: 1253b943c02SFangrui Song; THUMB1-PIC-NEXT: movs r0, #0 1263b943c02SFangrui Song; THUMB1-PIC-NEXT: add sp, #508 1273b943c02SFangrui Song; THUMB1-PIC-NEXT: add sp, #508 1283b943c02SFangrui Song; THUMB1-PIC-NEXT: add sp, #16 1293b943c02SFangrui Song; THUMB1-PIC-NEXT: pop {r4, r5, r6, pc} 1303b943c02SFangrui Song; THUMB1-PIC-NEXT: .LBB0_2: 1313b943c02SFangrui Song; THUMB1-PIC-NEXT: bl __stack_chk_fail 1323b943c02SFangrui Song; THUMB1-PIC-NEXT: .p2align 2 1333b943c02SFangrui Song; THUMB1-PIC-NEXT: @ %bb.3: 1343b943c02SFangrui Song; THUMB1-PIC-NEXT: .LCPI0_0: 1353b943c02SFangrui Song; THUMB1-PIC-NEXT: .Ltmp0: 1363b943c02SFangrui Song; THUMB1-PIC-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0) 1373b943c02SFangrui Song; THUMB1-PIC-NEXT: .LCPI0_1: 1383b943c02SFangrui Song; THUMB1-PIC-NEXT: .Ltmp1: 1393b943c02SFangrui Song; THUMB1-PIC-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1) 1403b943c02SFangrui Song; 1413b943c02SFangrui Song; THUMB2-LABEL: test1: 1423b943c02SFangrui Song; THUMB2: @ %bb.0: 1433b943c02SFangrui Song; THUMB2-NEXT: .save {r7, lr} 1443b943c02SFangrui Song; THUMB2-NEXT: push {r7, lr} 1453b943c02SFangrui Song; THUMB2-NEXT: .pad #1032 1463b943c02SFangrui Song; THUMB2-NEXT: sub.w sp, sp, #1032 147*4cb90ca8SFangrui Song; THUMB2-NEXT: ldr r0, .LCPI0_0 148*4cb90ca8SFangrui Song; THUMB2-NEXT: .LPC0_0: 149*4cb90ca8SFangrui Song; THUMB2-NEXT: add r0, pc 1503b943c02SFangrui Song; THUMB2-NEXT: ldr r0, [r0] 1513b943c02SFangrui Song; THUMB2-NEXT: ldr r0, [r0] 1523b943c02SFangrui Song; THUMB2-NEXT: str.w r0, [sp, #1028] 1533b943c02SFangrui Song; THUMB2-NEXT: add r0, sp, #4 1543b943c02SFangrui Song; THUMB2-NEXT: bl foo 1553b943c02SFangrui Song; THUMB2-NEXT: ldr.w r0, [sp, #1028] 156*4cb90ca8SFangrui Song; THUMB2-NEXT: ldr r1, .LCPI0_1 157*4cb90ca8SFangrui Song; THUMB2-NEXT: .LPC0_1: 158*4cb90ca8SFangrui Song; THUMB2-NEXT: add r1, pc 1593b943c02SFangrui Song; THUMB2-NEXT: ldr r1, [r1] 1603b943c02SFangrui Song; THUMB2-NEXT: ldr r1, [r1] 1613b943c02SFangrui Song; THUMB2-NEXT: cmp r1, r0 1623b943c02SFangrui Song; THUMB2-NEXT: ittt eq 1633b943c02SFangrui Song; THUMB2-NEXT: moveq r0, #0 1643b943c02SFangrui Song; THUMB2-NEXT: addeq.w sp, sp, #1032 1653b943c02SFangrui Song; THUMB2-NEXT: popeq {r7, pc} 1663b943c02SFangrui Song; THUMB2-NEXT: .LBB0_1: 1673b943c02SFangrui Song; THUMB2-NEXT: bl __stack_chk_fail 168*4cb90ca8SFangrui Song; THUMB2-NEXT: .p2align 2 169*4cb90ca8SFangrui Song; THUMB2-NEXT: @ %bb.2: 170*4cb90ca8SFangrui Song; THUMB2-NEXT: .LCPI0_0: 171*4cb90ca8SFangrui Song; THUMB2-NEXT: .Ltmp0: 172*4cb90ca8SFangrui Song; THUMB2-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0) 173*4cb90ca8SFangrui Song; THUMB2-NEXT: .LCPI0_1: 174*4cb90ca8SFangrui Song; THUMB2-NEXT: .Ltmp1: 175*4cb90ca8SFangrui Song; THUMB2-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1) 1763b943c02SFangrui Song; 1773b943c02SFangrui Song; THUMB2-PIC-LABEL: test1: 1783b943c02SFangrui Song; THUMB2-PIC: @ %bb.0: 1793b943c02SFangrui Song; THUMB2-PIC-NEXT: .save {r7, lr} 1803b943c02SFangrui Song; THUMB2-PIC-NEXT: push {r7, lr} 1813b943c02SFangrui Song; THUMB2-PIC-NEXT: .pad #1032 1823b943c02SFangrui Song; THUMB2-PIC-NEXT: sub.w sp, sp, #1032 1833b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r0, .LCPI0_0 1843b943c02SFangrui Song; THUMB2-PIC-NEXT: .LPC0_0: 1853b943c02SFangrui Song; THUMB2-PIC-NEXT: add r0, pc 1863b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r0, [r0] 1873b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r0, [r0] 1883b943c02SFangrui Song; THUMB2-PIC-NEXT: str.w r0, [sp, #1028] 1893b943c02SFangrui Song; THUMB2-PIC-NEXT: add r0, sp, #4 1903b943c02SFangrui Song; THUMB2-PIC-NEXT: bl foo 1913b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr.w r0, [sp, #1028] 1923b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r1, .LCPI0_1 1933b943c02SFangrui Song; THUMB2-PIC-NEXT: .LPC0_1: 1943b943c02SFangrui Song; THUMB2-PIC-NEXT: add r1, pc 1953b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r1, [r1] 1963b943c02SFangrui Song; THUMB2-PIC-NEXT: ldr r1, [r1] 1973b943c02SFangrui Song; THUMB2-PIC-NEXT: cmp r1, r0 1983b943c02SFangrui Song; THUMB2-PIC-NEXT: ittt eq 1993b943c02SFangrui Song; THUMB2-PIC-NEXT: moveq r0, #0 2003b943c02SFangrui Song; THUMB2-PIC-NEXT: addeq.w sp, sp, #1032 2013b943c02SFangrui Song; THUMB2-PIC-NEXT: popeq {r7, pc} 2023b943c02SFangrui Song; THUMB2-PIC-NEXT: .LBB0_1: 2033b943c02SFangrui Song; THUMB2-PIC-NEXT: bl __stack_chk_fail 2043b943c02SFangrui Song; THUMB2-PIC-NEXT: .p2align 2 2053b943c02SFangrui Song; THUMB2-PIC-NEXT: @ %bb.2: 2063b943c02SFangrui Song; THUMB2-PIC-NEXT: .LCPI0_0: 2073b943c02SFangrui Song; THUMB2-PIC-NEXT: .Ltmp0: 2083b943c02SFangrui Song; THUMB2-PIC-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_0+4)-.Ltmp0) 2093b943c02SFangrui Song; THUMB2-PIC-NEXT: .LCPI0_1: 2103b943c02SFangrui Song; THUMB2-PIC-NEXT: .Ltmp1: 2113b943c02SFangrui Song; THUMB2-PIC-NEXT: .long __stack_chk_guard(GOT_PREL)-((.LPC0_1+4)-.Ltmp1) 2126ae7b735SFangrui Song %a1 = alloca [256 x i32], align 4 2136ae7b735SFangrui Song call void @foo(ptr %a1) #3 2146ae7b735SFangrui Song ret i32 0 2156ae7b735SFangrui Song} 2166ae7b735SFangrui Song 2176ae7b735SFangrui Songdeclare void @foo(ptr) 2186ae7b735SFangrui Song 2196ae7b735SFangrui Songattributes #0 = { nounwind sspstrong } 2206ae7b735SFangrui Song 2216ae7b735SFangrui Song!llvm.module.flags = !{!0} 2226ae7b735SFangrui Song!0 = !{i32 8, !"PIC Level", i32 2} 223