| ; 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 | |
| } |