blob: 87e384c88c2eef5bc8b313364aa43dac12c03da2 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=x86_64-linux-gnu -code-model=medium -relocation-model=static -large-data-threshold=16 < %s | FileCheck %s --check-prefix=STATIC
; RUN: llc -mtriple=x86_64-linux-gnu -code-model=medium -relocation-model=pic -large-data-threshold=16 < %s | FileCheck %s --check-prefix=PIC
@small_in_large_bss = dso_local global i32 0 "bss-section"=".lbss.my_bss"
@small_in_large_data = dso_local global i32 1 "data-section"=".ldata.my_data"
@small_in_large_rodata = dso_local constant i32 2 "rodata-section"=".lrodata.my_rodata"
@ptr = dso_local global i32 0
@small_in_large_relro = dso_local constant ptr @ptr "relro-section"=".ldata.rel.ro.my_relro"
@large_in_small_implicit_bss = dso_local global [4 x i64] zeroinitializer "bss-section"="my_bss"
@large_in_small_implicit_data = dso_local global [4 x i64] [i64 1, i64 0, i64 0, i64 0] "data-section"="my_data"
@large_in_small_implicit_rodata = dso_local constant [4 x i64] zeroinitializer "rodata-section"="my_rodata"
@large_in_small_implicit_relro = dso_local constant [4 x ptr] [ptr @ptr, ptr null, ptr null, ptr null] "relro-section"="my_relro"
define i32 @load_bss() {
; STATIC-LABEL: load_bss:
; STATIC: # %bb.0:
; STATIC-NEXT: movabsq $small_in_large_bss, %rax
; STATIC-NEXT: movl (%rax), %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: load_bss:
; PIC: # %bb.0:
; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
; PIC-NEXT: movabsq $.Lsmall_in_large_bss$local@GOTOFF, %rcx
; PIC-NEXT: movl (%rax,%rcx), %eax
; PIC-NEXT: retq
%v = load i32, ptr @small_in_large_bss
ret i32 %v
}
define i32 @load_data() {
; STATIC-LABEL: load_data:
; STATIC: # %bb.0:
; STATIC-NEXT: movabsq $small_in_large_data, %rax
; STATIC-NEXT: movl (%rax), %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: load_data:
; PIC: # %bb.0:
; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
; PIC-NEXT: movabsq $.Lsmall_in_large_data$local@GOTOFF, %rcx
; PIC-NEXT: movl (%rax,%rcx), %eax
; PIC-NEXT: retq
%v = load i32, ptr @small_in_large_data
ret i32 %v
}
define i32 @load_rodata() {
; STATIC-LABEL: load_rodata:
; STATIC: # %bb.0:
; STATIC-NEXT: movabsq $small_in_large_rodata, %rax
; STATIC-NEXT: movl (%rax), %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: load_rodata:
; PIC: # %bb.0:
; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
; PIC-NEXT: movabsq $.Lsmall_in_large_rodata$local@GOTOFF, %rcx
; PIC-NEXT: movl (%rax,%rcx), %eax
; PIC-NEXT: retq
%v = load i32, ptr @small_in_large_rodata
ret i32 %v
}
define ptr @load_relro() {
; STATIC-LABEL: load_relro:
; STATIC: # %bb.0:
; STATIC-NEXT: movq small_in_large_relro(%rip), %rax
; STATIC-NEXT: retq
;
; PIC-LABEL: load_relro:
; PIC: # %bb.0:
; PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
; PIC-NEXT: movabsq $.Lsmall_in_large_relro$local@GOTOFF, %rcx
; PIC-NEXT: movq (%rax,%rcx), %rax
; PIC-NEXT: retq
%v = load ptr, ptr @small_in_large_relro
ret ptr %v
}
define ptr @lea_large_in_small_implicit_bss() {
; STATIC-LABEL: lea_large_in_small_implicit_bss:
; STATIC: # %bb.0:
; STATIC-NEXT: movl $large_in_small_implicit_bss, %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: lea_large_in_small_implicit_bss:
; PIC: # %bb.0:
; PIC-NEXT: leaq .Llarge_in_small_implicit_bss$local(%rip), %rax
; PIC-NEXT: retq
ret ptr @large_in_small_implicit_bss
}
define ptr @lea_large_in_small_implicit_data() {
; STATIC-LABEL: lea_large_in_small_implicit_data:
; STATIC: # %bb.0:
; STATIC-NEXT: movl $large_in_small_implicit_data, %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: lea_large_in_small_implicit_data:
; PIC: # %bb.0:
; PIC-NEXT: leaq .Llarge_in_small_implicit_data$local(%rip), %rax
; PIC-NEXT: retq
ret ptr @large_in_small_implicit_data
}
define ptr @lea_large_in_small_implicit_rodata() {
; STATIC-LABEL: lea_large_in_small_implicit_rodata:
; STATIC: # %bb.0:
; STATIC-NEXT: movl $large_in_small_implicit_rodata, %eax
; STATIC-NEXT: retq
;
; PIC-LABEL: lea_large_in_small_implicit_rodata:
; PIC: # %bb.0:
; PIC-NEXT: leaq .Llarge_in_small_implicit_rodata$local(%rip), %rax
; PIC-NEXT: retq
ret ptr @large_in_small_implicit_rodata
}
define ptr @lea_large_in_small_implicit_relro() {
; STATIC-LABEL: lea_large_in_small_implicit_relro:
; STATIC: # %bb.0:
; STATIC-NEXT: movabsq $large_in_small_implicit_relro, %rax
; STATIC-NEXT: retq
;
; PIC-LABEL: lea_large_in_small_implicit_relro:
; PIC: # %bb.0:
; PIC-NEXT: leaq .Llarge_in_small_implicit_relro$local(%rip), %rax
; PIC-NEXT: retq
ret ptr @large_in_small_implicit_relro
}