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