blob: b9d24e5d8856ef08e20ed4478d360e28b7f78bb4 [file] [edit]
; NOTE: Do not autogenerate
; The update tools can't understand this usage of split-file. (Maybe we should
; add llc flags to set the PIC metadata.)
; RUN: rm -rf %t && split-file %s %t && cd %t
; RUN: cat a.ll nopic.ll > b.ll
; RUN: cat a.ll pic.ll > c.ll
; RUN: llc < b.ll | FileCheck %s
; RUN: llc < c.ll -relocation-model=pic | FileCheck %s -check-prefix=PIC
;--- a.ll
target triple = "aarch64-unknown-linux-gnu"
define dso_local void @f(ptr noundef %g) #0 {
; CHECK: adrp x9, __stack_chk_guard
; CHECK: ldr w9, [x9, :lo12:__stack_chk_guard]
; CHECK: adrp x8, __stack_chk_guard
; CHECK: ldr w8, [x8, :lo12:__stack_chk_guard]
; PIC: adrp x9, :got:__stack_chk_guard
; PIC: ldr x9, [x9, :got_lo12:__stack_chk_guard]
; PIC: ldr w9, [x9]
; PIC: adrp x8, :got:__stack_chk_guard
; PIC: ldr x8, [x8, :got_lo12:__stack_chk_guard]
; PIC: ldr w8, [x8]
entry:
%g.addr = alloca ptr, align 8
%x = alloca [1000 x i8], align 1
store ptr %g, ptr %g.addr, align 8
%0 = load ptr, ptr %g.addr, align 8
%arraydecay = getelementptr inbounds [1000 x i8], ptr %x, i64 0, i64 0
call void %0(ptr noundef %arraydecay)
ret void
}
attributes #0 = { ssp }
;--- nopic.ll
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"stack-protector-guard-value-width", i32 4}
;--- pic.ll
!llvm.module.flags = !{!0, !1}
!0 = !{i32 1, !"stack-protector-guard-value-width", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}