129 lines · plain
1; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \2; RUN: | FileCheck -check-prefix=X64 %s3; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \4; RUN: | FileCheck -check-prefix=X32 %s5 6; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \7; RUN: | FileCheck -check-prefix=X64 %s8; RUN: llc < %s -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \9; RUN: | FileCheck -check-prefix=X32 %s10 11; External Linkage12@a = dso_local global i32 0, align 413 14define dso_local i32 @my_access_global_a() #0 {15; X32-LABEL: my_access_global_a:16; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %eax17; X32-NEXT: movl a@GOTOFF(%eax), %eax18; X64-LABEL: my_access_global_a:19; X64: movl a(%rip), %eax20 21entry:22 %0 = load i32, ptr @a, align 423 ret i32 %024}25 26; WeakAny Linkage27@b = weak dso_local global i32 0, align 428 29define dso_local i32 @my_access_global_b() #0 {30; X32-LABEL: my_access_global_b:31; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %eax32; X32-NEXT: movl b@GOTOFF(%eax), %eax33; X64-LABEL: my_access_global_b:34; X64: movl b(%rip), %eax35 36entry:37 %0 = load i32, ptr @b, align 438 ret i32 %039}40 41; Internal Linkage42@c = internal global i32 0, align 443 44define dso_local i32 @my_access_global_c() #0 {45; X32-LABEL: my_access_global_c:46; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %eax47; X32-NEXT: movl c@GOTOFF(%eax), %eax48; X64-LABEL: my_access_global_c:49; X64: movl c(%rip), %eax50 51entry:52 %0 = load i32, ptr @c, align 453 ret i32 %054}55 56; External Linkage, only declaration.57@d = external global i32, align 458 59define dso_local i32 @my_access_global_load_d() #0 {60; X32-LABEL: my_access_global_load_d:61; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %eax62; X32-NEXT: movl d@GOT(%eax), %eax63; X32-NEXT: movl (%eax), %eax64; X64-LABEL: my_access_global_load_d:65; X64: movq d@GOTPCREL(%rip), %rax66; X64-NEXT: movl (%rax), %eax67 68entry:69 %0 = load i32, ptr @d, align 470 ret i32 %071}72 73; External Linkage, only declaration, store a value.74 75define dso_local i32 @my_access_global_store_d() #0 {76; X32-LABEL: my_access_global_store_d:77; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %eax78; X32-NEXT: movl d@GOT(%eax), %eax79; X32-NEXT: movl $2, (%eax)80; X64-LABEL: my_access_global_store_d:81; X64: movq d@GOTPCREL(%rip), %rax82; X64-NEXT: movl $2, (%rax)83 84entry:85 store i32 2, ptr @d, align 486 ret i32 087}88 89; External Linkage, function pointer access.90declare i32 @access_fp(ptr)91declare i32 @foo()92 93define dso_local i32 @my_access_fp_foo() #0 {94; X32-LABEL: my_access_fp_foo:95; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %ebx96; X32-NEXT: movl foo@GOT(%ebx), %eax97; X64-LABEL: my_access_fp_foo:98; X64: movq foo@GOTPCREL(%rip), %rdi99 100entry:101 %call = call i32 @access_fp(ptr @foo)102 ret i32 %call103}104 105; LinkOnceODR Linkage, function pointer access.106 107$bar = comdat any108 109define linkonce_odr dso_local i32 @bar() comdat {110entry:111 ret i32 0112}113 114define dso_local i32 @my_access_fp_bar() #0 {115; X32-LABEL: my_access_fp_bar:116; X32: addl $_GLOBAL_OFFSET_TABLE_{{.*}}, %ebx117; X32-NEXT: leal bar@GOTOFF(%ebx), %eax118; X64-LABEL: my_access_fp_bar:119; X64: leaq bar(%rip), %rdi120 121entry:122 %call = call i32 @access_fp(ptr @bar)123 ret i32 %call124}125 126!llvm.module.flags = !{!0, !1}127!0 = !{i32 1, !"PIC Level", i32 1}128!1 = !{i32 1, !"PIE Level", i32 1}129